我是 Coq 的新手,有一个关于破坏策略的快速问题。假设我有一个count
函数可以计算给定自然数在自然数列表中出现的次数:
Fixpoint count (v : nat) (xs : natlist) : nat :=
match xs with
| nil => 0
| h :: t =>
match beq_nat h v with
| true => 1 + count v xs
| false => count v xs
end
end.
我想证明以下定理:
Theorem count_cons : forall (n y : nat) (xs : natlist),
count n (y :: xs) = count n xs + count n [y].
如果我要证明 n = 0 的类似定理,我可以简单地将 y 破坏为 0 或 S y'。对于一般情况,我想做的是 destruct (beq_nat ny) 为真或假,但我似乎无法让它工作——我错过了一些 Coq 语法。
有任何想法吗?