证明(~A->;~B)>;(~A->;B)——>;Coq中的A
我一直在努力证明Coq中的以下重言式证明(~A->;~B)>;(~A->;B)——>;Coq中的A,coq,proof,Coq,Proof,我一直在努力证明Coq中的以下重言式 Theorem Axiom3: forall A B: Prop, (~A -> ~B)-> ((~A -> B) -> A). 我的计划是做以下事情 Theorem Axiom3: forall A B: Prop, (~A -> ~B)-> ((~A -> B) -> A). Proof. intros A B. unfold not. intros nA_implies_nB. intr
Theorem Axiom3: forall A B: Prop, (~A -> ~B)-> ((~A -> B) -> A).
我的计划是做以下事情
Theorem Axiom3: forall A B: Prop, (~A -> ~B)-> ((~A -> B) -> A).
Proof.
intros A B.
unfold not.
intros nA_implies_nB.
intros nA_implies_B.
pose (proof_of_False := nA_implies_nB nA_implies_B).
case proof_of_False.
Qed.
然而,以下是我的问题所在
pose (proof_of_False := nA_implies_nB nA_implies_B).
我不能简单地将以下内容组合在一起来证明错误
nA_implies_nB : (A -> False) -> B -> False
nA_implies_B : (A -> False) -> B
我的证明可以用来证明或纠正这个定理吗?或者有一种简单的方法来证明这个定理吗?这句话相当于排除中间原则,即
A\/~A
适用于任何命题A
。被排除在外的中间因其在Coq和其他基于构造数学的系统中的缺失而臭名昭著。为了证明Coq中的陈述,您必须明确声明您想要假设非建设性推理
Require Import Coq.Logic.Classical.
Theorem Axiom3: forall A B: Prop, (~A -> ~B)-> ((~A -> B) -> A).
Proof. intros A B. tauto. Qed.
如果您注释掉第一行,您将看到证明失败,因为Coq不会尝试在证明中使用排除的中间部分
如果您感到好奇,这里有一个更明确的证据证明Axiom3
如何暗示排除的中间:
Axiom Axiom3: forall A B: Prop, (~A -> ~B)-> ((~A -> B) -> A).
Lemma classical : forall A : Prop, A \/ ~ A.
Proof.
intros A.
apply (Axiom3 (A \/ ~A) (A \/ ~A)).
- trivial.
- intros H. exfalso.
assert (H' : ~ ~ A).
{ intros HA. apply H. right. trivial. }
apply H'. intros HA. apply H. left. trivial.
Qed.
在证明这个公理是经典的过程中,可能更容易通过双重否定消去法(即选择
B=False
)。