3.2 存在量詞 exists:拿出一個見證人#
本章導讀#
上一節講「全部都成立」,這一節講相反的:「至少有一個成立」。 例如「存在一個偶數」「存在一組 \(x\) 讓方程式有解」,只要拿出一個例子就算贏。 學完這一節,你會用 \(use\) 親手交出見證人,用 \(cases\) 把別人交出來的包裹拆開,理解 \(\exists\) 背後的 \(\Sigma\) 型。
淺顯說明#
想像有人質疑:「世界上真的有會發光的魚嗎?」 你不用解釋全海洋的魚,只要從口袋掏出一條鮟鱇魚放在桌上,全場安靜。 這條魚就叫「見證人」。存在性證明就是變出見證人的魔術。
在 Lean 裡, \(\exists x, P(x)\) 是一個包裹,裡面裝了兩樣東西:一個具體的 \(w\) ,加上一張證明書 \(P(w)\) 。 證明存在命題用 \(use\) :例如要證 \(\exists n, n \% 2 = 0\) ,一句 \(use \; 4\) 就把見證人定為 \(4\) ,剩下證明 \(4 \% 2 = 0\) 。 使用存在假設用 \(cases\) 或 \(obtain\) :把包裹拆成「有個 \(w\) 」加上「它滿足性質」,再繼續推理。 千萬別把存在跟全稱搞反: \(use\) 是「我來選數字」, \(intro\) 是「別人任意給數字」。
正規理論#
存在量詞對應依賴對型 \(\Sigma (x : A), P(x)\) ,即一個值與一個證明的配對。
| 概念 | 數學記號 | Lean 寫法 | 說明 |
|---|---|---|---|
| 存在命題 | \(\exists x, P(x)\) | \(Exists \; x, P \; x\) | 至少一個 \(x\) 使 \(P(x)\) 成立 |
| 見證對 | \(\langle w, h \rangle\) | \(\langle w, h \rangle\) | 見證人加證明書的配對 |
| 引入規則 | \(\exists I\) | \(use \; w\) | 交出見證人 \(w\) |
| 消去規則 | \(\exists E\) | $cases \; h \; with \; | \; intro \; w \; hw$ |
| 偶數定義 | \(Even(n) := \exists k, n = 2 * k\) | \(Even \; n\) | 本節範例的核心謂詞 |
注意構造性含義: \(\exists\) 的證明必須真的算出見證人,不能只說「應該有」。 這正是 \(\Sigma\) 型的精神:沒有見證人的存在性是空頭支票。
簡易範例#
目標:證明存在偶數,並練習從存在假設中取出見證人。
-- 例一:4 是偶數的見證人
example : ∃ n : Nat, Even n := by
use 4
decide
-- 例二:承上,偶數加二仍是偶數(拆包裹再包裝)
example (h : ∃ n : Nat, Even n) : ∃ m : Nat, Even m := by
cases h with
| intro w hw =>
use w + 2
omega
證明狀態表(例一,目標為 \(\exists n, Even \; n\) ):
| 步驟 | tactic | 證明狀態 Goals |
|---|---|---|
| 起始 | — | \(\vdash \exists n : Nat, Even \; n\) |
| 1 | \(use \; 4\) | \(\vdash Even \; 4\) |
| 2 | \(decide\) | 無剩餘目標,證畢 |
例二的狀態變化也值得看:起始只有一個假設 \(h : \exists n, Even \; n\) 。 一句 \(cases \; h\) 之後,上下文多出 \(w : Nat\) 與 \(hw : Even \; w\) ,目標不變。 這時我們選新見證人 \(w + 2\) ,再交給 \(omega\) 收尾。 口訣:要證 \(\exists\) 就 \(use\) ;手上有 \(\exists\) 就 \(cases\) 。
歷史典故#
- 弗雷格《概念文字》:同時發明 \(\forall\) 與 \(\exists\) ,讓「存在一個 \(x\) 」第一次有了嚴格符號,本節的見證人思想即奠基於此。
- 羅賓遜的歸結原理:把存在量詞經 Skolem 化變成可計算的見證函數,自動定理證明從此能機械地「變出見證人」。
- Prolog 邏輯程式:把 \(\exists x, P(x)\) 的證明變成查詢求解, \(use\) 交見證正好對應 Prolog 回答「 \(x = 4\) 」的瞬間。
習題#
- 證明 \(\exists n : Nat, n \% 2 = 0\) 。提示:選 \(use \; 6\) 或 \(use \; 10\) ,再用 \(decide\) 或 \(rfl\) 收尾。換一個見證人再證一次。
- 假設 \(h : \exists k : Nat, n = 2 * k\) ,請用 \(cases \; h\) 拆出 \(k\) 與等式,並說明拆完後上下文多了哪兩行。試著改用 \(obtain \; \langle k, hk \rangle := h\) 寫法。
- 證明:若 \(\exists n, Even \; n\) ,則 \(\exists m, Even \; (m + 2)\) 。提示:先拆包裹得 \(w\) ,再用 \(use \; (w + 2)\) 。思考為何不能直接 \(use \; w\) 結束。