簡體   English   中英

命題邏輯與證明

[英]Propositional Logic and Proofs

我正在嘗試證明以下家庭作業的情況,並且已經工作了幾個小時,仍然沒有運氣。

((q,p)-> r)-> p-> q-> r

關於我做錯了什么建議或意見嗎?

這就是您在Coq中證明的方式:

Coq < Theorem curry : forall p q r, ((q /\ p) -> r) -> p -> q -> r.
1 subgoal

  ============================
   forall (p q : Prop) (r : Type), (q /\ p -> r) -> p -> q -> r

首先,我們命名所有前提:

curry < intros p q r f x y.
1 subgoal

  p : Prop
  q : Prop
  r : Type
  f : q /\ p -> r
  x : p
  y : q
  ============================
   r

產生子目標r的唯一前提是f

curry < apply f.
1 subgoal

  p : Prop
  q : Prop
  r : Type
  f : q /\ p -> r
  x : p
  y : q
  ============================
   q /\ p

要應用f我們首先需要滿足子目標qp

curry < split.
2 subgoals

  p : Prop
  q : Prop
  r : Type
  f : q /\ p -> r
  x : p
  y : q
  ============================
   q

subgoal 2 is:
 p

前提y是子目標q的證明:

curry < exact y.
1 subgoal

  p : Prop
  q : Prop
  r : Type
  f : q /\ p -> r
  x : p
  y : q
  ============================
   p

前提x是子目標p的證明:

curry < exact x.
No more subgoals.

大功告成 這是完整的證明:

curry < Qed.
intros p q r f x y.
apply f.
split.
 exact y.

 exact x.

curry is defined

在像Haskell這樣的函數編程語言中,您將擁有:

curry :: ((q, p) -> r) -> p -> q -> r
curry f x y = f (y, x)

一切由於Curry-Howard的對應關系而得以解決。

感謝@Aadit,我們有了Coq證明,提出Agda證明只是公平的-道德?

一個直接而簡單的證明是

open import Data.Product

portation : {P Q R : Set} → (P × Q → R) → (P → Q → R)
portation P×Q→R = λ p q → P×Q→R (p , q)

當然,如果問詢者不熟悉Agda並正在尋求正式化,這可能一點都不清楚。 因此,讓我們詳細介紹一下!

在構造邏輯中,命題可以看作是小的類型:

ℙrop = Set

然后配對是形成共軛的常用方法,

data _∧_ (P Q : ℙrop) : Set where
 ∧I : P → Q → P ∧ Q

在構造邏輯中,蘊涵只是函數空間:說一件事意味着另一件事等於產生一個過程,該過程用第一類輸入返回第二類輸出。

_⇒_ : (P Q : ℙrop) → Set
_⇒_ = λ P Q → (P → Q)

因此,隱含介紹只是通常的函數定義,而隱含消除則僅是函數應用程序。

⇒I : ∀ {P Q} → (P → Q) → P ⇒ Q
⇒I P→Q = P→Q

⇒E : ∀ {P Q} → P ⇒ Q → P → Q
⇒E P→Q p = P→Q p

現在,問問者使用的是自然演繹風格的證明,因此讓我們介紹一些語法糖,以彌合紙筆證明與Agda形式化之間的差距。

syntax ⇒I {P} {Q} (λ p → q) = ⇒-I-assuming-proof p of P we-have Q proved-by q

現在證明!

shunting : (P Q R : ℙrop) → (P ∧ Q) ⇒ R → P ⇒ (Q ⇒ R)
shunting P Q R P∧Q⇒R =
                    ⇒-I-assuming-proof p of P
                    we-have Q ⇒ R proved-by

                        ⇒-I-assuming-proof q of Q
                        we-have R proved-by

                            ⇒E P∧Q⇒R (∧I p q)

這不僅可讀性強,而且有點像問問者的介紹!

阿格達真是太高興了!

這是使用Klement的Fitch風格自然演繹證明檢查器和forallx教科書提供的證明。 (鏈接在下面。)

在此處輸入圖片說明

最初嘗試的主要問題是第8行和第9行沒有執行這些假設。 根據縮進和花括號,它們似乎保留在相同的子證明中。

否則證明與我提供的證明相同。 在第6行中,我通過引入條件(第3-5行)來消除了對第3行中的“ Q”所做的假設。 在我的第7行中,我通過引入條件(第2-6行)消除了第2行中的假設“ P”。


參考

凱文·克萊門特(Kevin Klement)的JavaScript / PHP Fitch風格自然演繹證明編輯器和檢查器http://proofs.openlogicproject.org/

PD馬格努斯,蒂姆·巴頓由J.羅伯特Loftis添加混音和亞倫·托馬斯,Bolduc,理查德·扎克,forallx卡爾加里混音修訂:介紹形式邏輯,2018年冬季http://forallx.openlogicproject.org/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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