我正在尝试用CoqIDE证明某些东西(用于学校)。我在踩,这是
`Print length. (* la longueur de listes *)
Lemma mystere A: forall l : list A, length l = 0 <-> l = nil.
intros.
destruct l.
* split.
- intros.
reflexivity.
- intros.
simpl.
reflexivity.
* split.
- intros.
???? <- I have tried many things, but without success..
Admitted.
`
感谢您的考虑!
答案 0 :(得分:4)
您的上下文有一个假设
H : length (a :: l) = 0
这很荒谬,因为length (a :: l)
是继任者。您可以通过运行simpl in *
或simpl in H
看到此内容,结果是
H : S (length l) = 0
如果您现在运行
Search (S _) 0.
第二个条目(在H
之后)是
O_S: forall n : nat, 0 <> S n
因此我们可以运行symmetry in H
来获得与O_S
更好匹配的假设。
H : 0 = S (length l)
由于a <> b
只是a = b -> False
,我们现在可以运行apply O_S in H
来获取
H : False
现在我们已经有效完成了。我们可以用exfalso; assumption
或exfalso; exact H
或easy
或now trivial
(或now idtac
)或{{1}来完成证明}或case H
或destruct H
或elim H
或refine match H with end
或induction H
或refine (False_rect _ H)
。所有这些基本上都是同一件事(尽管其中一些(例如tauto
和easy
也可以解决其他目标)。
答案 1 :(得分:0)
试试这个: 我想像这样改变你的引理,
Definition length_nil_list (l: nat): bool :=
match l with
| O => true
| S _ => false
end.
Compute length_nil_list (S O).
Compute length_nil_list (O).
Compute length_nil_list (S (S O)).
Definition list_nil {X : Type} (l: list X): bool:=
match l with
| nil => true
| cons h t => false
end.
Compute list_nil [].
Compute list_nil [0].
Compute list_nil nil.
Lemma mystere A: forall l : list A,
length_nil_list (length l) = true <-> list_nil l = true.
Proof.
intros.
destruct l.
* split.
- intros.
reflexivity.
- intros.
simpl.
reflexivity.
* split.
- simpl. auto.
- simpl in *. auto.
Qed.