![](/img/trans.png)
[英]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
[英]How to prove excluded middle is irrefutable in Coq?
我試圖從一個排除中間的在線課程中證明以下簡單定理是無可辯駁的,但在第1步被卡住了:
Theorem excluded_middle_irrefutable: forall (P:Prop), ~~(P \/ ~ P).
Proof.
intros P. unfold not. intros H.
現在我得到:
1 subgoals
P : Prop
H : P \/ (P -> False) -> False
______________________________________(1/1)
False
如果我apply H
,那么目標就是P \\/ ~P
,它被排除在中間,無法建設性地證明。 但除了apply
,我不知道可以做什么關於假設P \\/ (P -> False) -> False
:暗示->
是原始的,我不知道如何destruct
或分解它。 這是唯一的假設。
我的問題是,如何才能使用原始戰術證明這一點( 如此處所表征的 ,即沒有神秘的auto
)?
謝謝。
我不是這方面的專家,但最近在Coq郵件列表上進行了討論。 我將從這個帖子中總結出結論。 如果你想更徹底地理解這些問題,你應該看看雙重否定翻譯 。
問題屬於直覺主義命題演算,因此可以由tauto
決定。
Theorem excluded_middle_irrefutable: forall (P:Prop), ~~(P \/ ~ P).
tauto.
Qed.
該線程還提供了更精細的證據。 我將嘗試解釋如何提出這個證據。 請注意,我通常更容易處理lemmas的編程語言解釋,所以這就是我要做的:
Theorem excluded_middle_irrefutable: forall (P:Prop), ~~(P \/ ~ P).
unfold not.
intros P f.
我們被要求編寫一個函數,它接受函數f
並產生一個False
類型的值。 此時獲取False
的唯一方法是調用函數f
。
apply f.
因此,我們被要求提供函數f
的參數。 我們有兩個選擇,傳遞P
或P -> False
。 我沒有看到構建P
所以我選擇了第二個選項。
right.
intro p.
我們回到了第一個方向,除了我們現在有一個合作p
! 因此我們應用f
因為這是我們唯一可以做的事情。
apply f.
再次,我們被要求提供f
的論點。 現在這很容易,因為我們有一個p
可以使用。
left.
apply p.
Qed.
該線程還提到了一個基於一些更簡單的引理的證明。 第一個引理是~(P /\\ ~P)
。
Lemma lma (P:Prop) : ~(P /\ ~P).
unfold not.
intros H.
destruct H as [p].
apply H.
apply p.
Qed.
第二個引理是~(P \\/ Q) -> ~P /\\ ~Q
:
Lemma lma' (P Q:Prop) : ~(P \/ Q) -> ~P /\ ~Q.
unfold not.
intros H.
constructor.
- intro p.
apply H.
left.
apply p.
- intro q.
apply H.
right.
apply q.
Qed.
這些lemmas足以顯示:
Theorem excluded_middle_irrefutable: forall (P:Prop), ~~(P \/ ~ P).
intros P H.
apply lma' in H.
apply lma in H.
apply H.
Qed.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.