[英]Transitivity of -> in Coq
我試圖證明Coq命題中->
的可傳遞性:
Theorem implies_trans : forall P Q R : Prop,
(P -> Q) -> (Q -> R) -> (P -> R).
Proof.
我想破壞所有主張,並以反思性來處理所有8種可能性 。 顯然不是那么簡單。 這是我嘗試過的:
Theorem implies_trans : forall P Q R : Prop,
(P -> Q) -> (Q -> R) -> (P -> R).
Proof.
intros P Q R H1 H2.
destruct P. (** Hmmm ... this doesn't work *)
Admitted.
這就是我得到的:
1 subgoal
P, Q, R : Prop
H1 : P -> Q
H2 : Q -> R
______________________________________(1/1)
P -> R
隨后出現此錯誤:
Error: Not an inductive product.
非常感謝任何幫助,謝謝!
Coq的邏輯不是命題是對還是錯的經典邏輯。 相反,它基於類型理論,默認情況下具有直覺風格。 1在類型理論中,您應該認為P -> Q
是從“ P
型事物”到“ Q
型事物”的函數。 2
證明P -> Q
型P -> Q
型目標的通常方式是使用intro
或intros
介紹P
型假設,然后使用該假設以某種方式產生Q
型元素。
例如,我們可以證明(P -> Q -> R) -> (Q -> P -> R)
。 在“蘊涵是一個函數”的解釋中,這可以理解為,如果我們有一個接受P
和Q
並產生R
的函數,那么我們可以定義一個接受Q
和P
並產生R
的函數。 這是相同的功能,但參數已交換。
Definition ArgSwap_1 {P Q R: Prop}: (P -> Q -> R) -> (Q -> P -> R) :=
fun f q p => f p q.
使用策略,我們可以看到各個元素的類型。
Lemma ArgSwap_2 {P Q R: Prop}: (P -> Q -> R) -> (Q -> P -> R).
Proof.
intro f.
intros q p.
exact (f p q).
Qed.
在intro
,我們看到f: P -> Q -> R
,所以f
是我們的函數,它接受P
s和Q
s並產生R
s。 在intros
(介紹了多個術語)之后,我們看到q: Q
和p: P
。 最后一行(在Qed.
之前)僅將函數f
應用於p
和q
以在R
得到某些值。
對於您的問題, intros
介紹了命題P
, Q
和R
,以及H1: P -> Q
和H2: Q -> R
不過,我們仍然可以引入類型P
另一項,因為目標是P -> R
您能看到如何使用H1
和H2
以及P
的元素來產生R
的元素嗎? 提示:您將經歷Q
另外,請記住, H1
和H2
是函數。
1您可以將排除中間定律作為公理添加,這將允許您進行所需的案例分析,但是我認為這沒有Coq的意義。
2如果您想知道, Prop
的元素仍然是類型,並且行為與Set
或Type
元素非常相似。 唯一的區別是Prop
是“命令性的”,它使命題可以量化所有命題。 例如,對於forall P: Prop, P -> P
是Prop
的元素,但是對於forall A: Type, A -> A
是Type
的下一個級別的元素( Type
實際上是無限層次結構)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.