coq证据:策略荒谬,它是如何工作的?

coq证据:策略荒谬,它是如何工作的?,coq,Coq,我试图理解coq中的一个证明。我很久以前在一门课上写的,但现在我被荒谬的命令阻止了。 这是证据: Theorem Thm_2 : (~psi -> ~phi) -> (phi -> psi). Proof. intro. intro. cut (psi \/ ~psi). intro. elim H1. intro. exact H2. intro. absurd phi. cut (~psi). exact H. exact H2. exact H0. apply class

我试图理解coq中的一个证明。我很久以前在一门课上写的,但现在我被荒谬的命令阻止了。 这是证据:

Theorem Thm_2 : (~psi -> ~phi) -> (phi -> psi).
Proof.
intro.
intro.
cut (psi \/ ~psi).
intro.
elim H1.
intro.
exact H2.
intro.
absurd phi.
cut (~psi).
exact H.
exact H2.
exact H0.
apply classic.
Qed.
当我使用荒谬的phi策略时,我当前的目标是psi。荒谬的命令将其转化为两个目标:~phi和phi。 我的问题是我无法理解也记不起这一步背后的逻辑

谢谢你的帮助! (我似乎无法在邮件开头添加问候语……对不起)

  • 如果你能证明
    phi
    ~phi
    ,那么你就可以证明
    False
    (记住,
    ~phi:=phi->False
  • 如果你能证明
    False
    ,那么你就可以证明任何事情,包括你当时的目标

因此,
荒谬的phi
应用了
消除法,并让您通过证明
phi
~phi

来证明
,谢谢您的回答!但我还是不完全明白。如果我用我的定理的假设证明是错的,这不意味着它是错的吗?谢谢你的帮助!大多数情况下,你只在一个定理的子证明中使用
荒谬的
,来丢弃一个“不可能的”分支。例如,用欧几里得除法:<代码>一个B:NAT,B 0 ->存在q:NAT,存在r:NAT,a= b*q+r >每当您考虑情况<代码> b=0 < /COD>时,您可能会使用<代码>荒谬< /代码>(这个例子在实践中太简单了,但是你得到了主要的想法)。