我是 Coq 的新手,我正在尝试证明一些非常基本的东西
引理 eq_if_eq :对于所有 a1 a2,(如果 beq_nat a1 a2 则 a2 否则 a1)= a1。
我在下面发布的解决方案中苦苦挣扎,但我认为必须有更好的方法。理想情况下,我想beq_nat a1 a2
在将案例值放在假设列表中时干净利落地进行案例分析。是否有一种策略t
可以使用t (beq_nat a1 a2)
产生两个子案例,一个在哪里beq_nat a1 a2 = true
,另一个在哪里beq_nat a1 a2 = false
?显然,induction
非常接近,但它失去了它的历史。
这是我努力通过的证据:
Proof.
Hint Resolve beq_nat_refl.
Hint Resolve beq_nat_eq.
Hint Resolve beq_nat_true.
Hint Resolve beq_nat_false.
intros.
compare (beq_nat a1 a2) true.
intros. assert (a1 = a2). auto.
replace (beq_nat a1 a2) with true. auto.
intros. assert (a1 <> a2). apply beq_nat_false.
apply not_true_is_false. auto.
assert (beq_nat a1 a2 = false). apply not_true_is_false. auto.
replace (beq_nat a1 a2) with false. auto.
Qed.