我简化了peirce、classic、excluded_middle、de_morgan_not_and_not和implicit_to_or互等价的证明过程,主要写git@github.com:B-Rich/sf.git
如下。
Theorem excluded_middle_irrefutable: forall (P:Prop), ~ ~ (P \/ ~ P).
Proof.
intros. unfold not. intros.
apply H. right. intros. apply H. left. apply H0.
Qed.
Definition peirce := forall P Q: Prop, ((P->Q)->P)->P.
Definition classic := forall P : Prop, ~~P -> P.
Definition excluded_middle := forall P : Prop, P \/ ~P.
Definition de_morgan_not_and_not := forall P Q: Prop, ~(~P /\ ~Q) -> P\/Q.
Definition implies_to_or := forall P Q: Prop, (P->Q) -> (~P\/Q).
Theorem peirce_classic : peirce -> classic.
Proof.
compute. intros.
specialize (H P False).
apply H. intros.
apply H. contradiction H0.
Qed.
Theorem classic_excluded_middle : classic -> excluded_middle.
Proof.
compute. intros.
apply H. intros.
apply H0.
right.
intros.
assert (P \/ (P->False)) as H2.
apply (or_introl H1).
apply (H0 H2).
Qed.
Theorem false_dist_1 : forall {P Q : Prop}, (P \/ Q -> False) -> (P -> False) /\ (Q -> False).
Proof.
intros.
split.
intros.
apply (H (or_introl H0)).
intros.
apply (H (or_intror H0)).
Qed.
Theorem false_dist_2 : forall {P Q : Prop}, (P -> False) /\ (Q -> False) -> (P \/ Q -> False).
Proof.
intros.
inversion H.
inversion H0.
apply (H1 H3).
apply (H2 H3).
Qed.
Theorem em_de_morgan : excluded_middle -> de_morgan_not_and_not.
Proof.
compute. intros.
specialize (H (P \/ Q)).
inversion H.
apply H1.
apply (False_ind (P \/ Q) (H0 (false_dist_1 H1))).
Qed.
Theorem double_neg : forall P : Prop,
P -> ((P->False)->False).
Proof.
(* WORKED IN CLASS *)
intros P H. intros G. apply G. apply H. Qed.
Theorem de_morgan_to_or : de_morgan_not_and_not -> implies_to_or.
Proof.
compute. intros.
specialize (H (P -> False) Q).
intuition.
Qed.
Theorem to_or_peirce: implies_to_or -> peirce.
Proof.
compute. intros.
specialize (H P P).
intuition.
Qed.
我成功删除了一些intuition
战术,除了最后两个。
我的问题是:
- 如何在不使用
intuition
策略的情况下证明 to_or_peirce 和 de_morgan_to_or? - 战术有什么作用
intuition
? - 有没有办法提取该策略可能产生的具体程序
intuition
?