A formal proof has more than one trust boundary.
Thomas Hales writes that Lean proof scripts are parsed and elaborated before the kernel checks the resulting proof. He argues that kernel acceptance must be paired with a human audit of statement fidelity. The reviewer has to confirm that the formal theorem and its definitions match the mathematical claim.[1]
That distinction matters more when an automated system writes millions of lines. More generated proof text can lower authoring cost. It does not remove the need to read the exact theorem, pin the software, audit assumptions, and save a reproducible check.
The kernel answers whether one encoded proof fits one encoded statement. It does not choose the statement for you.
Read the assumptions, not only the tactics.
Lean tracks axiom dependencies transitively. Its reference manual documents #print axioms for displaying the axioms used by a definition. The same manual warns that sorryAx can prove anything and is not intended for finished proofs.[2]
The report belongs beside the theorem. A proof that depends on classical choice is a different artifact from one that still contains sorryAx. A proof by native evaluation also expands the trusted code because the generated axiom depends on the compiler, not only the kernel.
A successful build is not the strongest check.
Lean's August soundness postmortem says lake build does not protect against adversarial proofs that misuse extensions or corrupt memory. It recommends exported proofs, comparator, and external checkers for hostile or high-consequence inputs. The post treats AI-generated proofs as a possible source of adversarial proof files.[3]
The postmortem also records kernel and runtime defects that had accepted proofs of False. Lean 4.33.1 shipped fixes for the reported issues. The project planned broader rechecking commands for a later release. The current latest GitHub release is 4.34.1, so the planned 4.35 command should not be written into today's acceptance script as if it already exists.[4]
Use a four-part acceptance record.
- Quote the exact theorem and explain each project-specific definition in plain language.
- Save the transitive axiom report. Reject unfinished assumptions such as
sorryAx. - Pin the Lean, library, and dependency revisions used to build the project.
- Export and recheck with an independent route that fits the threat model. Save the command and output.
None of these replaces mathematical review. Together they make the review boundary visible. A green editor gutter does not.