feat: shared successor contract, interface only (#196) - #202
Merged
Conversation
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.
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.
The shared successor contract for #196 — interface only, no construction, no route implementation.
The witness
Exact law-level truncation is the essential observable. A theorem returning merely
Nonempty (M.RankRepresentation (n + 1))could ignoreCentirely 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
RankRepresentationalready states.AustinSuccessorandKallenbergSuccessorare the same proposition by construction (austinSuccessor_eq_kallenbergSuccessorisrfl), so whichever route lands first discharges the induction step while the other stands as an independent proof of the same statement. Their witnesses will not be canonically equal and nothing here says otherwise.RankSuccessorexposes no pooled carrier, so no final-output regression here could observe whether a proof used boundary-crossing permutations; such a check would be vacuous. That property is formalized by the pooled gate'sPooledRankExtension.map_restrict_embedding(feat: pooled-latent gate stage 3 — joint restriction, law identity, and the four consequences (#195) #201), and each route's intermediate construction is required to consume it — recorded as a requirement on R4 successor route A (Austin): polling → enriched object → kernel → noise outsourcing (#107) #197 and R4 successor route B (Kallenberg): direct correlated subset latents — independent check (#107) #198 that the dependency appear in the proof term rather than in prose.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, andRankRepresentation.map_fstpins those toM.law. The base case imposes nothing beyond the representation axioms.The two adversarial regressions (bipartite rank
1 → 2, i.i.d. edges rank2 → 3) land as their own PRs in a route-independent module, keeping this file interface-only and free of their heavier imports. Both must constructCindependently rather than as a projection ofD, so that truncation compares two separately described couplings instead of holding tautologically.Bookkeeping
Graphon/RelRankSuccessorContract.lean; import and doc bullet inGraphon.lean.scripts/axiom_audit.leanand the intended-set literal inscripts/check_census_and_axioms.py.lake buildclean (3404 jobs), census + axiom audit pass, zero sorries.