[英]How to prove the mutual equivalence of peirce, classic, excluded_middle, de_morgan_not_and_not and implies_to_or without using intuition in coq
我簡化了peirce,classic,excluded_middle,de_morgan_not_and_not和implies_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
戰術可能產生的具體程序? (首先,我知道這是Benjamin C. Pierce的Software Foundations的一部分 。這些都是用於大學課程的,所以我不會為您提供這些練習的解決方案,並且會破壞其他所有人的樂趣。很抱歉,但您希望自己能像我一樣(我也一樣),但我希望您能理解–我不想“獎勵”他們將這些資料公開發布的努力,而為此付出了額外的工作來提出新的練習。)
有沒有辦法提取
intuition
戰術可能產生的具體程序?
好吧,對於任何已定義的內容,您都可以執行“ Print thing.
得到定義。 對於已經手動定義的內容,通常看起來很像您編寫的內容。 對於戰術產生的事物,這可能是非常不可讀的(甚至包含不必要的冗長的間接指令)。通過實踐,您最終將能夠大部分閱讀和重構(以更易讀的方式)這些證明。
可能有用或可能無效的是說info <tactic>
,它應該輸出應用策略的列表/樹–但它似乎已經被破壞了(到現在為止已經好幾年了……),在Coq的新版本中,可能會有專門的策略,例如info_trivial
, info_auto
或info_eauto
可能會對您有所幫助。
直覺策略是做什么的?
[…]實際上,
tauto
只是intuition fail
。[...]
變種:
intuition
等效於intuition auto with *
。
(最后一部分意味着您可以嘗試intuition info_auto
,看看是否能給您任何有用的信息。不幸的是,它只會打印一長串(* info auto : *) idtac.
因為這些定理都是重言式,而auto
沒有什么都不要做。)
該策略基於Roy Dyckhoff [ 54 ]的無緊縮后續演算LJT *來實現直覺命題演算的決策程序。 請注意,在直覺重言式命題的任何情況下,
tauto
成功。tauto
展開否定和邏輯等價關系,但不展開任何其他定義。
現在應該很清楚了,對吧? 對? ;-)
(到那時,您可以嘗試查看tauto
的定義 ,但這還不夠清楚。)
將各個部分放在一起並給出示例:
如文檔所述, tauto
(以及intuition
)“為直覺命題演算實現了決策過程”。 也就是說,凡是僅在連詞( /\\
),析取詞( \\/
),(bi)蘊涵( <->
/ ->
)和某些否定情況( ~
)結合在一起的情況下,都可以通過此方法解決。
Variables A B C D : Prop.
Lemma foo : (A /\ B) -> A. tauto. Qed. (* solves *)
Lemma bar : (A /\ B) -> A. auto. (* fails *) auto 9999 with *. (* fails *)
Lemma baz : ((B /\ C) /\ D) -> ((A /\ C) -> (D /\ B /\ (A /\ A))).
tauto. Qed. (* solves *)
Lemma qux : (A \/ B) /\ (C \/ (A -> B)) /\ ~B -> C. tauto. Qed. (* solves *)
(* etc. *)
對於所有這些, auto
只會做什么,而tauto
(“重言式”)會立即解決它們。 當完成了tauto
的基本組合和tauto
但還不能解決所有問題時, intuition
只會嘗試做更多的事情。
(有幫助嗎?)
如何在不使用
intuition
策略的情況下證明to_or_peirce
和de_morgan_to_or
?
提示:您的H
的格式為… -> (… \\/ …)
,您可以對它進行destruct
或case
分析,就像使用析取法一樣(但在這種“符號之海”中,可能很難看到這個有可能)。 其余的應該很容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.