Skip to content

ABI Layer 3: div/mod completeness of the block partition — closes the Layer-2 residual#42

Merged
hyperpolymath merged 1 commit into
mainfrom
claude/new-session-znxgm7
Jun 28, 2026
Merged

ABI Layer 3: div/mod completeness of the block partition — closes the Layer-2 residual#42
hyperpolymath merged 1 commit into
mainfrom
claude/new-session-znxgm7

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Summary

Layer 3 (second, deeper invariant): proves sumNat (blockCounts n k) = n for all n and all k>0 — every item is covered exactly once. This discharges the exact div/mod arithmetic residual the Layer-2 Partition tiling proof explicitly left open, via the Euclidean division theorem plus a self-contained count of remainder slots.

New module Chapeliser.ABI.Invariants (imports the Layer-2 Partition model; uses divNatNZ/modNatNZ because Prelude div/mod don't reduce at the type level). Sound+complete Dec, corollaries tying back to PartitionComplete, positive + non-vacuity controls.

Testing

Idris2 0.7.0 --build → exit 0, zero warnings (6 modules). Adversarial: false variants (=9, =11) rejected. build/ removed. No believe_me/postulate/sorry.

🤖 Generated with Claude Code

https://claude.ai/code/session_01A6PSzJWpRxtzGDjUCEh7Mx


Generated by Claude Code

Adds Chapeliser.ABI.Invariants, a new machine-checked theorem deeper than
and distinct from the Layer-2 Partition tiling proof. Partition.idr proved
the block partition is a gapless, non-overlapping tiling for all n,k but
explicitly left open the arithmetic residual `sumNat (perItemCounts n k) = n`
("the only div/mod obligation"). This module discharges exactly that.

blockCountsComplete : (n,k') -> sumNat (blockCounts n k') = n proves every
item is covered exactly once, for ALL n and all k>0, via the Euclidean
division theorem (contrib Data.Nat.Division) plus a self-contained count of
remainder slots. Counts are expressed with the public-export divNatNZ/modNatNZ
(the reducing form of Prelude div/mod on a positive divisor) so the proof and
its concrete controls reduce at the type level.

Includes: a sound+complete Dec (decCoversExactly), positive controls
(covers10over3, covers12over4 by Refl + via the general theorem), and
non-vacuity/negative controls (notCovers10as9, dec10over3as9No,
remainderCountMatters). Genuine proof: no believe_me/postulate/assert_total/
sorry/admitted. Builds clean (0 warnings); a deliberately false variant is
rejected by the type checker.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6PSzJWpRxtzGDjUCEh7Mx
@hyperpolymath hyperpolymath marked this pull request as ready for review June 28, 2026 05:36
@hyperpolymath hyperpolymath merged commit 63690d5 into main Jun 28, 2026
30 of 32 checks passed
@hyperpolymath hyperpolymath deleted the claude/new-session-znxgm7 branch June 28, 2026 05:37
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.

2 participants