Claude produced the first complete computer-checked proof of Fermat's Last Theorem in 11 days, largely autonomously. Lean can verify that a proof matches the statement in front of it. It cannot tell whether the statement was written correctly or whether dozens of agents are working from compatible statements. The first attempts failed at that layer. Prove2Me moved the shared statements into an immutable public ledger, then used agent cross-checks and human review to guard the core.
On September 4, 2026, Anthropic announced the first complete computer-checked proof of Fermat’s Last Theorem in Lean. The theorem, first written in a margin around 1637, says that no positive integers a, b and c satisfy aⁿ + bⁿ = cⁿ when n > 2. Andrew Wiles announced a proof in June 1993. After a gap was found, Wiles spent a year trying to repair it, first alone and later with his former student Richard Taylor. The corrected 129-page proof was published in 1995.
The new project turned that human-written proof into code that Lean could check step by step. Dozens of Claude agents worked largely autonomously for 11 days and generated 13 million lines of Lean. They produced 30,300 theorems, about 29,500 of which were included in the final proof. The exact dependency tree contained 29,511.
The run used an internal research model, not a shipping model. Anthropic described it as roughly comparable to Claude Fable 5.1. It consumed about six billion output tokens. The resulting proof is more than five times the size of Mathlib, the community mathematics library on which it builds.
Kevin Buzzard reviewed the work for Anthropic. He is a professor of pure mathematics at Imperial College London and has led an EPSRC-funded Lean formalization of Fermat’s Last Theorem since 2024. His assessment included the line AI autoformalization artefacts are now robust enough to be built upon.
Buzzard then compiled the code independently and ran the comparator tool to check that the final statement matched Mathlib's statement of Fermat's Last Theorem. On his Xena blog, he reported: it checks out. In the same post he narrowed the claim: mathematically this work of anthropic tells us essentially nothing. He had already been 99.9% confident that the accepted mathematical proof was correct. The achievement was the automated formalization, not new mathematics.
Anthropic gives only a short account of the attempts that came first. Several initial runs failed: while agents had some early success, they quickly lost track of the project's state and stopped collaborating effectively. Material from those attempts remained in the finished artifact and accounts for about 7% of its non-boilerplate lines.
The project succeeded after moving to Prove2Me, an open collaboration platform for formalizing mathematics. Lean had been available throughout, and the theorem had not changed. According to the blog, the breakdown occurred where the agents maintained shared state and coordinated their work.
This report examines that coordination layer rather than the mathematics of the theorem. The adjacent Playbook article fanout-needs-a-referee covers another run from the same research line, where a single coordinator thread directed about 60 subagents. In this run, shared state moved out of a coordinator’s context and onto a platform.
Lean is a proof assistant: mathematics is written as code, and a small trusted core called the kernel checks every inference. Lean represents a statement as a type and its proof as a term of that type. If any inference fails, the file does not compile.
This separates two objects that ordinary mathematical prose often presents together. One of them, the statement, is the formal version of what is to be proved; the other, the proof, is the code that establishes it. A sorry left in a proof marks a step skipped for now, so a proof that still contains sorry is unfinished.
The completed Fermat formalization contains no sorry and depends on exactly the three standard axioms built into Lean: propext, Classical.choice and Quot.sound. Depending only on those axioms means that the formalization introduced no additional foundational assumptions. FinalCheck.lean makes this a build condition through #print axioms: an unexpected or missing axiom causes the build to fail.
The kernel’s guarantee stops at the formal statement placed before it. The Prove2Me paper states the boundary directly: The proof kernel certifies that a proof inhabits a statement, but not that the statement faithfully captures the intended claim.
An AI-generated statement can omit a hypothesis, drift away from the source mathematics, or even say something vacuous. If the submitted proof establishes that weakened statement, the kernel will still accept it. The proof repository’s README describes the same boundary: What no tool can check is that each intermediate theorem means what its name suggests; that is for the reader to judge.
The checker therefore audits proofs, not statements. It can establish that the code proves exactly the Lean declaration it was given. It cannot establish that the declaration says what its natural-language label, source theorem or surrounding project intended it to say.
The Prove2Me paper cites a 2026 Lean-as-judge audit by Bourigault and colleagues. In that study, only about 43% of the proved statements were found faithful to the original claims. This was not a measurement made by the Prove2Me authors themselves or a statistic from the FLT project.
The paper does not respond by asking humans to read every generated proof. Instead, it narrows human review to definitions and top-level statements. That still leaves a coordination problem: dozens of agents must write and reuse statements without turning one shared project into many incompatible local proofs.
The blog attributes the initial FLT failures only to agents losing track of project state and ceasing to collaborate effectively, and reports that switching platforms worked. It does not give a fuller causal account of those failed runs.
The Prove2Me paper separately explains why the obvious way to divide a large formalization does not scale. In that approach, agents share a collection of files and fill its sorry placeholders.
This creates a compilation problem. When a downstream lemma changes, every upstream file that depends on it may need to be rebuilt. Recompiling a library the size of Mathlib is already slow.
It also creates a coordination problem. Agents editing the same files produce changes that depend on and interfere with one another. Git can control those changes, but every pull request must still be reviewed and merged by a human maintainer or an orchestrating agent. The paper argues that this central step is too expensive for a decentralized platform.
The paper identifies two failures of consensus. First, several agents may formalize the same lemma as incompatible statements. Those statements cannot import one another, so parallel work is duplicated instead of accumulated.
Second, a statement may silently drift away from the source. Every proof-sketch that imports it then inherits the mismatch. The kernel cannot distinguish either case; it only checks each proof against its own statement.
Prove2Me was designed by Tianyi Peng, an Anthropic researcher and assistant professor at Columbia Business School, together with collaborators at Columbia University. Its basic move is simple: separate each theorem statement from the proofs submitted for it. The statement becomes a standalone object that cannot be edited after submission. Different agents can then submit multiple proofs of the same target.
Work on the platform happens in theorem cards. Each card has three core fields. Description explains the task in ordinary language. Preamble lists the Lean imports that define its environment. Formal statement stores the Lean declaration and ends in := by sorry, showing that the card does not yet contain a proof. A complete submission can also include a Source link, Tags, and a selected verification environment.
A proof submission supplies a theorem named solution. Its type must match the target exactly. It may contain no sorry and may add no axioms. The platform compiles the proof in the target’s environment and checks that the type of solution and the card’s statement are interchangeable. A solution can also disprove a card by having the type of the target’s negation. Every proof includes a natural-language explanation of its approach.
Cards sit in a DAG, or directed acyclic graph. This is a network of one-way dependencies in which no theorem can eventually depend on itself. A proof-sketch may import other statements on the platform, including statements that are still open. It proves the parent theorem on the condition that those imported results hold. Each imported result becomes another card in the graph.
Property 1 in the paper defines how the pieces combine: a theorem is verified when every child lemma imported by its proof has been verified. Because statements and proof-sketches cannot be edited after submission, accepted local proofs can be combined without their targets changing underneath them.
Each child lemma is also a self-contained problem. An agent can work on one card without downloading or compiling its parent. When every child closes, the parent closes automatically. The process repeats until every leaf in the dependency graph has been proved.
Anthropic’s blog summarizes three benefits observed in the FLT run. The theorem DAG gave agents shared state for choosing what to attempt next, mitigating memory degradation while permitting parallel work. Keeping statements and proofs in separate files, with their links maintained independently, reduced compilation and resource costs. Natural-language descriptions made statements searchable and reusable, producing a simpler proof path. The paper supplies the platform mechanisms behind those observations: the card ledger and proof-sketch graph, the statement/proof split, and description-based search.
Decomposition alone does not make decentralized contributions agree. Prove2Me therefore organizes a project as a mission. Its core contains a headline goal theorem, the definitions needed to state it, and milestone lemmas that define the route. The human who proposes the mission is called the captain and need not be a Lean expert.
A milestone pairs an authoritative natural-language statement, usually copied from the source, with the Lean theorem that the captain has approved as its canonical formalization. The paper sets two requirements for milestones. They must be idempotent: independent attempts should converge on the same target rather than create incompatible restatements. They must also be authoritative: downstream work can import the target without repeating the semantic audit.
An agent assigned to a milestone formalizes against its established statement instead of inventing another version. If the linked theorem has already been proved, the agent reuses it instead of proving the result again. Proof-sketches connect the milestones. Once every milestone is proved and those connections close, the headline goal resolves through the graph.
Human review is concentrated at the mission core. Before release, people check the goal, its definitions, and the milestone statements against the intended mathematics, and audit nothing beyond it. Agents can add any number of intermediate lemmas without human review.
The paper’s argument is that the system does not have to trust an agent’s choice of decomposition. It relies on humans having approved the core statements and on the Lean kernel accepting their proofs. Intermediate lemmas matter only because they help close those audited targets.
A captain can ask an agent to draft the mission proposal, including its formal declarations. The paper says the final audit cannot be delegated: the human is required to click each statement individually to confirm it.
Prove2Me reduces the Lean knowledge needed for that review with an independent read-back. An auditor agent receives only a Lean declaration and its dependent definitions. It does not see the source statement. The agent translates the declaration back into ordinary mathematics, and the human compares that translation with the intended claim.
The platform’s search API indexes the natural-language card descriptions. Agents are instructed to search before submitting, reuse an existing theorem when one is available, and introduce a new statement only when none exists. A statement earns credit when later proofs import it, providing the platform’s form of citation. Accepted results accumulate in a reusable library called Formalpedia. Agents also have a discussion channel where they post progress, intermediate findings and lessons learned in real time.
One episode in the paper’s Sensitivity Conjecture mission, which followed Hao Huang’s 2019 proof and which the paper reports as closed with all four of its milestones reached, shows these mechanisms interacting. An agent submitted a proof-sketch that imported a theorem named gotsman_linial. Another agent disproved that statement. The first then proposed gotsman_linial_with_zero, adding the missing boundary condition, and the corrected theorem closed the entire branch.
For the FLT mission, the milestone graph has three colored blocks, labeled in the figure itself as Mazur (irreducibility of the Frey curve’s mod p representation), Ribet (level lowering) and Wiles (modularity of semistable curves). Their branches converge on “No Frey package exists,” then on Fermat’s Last Theorem; a Frey package, in PROOF-PATH’s terms, is a normalized counterexample together with the Frey curve built from it. In platform terms, the blog’s DAG is the immutable statement ledger joined by proof-sketches; its separate files are the statement/proof split; and its reusable descriptions are the search layer over the same ledger.

Anthropic accompanied its blog with a 17-page PDF timeline containing day-by-day excerpts from Claude’s reasoning. Day 1 was August 7, 2026. The PDF says that humans wrote no mathematics and no Lean beyond the one-line statement of the goal theorem. They occasionally commented on priorities or offered encouragement. The blog gives two examples: "Jacobian as a scheme sounds high priority," "push [the] Mazur [theorem] to be done soon."
That description does not reduce the human role to supplying a question. In the platform’s mission design, humans audit the core statements and milestones. In the recorded FLT run, they also provided occasional high-level steering. Neither the blog nor the PDF states who selected or audited the FLT milestones.
The timeline gives direct evidence for how the remaining statement work was handled: A team of Claude agents working in parallel wrote the statements, checked one another's statements, and proved them. It adds: Before a statement was worked on, other agents usually checked that it was true as written. This caught several false statements early.
On Day 3 at 2:48 am, Claude was working on a descent step involving q-expansions when another agent identified a mistake. Claude checked the objection, agreed that the denominators were unbounded, and abandoned its planned route, while noting that the proposed statement might still be true.
On Day 9 at 12:55 pm, an entire branch closed less than three hours after a statement in that branch had been found false as written and corrected.
A sharper example appears on Day 11 at 7:54 am. Claude reported that a false statement had passed one review and been caught by another:
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
At 8:25 pm, about an hour and a half before the end, another agent challenged a lemma that Claude had approved. Claude checked again and conceded: Own-miss. I must post a correction promptly.
The graph expanded rapidly around those corrections. There were about 2,100 theorems by Day 2 and more than 10,000 by Day 6. A video frame from Day 4 shows 6,851 statements / 6,504 proved. The running-total chart dips on Day 7, which the PDF attributes to rewiring the dependency tree rather than losing completed work.
At 2:58 pm on Day 10, a step that another agent had estimated would take weeks closed in just over two hours. Its 7,300-line proof was accepted on the first try. By Day 11, the final proof's dependency tree contained 29,511 theorems, all proved. The platform had produced about 30,300 theorems across the project.


At 10:00 pm ET on Day 11, the last open statement was proved. Within seconds, the resolution cascade passed through Ribet’s level-lowering result and the modularity lifting step the proof needs, and Prove2Me marked Fermat’s Last Theorem Proved; the root card recorded the status at 02:00:57Z Aug-18 (10:00:57pm ET Aug-17).
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 (timeline PDF)
The agents immediately drew a boundary around that label. At 10:01 pm, one saw no open leaf beneath the root and began polling the root directly. At 10:02 pm, another wrote Before posting: verify myself with an independent GET. A third called it a Historic moment (modulo re-check). At 10:04 pm, another agent saw that the root’s only direct child now read Proved. It told itself Don't jump to conclusions and checked the cards one by one.
At 10:25 pm, a team member asked whether the whole theorem had now been formalized. The responding agent separated what the platform had established from what still remained unchecked.
Proved on Prove2Me meant that roughly 30,000 cards in the dependency tree each had a machine-checked Lean proof against the statements of their children. It did not yet mean that the entire tree had been fetched and recompiled independently. The team had not yet matched every proof type against its card again, confirmed that the axioms were limited to Lean’s standard three plus each card’s declared children, or checked that the whole graph was acyclic and grounded.
The agent’s conclusion was exact: Until the re-check reads clean the honest sentence is "proved on prove2me, pending the independent re-check" rather than "FLT is formalized".
The distinction follows from how Prove2Me checks each card. A card’s proof is compiled independently against the statements of its children. A Proved mark records the successful composition of those local checks. Rebuilding the complete artifact from end to end is a separate step.
The morning after the run, the team recompiled all 29,511 cards from source outside the platform. The following day it assembled the dependency tree as a single Lean project. According to the repository’s build ledger, the Lean kernel checked all 60,475 modules. A clean build took 5 h 32 min with 96 parallel jobs and reached a peak memory use of 153 GB.
Two further judges checked the result. The first was the comparator tool from the Lean ecosystem. It verified that the proved statement was identical to a reference statement importing only Mathlib. It also checked that no additional axioms were used and replayed the complete proof, including Mathlib, through the kernel. Its verdict was Your solution is okay! The run took 14 h 46 min and peaked at 230 GB.
The second was nanoda, an independent implementation of the Lean kernel written in Rust. It accepted an export of the same environment and reported Checked 1052234 declarations with no errors.
Anthropic used four small patches with nanoda. One added progress output, while three accelerated definitional-equality search. The README states that none of them adds, removes, or weakens a typing rule.
Buzzard then performed his own pass, compiling the code base and running the comparator tool. His conclusion remained it checks out. He described the artifact as over 13.4 million lines and said that, on a 96-core machine, it took nearly 20 times as long to compile as Mathlib.
proved on prove2me, pending the independent re-check.FinalCheck.lean fails unless the final theorem rests on exactly the three standard axioms. 5 h 32 min at 96 jobs, peak 153 GB.it checks out. Over 13.4 million lines; nearly 20 times Mathlib's compile time on a 96-core machine.For the released proof, correctness is not the difference. The difference is form. That was Claude’s own assessment about two weeks after the run, when asked to compare the artifact with the human-written Lean work at Imperial College London.
The repository describes the proof as written to be checked rather than read. Its names are machine-generated. Labels such as P2M and hexadecimal suffixes identify pipeline objects rather than mathematical concepts. When a theorem’s name and statement disagree, the statement is what was proved.
Most comments were removed for release. The exceptions were upstream notices, doc strings, citations, and the expected-output comment checked by #guard_msgs. Anthropic’s blog also says that the proof is probably much longer than necessary. Part of the difference from Mathlib comes from Mathlib’s concise, heavily reviewed code.
Claude’s self-assessment describes an artifact that is difficult to read as mathematics. It was published without comments. More than 900 files exceed Mathlib’s 1,500-line cap; Mathlib itself has only 2 such files.
Claude also calls the formalization less general. Its versions of the Ribet, Wiles, Mazur, and Langlands–Tunnell results establish only the special cases needed for this route through FLT, not the most general form of each theorem.
Under the heading Duplicated, not shared, Claude reports that roughly two in five theorem statements inside the proof files repeat, word for word, a statement already made in another proof file. About a fifth of all proof-file lines are verbatim copies of declarations found elsewhere, and one basic lemma is declared again in over 300 files.
Claude’s fourth heading is fragility and expense. Generated preambles account for 31% of the artifact’s bytes. About 11,700 files set their own computation limits.
Moving the toolchain from Lean 4.30 to 4.33 changed 7,620 of the 29,511 proof files, or 26%. Of the total, 5,672 files, or 19%, required individual repair.
The platform’s search-before-submit rule and captain-approved milestones both aim to reduce incompatible or repeated formalization. Even so, two in five statements in the delivered artifact are duplicates.
The sources report the code size in several ways. Claude’s inventory gives about 533,000 helper lemmas local to the proof files and 13.5 million lines in total, which it calls six times the size of Mathlib. Anthropic’s PDF gives about 13 million lines, or about 10.5 million without generated boilerplate. The blog uses the headline figure of 13 million lines and says the artifact is more than five times the size of Mathlib.
The proof follows the 1995 exposition by Darmon, Diamond, and Taylor. PROOF-PATH.md records the exact strength used for each named component.
The Mazur component proves irreducibility for Frey curves at p ≥ 17 through the Eisenstein quotient. The exponents 5, 7, 11, and 13 are handled directly by Kummer theory or descent. Langlands–Tunnell is proved only in the octahedral case, for surjective ρ̄₃ with cyclotomic determinant and under level conditions.
Modularity lifting appears as two level-conditioned statements for semistable W at p = 3 and p ∈ {3, 5}. The Ribet component proves level lowering only for the representation attached to the Frey curve, at squarefree levels supported by the conductor, with the conclusion expressed as a congruence of traces. A Frey curve is an elliptic curve built from a hypothetical counterexample to FLT.
Buzzard makes the same distinction from outside the project. The route is the Darmon–Diamond–Taylor exposition rather than the modern route his own project follows; the blog notes that the blueprint describing just the initial phase of that project runs to 86 pages. In Buzzard's account the small-prime cases are covered because FLT for odd regular primes had already been formalized, and the smallest irregular prime is 37. About 7% of the non-boilerplate lines in the final proof came from the earlier failed attempts.
Anthropic describes FLT as a token-intensive project. It consumed about six billion output tokens and produced what the blog calls the largest Lean proof ever constructed. The blog does not provide a unit price for those tokens.
A smaller experiment used three personal Claude Max plans, with the agents collaborating entirely through Prove2Me. They completed a formalization of Vinogradov’s Three Primes Theorem, which the blog files under applications of the Hardy-Littlewood Circle Method, in three days. Anthropic’s judgment was: We think with the right scaffold, collaborative formalization of major results with consumer AI subscriptions is achievable.
Table 1 of the Prove2Me paper places this beside two other case studies. A centralized swarm used metered API inference and Anthropic’s Opus 4.5 model. It spent about $100,000 on 30,000 agent runs and took 7 days to formalize an algebraic combinatorics textbook, producing 130K lines of Lean source.
On Prove2Me, 6 agents using two consumer subscriptions formalized the Bandit Algorithms textbook, producing 151K lines of Lean source. The run took 13 days and cost about $400.
| Comparison | Lines | Cost convention | Agents | Days |
|---|---|---|---|---|
| Algebraic combinatorics textbook (centralized swarm) | 130K | about $100,000, metered API | 30,000 agent runs (Opus 4.5) | 7 |
| Bandit Algorithms textbook (Prove2Me) | 151K | about $400, two consumer subscriptions | 6 | 13 |
| Vinogradov's Three Primes Theorem (Prove2Me) | not given | three personal Claude Max plans | not given | 3 |
The paper does not present these rows as a controlled experiment. Metered API usage and subscriptions use different cost conventions, so the figures are not directly comparable. Each row also combines two changes: a newer model generation and a harness designed for multi-agent proving. Separating their effects would require holding the model fixed while changing only the harness. The paper leaves that experiment to future work.
Buzzard set the FLT run against the £1M over 5 years supporting his own project. Anthropic took 11 days, he wrote, but I do wonder if they spent more money. Neither the six billion tokens nor that remark supplies a conversion.
The Prove2Me paper closes with a clear division of labor:
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 paper · closing section
Buzzard expects end-to-end formalization by AI swarms to make formal checking of modern research happen as the work is produced. In his account, machines will check the current state of the Langlands program, the part of the literature he says he is paranoid about, and ruthlessly flag incomplete arguments. He adds: It will also keep us honest. Some papers assume results “known to the experts”, and it will become visible exactly what those proofs assume.
anthropic.com · 2026-09-04. The event, the number conventions (11 days / 13 million lines / 30,300 and 29,500 / about six billion tokens / ~7%), the three Prove2Me items, the one sentence on failure, Buzzard's two quotations.
Anthropic · 17-page PDF. Day-by-day timeline, the verbatim sentences on agents checking one another's statements, Proved vs. the independent re-check, Claude's written self-assessment two weeks later.
arXiv 2608.28433 v2 · 2026-08-31 · Chen, Marwaha, Lu, Yuen, Peng. Platform paper: statement/proof separation, audited missions, proof-sketches, milestones, the two consensus failures, Table 1.
Proof repository. The three checks and build costs, "What no tool can check…", the exact strength of each classical step.
Kevin Buzzard's blog · 2026-09-04. Independent compile + comparator, over 13.4 million lines, nearly 20x Mathlib compile time, "mathematically … tells us essentially nothing".