[英]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.