⚜ PRINCIPIA ORTHOGONA · Vol VI · Roots · WP-91 ← WP-89 · WP-90 · The Metric on the Restricted Fibre  ·  WP-92 · Not a Cusp: Percolation's Own Fold →
#Machine Learning
Vol VI · Roots · WP-91 · Received 2026-09-01 · Open

A Theorem Twenty-Seven Characters Long

The registry publishes collatz_converges with a proved badge. Its body invokes an axiom that states the Collatz conjecture. It is counted twice, from two files distinguishable only by case, neither of which compiles.
Computed2026-09-01
tools/axiom_dependence.py
Provenanceinternal audit · #Machine Learning
opened by a git case-collision
Claim typedefect report
with corpus-wide measurement
Scope10 of 11 declared roots
264 tracked .lean files
Cloning sluing/neuro on macOS produced a warning about colliding paths. Following it led to two tracked files whose names differ only in case, then to the theorem they both contain, then to the published registry entry for that theorem. The registry says collatz_converges is proved. The proof is hasStructuredCycle_collatz X — twenty-seven characters invoking an axiom declared eleven lines above it, whose statement is the Collatz conjecture. The file's own comment says so.
DEFECT published claim, reproducible MEASURED produced by the instrument READ read from source, quoted OPEN not settled here
§1

The pair, and which is canonical READ

Three tracked names, two contents:

pathbytesaxiomstheoremsdocumented
DiscreteDM3.lean2,73244no header, no comments on the axioms
discreteDm3.lean6,51144module header naming the axioms as the conjecture
discretedm3.lean6,51144byte-identical to the above

APFS is case-insensitive, so a macOS checkout holds one of these and reports the survivor as modified against the index entry for its sibling. Committing that apparent modification overwrites one tracked file with another's content. That is the hazard; it is not the finding.

The canonical file is discreteDm3.lean

Not because it is larger, and not on any sorry count — neither file contains a sorry. Both declare four axioms and four theorems, and the mathematics is the same. The difference is entirely in what each one tells the reader.

discreteDm3.lean carries a module header stating that its three analytic axioms are the Collatz conjecture, marks hasStructuredCycle_collatz as "the Collatz conjecture itself", annotates collatz_converges as "as strong as the axiom it rests on", and proves the even branch of M_collatz_iff_E_collatz before isolating the odd branch as a named private axiom with its reason.

DiscreteDM3.lean is the same file with the header deleted, the annotations deleted, and M_collatz_iff_E_collatz demoted from a partially proved theorem to a bare axiom. It is a caveat-stripping regression, and it is the copy the published registry links to.

§2

What the registry says DEFECT

Read from the tracked pages on 2026-09-01:

AXLE/theorem-registry.html <div class="thm" data-st="proved"><span class="b b-proved">✓</span>collatz_converges</div>
geometry/neuro/SBM/1080.html <tr data-tier="free" … ><span class="badge bf" title="Sorry-free in source — proof written, no unproved step">S</span> … collatz_converges … DiscreteDM3.lean ↗

Against the source:

axiom hasStructuredCycle_collatz : ∀ X, ∃ n, collatzStep_dm3^[n] X = attractor theorem collatz_converges (X : CollatzState) (_hX : isSimplyConnected X) : ∃ n : ℕ, collatzStep_dm3^[n] X = attractor := hasStructuredCycle_collatz X

The badge tooltip — "proof written, no unproved step" — is false for this entry. The unproved step is the axiom, and the tiering treats an axiom as not-a-step. Both statements are individually defensible and their conjunction publishes the Collatz conjecture as a machine-verified theorem. This is the failure mode the corpus already names in CLAUDE.md: sorry-free is not proved.

And it is counted twice

MEASURED AXLE/directory.html carries collatz_converges at entry 357 (from DiscreteDM3.lean) and again at entry 773 (from lean/discreteDm3.lean); 1080.html lists it at 356 and 773. The case-collision is therefore not only a git hazard — it inflates a published declaration count by duplicating the same theorem under two spellings. The same applies to entropy_monotone and M_collatz_iff_E_collatz.

§3

Neither file compiles MEASURED

Both import Mathlib.Init.Function. Checked against the v4.32.0 build at geometry/.lake/packages/mathlib on 2026-09-01:

importpresent in the v4.32.0 build
Mathlib.Init.FunctionABSENT
Mathlib.Data.Nat.Basicpresent
Mathlib.Data.Nat.Factorization.Basicpresent

So the "sorry-free in source" badge was determined by parsing the text, not by building it. tools/axiom_gate.py — the real gate, which asks the kernel via #print axioms — cannot see either file, because a file that does not elaborate has no axioms to report. The declarations least able to be checked are the ones the gate is structurally blind to, and they are scored by the instrument that cannot tell an axiom from a proof.

§4

How much of the corpus is like this MEASURED

Measured 2026-09-01 by tools/axiom_dependence.py over the roots declared in tools/corpus_roots.txt, 10 of 11 readable (io-clone was not reachable), 264 tracked .lean files:

figurecount
axiom declarations61
theorems / lemmas whose body names a locally declared axiom27
…of which the body is a pass-through (≤ 80 non-space chars)10

The ten pass-throughs, shortest first:

charsdeclarationrests onfile
25entropy_monotonemeanContraction_collatzAXLE/discreteDm3.lean
25entropy_monotonemeanContraction_collatzAXLE/discretedm3.lean
27collatz_convergeshasStructuredCycle_collatzAXLE/discreteDm3.lean
27collatz_convergeshasStructuredCycle_collatzAXLE/discretedm3.lean
47critDim_3nBonacciRingSize_3GTCT/dm3CriticalityPrinciple_extended.lean
47critDim_4nBonacciRingSize_4GTCT/dm3CriticalityPrinciple_extended.lean
64entropic_cost_minimal_at_rank3nBonacciRingSizeGTCT/dm3CriticalityPrinciple_extended.lean
67igcp_3dm3_criticality_principleAXLE/CatGT/Criticality_Principle.lean
69tribonacci_3_criticaldm3_criticality_principle_instanceGTCT/dm3CriticalityPrinciple_extended.lean
77superdm3_criticality_principleAXLE/CatGT/Criticality_Principle.lean

The seventeen longer ones are questions, not defects — a long body naming an axiom may contain real work, and several plainly do. They are listed in the tool's output and should be read once each, not swept.

The instrument cannot see the file the registry links to

Run on macOS, the scan finds discreteDm3.lean and discretedm3.lean but not DiscreteDM3.lean, because the case-collision means only one is in the working tree. The registry's link points at the one the scan cannot open. Any count of this population taken on a Mac is short by the hidden siblings; see Finding 3 in docs/leanscan-2026-09-01.md.

§5

What is not claimed

§6

Repairs, in order

  1. Retier the registry. "Sorry-free in source" needs a fourth state for rests on a local axiom. Ten declarations are pass-throughs today; the tooltip "proof written, no unproved step" must not apply to them. This is the change that touches published counts.
  2. Retire DiscreteDM3.lean in favour of discreteDm3.lean, and delete discretedm3.lean as a byte-identical third spelling. The retired copy goes to docs/ml-evidence/ — it is the evidence that the caveats were removed somewhere between the two, which is a finding about machine-assisted production and not junk.
  3. Repoint the registry link from DiscreteDM3.lean to the canonical file, and collapse the duplicate entries (356/357 and 773).
  4. Fix or retire the imports. Mathlib.Init.Function no longer exists; until it is dropped, neither file can be gated and no badge on either is evidence of anything a machine checked.
  5. Add the case-collision check to CI. One line — compare git ls-files against its case-folded set — would have caught this before it reached a published count. OPEN
Falsifiers

§1 fails if the two files differ in some way this page missed — both are short and are quoted from directly. §2 fails if the registry markup has changed since 2026-09-01; the two lines are quoted verbatim and are greppable. §3 fails if Mathlib.Init.Function is present under some other path in the build. §4 fails if the scan's regex misattributes a body; the ten flagged rows are short enough to read in full, which is the point of sorting by length.

References
  1. tools/axiom_dependence.py — the instrument. Source scan; run 2026-09-01.
  2. tools/axiom_gate.py — the kernel gate, via #print axioms. Authoritative where a file elaborates.
  3. docs/leanscan-2026-09-01.md, Finding 3 — the case-collision and what it does to any count taken on macOS.
  4. tools/corpus_roots.txt — the declared root set these figures are taken over.
  5. WP-80 · The Theorem and the Reader — the position that a count of declarations must exclude the author and the production pipeline. This page is an instance: the badge counted a reader who was never there.