2025:grind 戰術與 Lean 4.16——E-graph 自動化時代#
事件#
2025 年 3 月,Lean 4.16 發佈,引入新一代自動化戰術 grind—— 基於 E-graph(等價圖,E-matching) 與 SMT 技術的統一自動化引擎, 目標是整合 simp、omega、aesop、sat 的能力,成為 Lean 的 「一鍵自動化」。同年,bv_decide(4.15,2025-01)穩定: 基於位元向量(bit-vector)SMT 的決策程序。
為何重要#
grind戰術:- 以 E-graph 統一等價推理:
simp的改寫、omega的線性算術、 類型類解析的結果都放進同一張等價圖——補足 Lean 4 之前 「自動化戰術各自為政、要手動組合」的缺陷。 - 支援
@[grind]標記:引理像@[simp]一樣供grind使用, 自動化覆蓋率隨函式庫成長。 bv_decide:位元向量算術(CPU 指令的語義)直接呼叫 SAT/SMT 後端——補足「驗證低階程式(編譯器、加密)時 位元運算自動化缺失」的缺陷。- 2025 年的大型形式化:Fermat 最後定理專案(FLT blueprint)、 Perfect Numbers 專案相繼啟動——Lean 已能承載史上最大的數學 形式化目標。
理論與實用原因#
- 理論原因:E-graph 的理論基礎是 congruence closure 演算法 (Nelson–Oppen 1980)與 E-matching(de Moura 的 Z3 前作)—— 等價關係的閉包可以高效表示與查詢;
grind把 congruence closure 從 Z3 帶回 Lean 本體。 - 實用原因:自動化是形式化生產力的決定因素;
simp/omega/aesop各有盲區,組合使用靠人工——grind用 E-graph 統一,一鍵解決更多目標。
程式範例#
grind 戰術——E-graph 統一自動化:
-- grind:整合 simp/omega 的能力,一鍵自動化
example (a b : Nat) (h : a = b) : a + 0 = b := by grind
-- @[grind] 標記的引理供 grind 使用
@[grind] theorem double_zero (n : Nat) : 0 + n = n := Nat.zero_add n
example (a b c : Nat) (h1 : a = b) (h2 : b = c) : a + c = c + b := by
grind -- E-graph 自動推出 a = c,等價閉包一次完成
-- 對照:Lean 4.16 之前要手動組合多個戰術
-- example ... := by simp only [...]; omega; exact ...
bv_decide——位元向量決策:
-- 位元運算的自動化:CPU 指令語義的驗證
open Lean.Grind in
example : (5 : UInt8) &&& 3 = 1 := by
decide -- bv_decide/decide 呼叫位元向量求解
example (x : UInt8) : x ||| 0 = x := by
bv_decide -- 位元向量 SMT 後端
E-graph 的精神——等價閉包的高效表示:
-- E-graph 把「a = b」「b = c」的等價閉包存成一張圖,
-- 任何表達式查詢等價類只需常數時間——這是 congruence closure
-- 的核心思想(Nelson–Oppen 1980,de Moura 的 Z3 淵源)
example (f : Nat → Nat) (a b : Nat) (h : a = b) :
f a = f b := by grind -- 全等閉包(congruence)自動推出
Fermat 最後定理專案——2025 年的最大形式化:
-- FLT blueprint 風格:把大定理拆成數千個 lemma 逐格認領
-- theorem fermat_last (n : Nat) (hn : n > 2) :
-- ∀ (a b c : Nat), a ^ n + b ^ n ≠ c ^ n := by
-- -- 數千個輔助引理,社群接力中
-- sorry
彌補了什麼缺陷#
彌補了 Lean 4「自動化戰術各自為政、位元運算自動化缺失」的缺陷—— grind 用 E-graph 統一自動化、bv_decide 補上低階驗證, 自動化覆蓋率成為 Lean 生態的核心競爭力。