簡體   English   中英

如何證明排除中間在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的參數。 我們有兩個選擇,傳遞PP -> 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM