程式與證明的歷史年表(科學史)#
程式與證明是同一枚硬幣的兩面:程式是「會執行的證明」,證明是「會說話的程式」。從亞里斯多德的三段論、布林代數、弗雷格的謂詞邏輯,到希爾伯特的形式主義夢想、哥德爾的粉碎與根岑的救贖,再到 Logic Theorist、歸結原理、Hoare 邏輯、LCF、Coq、Isabelle、模型檢測、SMT、CompCert、seL4,直到 Lean 與 AI 自動證明——這部歷史就是人類追問「機器能否替我們證明,程式能否保證正確」的兩千年探案史。
本書以「推理探案」的方式,為每個歷史事件寫一篇 wiki,包含前因後果、理論與公式。每篇檔名以年份開頭。
目錄(Wiki 書篇目)#
第一幕:邏輯的誕生 — 從三段論到形式系統(前350–1934)#
| 年份 | 事件 | Wiki |
|---|---|---|
| 前350 | 亞里斯多德三段論:史上第一套形式推理系統 | -0350-Aristotle三段論.md |
| 1847 | Boole 布林代數:把邏輯變成計算 | 1847-Boole布林代數.md |
| 1879 | Frege《概念文字》:謂詞邏輯誕生,量詞與形式證明之源 | 1879-Frege概念文字.md |
| 1900 | Hilbert 23 問題與第二問題:公理化一切數學的夢想 | 1900-Hilbert23問題.md |
| 1910 | 《數學原理》:Russell 與 Whitehead 用邏輯重建數學 | 1910-PrincipiaMathematica.md |
| 1929 | Herbrand 定理:一階邏輯可證性歸約為命題邏輯,自動證明之母 | 1929-Herbrand定理.md |
| 1931 | Gödel 不完備定理:形式系統的極限,希爾伯特夢碎 | 1931-Godel不完備定理.md |
| 1934 | Gentzen 自然演繹與矢列演算:現代證明論的結構 | 1934-Gentzen自然演繹.md |
第二幕:計算與證明的交會 — 機器開始推理(1940–1969)#
| 年份 | 事件 | Wiki |
|---|---|---|
| 1940 | Church 簡單型別理論:高階邏輯的起點,HOL 的祖先 | 1940-Church簡單型別理論.md |
| 1957 | Logic Theorist:Newell、Simon、Shaw 寫出第一個自動定理證明器 | 1957-LogicTheorist.md |
| 1960 | Davis–Putnam 程序:命題可滿足性的第一個實用演算法 | 1960-DavisPutnam程序.md |
| 1962 | DPLL 演算法:Davis、Logemann、Loveland 的回溯搜尋,SAT 求解器之祖 | 1962-DPLL.md |
| 1963 | Robinson 歸結原理:合一演算法,一階證明的單一推理規則 | 1963-Robinson歸結原理.md |
| 1967 | Automath:de Bruijn 的第一個電腦證明檢查器,Coq 的精神祖先 | 1967-Automath.md |
| 1969 | Floyd–Hoare 邏輯:用斷言證明程式正確(含 Dijkstra 最弱前條件) | 1969-Hoare邏輯.md |
| 1969 | Howard 公式即型別:Curry–Howard 對應完成,證明=程式 | 1969-Howard公式即型別.md |
第三幕:互動式證明與模型檢測 — 證明的工程化(1972–1989)#
| 年份 | 事件 | Wiki |
|---|---|---|
| 1972 | Prolog:Colmerauer 與 Kowalski 把 Horn 子句變成程式語言 | 1972-Prolog邏輯程式.md |
| 1973 | Boyer–Moore 定理證明器:Nqthm,歸納證明的自動化先鋒 | 1973-BoyerMoore證明器.md |
| 1977 | LCF 與 ML:Milner 的可信核心架構+函數式語言 | 1977-LCF與ML.md |
| 1977 | Pnueli 時序邏輯:把「永遠」「終將」帶入程式驗證 | 1977-Pnueli時序邏輯.md |
| 1981 | 模型檢測誕生:Clarke、Emerson、Sifakis 窮舉狀態空間 | 1981-ModelChecking誕生.md |
| 1986 | HOL 系統:Mike Gordon 為硬体验證打造高階邏輯證明器 | 1986-HOL系統.md |
| 1986 | Isabelle:Paulson 的通用邏輯框架,開啟證明器家族 | 1986-Isabelle.md |
| 1988 | 構造演算 CoC 與歸納構造演算 CIC:Coquand、Huet、Paulin 的依賴型別宇宙 | 1988-CoC與CIC.md |
| 1989 | Coq 誕生:Dowek 等人實作,構造性證明的工程結晶 | 1989-Coq誕生.md |
| 1989 | ACL2:Boyer、Kaufmann、Moore 的工業級歸納證明器 | 1989-ACL2.md |
第四幕:自動化與大規模驗證 — 證明走進工業(1992–2009)#
| 年份 | 事件 | Wiki |
|---|---|---|
| 1992 | SMV 與 BDD 符號模型檢測:McMillan 讓百萬狀態驗證成真 | 1992-SMV符號模型檢測.md |
| 1996 | Proof-Carrying Code:Necula 與 Lee 讓程式自帶證明 | 1996-ProofCarryingCode.md |
| 1999 | TLA+:Lamport 的規格語言,並行系統的數學建模 | 1999-TLAplus.md |
| 2001 | Chaff 與現代 SAT 革命:CDCL 讓百萬變元求解成真 | 2001-Chaff與SAT革命.md |
| 2005 | 四色定理的 Coq 驗證:Gonthier 封印百年爭議 | 2005-FourColor定理Coq驗證.md |
| 2006 | CompCert 驗證編譯器:Leroy 證明編譯器 preserves 語意 | 2006-CompCert驗證編譯器.md |
| 2008 | Z3 與 SMT 革命:de Moura 與 Bjorner 的可滿足性模理論 | 2008-Z3與SMT革命.md |
| 2009 | seL4 微核心驗證:九千行 C+六十萬行證明的作業系統核心 | 2009-seL4微核心驗證.md |
第五幕:數學大一統與 AI 證明 — 證明的未來(2012–至今)#
| 年份 | 事件 | Wiki |
|---|---|---|
| 2012 | Odd Order 定理與 MathComp:Gonthier 用 Coq 征服群論巨著 | 2012-OddOrder與MathComp.md |
| 2013 | HoTT 同倫型別論:Voevodsky 的 Univalence,數學基礎重構 | 2013-HoTT同倫型別論.md |
| 2013 | Lean 誕生(Lean 1):de Moura 打造人人可用的證明器 | 2013-Lean誕生.md |
| 2014 | Flyspeck 落幕:Hales 用 HOL Light+Isabelle 證完克卜勒猜想 | 2014-Flyspeck克卜勒猜想.md |
| 2015 | Lean 2 正式發布:約束求解 elaborator+Lua 前端,CADE 論文 | 2015-Lean2正式發布.md |
| 2015 | Iris 並行分離邏輯:Jung 等人征服 Rust 與併發推理 | 2015-Iris並行分離邏輯.md |
| 2017 | Lean 3 與 mathlib:元程式框架+百萬行函式庫大爆炸 | 2017-Lean3與mathlib.md |
| 2021 | Lean 4 自舉:用 Lean 重寫 Lean,證明器變程式語言 | 2021-Lean4自舉.md |
| 2024 | AlphaProof+AlphaGeometry:AI 在 IMO 拿下銀牌逼近金牌 | 2024-AlphaProof與AI證明.md |
因果鏈總覽#
亞里斯多德 (-350) ── 三段論 ── Boole (1847) ── 代數化 ── Frege (1879) ── 謂詞邏輯
│ │
│ ├─ Hilbert (1900) ── 公理化夢想
│ │ │
│ │ ├─ Principia (1910) ── 邏輯主義高峰
│ │ ├─ Herbrand (1929) ── 自動證明之母
│ │ └─ Gödel (1931) ── 夢碎 / 極限
│ │
│ └─ Gentzen (1934) ── 自然演繹/矢列 ── Howard (1969) ── Curry-Howard
│ │
│ ├─ Automath (1967) ── 證明檢查器
│ ├─ CoC/CIC (1988) ── 依賴型別
│ ├─ Coq (1989) ── 四色 (2005) ── Odd Order (2012)
│ └─ Lean 1 (2013) ── Lean 2 (2015) ── Lean 3+mathlib (2017) ── Lean 4 自舉 (2021) ── AlphaProof (2024)
│
├─ Church (1940) ── 簡單型別 ── HOL (1986) ── Isabelle (1986) ── Flyspeck (2014)
│
├─ Logic Theorist (1957) ── DP (1960) ── DPLL (1962) ── Robinson歸結 (1963) ── Prolog (1972)
│ │
│ └─ Chaff/SAT (2001) ── Z3/SMT (2008) ── 軟硬體驗證
│
├─ Floyd-Hoare (1969) ── Dijkstra ── Boyer-Moore (1973) ── ACL2 (1989) ── PCC (1996) ── CompCert (2006)
│
└─ Pnueli時序 (1977) ── Model Checking (1981) ── SMV/BDD (1992) ── TLA+ (1999) ── seL4 (2009)
│
└─ LCF/ML (1977) ── 可信核心 ── 所有現代證明器架構
寫作方式說明#
每篇 wiki 採「推理探案」結構:
- 案發現場(前因):當時的未解之謎是什麼?誰遇到的?為何重要?
- 偵查過程(推理):主角如何思考?關鍵靈感為何?核心技術(邏輯規則、演算法、型別系統、證明策略)如何推導,含數學式與表格。
- 結案報告(後果):謎題如何解?留下什麼遺產?影響了哪些後續事件?
- 證據與工具:關鍵公式、證明規則表、演算法虛擬碼或 Python 模擬程式、Coq/Lean/SMT 範例(非必要不硬寫程式,優先講清理論)。