Repository navigation
refactor: one file per guarantee under laws/ and proofs/ - #86
Merged
Merged
Conversation
SPEC.md, a 3.4k-line LAWS.bend, a 6.4k-line PROOF.bend and fifteen lemma modules under proof/ (28k lines, importing LAWS.bend back) had to be read side by side, matched up by ID tags. Each guarantee is now laws/<Name>.bend, its prose on top and its quantified laws under it, proved by proofs/<Name>.bend. LAWS.bend and PROOF.bend only import them. The proof/ modules are folded in: their lemmas are placed like any other proof helper, by the files that use them. Definitions the laws share are under laws/defs/, lemmas several proofs use under proofs/lemmas/, each named for what it holds. Copies of one lemma in several modules are kept once; where two modules gave different lemmas one name, the later gets its module's topic as a prefix (ras.add_zero, huf.fl). 8 proof helpers no proof reached are gone. Requirement IDs are gone: a file's name is its guarantee's. SPEC.md's definitions (well formed, sample) and section scopes head LAWS.bend, and the table itself is kept as docs/SPEC.md, which the RFCs' IDs point into. Of the trust boundary, the checker's soundness and the gate runner hold for every Bend project and are dropped. Reading other encoders' DEFLATE streams is trusted on src/inflate.bend, reading other encoders' JPEGs on src/jpeg.bend's header, the T.871 colour conversion on Jpeg.rgb, and the JPEG round trip's error bound on encode_jpeg in main.bend. This needs a bolt that reads law and proof files by what LAWS.bend and PROOF.bend import, and no longer runs `trace`; bolt.bend drops `trace`. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
bolt v1.22.0 reads law and proof files by what LAWS.bend and PROOF.bend import, which this layout needs. Rules changed since the old pin, so some noqa comments no longer silence anything (S005); they are removed. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ngngardner
marked this pull request as ready for review
November 1, 2026 03:39
ngngardner
enabled auto-merge (squash)
November 1, 2026 03:39
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
laws/<Name>.bend(its prose, then its quantified laws), proved byproofs/<Name>.bend.LAWS.bendandPROOF.bendonly import them. That's 22 law files, 6 shared definition files and 16 lemma files, replacing the 3.4k-line LAWS.bend, the 6.4k-line PROOF.bend and the fifteenproof/wp*.bendlemma modules.ras.add_zero,huf.fl).LAWS.bend.png_walk_anc, which two rows cited, is its own guarantee:laws/PngAncillaryChunksIgnored.bend.docs/SPEC.md, since the RFCs cite its IDs.src/inflate.bend's header, other encoders' JPEGs onsrc/jpeg.bend's header, the T.871 conversion onJpeg.rgb, and the JPEG round trip's within-8 bound onencode_jpeginmain.bend.def trace().Depends on
Emerging-Patterns/bolt#257. The pinned bolt reads law files by name only and still runs
trace. This PR stays a draft until that release lands and the pin is bumped here.Test plan
bend PROOF.bend→ALL PROOFS CHECK(about 50 s, same as main)L001coverage warnings onmain.bend, which main also shows). Main has 1 error under that bolt, the C011 fordef trace().nix flake check🤖 Generated with Claude Code