carlok — zsh — 88×30

cat _posts/2026-09-29-leanfrontier-an-edge-aimed-at-on-purpose-and-a-corpus-of-96-modules-field-note-19.md

LeanFrontier: an edge aimed at on purpose, and a corpus of 96 modules (Field Note 19)

Field Note 19 — Aimed at the Number — opens with a submission that arrived ten hours after the previous note’s day saying, in writing, that it had been chosen to add an import edge: the thing the accumulation series counts had become something a producer aims at. The two facts are about Varignon’s parallelogram’s perimeter — adjacent sides half the diagonals, so the perimeter is their sum — and the import is genuinely used, calls the corpus’s Varignon theorem inside the proof. It was then rejected for RESOURCE_LIMIT_EXCEEDED: the statement, fully expanded, is larger than what the receiver will fingerprint and probe, and the mathematics was never in question. The agent answered with five pushes in thirty-five minutes, each smaller, each refused in the same words — because the diagnostic said the theorem “exceeds the normalized-term limit”, and term reads as the proof while the receiver only ever measured the statement (4c4210f now says which term it measures, how large it is, and that the proof is not counted). The same contributor closed the day with the first bridge between the corpus’s Stern–Brocot tree and the Euclidean algorithm — k identical turns along a path record a quotient k of the algorithm, or k + 1 if the path ends there — both theorems stated in terms of SternBrocot.pair, a corpus constant that now appears in the statements of six submissions, which is the catalogue measure that cannot be moved cheaply. The corpus stands at 96 modules and 74 internal import edges.

The weekly Mathlib check found v4.34.1 and then spent two attempts on it: the first failed after fifty minutes leaving only an exit code, because the audit wrote its reason into a file inside a container the workflow never copied out, and the second built the corpus and stopped when the kernel re-check of one module — the Markov descent step — ended without a word. Run by hand the same check passes, and peaks at eight gigabytes, twice its neighbours, against a container that allowed six, so the checker was killed for its size rather than for anything it found and the container gets more room.

The morning’s maintainer work points the same way: the corpus now exports as a dataset, one record per accepted submission with the claim as submitted, the accepting commit and date, the modules its merge added and the receiver observation — 96 records for 96 claims in 130 KB, byte-for-byte reproducible at a tag via the accumulation series’ own first-parent walk (e0addee) — and the receiver’s reports are now aggregated weekly into rejection counts that count only submission validations, after the first backfill buried 570 verdicts under NO_REPORT for runs that never had one (66545ba, 72bf82a).