我正处于证明的中间,我通过
生成了两个案例destruct (eq_id_dec Y X)
(eq_id_dec
在性质上与eq_nat_dec
)相似。
这给出了两个案例,其中相等的假设e: Y = X
和不等等的n: Y <> X
。
在第一种情况下,我可以轻松使用rewrite e
或rewrite <- e
。
但是,如何在第二种情况下有效地利用不平等?考虑,例如,一个目标,如
(if eq_id_dec X Y then AAA else BBB) = BBB
我尝试了unfold eq_id_dec
和一些rewrite
S但是卡住了。
答案 0 :(得分:1)
理想情况下,您想说出像
这样的内容forall (P : Prop)
(b : {P} + {~ P})
(H : ~ P), b = right H.
不幸的是,如果没有假设功能性扩展性,就不可能显示这个结果,因为没有任何有用的原则可以让你证明两个否定证明是相等的。
你可以为你的案例证明这个引理的一般结果,如下:
Require Import Coq.Arith.Peano_dec.
Lemma sumboolF T P (b : {P} + {~ P}) x y : ~ P -> (if b then x else y) = y :> T.
Proof.
intros; destruct b; tauto.
Qed.
Lemma test n m : n <> m -> (if eq_nat_dec n m then 1 else 0) = 0.
Proof.
intros H; rewrite sumboolF; auto.
Qed.
这有助于解决您的问题,但可能需要针对sumbool
类型的其他用途显示类似的结果。
这是让我们考虑从软件基础书中删除sumbool
,而只是使用普通布尔值的问题之一。