我正在使用标准库中的函数(list_max l) 并证明以下引理。我在以下几点遇到问题,请指导我。
Fixpoint g_fun (l : list nat) :=
match l with
| nil => 1
| b::nil=> b
| b::t => gcd b (g_fun t)
end.
Lemma gc1: forall (l : list nat),
l<>nil -> list_max l = 0-> g_fun l=0.
Proof.
intros. induction l. unfold g_fun.
答案 0 :(得分:1)
我没试过,但我想我会先证明两个辅助引理:
list_max l = 0
,则l
是一个只有零的列表[编辑:或l
为空];证明这一点很可能会通过 list_max_le
。g_fun [n; n; ...; n] = g_fun [n]
;这应该是与 Nat.gcd_diag
一起的简单归纳。如果 l
为空,则您的引理实际上是错误的,因为 list_max nil = 0
和 g_fun nil = 1
。否则引理是这两个事实的简单推论。