[英]Propositional Logic and Proofs
這就是您在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
我們首先需要滿足子目標q
和p
:
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.