有人可以给我一个关于Coq中存在实例化和存在概括的简单例子吗?当我想要证明exists x, P
,其中P
是使用Prop
的某些x
时,我经常要将x
命名为x0
或一些这样的,并且操纵P.这可能是Coq中的一个吗?
答案 0 :(得分:6)
如果你要直接证明存在主义而不是通过引理,你可以使用eapply ex_intro
。这引入了一个存在变量(书面?42
)。然后,您可以操纵该术语。要完成证明,您需要最终提供一种为该变量构造值的方法。您可以使用instantiate
策略明确执行此操作,也可以通过eauto
等策略隐式执行此操作。
请注意使用存在变量通常很麻烦。许多策略都假设所有术语都被实例化,并且可能隐藏子目标中的存在物;您只会在Qed
告诉您“错误:尝试保存不完整的证据”时找到。只有在计划很快实例化它们时,才应该使用存在变量。
这是一个愚蠢的例子,说明eapply
的使用。
Goal exists x, 1 + x = 3.
Proof. (* ⊢ exists x, 1 + x = 3 *)
eapply ex_intro. (* ⊢ 1 + ?42 = 3 *)
simpl. (* ⊢ S ?42 = 3 *)
apply f_equal. (* ⊢ ?42 = 2 *)
reflexivity. (* proof completed *)
Qed.