Skip to content

feat: the structural lower-rank factor (#107 converse piece 3) - #157

Merged
cameronfreer merged 4 commits into
masterfrom
r4-lower-factor
Jul 31, 2026
Merged

feat: the structural lower-rank factor (#107 converse piece 3)#157
cameronfreer merged 4 commits into
masterfrom
r4-lower-factor

Conversation

@cameronfreer

@cameronfreer cameronfreer commented Jul 31, 2026

Copy link
Copy Markdown
Owner

The structural lower-rank factor for the rank induction. No coupling construction, no augmented probability space, no ξ_∅ — those belong to the next layer, which should consume a settled factor API rather than be mixed with it.

Graphon/RelLowerFactor.lean, built on the coherent basis:

  • LowerIndex n / LowerFactorSpace n / lowerFactorMap n — the basis coordinates whose anchor has cardinality < n, as a standard Borel factor. Everything is stated about the factor, not about latents: a latent normally carries randomness beyond the factor it represents (already 1_{U < p} generates strictly less than U), so σ(latents) is typically strictly larger.
  • comap_lowerFactorMap_le — the pullback sits inside lowerRankAlgebra n.
  • lowerFactorProjection (rank nesting) and lowerToFactorProjection (single-support restriction), with the compatibilities against lowerFactorMap / factorMap and the cocycle law all definitional.
  • exists_comap_lowerFactorMap_ae_eq — the eventwise converse. Proved support by support through lowerToFactorProjection and exists_comap_factorMap_ae_eq, with the containments joined inside eventuallyMeasurableSpace. The completion is the closure device, so no family of a.e. witnesses is ever chosen simultaneously through the iSup.
  • lowerIndexEquiv, comap_relabel_comap_lowerFactorMapFinSuppPerm equivariance, the factor-level counterpart of RelStructure.comap_relabel_lowerRankAlgebra.
  • lowerFactorProjection_lowerFactorSpaceEquiv — the nesting/equivariance square, definitional up to proof irrelevance in the rank bound: without it the relabeling action would not descend along the nesting maps. Identity and multiplication laws for lowerIndexEquiv / lowerFactorSpaceEquiv come as honest equalities of equivalences, since these are automorphisms of one fixed type unlike basisIndexEquiv.
  • comap_lowerFactorMap_zero — rank zero is on the nose, not modulo the law.
  • exists_comap_lowerFactorMap_one_ae_eq — the rank-one base, rewritten through lowerRankAlgebra_one, on the original law.

On raw equality

The generation API is exactly comap (lowerFactorMap n) inferInstance ≤ lowerRankAlgebra n plus the eventwise mod-null converse. No raw equality is asserted or supplied by this construction; the available converse is eventwise modulo M.law. Nothing here shows the two σ-algebras are unequal — the point is that this argument does not produce an equality, and phrasing the converse as an equality "modulo null sets" would commit to a trim/completion identification that is not available.

Gates: lake build clean (3362 jobs), zero sorries, axiom audit 210 → 227 (four commits on the branch), documentation drift checks pass.

#107 remains open.

Steps 2–3 of the lower-factor PR: the definitions, instances, and the measurability
half of the generation statement.

* `LowerIndex n = {i // (B.anchor i).card < n}`, countable, and **empty at `n = 0`**;
* `LowerFactorSpace n = LowerIndex n → Bool`, standard Borel since the index is
  countable, and a subsingleton at `n = 0`;
* `lowerFactorMap n X i = decide (X ∈ B.event i.1)`;
* `measurable_lowerFactorMap` for `lowerRankAlgebra n`, each coordinate being the
  indicator of an event whose anchor has rank `< n`, and `measurable_lowerFactorMap'`
  for the ambient σ-algebra;
* `comap_lowerFactorMap_le : comap (lowerFactorMap n) inferInstance ≤ lowerRankAlgebra n`
  — one half of the generation statement. **No raw equality**; the converse is eventwise
  and modulo the law, and comes later in this PR.

The module docstring records why the factor, and not the latents, carries the
conditioning: a latent normally holds randomness beyond the factor it represents
(`1_{U < p}` already generates strictly less than `U`), so a latent-generated σ-algebra
is typically strictly larger. It also records that `LowerIndex n` is deliberately *not*
Boolean-closed — two small anchors can combine to a large one — which is not a defect,
since the product σ-algebra still contains Boolean combinations of the coordinates.

No coupling, no augmented space, no `ξ∅`: those belong to the induction layer, which
should consume a settled lower-factor API rather than be mixed with it. No `NoNullary`.

Audit measured directly on base and head rather than carried: 210 → 213. Full build
3362 jobs green; census, axiom audit, and documentation drift checks pass.

Still to come in this PR: rank nesting with the `rfl` projection laws, finitary
relabeling equivariance at `FinSuppPerm`, the eventwise mod-null generation theorem, and
the rank-zero/rank-one regressions.
…tion (#107)

Rank nesting for the lower-rank factor and the single-support restriction
that the generation argument runs through.

* `lowerIndexEmbedding` / `lowerFactorProjection` for `n ≤ m`, with the
  projection-map compatibility and the cocycle law both definitional.
* `basisIndexToLowerIndex` / `lowerToFactorProjection`: coordinates anchored
  inside a support `A` of rank `< n` are coordinates of rank `< n`, so the
  lower-rank factor restricts to `FactorSpace A`, and that restriction
  composed with `lowerFactorMap n` is `factorMap A` by `rfl`.

This is the device that lets generation be settled support by support
rather than through the `iSup`.

Audit 213 -> 218.
Completes the structural lower-rank factor.

* `comap_factorMap_le_comap_lowerFactorMap`: for `A.card < n` the single-support
  pullback sits inside the lower-rank pullback, via `lowerToFactorProjection`.
* `exists_comap_lowerFactorMap_ae_eq`: every `lowerRankAlgebra n` event has an
  a.e. representative read off the lower-rank factor. Proved support by support
  and joined inside `eventuallyMeasurableSpace`, so the completion does the
  closing — no simultaneous choice of a.e. witnesses through the `iSup`.
  Stated eventwise; the two σ-algebras are not equal, and 'equal modulo null
  sets' would commit to a trim/completion identification that is unavailable.
* `lowerIndexEquiv` + `comap_relabel_comap_lowerFactorMap`: FinSuppPerm
  equivariance, the factor-level counterpart of comap_relabel_lowerRankAlgebra.
* `comap_lowerFactorMap_zero`: rank zero is `⊥` on the nose, not modulo the law.
* `exists_comap_lowerFactorMap_one_ae_eq`: the rank-one base, on the original
  law — no augmented space, no coupling.

Audit 218 -> 224.
* `Graphon.lean`: add the missing `Graphon.RelLowerFactor` inventory entry.
* Soften the raw-equality wording in the module and theorem docstrings: no raw
  equality is asserted or supplied by this construction, and the available
  converse is eventwise modulo `M.law`. Nothing here shows the two σ-algebras
  are unequal, and the docstrings no longer suggest otherwise.
* Add the nesting/equivariance square
  `lowerFactorProjection h ∘ lowerFactorSpaceEquiv σ m =
     lowerFactorSpaceEquiv σ n ∘ lowerFactorProjection h`,
  definitional up to proof irrelevance in the rank bound. Without it the
  relabeling action would not descend along the nesting maps.
* Add identity and multiplication laws for `lowerIndexEquiv` and
  `lowerFactorSpaceEquiv`. These are automorphisms of one fixed type, unlike
  `basisIndexEquiv`, so they are honest equalities of equivalences rather than
  underlying-index laws; reindexing is contravariant, so the factor-space
  composition law reverses the order.

Audit 224 -> 227.
@cameronfreer
cameronfreer merged commit 64588be into master Jul 31, 2026
2 checks passed
@cameronfreer
cameronfreer deleted the r4-lower-factor branch July 31, 2026 03:01
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