Skip to content

refactor: one file per guarantee under laws/ and proofs/ - #87

Merged
ngngardner merged 2 commits into
mainfrom
refactor/split-laws
Nov 1, 2026
Merged

ngngardner merged 2 commits into
mainfrom
refactor/split-laws

Conversation

@ngngardner

Copy link
Copy Markdown
Contributor

Summary

  • One file per guarantee. Each guarantee is laws/<Name>.bend (its prose, then its quantified laws), proved by proofs/<Name>.bend. LAWS.bend and PROOF.bend only import them. That's 40 law files, 5 shared definition files and 28 lemma files, replacing the 53k-line PROOF.bend.
  • No requirement IDs.
    • SPEC.md's definitions now head LAWS.bend: well-formed, same, and where the number rule is written out.
    • The fixed-decimal notes head laws/FixedWritesValidNumbers.bend.
    • The table itself is kept as docs/SPEC.md, since the RFCs cite its IDs.
  • Trust boundary.
    • Dropped: the checker's soundness and the gate runner, which hold for every Bend project.
    • F32.read is now trusted in a comment on as_f32, and the cursor's memory in one on src/pull.bend.
  • Helpers: 16 proof helpers that no proof reached are gone.
  • bolt.bend drops 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
  • Lint with bolt from #257: 17 errors, 2 warnings. The errors are the S005 stale # noqa in scale/ and bench/, which main also shows under that bolt (main has a C011 for def trace() on top).
  • Bump the bolt pin after the release, then nix flake check

🤖 Generated with Claude Code

SPEC.md, LAWS.bend and a 53k-line PROOF.bend 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.

Definitions the laws share are under laws/defs/, lemmas several proofs use
under proofs/lemmas/, each named for what it holds. Requirement IDs are
gone: a file's name is its guarantee's. SPEC.md's definitions (well-formed,
same, the number rule) head LAWS.bend, the fixed-decimal notes head
laws/FixedWritesValidNumbers.bend, and the table itself is kept as
docs/SPEC.md, which the RFCs' IDs point into. 16 proof helpers no proof
reached are gone.

Of the trust boundary, the checker's soundness and the gate runner hold for
every Bend project and are dropped; F32.read is trusted on as_f32, and the
cursor's memory on src/pull.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
ngngardner marked this pull request as ready for review November 1, 2026 03:39
@ngngardner
ngngardner enabled auto-merge (squash) November 1, 2026 03:39
@ngngardner
ngngardner merged commit 9620e49 into main Nov 1, 2026
4 checks passed
@ngngardner
ngngardner deleted the refactor/split-laws branch November 1, 2026 03:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant