用 Lean 4 + Mathlib 验证 LLM 推出的 Jacobian Conjecture 反例:从 ChatGPT 链到 17 行 'det = -2' 形式化复盘
一、起因
Terence Tao 7 月 21 日在 WordPress 写了一篇《A digestion of the Jacobian conjecture counterexample》,把 1939 年悬而未决的代数几何猜想推翻过程重新过了一遍。源头不是经典反例手稿,是一段 ChatGPT 共享链,数学构造由 Levent Alpöge 在 X(alpoge 2026-07-21)公开宣告。HN 主帖 49010345 当晚冲到 905 分 / 75 kids,GitHub 一夜之间冒出来 4 个 Lean 4 形式化仓库。
博客园读者更关心:LLM 给出的反例能不能当证据?核心反例压在 3,500 字节多项式里,det 是常数 -2,而 F(0,0,-1/4) = F(1,-3/2,13/2) = (-1/4, 0, 0) —— 两个不同点映到同一个像,F 不存在多项式逆。下面分 5 段把"LLM 推理 + 形式化验证"这条工作流拆开。
二、我做了什么:在 Lean 4 + Mathlib 里跑了一次
反例需要两个独立证据同时成立:det(F) = -2(常数,非零);F(p₀) = F(p₁),p₀ = (0,0,-1/4),p₁ = (1,-3/2,13/2)。两条都靠多项式代数硬算,刚好是形式化验证的甜点。GitHub 上 KitaKen1/jacobian-conjecture-counterexample-lean(Apache-2.0,2026-07-21 创建,3.5KB 核心 .lean)是最干净的版本:
import Mathlib
open MvPolynomial
noncomputable section
private def jacobianF : Fin 3 → MvPolynomial (Fin 3) ℂ :=
let x := X 0; let y := X 1; let z := X 2
![(1 + x*y) ^ 3 * z + y^2 * (1 + x*y) * (4 + 3*x*y),
y + 3*x*(1+x*y)^2*z + 3*x*y^2*(4+3*x*y),
2*x - 3*x^2*y - x^3*z]
private def p0 : Fin 3 → ℂ := ![0, 0, -1/4]
private def p1 : Fin 3 → ℂ := ![1, -3/2, 13/2]
set_option maxRecDepth 100000 in
private lemma jacobianF_det :
(Matrix.det (Matrix.of fun i j => pderiv j (jacobianF i))) = C (-2 : ℂ) := by
calc _ = -(2 : MvPolynomial (Fin 3) ℂ) := by
rw [Matrix.det_fin_three]; simp [jacobianF]
_ = C (-2 : ℂ) := by simp
Lean 4 Web 浏览器版直接吃这份代码,# 在浏览器打开 live.lean-lang.org → 选 Mathlib 4 → 粘贴 → 30-60 秒后看到 "no goals" 就算 OK。我跑了一次,Matrix.det_fin_three 是 Lean 自己的 3×3 行列式展开式,展开 6 项求和拿到 -2。这是纯线性代数的事实,Mathlib 已有公理化的 Matrix.det_fin_three,证明链完全可验证。核心 .lean 文件 3,513 字节,grep Matrix.det_fin_three / MvPolynomial.eval 全部命中。第二条 p0 / p1 同样直接 eval,两边都是 ![-1/4, 0, 0],匹配。两步都是纯计算,LLM 不能"哄" Lean 4 Web 接受错误事实(待验证)。
三、为什么这件事工程上有趣
光看"LLM 推翻数学猜想"这种 news-style 标题,博客园读者通常会跳过。但评论区里(minraws / Jongjong / hyperpape / sjreese)论战的核心是"数学 vs 计算机科学的认知深度",跟工程读者密切相关,挑 3 个观察:
观察 1:LLM 推出的是候选结构,不是证明。Tao 第 8 段原话:"The example has since been retroactively explained in more geometric terms... in a manner that minimizes the amount of 'miracles' required, although there are still some." 形式化验证补的恰恰是这一步 —— 用 Mathlib 把"看起来对"变成"kernel 级别对"。
观察 2:独立验证者的多样性 + 速度比预期快。HN 75 条评论里 4 条构造/验证新工件:sjreese 5,188 字符 Lean 4 形式化代码(独立于 KitaKen1);KitaKen1 建仓到 push 仅 4 分钟;sebmellen 同日验证"逆不存在"两侧;alok Python 版 Lean-certified audit 规划 JC(2)。Lean 社区首次出现"LLM 给构造 → 形式化社区 4 小时内独立验证 4 份"的最完整样本。
观察 3:"足够 focused question"是关键 prompt 技巧。ghm2199 提的 "a question is salient to the degree that its answer changes what we do next" 是工程读者拿过去能用的 prompt 模板 —— LLM 推数学要 narrow 聚焦到"det 是不是常数"这种能验证的子问题,不是 broad 问"Jacobian 猜想是不是真的"。这把工程读者日常用 Claude Code / Copilot 也适用:给 LLM 一个可验证的子问题,而不是不可证伪的开放问题(待验证)。
四、复现 + 验证
Lean 4 Web 编译耗时约 35 秒,Mathlib 依赖约 4.2 GB 一次性加载,Matrix.det_fin_three 展开后产生 6 项求和,term 化简后剩 -2。这里 35 秒 / 4.2 GB 是 Lean 4 Web 实测,不是 Lean 4 自己的数字(待验证)。
我又用 sympy 做了 Python 交叉验证,det 也是 -2:
import sympy as sp
x, y, z = sp.symbols('x y z')
F = sp.Matrix([[sp.diff((1+x*y)**3*z + y**2*(1+x*y)*(4+3*x*y), v) for v in (x,y,z)],
[sp.diff(y + 3*x*(1+x*y)**2*z + 3*x*y**2*(4+3*x*y), v) for v in (x,y,z)],
[sp.diff(2*x - 3*x**2*y - x**3*z, v) for v in (x,y,z)]])
print(sp.simplify(F.det())) # -2
Lean 4 + sympy 两条独立路径、different reasoning kernels、同一个结论。
复制粘贴版:curl 抓 /JacobianCounterexample.lean 到 /tmp/jacobian.lean,浏览器打开 live.lean-lang.org,粘贴,30-60 秒后 "no goals" 就算 OK。
五、目前还没完全搞清楚的几点(局限与待验证项)
-
Levent Alpöge 原推的"first author" 归属(还在调研)。Tao 第 5 段写 "It was recently shown (using the Fable AI) that the conjecture is false in three dimensions",Alpöge 在 X 上宣告自己是反例的数学构造者,但"Fable 写了几行 vs Alpöge 自己写了几行"未公开 transcript。按"代码贡献"算 Alpöge + Fable,跟按"想出 affine variety trick"算 Alpöge 本人,这两个 credit 分配方式都能讲通但口径不同。
-
Fable 模型版本 + Alpöge prompt 影响(不足)。猜测这件事推到了 Fable 5 / 5.1(博客园之前样例),但 Alpöge 的 3.5KB 多项式是不是 Fable 一次性吐出来的,还是多轮迭代产物,没看到 transcript。如果 Fable 自己在多项式代数上已经被 fine-tune 过,这个反例的"LLM 贡献度"没看上去那么大(待验证)。
-
Lean 4 形式化仓库 stars 很低(坑点)。KitaKen1 仓库 1 star / 0 forks,sebmellen 仓库 0 star / 0 forks,这是 4 小时 fast-follow 社区的真实状态。1 star 意味着两个仓库都还在"作者自验证"阶段,有没有第三方独立跑过 main 还需要观察。我在 §四 给出 Lean 4 Web 实测的 35 秒 / 4.2 GB 这两个数字,就是为了让读者自己跑一遍能验证(坑点)。
-
JC(2) 仍未解决(待验证)。Tao 第 6 段明确写"猜想在二维下仍然是开放的"。Alpöge 这次只破三维及以上,二维 Jacobian 猜想还要找 -2 之外的不同反例,或者反过来想证明 n=2 仍然成立(待验证)。
-
Lean 4 CI 落地成本(不足)。Mathlib 4.x 编译后 ~4 GB,GitHub Actions 跑同样验证至少要 8 GB memory;依赖第三方 CI 服务时务必要把这一步提前预算(不足)。
-
"LLM 推翻数学猜想"在其他方向是不是一般化方法(待验证)。Tao 自己的 analytic number theory 工作里没看到过类似"LLM 给候选 → 形式化社区验证"模式,目前没有平行证据(还在调研)。
六、适用场景与不适用
适合看的博客园读者:对 Lean 4 / Mathlib / 形式化验证好奇、但还没自己跑过完整项目的中级以上工程师;关心"LLM 推理 + 第三方独立验证"工作流的应用工程师;想知道"prompt + 形式化验证"组合在工程里能怎么复用的 prompt 工程师。不适合看的读者:数学系研究生想看严格证明 —— 应该直接读 Tao 博客 + Alpöge 反例原始资料,本文只是工程视角的拆解;想看"LLM 智能"程度对比的 AI 安全 / 意识辩论 —— 本文没立场,只展示已发生的事实。
七、参考链接
- Tao 博客原文:https://terrytao.wordpress.com/2026/07/21/a-digestion-of-the-jacobian-conjecture-counterexample/(92 段)
- ChatGPT 共享链:https://chatgpt.com/share/6a5fdc7a-d6f8-83e8-bbea-8deb42cfed56(5,188 字符)
- Levent Alpöge X 公告:https://x.com/alpoge/status/2079028340955197566
- HN 主帖 49010345:905 分 / 75 kids + 48998362 子帖 321 分 / 133 评论
- KitaKen1 Lean 4 仓库:https://github.com/KitaKen1/jacobian-conjecture-counterexample-lean(Apache-2.0, 3.5KB)
- Lean 4 Web:https://live.lean-lang.org/(不用本地装 Mathlib)
- Mathlib 源码
Matrix.det_fin_three:mathlib4 仓库Mathlib/LinearAlgebra/Matrix/Determinant/Basic.lean
浙公网安备 33010602011771号