如何在 Coq 中证明 (~Q -> ~P) -> (P -> Q)
How to prove (~Q -> ~P) - > (P -> Q) in Coq
我正在尝试用 coq 证明 (~Q -> ~P) -> (P -> Q),这是对立定理 (P-> Q) (~Q -> ~P ).目前我正在考虑使用相同的逻辑来证明这样的对立定理:
不展开。前奏 P Q. 前奏 A B C.
申请 B. 申请 A. 申请 C.
然而我卡在了开头。也许我需要额外的公理来证明对立定理的逆定理。谁能帮帮我?
是的,你需要一些额外的能力(经典逻辑)来做到这一点。
放
Require Import Classical.
在文件的开头。
现在当你有一个命题 Q
和
destruct (classic Q) as [Q_holds|NQ_holds].
它创建了两个子目标:一个在 Q
成立时,一个在 ~Q
成立时。
连同定理 False_ind
(可以让您证明 False
中的任何内容)应该足以得出您的证明。
Require Import Classical.
Lemma myproof : forall (P Q : Prop), (~Q -> ~P) -> (P -> Q) .
unfold not. intros P Q. intros A B.
destruct (classic Q) as [Q_holds|NQ_holds].
apply Q_holds.
apply False_ind.
apply A.
apply NQ_holds.
apply B.
Qed.
我正在尝试用 coq 证明 (~Q -> ~P) -> (P -> Q),这是对立定理 (P-> Q) (~Q -> ~P ).目前我正在考虑使用相同的逻辑来证明这样的对立定理:
不展开。前奏 P Q. 前奏 A B C. 申请 B. 申请 A. 申请 C.
然而我卡在了开头。也许我需要额外的公理来证明对立定理的逆定理。谁能帮帮我?
是的,你需要一些额外的能力(经典逻辑)来做到这一点。 放
Require Import Classical.
在文件的开头。
现在当你有一个命题 Q
和
destruct (classic Q) as [Q_holds|NQ_holds].
它创建了两个子目标:一个在 Q
成立时,一个在 ~Q
成立时。
连同定理 False_ind
(可以让您证明 False
中的任何内容)应该足以得出您的证明。
Require Import Classical.
Lemma myproof : forall (P Q : Prop), (~Q -> ~P) -> (P -> Q) .
unfold not. intros P Q. intros A B.
destruct (classic Q) as [Q_holds|NQ_holds].
apply Q_holds.
apply False_ind.
apply A.
apply NQ_holds.
apply B.
Qed.