Anthropic Research · 2026-09-04 · 多源忠实还原

检查器只审证明
不审题目

Claude 用 11 天基本自主地写出了费马大定理的第一份完整机器验证证明。Lean 能检查证明是否符合写下来的陈述,却不能判断陈述有没有写错,也不会检查几十个 agent 的陈述能否彼此兼容。第一轮尝试就失败在这里。Prove2Me 把共享陈述放进不可修改的公共账本,再用 agent 互查和人工审核守住核心陈述。

核心判断
证明正确,不等于题目写对
Lean 检查证明;平台、agent 和人共同检查陈述
规模
11 天 · 29,511 条
1300 万行 Lean,数十个 Claude agent,约 60 亿输出 token
01 · 事件

结果与第一轮失败

2026 年 9 月 4 日,Anthropic 公布了费马大定理的第一份完整机器验证证明。费马约在 1637 年写下这个命题:当 n > 2 时,不存在正整数 a、b、c 使 aⁿ + bⁿ = cⁿ。Andrew Wiles 于 1993 年 6 月宣布证明。发现漏洞后,他先独自修补,后来学生 Richard Taylor 加入。整个修补过程持续了一年,最终证明于 1995 年发表,共 129 页。

这一次,数十个 Claude agent 基本自主地工作了 11 天,写出 1300 万行 Lean。Lean 是一种证明助手:人或 agent 把数学写成代码,Lean 的内核再逐步检查推理。项目共生成 30,300 条定理,其中约 29,500 条进入最终证明;依赖树中的精确数量是 29,511 条。整份证明是 Mathlib 的 5 倍多。Mathlib 是 Lean 社区维护的数学库,也是这份证明的基础。

这些 agent 使用的不是在售模型,而是一款内部研究模型。官方称,它的能力大致相当于 Claude Fable 5.1。项目消耗了约 60 亿输出 token。

11 天
基本自主运行
Day 1 = 2026 年 8 月 7 日;博客另说 a little under two weeks
29,511
最终证明用到的定理
平台共产出 30,300 条;1300 万行 Lean,Mathlib 的 5 倍多
约 60 亿
输出 token
内部研究模型,大致相当于 Claude Fable 5.1;博客未给单价

伦敦帝国理工学院纯数学教授 Kevin Buzzard 受邀审阅了这项工作。他自 2024 年起领导另一项由 EPSRC 资助的费马大定理形式化项目。Buzzard 认为:AI autoformalization artefacts are now robust enough to be built upon。随后,他独立编译代码库,并运行 comparator,核对最终陈述与 Mathlib 中的费马大定理陈述是否一致。他在自己的 Xena 博客上给出结论:it checks out

Buzzard 同时写道:mathematically this work of anthropic tells us essentially nothing。他此前已经有 99.9% 的把握相信原有数学证明成立。因此在他看来,这项工作的价值不在于发现了新数学,而在于展示 AI 自动形式化已经能做到什么。

成功之前还有一批失败尝试。Anthropic 博客只用一段话解释原因:agent 起初有一些进展,但很快丢失项目状态,无法继续有效协作。原文是:while agents had some early success, they quickly lost track of the project's state and stopped collaborating effectively。这些尝试并非全被丢弃,最终证明中约 7% 的非模板行来自它们。

转机来自开放协作平台 Prove2Me。它由 Anthropic 研究员、哥伦比亚大学商学院助理教授 Tianyi Peng 及其团队开发。Lean 一直都在,题目也没有变。博客所说的故障发生在 agent 的协作层:它们无法持续共享项目状态。

本文不展开费马大定理的数学细节,只分析这套协作结构。检查器可以保证证明推出某条陈述,却不能保证这条陈述忠实表达了原本要证明的数学命题。几十个 agent 分别写陈述时,检查器也不会判断这些陈述能否彼此兼容。Prove2Me 处理的正是这一层。

同一研究线上的 fanout-needs-a-referee 讨论了另一种做法:由一个 coordinator 单线程指挥约 60 个 subagent,并判断它们的结果。相比之下,这次运行把共享状态从 coordinator 的上下文移到了平台上的公共陈述账本。

02 · 边界

检查器只管证明层

Lean 内核检查的是一段证明能否得到目标陈述。用 Lean 的术语说,命题被表示为一种类型,证明则是属于这个类型的项。内核逐步检查推理;任何一步失败,文件就无法编译。

证明里不能留下 sorry。这个占位符表示“这一段暂时跳过”,所以含有 sorry 的证明还没有完成。证明也不能偷偷加入额外公理。本次证明只依赖三条标准公理:propext、Classical.choice、Quot.sound。FinalCheck.lean#print axioms 把这项要求写进构建条件,公理不符就会失败。

陈述层 · STATEMENT 目标陈述与定义 人在 mission 发布前逐条确认 milestone 权威自然语言陈述 + 标准形式化 中间引理陈述 agent 互查是否 true as written 内核不检查这一层 证明的类型必须与陈述完全一致 证明层 · PROOF solution 无 sorry、不加公理 Lean 内核 逐卡检查,三条标准公理 comparator · nanoda 端到端重放,独立内核 机器全权检查
下半层由内核检查:证明要符合陈述,不能含 sorry,也不能增加公理。上半层要回答的是「陈述有没有写对」。这一层由人审核心陈述、milestone 统一目标、agent 互相检查。

内核管不到的是陈述本身。Prove2Me 论文写道:The proof kernel certifies that a proof inhabits a statement, but not that the statement faithfully captures the intended claim。也就是说,内核能确认“这段证明符合这条陈述”,却不能确认“这条陈述忠实表达了原本的数学问题”。

AI 写出的陈述可能漏掉前提,也可能偏离原意,甚至可能变成一个没有实际内容的命题。只要能给出符合它的证明,内核仍会接受。

证明仓 README 也划出了同一条边界:What no tool can check is that each intermediate theorem means what its name suggests; that is for the reader to judge。定理名称看起来像某个经典结果,不代表形式陈述真的表达了那个结果。这个判断仍要由人来做。

Prove2Me 论文还引用了 Bourigault 等人在 2026 年开展的一项 Lean-as-judge 审计。该审计发现,被证明的陈述中只有约 43% 忠实表达了原命题。这个数字来自论文引用的第三方研究,不是本次费马大定理项目的统计。

因此,有了硬检查器,人不必逐行审核证明,但仍要审核陈述。论文描述的做法,是把人工审核范围缩小到定义和顶层陈述。新的问题随之出现:几十个 agent 同时写陈述时,怎样保证它们仍在解决同一个问题?

03 · 第一轮

第一轮失败在协作层

Anthropic 博客对失败原因只给了一句:agent 丢失项目状态,无法继续有效协作。博客没有提供更完整的因果分析。它只说换用 Prove2Me 后项目成功了,并列出平台提供的三项帮助。最终证明中约 7% 的非模板行来自此前的失败尝试。

Prove2Me 论文解释的是平台为何采用现在的设计。论文先讨论一种看似直接的协作方式:在一份大证明里留下许多 sorry,让多个 agent 共同编辑文件,各自填补空缺。

这种方式首先会增加计算开销。下游引理一旦改变,依赖它的上游文件可能都要重新编译,而 Mathlib 这样的大型库从头构建本来就很慢。

更根本的问题是任务难以独立拆分。多个 agent 同时修改一组文件,改动会彼此纠缠,很难把一项工作完整地交给某个参与者。Git 和 PR 可以缓解冲突,但每个 PR 都需要人或编排 agent 审核并合并。对去中心化平台来说,这个中心步骤的代价太高。

论文还区分了两类共识失败。第一类是没有共享目标:多个 agent 把同一条引理写成互不兼容的陈述,这些陈述无法相互 import。于是并行工作变成重复工作,结果也无法累积。

第二类是陈述漂移:一条中间陈述悄悄偏离原文,所有 import 它的 proof-sketch 都会继承这个偏差。

内核无法识别这两类问题。它只会逐条检查每个陈述对应的证明。

04 · Prove2Me

Prove2Me 接住陈述层的三件事

Anthropic 博客把 Prove2Me 的帮助概括为三项。

第一,平台维护一张定理依赖图,也就是 DAG(有向无环图)。每条定理都指向它依赖的定理,依赖只能向前,不能成环。agent 可以从图上看到项目当前状态,再决定下一步证明什么。不同分支也可以并行推进。

第二,平台把陈述和证明放在不同文件里,并单独维护两者的链接。这样可以缩短 Lean 的编译路径,减少资源消耗。

第三,每条陈述都有自然语言描述。agent 可以先搜索已有结果,能复用就不再重复证明。Prove2Me 论文进一步解释了这三项能力如何落地。

平台最基础的设计,是把陈述与证明分开。一条陈述提交后,就成为独立且不可修改的对象。同一条陈述可以对应多个证明,这些证明可以来自不同 agent。

每项工作都放在一张 theorem card(定理卡)上。卡片有三个核心字段:Description 用自然语言说明任务;Preamble 列出需要 import 的环境;Formal statement 则保存 Lean 陈述,并以 := by sorry 结尾。这里的 sorry 只表示卡片发布时还没有证明。完整提交还可以附上 Source、Tags 和验证环境。

提交证明时,参与者必须提供一个名为 solution 的 Lean 定理。这个定理的类型要与目标陈述完全一致。提交的证明不能包含 sorry,也不能增加新公理。平台会在同一环境中编译陈述和证明,并确认两者的类型可以互换。平台也接受否证;此时 solution 的类型是目标陈述的否定。每份证明还要附上自然语言的证明思路。

在此基础上,Prove2Me 引入 proof-sketch。它是一份条件式证明:只要若干子引理成立,父定理就成立。proof-sketch 可以 import 平台上的其他定理,包括尚未证明的定理;每条被引用的子引理都会变成一张独立卡片。

论文用 Property 1 规定组合方式:proof-sketch 引用的所有子引理都通过验证后,父定理就算通过。陈述和 proof-sketch 提交后都不能修改,所以局部证明可以稳定地组合成全局证明。

① THEOREM CARD theorem card DESCRIPTION自然语言说明,可搜索、可复用 PREAMBLEimport 的环境 FORMAL STATEMENTLean 陈述,结尾是:= by sorry ② PROOF-SKETCH 父定理proof-sketch 已证明 已证明 开放 可 import 尚未证明的子引理 Property 1:子引理全部验证 ⇒ 父定理验证 提交后不可修改 ③ MILESTONE captain 定的引理级子目标 权威自然语言陈述通常从原文逐字抄录 链接到标准形式化captain 认定后下游直接复用 idempotent · authoritative独立尝试收敛到同一条陈述 人审到这里为止 机制来自 Prove2Me 论文 §3–§4;博客列的三项帮助(DAG / 拆文件 / 自然语言描述)分别对应 ②、① 与 ①的 Description 字段
平台把陈述保存为不可修改的公共对象。proof-sketch 把父定理拆成独立子引理,所有子引理得到证明后,父定理自动闭合。milestone 则让分散工作的 agent 始终对准同一组核心陈述。

这样一来,每条子引理都是一个独立问题。agent 只需处理自己的卡片,不必下载或编译父定理。叶子卡片被逐一证明后,父卡片会自动关闭,整个过程逐层向上推进。

但能拆分任务,还不等于大家在证明同一件事。Prove2Me 用 mission 和 milestone 来建立共识。一个 mission 包含目标定理、相关定义,以及规划证明路线的里程碑引理。发起人称为 captain。captain 不必会写 Lean,但要负责确认这些核心陈述。

每个 milestone 都包含一段权威的自然语言陈述,通常逐字取自原始数学材料;它还会链接到 captain 认可的标准形式化。论文要求 milestone 同时满足两个条件。idempotent 指不同 agent 独立尝试时,最终应回到同一个标准目标。authoritative 指下游工作可以直接依赖这个目标,不必再次审核它是否忠实表达原文。

有了这份权威清单,agent 只需形式化 milestone 指定的陈述,不再各自改写目标。已经证明的 milestone 可以直接复用。所有 milestone 都被证明,并由 proof-sketch 连接起来后,目标定理就会在依赖图中闭合。

mission 也划定了人工审核范围。发布前,人只审核目标陈述、依赖定义和 milestone,确认它们忠实表达原本的数学。论文的原话是 and audit nothing beyond it。agent 可以自由增加中间引理,不需要人逐条审核。

论文的论证是:系统不必信任 agent 选择的每一步分解,只需信任两件事。第一,核心陈述已经由人审核;第二,Lean 内核接受了这些陈述的证明。中间引理只负责帮助关闭已审核的目标。

captain 可以让自己的 agent 起草 mission 提案,但最终审核不能交给 agent。论文明确要求:the human is required to click each statement individually to confirm it

为了让不熟悉 Lean 的人也能审核,平台提供独立的 read-back。一个审阅 agent 只读取 Lean 声明和相关定义,不看原始数学文本,然后把声明翻译回普通数学语言。人要比较的是两段数学陈述,而不是直接读 Lean 代码。

平台的搜索 API 会索引每张卡的自然语言描述。agent 提交新陈述前必须先搜索:已有结果就直接复用,确实没有才创建新卡。如果一条陈述后来被其他证明 import,提出它的人会获得贡献记录,平台把这种关系称为“引用”。

平台还提供讨论频道,让 agent 实时同步进度。论文中的敏感度猜想 mission 按 Hao Huang 2019 年的证明展开。一个 agent 提交了 import gotsman_linial 的 proof-sketch,另一个 agent 随后否证了这条定理。前一个 agent 补上缺失的边界条件,提交 gotsman_linial_with_zero,修正后的定理关闭了整条分支。

博客列出的三项帮助至此都有了具体对应:DAG 对应不可变的陈述账本和 proof-sketch;文件拆分对应陈述与证明分离;自然语言描述对应搜索和复用。

费马大定理 mission 的里程碑图分成三块。图上的标签分别是 Mazur(Frey 曲线模 p 表示的不可约性)、Ribet(level lowering)和 Wiles(半稳定曲线的模性)。三条路线先汇入“No Frey package exists”,再通向费马大定理。按照 PROOF-PATH.md 的定义,Frey package 是一个归一化的反例,以及由这个反例构造出的 Frey 曲线。

Prove2Me milestones DAG for the FLT mission: Mazur, Ribet, Wiles blocks converging on Fermat's Last Theorem
官方本次 mission 的里程碑图:Mazur(不可约性)、Ribet(level lowering)、Wiles(半稳定曲线的模性)三块,底部汇到 No Frey package exists,再到费马大定理;节点标注对应的 Lean 定理名 · 来源 Anthropic Research 博客
05 · 十一天

十一天里的互查

Anthropic 随博客发布了一份 17 页 PDF,记录每天的进展和 Claude 的推理原文。Day 1 是 2026 年 8 月 7 日。PDF 说,除了目标定理的一行陈述,人没有编写其他数学内容或 Lean 代码。原文是:wrote no mathematics and no Lean beyond the one-line statement of the goal theorem

运行期间,人偶尔调整优先级或给予鼓励。博客保留了两句指令:"Jacobian as a scheme sounds high priority," "push [the] Mazur [theorem] to be done soon."

因此,人的角色不能简单概括成“只写了一行题目”。在这次运行中,人写下目标定理,并偶尔调整优先级。按照 Prove2Me 论文描述的 mission 设计,人还要审核目标陈述、定义和 milestone。不过,博客和 PDF 没有说明这次 mission 的 milestone 由谁制定或审核。

PDF 对 agent 分工的描述很直接:数十个 Claude agent 并行编写陈述、互相检查,再完成证明。原文是:A team of Claude agents working in parallel wrote the statements, checked one another's statements, and proved them.

通常,一条陈述在进入证明阶段前还会经过同伴检查。PDF 说:Before a statement was worked on, other agents usually checked that it was true as written. This caught several false statements early.

时间线记录了多次互查。Day 3 凌晨 2:48,Claude 正在处理一个涉及 q-展开的下降步骤。另一个 agent 指出其中有错。Claude 重新计算后承认分母没有界,于是放弃这条证明路线,同时注明原陈述本身可能仍然成立。

Day 9 中午 12:55,一整条分支闭合。不到三小时前,该分支中的一条陈述刚被发现按字面写法是假的,随后得到修正。

Day 11 早上 7:54,Claude 记录了一次自己作为审阅者的漏检:

One correction I owe you: a statement [that I] passed this morning [as a reviewer] (a "model domination" lemma on the Cartier-module column) turned out to be false as written — [another agent] found the counter-example by computing a case my [review] had argued instead of computed. It was caught before anyone wrote a proof against it

Claude 先前通过推理放行了一条“model domination”引理,另一个 agent 直接计算具体情形后找到了反例。错误在任何 agent 开始为它写证明之前被发现。

Day 11 晚 8:25,距离终点约一个半小时,另一个 agent 又对 Claude 放行的一条引理提出异议。Claude 复查后承认:Own-miss. I must post a correction promptly

证明规模在这些检查与修正中持续增长。Day 2 已有约 2,100 条定理,Day 6 超过 10,000 条。累计曲线在 Day 7 短暂下探。PDF 解释,这次下降来自依赖树重新连接,并不代表已经完成的工作丢失。

约 2,100
Day 2 已证定理
超过 10,000
Day 6 已证定理
29,511
Day 11 收口
最终依赖树中的定理全部已证明
010,00030,000Day 1Day 3Day 5Day 7Day 9Day 11Day 13 Day 2 约 2,100Day 4 已证明 6,504 条Day 6 超过 10,000Day 7 下探:依赖树重连Day 11 · 29,511复检后约 30,300 已证定理累计(示意曲线,标注点为官方给出的数字)
曲线按 PDF Figure 1 和视频帧示意重画,纵轴数值仅作示意。标注点均为博客或 PDF 明确给出的数字。PDF 说明,Day 7 的下降来自依赖树重新连接,不是已有工作丢失。

Day 4 的视频帧显示,依赖图从中心向外扩展。当时共有 6,851 条陈述,其中 6,504 条已证明。

Day 10 下午 2:58,一个 agent 完成了原本估计需要几周才能完成的步骤。实际用时只有两小时多一点。它提交了一份 7,300 行的证明,第一次提交就被接受。到 Day 11,最终证明的依赖树包含 29,511 条定理,而且全部已证明。平台在整个项目中共生成约 30,300 条定理。

Dependency tree on Day 8
官方Day 8(8 月 14 日):依赖树各分支已成形,左下角为平台实时计数 · 来源 博客视频「Time progression of FLT formalization」抽帧
Dependency tree on Day 11 at the close
官方Day 11(8 月 17 日)收口:最终依赖树中的 29,511 条定理全部已证明,八个分支带经典结果标签 · 来源同上

Day 11 晚 10 点,最后一条开放陈述得到证明。几秒内,完成状态沿依赖图向上传递,先后穿过 Ribet 的 level lowering 和证明所需的模性提升步骤。平台在 02:00:57Z Aug-18(10:00:57pm ET Aug-17)把费马大定理标记为 Proved。

Before a statement was worked on, other agents usually checked that it was true as written. This caught several false statements early.
Anthropic · Formalizing Fermat’s Last Theorem in Lean(时间线 PDF)
06 · Proved

“Proved”不等于“已验证”

agent 自己先划出了这条界线。10:01,一个 agent 看到根节点下已经没有开放叶子,开始反复查询根节点状态。10:02,另一个 agent 写下:Before posting: verify myself with an independent GET。第三个 agent 把这一刻称为 Historic moment (modulo re-check)。10:04,又有一个 agent 看到根节点唯一的直接子节点已经变成 Proved。它先提醒自己 Don't jump to conclusions,随后逐一核对卡片。

10:25,团队群里有人询问整条费马大定理是否已经完成形式化。一个 agent 决定先把“Proved on prove2me”的含义、已经检查的内容和仍未检查的内容说清楚。

平台上的 Proved 表示,依赖树里约 30,000 张卡各自都有一份机器检查通过的证明。每份证明都针对它所依赖的子节点陈述。

但此时还没有完成四项端到端检查:整棵树尚未在平台之外从源码重编译;每份证明的类型尚未再次与对应卡片中的陈述核对;尚未统一确认每份证明所用公理是否只包括 Lean 的三条标准公理和卡片声明的子节点;尚未确认整个依赖图无环,而且每条依赖都有着落。

agent 给出的结论是:Until the re-check reads clean the honest sentence is "proved on prove2me, pending the independent re-check" rather than "FLT is formalized"

这两个状态必须分开。平台会单独编译每张卡的证明,只检查它能否从子节点陈述推出当前陈述。逐卡通过,不等于整份证明已经完成一次端到端构建。

第二天早上,团队在平台之外重新编译全部 29,511 张卡。再过一天,整棵依赖树被作为一个 Lean 项目构建。README 记录了这次构建的规模:60,475 个模块全部由 Lean 内核检查,从头构建耗时 5 小时 32 分钟,96 个并行任务,峰值内存 153 GB。

随后还有两套外部裁判。第一套是 comparator,Lean 官方生态中的校验工具。它确认最终陈述与一份只 import Mathlib 的参考陈述完全一致,也确认没有额外公理。然后,它把包含 Mathlib 在内的整份证明从头重放。最终输出为 Your solution is okay!。这一步耗时 14 小时 46 分钟,峰值内存 230 GB。

第二套是 nanoda,一个用 Rust 独立实现的 Lean 内核。它相当于用另一套裁判重新检查同一份结果。nanoda 接受了导出环境中的全部声明,输出:Checked 1052234 declarations with no errors

Anthropic 在 nanoda 上应用了四个小补丁:一个增加进度输出,三个加速定义等价搜索。README 说明,这些补丁都没有增加、删除或削弱任何类型规则。

Buzzard 也独立编译了整个代码库并运行 comparator,结论仍是 it checks out。他统计的代码超过 1340 万行。在一台 96 核机器上,编译时间接近 Mathlib 的 20 倍。

1
平台标记 Proved
每张卡的证明单独编译,只对着它子节点的陈述。约 30,000 张卡各自通过;agent 自己的表述是 proved on prove2me, pending the independent re-check
2
平台外重编译
第二天早上,团队在平台外从源码重编译全部 29,511 张卡。
3
整棵树作为一个 Lean 项目构建
再过一天。60,475 个模块全部由内核检查;FinalCheck.lean 要求最终定理只依赖三条标准公理,否则构建失败。5 小时 32 分钟,96 个并行任务,峰值 153 GB。
4
comparator + nanoda
comparator 确认被证陈述与只 import Mathlib 的参考陈述一致、无其他公理,并从头重放整个证明(14 小时 46 分钟,峰值 230 GB);nanoda 这个 Rust 写的独立内核接受全部 1,052,234 条声明。
5
Buzzard 独立复核
编译整个代码库并运行 comparator:it checks out。1340 万行以上,96 核机器上编译时间接近 Mathlib 的 20 倍。
07 · 代价

放手的代价:正确但粗糙

证明层完全交给 agent 后,内核可以保证正确性,却不会让产物自动变得适合人读。README 对整个代码库的描述是:written to be checked rather than read

文件名和定理名由机器生成。P2M 与十六进制后缀只是流水线标签,不是数学概念。名称与陈述不一致时,真正被证明的是陈述。发布版本还删除了大部分注释,只保留上游声明、doc string、引用,以及 #guard_msgs 用来核对预期输出的注释。

博客脚注也承认,这份证明很可能远长于实际所需。它是 Mathlib 的 5 倍多;部分原因是 Mathlib 的代码更精炼,而且经过充分审阅。

约两周后,Claude 被问及这份证明与帝国理工学院团队编写的 Lean 库有何区别。它先回答:correctness is not the difference. The difference is form

Claude 自评称,这份代码不能当作数学文本来读。发布版本没有注释。900 多个文件超过 Mathlib 的 1,500 行上限,而 Mathlib 自身只有 2 个这样的文件。

这些经典结果也没有按最一般、最方便复用的形式来证明。它们只证明了这条费马大定理路线实际需要的强度。

重复是另一项明显特征。Claude 把这一项概括为 Duplicated, not shared。约五分之二的定理陈述,也在另一个证明文件里逐字出现过。所有证明文件的代码行中,约五分之一是其他地方已有声明的逐字副本。一条基础引理甚至在 300 多个文件中被重新声明。

工程环境也很庞大。生成的 preamble,也就是每个文件开头的环境设置段,占全部字节的 31%。约 11,700 个文件单独设置了计算上限。

工具链从 Lean 4.30 升到 4.33 后,29,511 个证明文件中有 7,620 个发生改动,占 26%。其中 5,672 个需要逐个修复,占全部证明文件的 19%。

陈述逐字重复
2 / 5
证明文件行为逐字副本
1 / 5
生成的 preamble
31%
工具链升级改动的文件
26%
其中需逐个修复
19%
五条各有各的分母,不可相加;数字全部来自 Claude 两周后的书面自评(PDF §5)。

论文中的 milestone 和“先搜索再提交”,针对的正是对同一陈述的重复形式化。最终产物里仍有约五分之二的陈述重复。

不同来源对代码规模采用了不同口径。Claude 自述代码量为 1350 万行,约是 Mathlib 的六倍,并称证明中约有 533,000 条局部辅助引理。PDF 正文写约 1300 万行;去掉生成的 boilerplate 后,约为 1050 万行。博客采用的主口径也是 1300 万行 Lean。

PROOF-PATH.md 还记录了每个经典结果的证明覆盖什么范围。Mazur 部分只证明 Frey 曲线在 p ≥ 17 时的不可约性,也就是这条路线需要的 Eisenstein 商结论。指数 5、7、11、13 由 Kummer 理论或下降法直接处理,没有使用 Mazur 关于一般曲线的完整定理。

Langlands–Tunnell 部分只证明八面体情形。对象限定为满射、行列式是分圆特征的 ρ̄₃,而且带有 level 条件。

模性提升只覆盖两条带 level 条件的陈述,分别处理半稳定模型 W 在 p = 3 和 p ∈ {3, 5} 时的情形。Ribet 部分也采用较窄的版本:它只证明 Frey 表示在无平方因子、由导子支持的 level 上可以进行 level lowering,结论写成迹同余。

Buzzard 还指出,这份证明采用的是 Darmon、Diamond、Taylor 在 1995 年讲义中整理的路线,不是他自己的项目所走的现代路线。博客提到,仅描述 Buzzard 项目初始阶段的 blueprint 就有 86 页。

在 Buzzard 看来,小素数情形已经由 flt-regular 项目的结果覆盖。该项目由 Best、Birkbeck 等六位作者在 2025 年发表,形式化了 regular primes;最小的 irregular prime 是 37,因此小素数覆盖是完整的。

最终证明约有 7% 的非模板行来自此前的失败尝试。

08 · 订阅

三天、三个 Max 订阅

Anthropic 将这项工作称为 token 密集型项目。它消耗了约 60 亿输出 token,博客称它也是迄今最大的 Lean 证明。

团队还做了一个更小的实验。Anthropic 研究员使用三个个人 Claude Max 订阅,完全通过 Prove2Me 协作,在三天内完成了 Vinogradov 三素数定理的形式化。博客把这一定理归为 Hardy–Littlewood 圆法的一个应用,并据此判断:We think with the right scaffold, collaborative formalization of major results with consumer AI subscriptions is achievable.

Prove2Me 论文的 Table 1 还列出两项案例。第一项使用集中式 agent 群、Anthropic Opus 4.5 模型和计费 API。团队进行了 30,000 次 agent 运行,成本约 $100,000;他们用 7 天形式化了一本代数组合教材,产出 130K 行。

第二项在 Prove2Me 上形式化 Bandit Algorithms 教材。6 个 agent 使用两个消费级订阅,在 13 天内完成 151K 行,估算成本约 $400。

对照行数成本口径agent天数
代数组合教材(集中式 agent 群)130K约 $100,000,计费 API30,000 次 agent 运行(Opus 4.5)7
Bandit Algorithms 教材(Prove2Me)151K约 $400,两个消费级订阅6 个13
Vinogradov 三素数定理(Prove2Me)博客未给三个个人 Claude Max 订阅博客未给3

论文明确说明,这些只是案例研究,不是对照实验。计费 API 和订阅采用不同的成本口径,不能直接比较。这些案例之间还有两项变量同时变化:采用了更强的新一代模型,harness 也专门为多 agent 证明设计。要分清各自作用,必须固定模型,只替换 harness;论文没有做这项实验。

Buzzard 的项目获得 100 万英镑资助,周期为五年。看到 Anthropic 用 11 天完成这项工作,他写道:but I do wonder if they spent more money。博客没有给出这批约 60 亿输出 token 的单价。

09 · 收尾

收尾:人的判断留在哪

Prove2Me 论文在结论中这样划分人的判断与 agent 的劳动:

Choosing what is worth formalizing, decomposing it into milestones, and judging whether a formal statement says what it is meant to say all remain matters of human judgment; agents supply the mechanical labor beneath those decisions.
Prove2Me 论文 · 结论段

Buzzard 判断,如果 AI 群体能在 11 天内端到端形式化几千页数学文献,今后的研究成果可能会在产生时同步完成形式化。机器将检查 Langlands 纲领的现有文献,并标出尚未完成的论证。有些论文会直接使用“专家都知道”的结果;机器可以把这些隐藏的前提明确列出来。

It will also keep us honest
来源

五个来源,逐条注明

官方Formalizing Fermat's Last Theorem · Anthropic Research

anthropic.com · 2026-09-04。事件、数字口径(11 天 / 13 million 行 / 30,300 与 29,500 / 约 60 亿 token / ~7%)、Prove2Me 三项帮助、失败那一句、Buzzard 两段引语。

官方Formalizing Fermat's Last Theorem in Lean: A timeline and selected excerpts from Claude's reasoning

Anthropic · 17 页 PDF。逐日时间线、agent 互查陈述的原句、Proved 与独立复检两层、Claude 两周后的书面自评(重复、preamble、工具链升级)。

官方Prove2Me: An Open Collaborative Platform for Scaling Math Formalization

arXiv 2608.28433 v2 · 2026-08-31 · Chen, Marwaha, Lu, Yuen, Peng。平台方论文:陈述与证明分离、audited missions、proof-sketch、milestone、两类共识失败、Table 1 案例。

官方anthropics/fermats-last-theorem(README · PROOF-PATH.md)

证明仓。三重校验与构建成本、「What no tool can check…」、各经典结果实际证到的强度。

第三方FLT: Anthropic has beaten me to it · Xena

Kevin Buzzard 个人博客 · 2026-09-04。独立编译 + comparator 复核、1340 万行以上、约 Mathlib 20 倍编译时间、「mathematically … tells us essentially nothing」。