Skip to content

feat: shared successor contract, interface only (#196) - #202

Merged
cameronfreer merged 2 commits into
masterfrom
r4-successor-contract
Aug 17, 2026
Merged

feat: shared successor contract, interface only (#196)#202
cameronfreer merged 2 commits into
masterfrom
r4-successor-contract

Conversation

@cameronfreer

Copy link
Copy Markdown
Owner

The shared successor contract for #196interface only, no construction, no route implementation.

The witness

structure RankSuccessor (C : M.RankRepresentation n) where
  next : M.RankRepresentation (n + 1)
  truncation : next.P.map (Prod.map id (rankLatentProjection (Nat.le_succ n))) = C.P

Exact law-level truncation is the essential observable. A theorem returning merely Nonempty (M.RankRepresentation (n + 1)) could ignore C entirely and produce an unrelated rank-(n+1) representation — it would not characterize a successor construction at all, which is the same underdetermination that sank the earlier shell attempt. The compatibility is therefore a field, exactly and not almost-everywhere.

What it deliberately omits

The statements are Prop-valued definitions rather than unproved theorems, so the file is sorry-free while stating targets it does not prove.

Regression included

truncation_zero — the truncation equation is automatic at rank zero: the rank-zero latent index type is empty, so the cube is a single point, both sides are determined by their structure marginals, and RankRepresentation.map_fst pins those to M.law. The base case imposes nothing beyond the representation axioms.

The two adversarial regressions (bipartite rank 1 → 2, i.i.d. edges rank 2 → 3) land as their own PRs in a route-independent module, keeping this file interface-only and free of their heavier imports. Both must construct C independently rather than as a projection of D, so that truncation compares two separately described couplings instead of holding tautologically.

Bookkeeping

  • New module Graphon/RelRankSuccessorContract.lean; import and doc bullet in Graphon.lean.
  • Audit 407 → 409 in both scripts/axiom_audit.lean and the intended-set literal in scripts/check_census_and_axioms.py.
  • Gates: lake build clean (3404 jobs), census + axiom audit pass, zero sorries.

RankSuccessor C carries the next representation plus EXACT truncation
compatibility:

  next.P.map (Prod.map id (rankLatentProjection (Nat.le_succ n))) = C.P

Without that observable a theorem returning merely
Nonempty (RankRepresentation (n + 1)) could ignore C entirely and would
not characterize a successor construction — the same underdetermination
that sank the earlier shell attempt.

No independence field beyond RankRepresentation's own; no asserted
equality between the Austin and Kallenberg outputs. AustinSuccessor and
KallenbergSuccessor are the same proposition by construction, so
whichever lands first discharges the induction and the other remains an
independent proof of the same statement. No construction is performed.

First shared regression: at rank zero the latent cube is a single point,
so the truncation observable degenerates to the structure marginal that
RankRepresentation already pins.
truncation_zero now proves the actual contract conclusion: for ANY
rank-zero and rank-one representations of the same law the truncation
equation holds, since the rank-zero latent cube is a single point and
both sides are therefore determined by their structure marginals. The
previous version only recorded the subsingleton fact, which is a
premise rather than a regression.

Removed RankSuccessor.next_map_fst — its docstring claimed it followed
from truncation while the proof just invoked next.map_fst, and it had no
consumer.

Header records the mixed-pool decision: RankSuccessor exposes no pool,
so no final-output regression here could observe boundary-crossing
permutations. That property is formalized by the pooled gate's
map_restrict_embedding for every embedding, which each route's
intermediate construction is required to consume.
@cameronfreer
cameronfreer merged commit 3c9b5b7 into master Aug 17, 2026
2 checks passed
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