如何避免真=假条件

时间:2021-07-10 16:12:48

标签: coq

我正在使用标准库中的函数(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.  

 

1 个答案:

答案 0 :(得分:1)

我没试过,但我想我会先证明两个辅助引理:

  1. 如果list_max l = 0,则l是一个只有零的列表[编辑:或l为空];证明这一点很可能会通过 list_max_le
  2. g_fun [n; n; ...; n] = g_fun [n];这应该是与 Nat.gcd_diag 一起的简单归纳。

如果 l 为空,则您的引理实际上是错误的,因为 list_max nil = 0g_fun nil = 1。否则引理是这两个事实的简单推论。