У меня есть следующее определение
Inductive subseq : list nat -> list nat -> Prop :=
| empty_subseq : subseq [] []
| add_right : forall y xs ys, subseq xs ys -> subseq xs (y::ys)
| add_both : forall x y xs ys, subseq xs ys -> subseq (x::xs) (y::ys)
.
Используя это, я хочу доказать следующую лемму
Lemma del_l_preserves_subseq : forall x xs ys, subseq (x :: xs) ys -> subseq xs ys.
Итак, я попытался посмотреть на доказательство subseq (x :: xs) ys
, выполнивdestruct H
.
Proof.
intros. induction H.
3 subgoals (ID 209)
x : nat
xs : list nat
============================
subseq xs [ ]
subgoal 2 (ID 216) is:
subseq xs (y :: ys)
subgoal 3 (ID 222) is:
subseq xs (y :: ys)
Почему первая подзадача просит меня доказать subseq xs []
?Разве тактика destruct
не должна знать, что доказательство не может иметь форму empty_subseq
, поскольку тип содержит x :: xs
, а не []
?
В общем, как мне доказать, что я лемма?пытаешься доказать?