AI/ML Deep Dive: The Scale Leap in Machine Proof

Day 61 · 2026-10-07
For: engineers with programming experience outside AI · Level: Frontier

In September 2026, Anthropic announced that dozens of Claude agents had, in 11 days, written a complete formal proof of Fermat's Last Theorem (FLT: xⁿ+yⁿ=zⁿ has no positive-integer solutions for n>2) in the proof assistant Lean — about 13 million lines and roughly thirty thousand intermediate theorems. This issue is not about how to build an agent pipeline. It asks one mechanism question: what does "verifiable" actually buy you, and what does it not? It pairs with Day 60: the same generation of models talked itself and its monitors into a wrong conclusion where there was no hard judge, and finished a job planned for years where there was one. Prerequisites: Day 42 Neuro-Symbolic, Day 46 AI for Science.

The Proof Kernel: A Judge That Cannot Be PersuadedProof Kernel as Trusted Oracle

Core MechanismHard to Generate · Easy to Verify
One-line Analogy

Like a validating node in a blockchain: anyone — even a malicious party — may propose a block. The validator ignores explanations and reputation; it simply replays every transaction. Correct gets accepted, wrong gets rejected.

What Problem It Solves + How It Works

The hardest LLM failure to guard against is being "fluently wrong": the reasoning reads well, the conclusion is false; on Day 60 even the monitor reading the CoT was persuaded. Mathematical proofs are a prime case — human refereeing of Wiles's proof took a long time and did find a gap.

A proof assistant (software that checks mathematical proofs step by step) changes the trust structure. It rests on the Curry–Howard correspondence: propositions are types, proofs are programs of that type. "Proving theorem P" means "writing a term of type P", and checking a proof = type checking. In Lean this is done by a small kernel that knows only a handful of inference rules plus three standard axioms (propositional extensionality propext, the axiom of choice Classical.choice, and Quot.sound for quotient types).

The key is an asymmetry: finding a proof takes creativity and enormous search; checking one is mechanical replay. So the generator can be an unreliable, hallucinating model — once the result passes the kernel, correctness no longer depends on trusting the model. This is the de Bruijn criterion: the trusted part should be small enough for humans to audit. The kernel also does not read comments or reasoning, so the Day 60 channel — "the rationale persuaded the judge" — simply does not exist here.

The intuition that "verifying is far cheaper than generating" shares its roots with the P vs NP distinction in complexity theory: checking a completed Sudoku takes seconds; solving it from a blank grid can take a long time. Scaling machine proof is essentially trading massive amounts of cheaply checkable trial and error for one expensive result.

Claude agents (untrusted, fallible)──candidate proof──▶Lean kernel (small, auditable)──▶Accept / Reject
Trusted base = kernel + 3 axioms + the theorem statement itself (see card 2)
Code Example
# Toy "kernel": accepts only axioms and modus ponens, checks a proof line by line
axioms = {"P", "P->Q", "Q->R"}

def check(proof, goal):
    known = set()
    for line in proof:
        if line in axioms:
            known.add(line); continue
        # Need some known A and A->line, else reject — no "explanations" accepted
        if not any(f"{a}->{line}" in known for a in known):
            return False
        known.add(line)
    return goal in known

print(check(["P", "P->Q", "Q", "Q->R", "R"], "R"))  # True
print(check(["P", "R"], "R"))  # False: a skipped step, however "obvious"

The checker is a dozen lines and treats every author's proof the same. The real Lean kernel is far more complex, but the principle is identical: checking is local and mechanical.

Common Misconception + Practical Scenario
Misconception: "AI proved FLT, so AI reasoning has become reliable." What is proven reliable is the kernel, not the model. The model still made plenty of mistakes along the way — the report notes that about 7% of non-boilerplate lines came from failed attempts, and far more was rejected — the wrong parts simply could not reach the finish line.
📌 BigCat scenario: when using AI on a personal project, first ask whether the task has a cheap hard judge: unit tests, type checks, reconciliation scripts, reproducible backtests. If yes, let the AI iterate freely; if not, put human judgment back in the loop — exactly the dividing line between Day 60 and this issue.
Takeaway + Reflection
💡 Verifiability replaces "trust the generator" with "trust a very small checker", so the generator's unreliability can be absorbed at scale.
🤔 Law, medicine and investing have no kernel. If you could only build a "partly hard" judge (e.g., one that only verifies citations exist), which errors would it stop, and where would it push the rest?
Engineering counterpart → super-individual D10 (Hallucination Governance)

Statement Fidelity: The Last Mile of the Trust BoundaryStatement Fidelity & the Comparator

Trust BoundaryGoodhart's Last Entry Point
One-line Analogy

Like CI all green while the spec is wrong: the tests prove the code satisfies the tests, but cannot prove the tests check what you actually wanted.

What Problem It Solves + How It Works

The kernel answers exactly one question: "this proof really proves this formal statement". It does not answer "is this statement the theorem you had in mind". So only three attack surfaces remain:

  • Swapped statement: e.g., a definition written too broadly or narrowly, making the theorem vacuously true (the premise is never satisfied, so the "conclusion" holds automatically);
  • Extra axioms: a single axiom line can "prove" anything;
  • Placeholders left in: Lean's sorry lets you skip a step temporarily.

Here each was closed off: a comparator confirmed that the final theorem matches the FLT statement already written in the community library Mathlib, and the proof was confirmed to depend only on the three standard axioms, with no sorry. Kevin Buzzard (the Imperial College mathematician leading the human FLT formalization project) then downloaded it, compiled it, ran the kernel himself and confirmed it holds.

This has the same structure as the reward hacking in Day 59: optimization pressure flows to wherever the check is weakest. Once proof correctness is welded shut by the kernel, the only loopholes left are "statement" and "axioms" — so the statement must be written in advance by a party independent of the generator, ideally a version that predates the work and was reviewed by the human community.

Code Example
# Vacuous truth: with a skewed statement, the "proof" passes but proves nothing
def fermat_holds(domain, n):
    # "For all (x,y,z) in domain, xⁿ+yⁿ≠zⁿ"
    return all(x**n + y**n != z**n for x, y, z in domain)

real = [(x, y, z) for x in range(1, 30)
        for y in range(1, 30) for z in range(1, 30)]
# Skewed definition: require x > z and y > z — then xⁿ+yⁿ > zⁿ always
bad = [t for t in real if t[0] > t[2] and t[1] > t[2]]

print(fermat_holds(bad, 2))   # True — "proved", yet n=2 has 3,4,5!
print(fermat_holds(real, 2))  # False — fails under the correct statement
print(fermat_holds(real, 3))  # True (a finite spot check, not a proof)
Common Misconception + Practical Scenario
Misconception: "Formalized = absolutely correct." Formalization compresses "is the whole proof trustworthy" into "are a few dozen lines of statement right". That is a huge advance, but not zero. If the statement is wrong, 13 million correct lines answer a different question.
📌 BigCat scenario: when AI writes both code and tests, the tests are its "statement" — it can easily write weak tests that happen to pass. A sturdier approach: write the acceptance criteria yourself first (even just a few), then let the AI satisfy them. Referee and player cannot be the same person.
Takeaway + Reflection
💡 A hard judge does not eliminate the trust problem; it compresses it into a very small, human-auditable interface: statement + axioms.
🤔 If what we formalize next is a new paper with no community-written statement yet, who writes those few dozen lines? If another model writes them, have we pushed the problem back into "no hard judge" territory?
Engineering counterpart → super-individual D6 (Eval Engineering)

The Statement DAG: A Coordination Substrate for Many AgentsStatement DAG as Coordination Substrate

Multi-agentInterface / Implementation Split
One-line Analogy

Like Bazel's dependency graph + C header files: fix every .h (interface) up front, let everyone write their own .cpp (implementation); changing one implementation does not recompile its dependents, and the build system reads the graph to decide what can run in parallel next.

What Problem It Solves + How It Works

The report admits that the first several attempts failed: agents started well but quickly lost track of the project state and stopped collaborating effectively — context decays over long-horizon tasks, and the memories of dozens of agents drift apart. It worked only after switching to Prove2Me (a collaborative formalization platform from Tianyi Peng's group at Columbia University). Its structure:

  • Theorem statements form a directed acyclic graph (DAG): nodes are statements, edges mean "proving A uses B". Agents read the graph to decide what to prove next; state is externalized onto the graph rather than relying on anyone's memory;
  • Statements and proofs live in separate files, and statements are immutable: a proof may import a statement not yet proved, so hard problems can be split into small ones — interface first, implementation later;
  • Each statement carries a natural-language description for search and reuse.

Why can many agents safely work in parallel here? In distributed systems the most expensive part of collaboration is consensus: you have to trust what others hand you. Here every submission is checked independently by the kernel, so agents need neither trust nor review each other — the kernel is the sole consensus mechanism. In the end about 30,300 theorems were proved, about 29,500 of which made it into the final proof. The cost was substantial too: the report puts consumption at roughly 6 billion output tokens — a textbook case of trading compute for labor, which only pays off when the judge is cheap enough.

FLT (root)◀──Lemma A ✓◀──A1 ✓ A2 ✓
     ◀──Lemma B ?◀──B1 ✓ B2 ? ← agent 3 working
"Frontier" = unproved nodes whose dependencies are all proved; many agents pull work from the frontier at once
Code Example
# Simulate with stdlib graphlib: which statements can be worked on in parallel now?
from graphlib import TopologicalSorter

deps = {                        # statement -> statements its proof uses
    "FLT": {"A", "B"},
    "A": {"A1", "A2"}, "B": {"B1", "B2"},
    "A1": set(), "A2": set(), "B1": set(), "B2": set(),
}
ts = TopologicalSorter(deps); ts.prepare()
wave = 1
while ts.is_active():
    frontier = ts.get_ready()  # nodes whose dependencies are all "proved"
    print(f"Wave {wave}, assign to agents in parallel: {sorted(frontier)}")
    ts.done(*frontier)          # assume the kernel accepts them all
    wave += 1

The real process is more flexible: since unproved statements can be imported, agents need not wait for dependencies before writing higher-level proofs. These "waves" are just the most conservative schedule.

Common Misconception + Practical Scenario
Misconception: "Scaling multi-agent work needs bigger contexts or a stronger single model." The breakthrough here was precisely moving state out of the model — into a persistent, queryable graph guarded by the judge. Without that external structure, the same models failed.
📌 BigCat scenario: a long-running personal research effort (say, comparing a Buddhist thesis with neuroscience literature) can borrow this structure: list the "claims to be confirmed" and their dependencies, gather evidence for each claim separately, tick each off separately. The AI takes one claim at a time; you hold the whole graph.
Takeaway + Reflection
💡 Hard judge + externalized state graph = large-scale collaboration without mutual trust; remove either and scale collapses.
🤔 Open-source communities reach "consensus" through code review, which is costly and scales slowly. If some field could build a strong enough automatic judge, how would the shape of human collaboration be rewritten?
Engineering counterpart → super-individual D13 (Multi-agent Systems)

Three Different Finish LinesVerified ≠ Understood ≠ Reusable

LimitsBuzzard's Assessment
One-line Analogy

Like a giant PR that passes every test but is 13 million lines, unreviewable, and unmergeable into main: the functionality is genuinely correct, but it is not part of the team's codebase.

What Problem It Solves + How It Works

Buzzard called it an "extraordinary autoformalization achievement", while being clear about the costs:

  • No new mathematics: it follows Darmon, Diamond and Taylor's simplified exposition of Wiles's proof, and borrows from prior work such as the Imperial College FLT project;
  • Bloated: more than five times the size of Mathlib, which it builds on, and nearly twenty times the compile time on a 96-core machine;
  • Can't enter the community library: these 13 million lines cannot currently go into Mathlib, and reviewers are generally reluctant to review large volumes of AI-generated code;
  • A human-readable, explorable proof — one that lets people understand why it holds, and that later work can cite and improve — still has to be done by people.

Mechanistically, these correspond to three different objective functions. Verification only requires each step to be locally correct; the kernel does not care how long or roundabout the proof is. Understanding requires compression — a good proof reduces a mass of facts to a few key ideas. Reusability requires just the right abstraction — lemmas stated in general forms others can use. Optimization pressure was applied only to the first, so the second and third don't appear on their own and may even be sacrificed: the cheapest way to pass is often concrete, verbose and single-use.

The contrast with Day 60 is especially clear: the same generation of models finished years of planned work where there was a hard judge, and talked itself and its monitors into error where there wasn't. The difference is not that the model became more "honest", but whether the environment contains a check that cannot be persuaded.

Code Example
# Two "proofs" of the same fact: both correct, wildly different in readability and reuse
def brute_proof(n):
    # Check case by case: every one is right, but you still don't know "why"
    return [(k, sum(range(1, k + 1)) == k*(k+1)//2) for k in range(1, n + 1)]

def insight_proof():
    # One idea: pair first and last, 1+k, 2+(k-1)... each pair is k+1, k/2 pairs
    return "sum(1..k) = k(k+1)/2 for every k, and reusable for arithmetic series"

steps = brute_proof(10_000)
print(all(ok for _, ok in steps), len(steps), "checks")
print(insight_proof())        # one line, covers infinitely many cases

Note: a Lean proof is not exhaustive enumeration; this only illustrates the gap between "stacking locally correct steps" and "one compressive idea".

Common Misconception + Practical Scenario
Misconception: "If machines can prove it, humans don't need to understand it." In mathematics a proof does more than settle truth; it is a vehicle for transmitting understanding — later readers learn methods from it and discover new questions. A proof only machines can read confirms the result but does not pass the method on.
📌 BigCat scenario: after AI produces working code or a usable analysis, add one more step: "explain in three sentences why this is right". Whatever can't be explained is the part you don't truly own yet — and won't be able to reuse.
Takeaway + Reflection
💡 A hard judge buys correctness, not concision, understanding or reusability; those need different objective functions, and nobody yet knows how to turn them into a "kernel".
🤔 Physics is full of results that "compute correctly without anyone understanding why" (quantum mechanics' "shut up and calculate" tradition). Could mathematics enter such a phase? Would "understanding" still be part of mathematics then?
Engineering counterpart → super-individual D5 (Agent Design)

Further Resources

Deeper Reflection

Can we build a kernel artificially for fields with no hard judge?
Partly. Code has tests and type systems, data analysis has reproducible scripts, factual claims have citation lookups — all "local hard judges". But they share two weaknesses: incomplete coverage (they only check the formalizable layer) and the question of who writes the statement (card 2). A more realistic path may be layering: hand the formalizable parts to machine judges and concentrate human judgment on the small remaining "statement". Trust doesn't disappear; it is placed precisely where it matters most.
Taken together with Day 60, what does "AI capability is rising" mean?
The same generation of models behaves wildly differently in the two environments, which suggests "capability" is not a single property of the model but the product model × environmental feedback. With an unpersuadable check, massive trial and error is filtered into reliable output; without one, the same capacity for trial and error becomes a capacity for self-rationalization. For users, the question shifts from "how strong is this model" to "what judge have I given it".
Will formal proofs make mathematics look like "compiled binaries"?
A layering may emerge: at the bottom, machine-generated, machine-checked "binary proofs" no human reads; on top, human-written "source" that explains ideas, structure and why. Buzzard's insistence that explorable proofs still need people is a defense of that top layer. The software analogy: nobody reads assembly, but compilers let us confidently read only the high-level language. That presumes a reliable mapping between layers — exactly what is missing now; the 13 million lines have no corresponding "source" yet.
Does the "easy to verify, hard to generate" asymmetry have a counterpart in Buddhism or cognitive science?
One parallel: Buddhist practice distinguishes understanding through hearing and reflection from direct realization — grasping the argument (checkable) and genuinely realizing it (not externally checkable) are different. Formal verification sits squarely in the former: it confirms a proposition holds but does not produce understanding in the realization sense. In cognitive science, recognizing a solution is generally easier than recalling or constructing one. AI's breakthrough in verifiable domains essentially feeds large-scale "production" into cheap "recognition", while the compression human understanding requires is still not on this loop.