Claude 用 11 天形式化费马大定理:再用 Fable 5.1 实测一道小题
Claude 将费马大定理的已有证明写成了 Lean 可检查的代码。这项研究验证了什么?如何用一道小定理测试模型,并识别偷换命题与未完成证明?
模型写出一页数学证明,语气很笃定,每一步似乎也说得通。准备把它接进自己的开发工具时,你仍然得回答:它证明的,真是你问的那件事吗? 费马大定理这次的进展,恰好说明了这道检查为什么不能省。
Anthropic 在 2026 年 9 月 4 日公布,旗下 Claude AI 模型的内部研究版本用 11 天完成了费马大定理的 Lean 形式化。这里的“形式化”,是把已有数学证明补齐细节、写成电脑能检查的表达。它没有重新发现一个取代 Wiles 的新证明。对正在给应用挑模型、给编程智能体加工具的开发者,更合适的起点是一道小定理,以及一份不能由模型自行修改的验收条件。
先说结论
- 这次成果沿用已有证明路线,包括 Darmon、Diamond、Taylor 的讲解;新进展在于机器可检查的形式化。
- 项目使用内部研究模型,官方称其能力大致相当于 Fable 5.1,并配有 Prove2Me 和多智能体执行系统。
- 官方仓库既检查证明是否成立,也比对最终命题是否与 Mathlib 中的费马大定理一致。
- 小型 Lean 实验能测试“生成代码—检查结果”这段流程,不能证明你能复现整个 11 天项目。
“形式化费马大定理”到底做了什么
费马大定理说:当整数指数 n > 2 时,不存在正整数 a、b、c,使 a^n + b^n = c^n 成立。“正整数”不能漏,允许零就会出现平凡的等式;指数条件也不能漏,3² + 4² = 5² 在 n = 2 时就成立。
数学家写给同行的证明,可以引用已知定理,也可以省去读者会补上的计算。Lean 是证明助手:你把命题和证明交给它,它按形式规则检查。Mathlib 则是社区积累的数学库,提供已经形式化的定义与定理。
难处并非把中文或英文换成代码语法。原文一句“显然”,可能要补好几段证明;前后引用的定义,也必须真能接上。官方报告称,这次产出了 1300 万行 Lean,消耗约 60 亿输出 token(模型生成文本所用的计量单位)。
官方研究页:11 天生成 1300 万行 Lean 和 30,300 个可验证定理,其中约 29,500 个用于最终证明。
官方明确说,本次新意在于验证。截图:2026 年 9 月 7 日。
内部研究模型如何与 Prove2Me 协作
这次研究使用的并非公开版 Fable 5.1,而是一个内部研究模型。Anthropic 将其能力描述为“大致相当于 Claude Fable 5.1”。整个项目还配有基于 Claude Code 的多智能体执行系统,以及协作证明平台 Prove2Me。
模型之外,项目还需要安排工作。Anthropic 披露,早期尝试中,智能体做出了一些成果,却逐渐忘记项目进度,不能有效协作。后来采用的 Prove2Me 会保存定理之间的依赖图:先证明哪些小结论,后面的命题才能继续。它还把命题与证明分文件管理,减少编译负担,并为定理保存自然语言描述,方便查找复用。
Prove2Me 保存定理依赖、分开管理命题与证明,并通过自然语言描述帮助智能体搜索和复用结果。
聊天记录里一句“引理完成了”,不能直接当成下一步的依据。应该保存定理文件、它依赖什么,以及检查器的真实返回结果。进程重启后,新的智能体才知道哪些结论可以使用。监督工具执行可参看 Claude Agent SDK 文章。
通过编译,为什么还要再查两遍
官方仓库 README 把验证分成了三层。每一层回答的问题不同。
| 检查 | 要回答的问题 | 对应材料 |
|---|---|---|
| Lean 构建与公理检查 | 证明是否从允许的基础假设推出? | FinalCheck.lean、构建输出 |
| comparator 命题比对 | 证明的还是原来的命题吗?定义有没有被替换? | Mathlib 写出的挑战文件、比对结果 |
| 第二套内核 nanoda | 换一种检查器实现,还接受这份证明吗? | 导出的证明环境、版本与补丁 |
公理是证明采用的基础假设。仓库要求最终结果只依赖 Lean 的三个标准公理:propext、Classical.choice、Quot.sound。这一步要排除的是额外塞入“答案已成立”的假设,以及用 sorry 留下的未完成证明。
仓库列出三层检查,并披露 nanoda 补丁。截图:2026 年 9 月 7 日。
接着看命题比对。假如你让模型证明“所有自然数都满足某性质”,它却加上一个新条件,只证明了其中一小部分,代码完全可能合法。检查器没有义务猜你的本意。官方的 comparator 会对照只用 Mathlib 表达的目标,检查命题和相关定义一致,并重新检查证明。
仓库还报告使用 Rust 编写的独立 Lean 内核 nanoda 复核。维护者说明,他们加了四个补丁:一个输出进度,三个加快定义相等性的搜索;按其说明,没有放宽类型规则。第二套内核提供了额外的复核,但结果仍依赖检查器及工具本身的正确性。
定理的名字,也可能让人读过头
仓库中的最终命题明确写着自然数、3 ≤ n,以及 a、b、c 均大于零。条件不是注释,而是被证明内容的一部分。少写一个条件可能让命题变假,多加一个条件则可能把问题改简单了。
中间定理也一样。证明路线文档 专门列出了若干步骤实际证明到什么程度。例如,涉及 Mazur 的部分证明了本项目所需 Frey 曲线(证明途中构造的曲线)的特定性质,并没有声称完成 Mazur 关于一般曲线的全部相关定理。这些中间结果的适用条件,比同名经典定理的一般版本更窄。
证明路线注明:文字与 Lean 不一致时,以 Lean 为准。截图:2026 年 9 月 7 日。
开始自己的实验时,可以先把命题锁定,只让模型填证明。如果它要求换定义、加假设,就单独审查,修改后的目标应作为另一个测试用例。
先让模型做一道小题,再把结果交给 Lean
2026 年 9 月 7 日的小题测试通过 SandBase 调用一次 anthropic/claude-fable-5.1,要求证明自然数恒等式 (n+1)×(n+1)=n×n+2n+1,不使用 Mathlib、额外公理或未完成证明。这道题只测展开与算术,不是在复现费马大定理。
对应入口是 Fable 5.1 模型专页。想重跑这道小题,选择 anthropic/claude-fable-5.1,将 max_tokens 设为 1800,只发送下面这一条原始用户提示。历史测试用的是 SandBase MCP 的 sandbase_run;新建 API 客户端时按所选接口的请求格式填写,不要假设不同接口都接受同一份参数。
Return only complete Lean 4 source code, without Markdown fences or prose. Use Lean 4.33.1 with import Std, no mathlib. Prove theorem add_one_square (n : Nat) : (n + 1) * (n + 1) = n * n + 2 * n + 1. Use only proved lemmas/tactics: no sorry, admit, axiom, unsafe, native_decide, or extra assumptions. Include #print axioms add_one_square after the theorem. Aim for a short proof.
首次回答原样保存,再按下方命令交给 Lean,另记新请求的费用。重跑不保证得到相同代码或账单。这个 API 不包含内部研究模型和 Prove2Me 积累的项目状态,也不会替你运行本地 Lean 检查器。
模型原样返回:
theorem add_one_square (n : Nat) : (n + 1) * (n + 1) = n * n + 2 * n + 1 := by
simp only [Nat.mul_add, Nat.add_mul, Nat.mul_one, Nat.one_mul]
omega
#print axioms add_one_square
Nat 表示自然数;simp only 按列出的恒等式展开乘法,再由 omega 处理剩下的自然数算术。原始文件在官方 Lean 4.33.1 的 macOS ARM64 版本上退出码为 0,输出为:
'add_one_square' depends on axioms: [propext, Quot.sound]
此次只有一次请求,没有人工修复。提示要求的 import Std 被模型漏掉了,但实测环境无需补上也能通过。账单返回 $0.07163,没有提供 token 数量。这个结果不能换算成模型正确率。
按 Lean 官方安装说明 安装工具后,把代码存为 Generated.lean,可用指定版本重查:
elan toolchain install leanprover/lean4:v4.33.1
lean +leanprover/lean4:v4.33.1 --version
lean +leanprover/lean4:v4.33.1 Generated.lean
检查退出码、公理列表,再对照命题原文。本例没有代表未完成证明的 sorryAx;公理比费马项目少,并不矛盾,不同证明可以依赖不同的允许公理。
怎样让后续测试有比较价值
第一题通过以后,可以再选自然数恒等式、带一个前提的逻辑推导、简短列表性质。不同模型都用同一命题、同一 Lean 版本、相同允许导入的库,以及相同 token 和重试上限。常见小题适合检查接入是否正常,但可能存在于训练材料中,不足以证明模型发现了新数学。
首次回答与修正后回答要分开记。遇到“定理名不存在”,可以把 Lean 原始报错交回模型,限定再试一次;不要删掉首次失败。至少保存请求模型标识、目标命题、尝试次数、退出码、公理输出、耗时和 API 用量。费用缺失就记“未获得”。请求模型名与接口返回的模型标签分开保存。
失败也有区别:语法不对是生成失败;证明了别的命题是目标被改了;含 sorry 是没完成,即使 Lean 只给警告;超时是资源结果,不说明定理为假。若直接调用库中已经证明的同一道题,应记为库检索与复用,不能和从较小引理构造证明混算。
执行时给每次尝试独立目录,限制时间与内存,并把参考命题和验收命令放在模型不能改的位置。否则,一个会改测试文件的智能体,可能让错误结果也显示成功。
常见问题(FAQ)
Claude 发现了费马大定理的新证明吗?
没有。这次沿用已有证明路线,包括 Darmon、Diamond、Taylor 的讲解,将数学推理写成 Lean 能检查的代码。新成果是形式化验证,不是发现新的数学证明。
11 天项目用的是公开版 Fable 5.1 吗?
不是。官方描述的是能力大致相当于 Fable 5.1 的内部研究模型,配合 Claude Code 多智能体执行系统和 Prove2Me。前面的小题测试调用的才是公开接口 anthropic/claude-fable-5.1。
普通电脑能跑这套验证吗?
小题已在 macOS ARM64、Lean 4.33.1 环境下通过,无需 Mathlib。完整项目采用 Lean 4.33.1 和按提交固定的 Mathlib v4.33.0;官方报告,96 个并行任务构建耗时 5 小时 32 分钟,内存峰值 153 GB,命题比对约需 15 小时、建议预留 300 GB 内存。完整构建与复核未在此次小题测试中运行。只想阅读证明,可先看仓库的 README、PROOF-PATH.md 和离线 HTML 页面。
Lean 没报错,就算证明完成了吗?
不一定。含 sorry 的文件可能只收到警告,它代表证明尚未完成。还要查公理列表中的 sorryAx 或额外假设,并核对命题是否被改动。此次小题退出码为 0,只依赖 [propext, Quot.sound],命题与原题一致。
Fable 5.1 这道题花了多少钱,需要修几次?
一次请求 $0.07163,原始代码无需修改或重试便通过检查;接口未提供 token 数量。一次初等代数题通过,不能换算成模型正确率或整个费马项目的成本。
从 Fable 5.1 模型专页进入,保存生成的短证明,再交给本地 Lean 检查:模型负责生成,检查器负责验证。


