Skip to content

fix(model): MN-02 states what the shipped package does - #17

Open
afflom wants to merge 2 commits into
mainfrom
fix/mn-02-recursion-claim
Open

afflom wants to merge 2 commits into
mainfrom
fix/mn-02-recursion-claim

Conversation

@afflom

@afflom afflom commented Oct 15, 2026

Copy link
Copy Markdown
Member

Item M1 of the completion plan #3, closes #4.

The false claim. MN-02 said the root's runtime closure contains no recursion. The source has none, but the committed package renders each list fold as a function that calls itself. This is UOR-Foundation/LexLean#105, and docs/evidence/rendering.md already describes the fold drivers as recursive. 15 generated functions of dist/packages/rust-std/mnist/src/lib.rs call themselves.

The change.

  • MN-02 (register, scenario, CONFORMANCE.md, and the README sentence that repeated it) now states what holds: exactly the allocation and overflow effects; no recursion in the source; a stack depth bounded by the list lengths the 784-byte precondition fixes.
  • conformance_mn_02 keeps its eligibility checks and adds the fact: it finds the generated functions that call themselves and fails when there are none. That failure is the signal to restore the stronger claim once LexLean renders folds as loops (LexLean#105, item L0.1 of [0.5.0] Completion plan: optimal compilation for every production root LexLean#106).

Falsified. A package whose generated functions no longer call themselves makes the test fail with no generated function of the package calls itself: restore MN-02's claim of no recursion; the committed package restored passes. Recorded in docs/evidence/planted-defects.md.

Checked locally, with Rust 1.97.0 (1.97.1 was not downloadable in this session) and LexLean built at the pinned 54f2ec41: conformance_mn_01, _02, _03, _06 pass; cargo fmt --check, cargo clippy --workspace --all-targets -D warnings and xtask check-model pass. The acceptance jobs fail on main too (prismpm.lock is absent until #11); the model job is the gate this change must pass.

🤖 Generated with Claude Code

https://claude.ai/code/session_013Eo1UJoRXDrVSdkPw8UC35


Generated by Claude Code

MN-02 claimed the root's runtime closure contains no recursion. The source
has none, but the package renders each list fold as a function that calls
itself (UOR-Foundation/LexLean#105; docs/evidence/rendering.md already says
so), so the claim was false of the shipped crate. MN-02 now states what
holds: the admitted effects, and a stack depth bounded by the list lengths
the 784-byte precondition fixes.

conformance_mn_02 ties the statement to the crate: it finds the generated
functions that call themselves and fails when there are none, which is the
signal to restore the stronger claim once LexLean renders folds as loops.
The README sentence that repeated the claim says the same.

Refs #4, #3.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Eo1UJoRXDrVSdkPw8UC35
A package whose generated functions no longer call themselves makes
conformance_mn_02 fail with its restore-the-claim diagnostic; the committed
package restored passes and names its 15 self-calling functions.

Refs #4.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013Eo1UJoRXDrVSdkPw8UC35
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.

Restate MN-02 as what holds of the shipped crate

2 participants