feat: I(1), the rank-one transfer step (#107) - #161
Merged
Conversation
Instantiates the relative joining at `q = lowerFactorMap 1`, with the relabeling compatibility the recursion needs and the transfer clause kept explicit. `Graphon/RelRankOneTransfer.lean`: * `lowerFactorMap_one_relabel` — the rank-one degeneracy. `LowerIndex 1` holds exactly the indices anchored at `∅`, whose events are `invariantAlgebra`- measurable, so the rank-one factor map is relabeling invariant ON THE NOSE: not merely equivariant, no null sets, no transport of the factor space. The equivariance square of `RelLowerFactor` degenerates at rank one. * `map_prodMap_relabel_rankOneCoupling` — hence every finitely supported sortwise relabeling of the structure coordinate preserves the coupling. At higher rank this fails and the statement must move the factor space by `lowerFactorSpaceEquiv` on the other side. * `exists_rankOneUniformCoupling` — I(1), six clauses. The conditional- independence clause cannot be dropped: marginals plus the resolution identity `lowerFactorMap 1 X = f ξ` still permit a latent encoding arbitrary information about what rank one leaves unresolved. * `condIndepFun_comp_fst_snd_rankOne` — the transfer clause, explicit. `Graphon/ForMathlib/RelativeFactorCoupling.lean` gains the two generic statements I(1) drives: * `map_prodMap_relativeFactorCoupling` — a measure-preserving `T` with `q ∘ T = q` gives `Prod.map T id` preserving the joining; * `condIndepFun_comp_fst_snd_relativeFactorCoupling` — the transfer clause in general form. Audit 239 → 246 (both scripts). Build clean, census + axiom audit OK.
2 tasks
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 base of the rank recursion: the relative joining of #159 instantiated at
q = lowerFactorMap 1, with relabeling compatibility and the transfer clause kept explicit. #107 remains open.Rank one is invariant, not merely equivariant
lowerFactorMap_one_relabelis what makes this step easy, and it is worth stating why.LowerIndex 1consists of the indices anchored at a set of cardinality< 1, i.e. at∅, and a basis event anchored at∅is measurable forfixingAlgebra ∅ = invariantAlgebra. So it is literally fixed by every finitely supported sortwise relabeling — not fixed modulo the law. Henceas functions, and the equivariance square of
Graphon.RelLowerFactordegenerates at rank one: no transport of the factor space, and the conditioning factor of the coupling does not move withσ.That yields
map_prodMap_relabel_rankOneCoupling— every finitely supported sortwise relabeling of the structure coordinate preserves the coupling, because it acts inside the fibres of the disintegration and so never disturbs the outer integration.This is exactly what fails at higher rank. There the factor map is only equivariant, and the corresponding statement will have to move the factor space by
lowerFactorSpaceEquivon the other side. The module header records this rather than leaving the rank-one convenience looking general.I(1)
exists_rankOneUniformCouplingbundles six clauses:fmeasurable; the coupling is a probability measure; structure marginal isM.law; latent marginal isuniform01; the latent resolves the factor,lowerFactorMap 1 X = f ξa.s.; and the structure and latent are conditionally independent given that factor.The last clause is the one that cannot be dropped, and the reason is the one you gave: the marginals and the resolution identity together still permit a latent that encodes arbitrary further information about whatever rank one leaves unresolved. It is stated in its strongest form — over the whole structure coordinate — so any particular unresolved reading follows by measurable composition.
condIndepFun_comp_fst_snd_rankOnerecords that transfer explicitly rather than leaving it implicit in the strong clause.No σ-algebra equality between latent and factor is claimed. The latent may carry strictly more than
lowerFactorMap 1reads; conditional independence is precisely the statement that the surplus is irrelevant to the structure.Two additions to the generic API
Both are driven by I(1) rather than added speculatively, per the #160 rule:
map_prodMap_relativeFactorCoupling— ifTpreservesμandq ∘ T = q, thenProd.map T idpreserves the joining. Proved through uniqueness of conditional distributions:condDistrib T q μ =ᵐ condDistrib id q μbecauseq ∘ T = qandTis measure preserving, soTleaves each fibre invariant.condIndepFun_comp_fst_snd_relativeFactorCoupling— the transfer clause in general form; one line from Mathlib'sCondIndepFun.comp, but named because it is the property downstream consumers actually need to cite.Both remain Provisional in #160 — one consumer each so far. The later rank transition is the second consumer that would harden them.
Gates
lake build— 0 errors.scripts/check_census_and_axioms.py— census and axiom audit OK; the seven new declarations use onlypropext,Classical.choice,Quot.sound.sorry/admit.