簡體   English   中英

Coq 中的“elim”如何處理存在量詞?

[英]How does 'elim' in Coq work on existential quantifier?

我對 Coq 處理存在量化的方式感到困惑。

我有一個謂詞 P 和一個假設 H

P : nat -> Prop
H : exists n, P n

而當前的目標是(無論如何)

(Some goal)

如果我想在 H 中實例化 n,我會做

elim H.

但是淘汰之后,現在的目標變成了

forall n, P n -> (Some goal)

看起來 Coq 將存在量詞轉換為通用量詞。 我知道(forall a, P a -> Q a) -> ((exists a, Pa) -> Q a)出於我對一階邏輯的有限知識。 但相反的命題似乎是不正確的。 如果 'forall' 和 'exists' 不等價,為什么 Coq 會做這樣的轉換?

Coq 中的“elim”是否用更難證明的目標代替目標? 或者有人可以說明為什么((exists a, P a) -> Q a) -> (forall a, P a -> Q a)在一階邏輯中成立?

也許缺少的關鍵是目標:

forall n, P n -> (Some goal)

應讀作:

forall n, (P n -> (Some目標))

而不是:

(forall n, P n) -> (Some goal)

也就是說,你得到的目標只是給你一個任意的n和一個證明P n ,這確實是消除存在的正確方法(你不知道證人的價值,因為它可能是任何價值使P真,您只需知道有一個n並且P n成立)。

相反,后者將為您提供一個函數,該函數可以為您傳遞的任何n構建P n ,這確實是比您擁有的更強大的陳述。

我意識到這個問題很老,但我想添加以下重要說明:

在 Coq 中(更一般地,在直覺邏輯中)存在量詞定義如下(參見此處

(exists x, (P x)) := forall (P0 : Prop), ((forall x, (P x -> P0)) -> P0)

直觀地,這可以理解為

(exists x, P x)是當P x0對某個x0成立時成立的最小命題

事實上,在 Coq 中可以很容易地證明以下兩個定理:

forall x0, (P x0 -> (exists x, P x))    (* the introduction rule -- proved from ex_intro *)

和(提供A : Prop

(exists x : A, P x) -> {x : A | P x}    (* the elimination rule -- proved from ex_ind *)

所以表單的 Coq 目標

H1...Hn, w : (exists x, P x) |- G

被轉換(使用 elim)到形式的 Coq 目標

H1...Hn, w : (exists x, P x) |- forall x0, (P x0 -> G)

因為每當h : forall x0, (P x0 -> G) ,那么G就被證明項精確地證明了

(ex_ind A P G h w) : G

每當G : Prop

注意:上面的消元規則只在A : Prop時有效,不能在A : Type時證明。 在 Coq 中,這意味着我們沒有ex_rect消除器。

根據我的理解(有關更多詳細信息,請參見此處),這是保留良好程序提取屬性的設計選擇。

暫無
暫無

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

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