我已经开始学习 Coq,并试图证明一些看起来相当简单的事情:如果一个列表包含 x,那么该列表中 x 的实例数将 > 0。
我定义了 contains 和 count 函数如下:
Fixpoint contains (n: nat) (l: list nat) : Prop :=
match l with
| nil => False
| h :: t => if beq_nat h n then True else contains n t
end.
Fixpoint count (n acc: nat) (l: list nat) : nat :=
match l with
| nil => acc
| h :: t => if beq_nat h n then count n (acc + 1) t else count n acc t
end.
我试图证明:
Lemma contains_count_ge1 : forall (n: nat) (l: list nat), contains n l -> (count n 0 l > 0).
我知道证明将涉及展开计数和包含的定义,但我想说“列表不能为零,因为包含是真的,所以必须有一个元素是x
真的”,我'玩了一会儿,但不知道如何使用战术来做到这一点。任何指导将不胜感激。l
beq_nat h x