Skip to content
Artificial intelligence. Clearly. RSS feed
AI NEWS AI

News. Evidence. Perspective.

Build & CodeAnalysis

Claude wrote 180 million lines of proof. What exactly did it prove about real software?

Anthropic and Theorem used AI to prove bounded no-crash properties across 239 entry points in 123 open-source libraries. The achievement is substantial, but the conditions under which it holds are the real story.

A program can survive a trillion tests and still fail on the next input. Testing observes some executions; proof is supposed to account for all executions within a precisely stated mathematical world. That distinction explains why Anthropic’s October 22 collaboration with verification company Theorem is much more interesting than a claim that AI can now find coding bugs.[1]

The researchers report machine-checked no-crash proofs for 239 fuzz-test entry points spread across 123 open-source libraries. Generating those proofs took around 180 million lines in Rocq, a formal proof assistant. The typical proof contained about 600,000 lines; the binary whose behavior it covered had a median length of roughly 18,000 RISC-V instructions. These are not ordinary prose arguments supplied by a chatbot. The proof checker must accept their mathematical steps.[1]

The size is startling, but volume alone is not the achievement. The notable thing is that the target was compiled executable code, not merely the developers’ intentions expressed in source files. Compiler transformations, library behavior and the precise machine instructions enter a proof obligation that software engineers have generally been unable to discharge at this scale.

The invisible boundary around 'never crashes'

Specifications

What the demonstration covers—and what it does not

What the demonstration covers—and what it does not
Covered boundaryUnproven outside the boundary
239 fuzz-test entry points in 123 librariesEvery function, version and deployment of those libraries
Input size below 64 MBLarger inputs or all conceivable external states
RISC-V, modeled Linux behavior, static single-threaded executionDifferent architectures, concurrency and operating systems
No crashes under the stated specificationSemantic correctness, privacy, availability or absence of every bug

Here is the indispensable qualification: the guarantee is conditional. The team's specification considers inputs smaller than 64 megabytes, single-threaded statically linked binaries, a fixed memory budget, and a modeled Linux operating system running on RISC-V. Within that mathematical model, the proof addresses normal termination without memory-safety errors or failed assertions for the checked entry points and modeled operating-system responses. It is not a certificate that any version of a library on any machine can never malfunction.[1]

That boundary is not a technicality designed to spoil good news. Without it, the claim would be meaningless. Programs depend on operating-system behavior, concurrency, hardware, networking, external state and security requirements that are not automatically captured by a crash specification. Software can also run without crashing while producing the wrong answer, mishandling personal data, or making an unsafe business decision.

Consider a hypothetical file decoder. A proof that it does not access memory unlawfully on any allowed input would be extremely valuable. It would not establish that it recognizes the right format, renders every valid image correctly, keeps a password secret or resists a malicious dependency outside the formal model. These are different properties, requiring different specifications and evidence.

Why fuzzing provided the starting line

The project borrowed its targets from OSS-Fuzz, Google's continuous fuzzing programme. A fuzz harness feeds generated and mutated data to a selected part of a program and looks for failures. It has the virtue of pursuing exactly the sort of unexpected inputs on which real software breaks. It also has an inherent limit: no matter how long the engine runs, an untried path may remain.[1]

Anthropic reports that Claude found and patched bugs in the course of trying to prove the no-crash condition, including defects that had survived extensive testing. This gives the workflow two roles: uncover concrete counterexamples when a specification fails, and establish a stronger bounded guarantee once the defect is corrected. A failed proof is not by itself proof of a vulnerability; it may indicate that the theorem is false, the model is inadequate or the proof search has simply failed.

The distinction between author and verifier is equally important. An AI model can generate reams of plausible but invalid reasoning; Rocq is designed to reject derivations it cannot check. The trusted base still includes the representation of RISC-V instructions, modeled system calls, definitions of permissible behaviour and the proof checker itself. A perfectly valid proof about the wrong specification would remain perfectly useless for the intended security claim.

The economic change hiding behind the mathematics

For years, formal methods have been concentrated where failures are unusually expensive: security-sensitive components, aerospace systems and specialized verified software. Their value was not in doubt; the cost of experts writing and maintaining comprehensive proofs was. Theorem and Anthropic's experiment asks whether machines can absorb much of that painstaking work while humans define what matters and verify the modeling choices.[1]

There is a practical reason to watch this closely. Today, developers often treat a test suite as a record of examples that worked. A proof-carrying release process could attach a more precise contract to selected compiled components: this exact artifact, under these assumptions, satisfies this specific property. That is a different kind of supply-chain evidence. It might also become fragile when compiler versions, system interfaces or dependencies change, unless proof regeneration becomes routine.

The project publishes a subset of its proofs and associated semantics for scrutiny. That matters more than any triumphant headline: independently checking them, reproducing the target builds and identifying the assumptions still excluded will determine how much of the approach can migrate into ordinary engineering.

The most consequential question is no longer whether AI can write more code. It is whether AI can make a stronger promise about what that code will never do—and tell us, with mathematical precision, when the promise stops.[1]

Follow the evidence

Sources & further reading

  1. OSS-Fuzz: continuous fuzzing for open-source software Google Open Source Security Team · Accessed 24 Oct 2026