Documentation

Oseledets.Lyapunov.TopGapEnvelope

The top-gap band-mass envelope topGapMassEnvelope_ae #

This file assembles the deterministic and almost-everywhere statements behind the top-gap fast-band-mass envelope used in the Oseledets multiplicative ergodic theorem. The target theorem is

theorem topGapMassEnvelope_ae : ∀ᵐ x ∂μ, TopGapMassEnvelope A T lam0 x.

The proof is organized in three layers.

Main definitions #

Main results #

Implementation notes #

Fix the pair (λ_a, v), the canonical slack δ* = canonSlack = min(δ/4, G/2, (v−λ_a)/4), the canonical cut log c_v = v − δ*, and δ' = δ/4 for the induction hypothesis. A single slack η ≤ min(δ, G)/16 simultaneously discharges all six constraints below (worst cases shown; uses w ≤ pred(v) ≤ v − G for slow strata and v − λ_a ≥ G):

  1. ρ_w < 1 (geometric convergence): need (v−δ*) − w − 2η > 0; worst w = v−G gives G − δ* − 2η ≥ G − G/2 − G/8 = 3G/8 > 0.
  2. bottom-stratum slack (w ≤ λ_a, mass ≤ 1): rate (v−δ*) − w − 2η ≥ (v−λ_a) − δ* − 2η; need δ* + 2η ≤ δ; δ/4 + δ/8 = 3δ/8 ≤ δ.
  3. intermediate slack (λ_a < w < v, IH mass): combined rate v − λ_a − δ* − δ' − 2η; need δ* + δ' + 2η ≤ δ; δ/4 + δ/4 + δ/8 ≤ δ.
  4. canonical-cut gap separation (mem_hiBand_iff_of_localized at γ = v − δ*): slow side η < (v−δ*) − λ_j ≥ G/2; fast side (incl. λ_j = v) η < δ* + (λ_j − v), worst λ_j = v gives η < δ*; both follow from η ≤ min(δ,G)/16 < δ*.
  5. intermediate sub-band inclusion stratumBand w ⊆ hiBand(m, canonCut_w): need η < δ*_w = min(δ'/4, G/2, (w−λ_a)/4) ≥ min(δ/16, G/4); η ≤ min(δ,G)/16. This is the binding constraint, which is why the slack is min(δ,G)/16 rather than min(δ/8, G/8).
  6. initialization a_0 = 0 (canonCut_init_zero): need λ_a + η < v − δ*, i.e. η < (v−λ_a) − δ* ≥ G/2.

Note η < δ* always holds: δ* = min(δ/4, G/2, (v−λ_a)/4) ≥ min(δ/4, G/4) (using v−λ_a ≥ G), and η ≤ min(δ,G)/16 < min(δ/4, G/4) ≤ δ*.

Conventions: the cast Fintype.card (Fin d) = d is realized via ⟨(a : ℕ), lt_of_lt_of_eq a.isLt (Fintype.card_fin d).symm⟩; hiBand membership is σ_j(t)^{1/t} > c; bandProjector cuts the exponential scale.

Key points to keep in mind:

  1. The slack δ* is quantized against the minimal distinct-stratum gap G (exists_distinctGap), never against raw index-adjacent gaps.
  2. The qpow scale σ^{1/t} and σ^{1/(t+1)} are never mixed; the conversion happens at each fixed time.
  3. The cut stays strictly gap-interior.
  4. All Eventually thresholds are collected once and threaded as a single n₀.
  5. The envelope is two-time: a fixed n controls all m ≥ n.
  6. The single slack is η ≤ min(δ,G)/16.

PART A — abstract deterministic chain core (measure-free, matrix-free) #

These lemmas are pure real-analysis: they solve the band-mass recursion and bound the accumulated multi-source geometric leakage. No matrices, no measure, no inner-product space. They are the easiest sub-lemmas to prove in isolation and the analytic crux of the whole argument.

theorem Oseledets.ChainCore.chain_le_partial_sum (a src : ) (h0 : a 0 = 0) (hrec : ∀ (k : ), a (k + 1) a k + src k) (k : ) :
a k iFinset.range k, src i

A1 — telescoping chain solver. If a 0 = 0 and a (k+1) ≤ a k + src k for all k, then a k ≤ ∑_{i<k} src i for every k. (Elementary induction; we keep the raw partial-sum form so the geometric bound can be applied separately.)

theorem Oseledets.ChainCore.geom_partial_sum_le {r K : } (hr0 : 0 r) (hr1 : r < 1) (hK : 0 K) (k : ) :
iFinset.range k, K * r ^ i K / (1 - r)

A2 — tail geometric bound. For 0 ≤ r < 1 and 0 ≤ K, the partial sums of the geometric series ∑_{i<k} K·r^i are bounded uniformly by K/(1-r).

theorem Oseledets.ChainCore.single_source_envelope (a src : ) {M ρ : } (n : ) (hM : 0 M) (hρ0 : 0 ρ) (hρ1 : ρ < 1) (h0 : a 0 = 0) (hrec : ∀ (k : ), a (k + 1) a k + src k) (hsrc : ∀ (k : ), src k M * ρ ^ (n + k)) (k : ) :
a k M / (1 - ρ) * ρ ^ n

A3 — single-source geometric envelope at a shifted base. This is the per-stratum source shape produced by PART B. Given the chain a 0 = 0, a (k+1) ≤ a k + src k, with each source term controlled by a geometric tail starting at absolute time n: src k ≤ M · ρ ^ (n + k) for 0 ≤ ρ < 1, 0 ≤ M, then for all k, a k ≤ (M / (1 - ρ)) · ρ ^ n.

This is the m-uniform (here k-uniform) envelope: the same n (hence same ρ^n prefactor) controls every k, i.e. every absolute time m = n + k ≥ n. Proof: A1 then A2 after factoring ρ^n out of ρ^(n+k) = ρ^n · ρ^k.

theorem Oseledets.ChainCore.multi_source_envelope {W : Type u_1} (Wf : Finset W) (a : ) (srcw : W) (Mw ρw : W) (n : ) (hM : wWf, 0 Mw w) (hρ0 : wWf, 0 ρw w) (hρ1 : wWf, ρw w < 1) (h0 : a 0 = 0) (hrec : ∀ (k : ), a (k + 1) a k + wWf, srcw w k) (hsrc : wWf, ∀ (k : ), srcw w k Mw w * ρw w ^ (n + k)) (k : ) :
a k wWf, Mw w / (1 - ρw w) * ρw w ^ n

A4 — multi-source geometric envelope. PART B's recursion has the multi-source form a (k+1) ≤ a k + ∑_{w ∈ W} srcw w k with finitely many strata W, each source geometric: srcw w k ≤ Mw w · (ρw w) ^ (n + k) with 0 ≤ ρw w < 1, 0 ≤ Mw w. Then, with a 0 = 0, for all k, a k ≤ ∑_{w ∈ W} (Mw w / (1 - ρw w)) · (ρw w) ^ n.

This is the central abstract statement: it converts the per-step multi-source recursion into a single k-uniform bound whose RHS is a finite sum of per-stratum geometric envelopes, each with its OWN rate. Proof: A1 (with src k = ∑_w srcw w k), then Finset.sum_comm to reorder ∑_{i<k} ∑_w into ∑_w ∑_{i<k}, then A2 per stratum.

PART B — deterministic SVD layer at a fixed x #

Everything here is at a FIXED point x on an eventual time window. The dynamical localization/tempering facts are TAKEN AS PLAIN HYPOTHESES (no measure theory), so each sub-lemma is independently provable. We build:

Notation / windows packaged as hypotheses #

For a fixed x, set σ_j(t) = (toEuclideanLin (cocycle A T t x)).singularValues j. We work with the abstract localization predicate

Localized A T x lam0 η N : ∀ t ≥ N, ∀ j < d, exp(λ_j − η) < σ_j(t)^{1/t} < exp(λ_j + η)

and the tempering predicate

Tempered A T x η N : ∀ t ≥ N, ‖A(T^[t] x)‖ ≤ exp(t·η)

both produced (a.e.) in PART C from eventually_qpow_eigenvalue_localized and tendsto_logNorm_orbit_div_atTop_zero.

def Oseledets.Localized {X : Type u_1} {d : } [NeZero d] (A : XMatrix (Fin d) (Fin d) ) (T : XX) (x : X) (lam0 : ) (η : ) (N : ) :

Localization window predicate (the σ-localization fact, abstracted as a hypothesis).

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    def Oseledets.Tempered {X : Type u_1} {d : } (A : XMatrix (Fin d) (Fin d) ) (T : XX) (x : X) (η : ) (N : ) :

    Tempering window predicate (the one-step operator factor, abstracted as a hypothesis).

    Equations
    Instances For
      theorem Oseledets.exists_localized {X : Type u_1} [MeasurableSpace X] {d : } {T : XX} [NeZero d] {A : XMatrix (Fin d) (Fin d) } (hA : ∀ (x : X), (A x).det 0) (x : X) (lam0 : ) (hconv : j < d, Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log ((Matrix.toEuclideanLin (cocycle A T n x)).singularValues j)) Filter.atTop (nhds (lam0 j))) {η : } ( : 0 < η) :
      ∃ (N : ), Localized A T x lam0 η N

      B0a — localization is producible. From the σ-convergence at x we get, for each η > 0, a localization threshold N. (Thin wrapper around eventually_qpow_eigenvalue_localized.)

      theorem Oseledets.exists_tempered {X : Type u_1} {d : } {T : XX} {A : XMatrix (Fin d) (Fin d) } (x : X) (htemp : Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log A (T^[n] x)) Filter.atTop (nhds 0)) {η : } ( : 0 < η) :
      ∃ (N : ), Tempered A T x η N

      B0b — tempering is producible. From (1/t)·log‖A(T^[t]x)‖ → 0 at x we get, for each η > 0, a tempering threshold N. (Tendsto.eventually of · < η then exp-monotone; the t = 0 slot is harmless because the window only constrains t ≥ N and we can take N ≥ 1.)

      Per-stratum sub-bands #

      noncomputable def Oseledets.stratumBand {d : } [NeZero d] (lam0 : ) (v : ) :

      The time-m sub-band of stratum value v: indices j whose Lyapunov value lam0 j equals v. This is a time-independent finset (it depends only on lam0), but we keep m for symmetry with hiBand; the localization hypothesis is what ties it to the actual time-m band.

      Equations
      Instances For

        Sub-band mass and its comparison to a band-projector mass #

        subBandMass S m B u := ‖S.fastProj m B u‖, the projection of u onto the sub-band B at time m. When B ⊆ hiBand A T m x c the sub-band sits inside the fast band of cut c, so its mass is dominated by the full band mass (Pythagoras over an index subset).

        theorem Oseledets.subband_mass_le_bandMass {X : Type u_1} [MeasurableSpace X] {d : } {T : XX} [NeZero d] (A : XMatrix (Fin d) (Fin d) ) (m : ) (x : X) (c : ) (B : Finset (Fin (Fintype.card (Fin d)))) (hB : B hiBand A T m x c) (u : EuclideanSpace (Fin d)) :

        B1 — sub-band mass ≤ band mass (Pythagoras over index subsets). If B ⊆ hiBand A T m x c then the projection of u onto B is dominated by the cut-c band projector mass.

        The slow band partitions into per-stratum sub-bands #

        Under localization with η small relative to the distinct-stratum gap G, and a cut c whose log c is STRICTLY between consecutive strata, (hiBand A T m x c)ᶜ is the disjoint union of the stratumBands of distinct stratum values w with w < log c. We package the per-step slow-cap-and-floor data this needs into one combinatorial lemma.

        theorem Oseledets.mem_hiBand_iff_of_localized {X : Type u_1} [MeasurableSpace X] {d : } {T : XX} [NeZero d] {A : XMatrix (Fin d) (Fin d) } (_hA : ∀ (x : X), (A x).det 0) (x : X) (lam0 : ) {η : } ( : 0 < η) {N : } (hloc : Localized A T x lam0 η N) {γ : } (hgapsep : j < d, lam0 j + η < γ γ < lam0 j - η) {t : } (ht : N t) (_ht1 : 1 t) (j : Fin (Fintype.card (Fin d))) :
        j hiBand A T t x (Real.exp γ) γ < lam0 j

        B2 — slow-band stratum decomposition. Under localization at time t with η, if log c avoids every stratum then the complement of hiBand A T t x c is {j : lam0 j < log c} (membership characterization). Stated as the membership equivalence at a single time t past the localization threshold, with c = exp γ, γ strictly gap-separated from every stratum by more than η.

        Per-stratum sub-band caps from localization #

        The slow sub-band stratumBand lam0 w of stratum value w has every singular value capped at time t by σ_j(t) ≤ exp(t(w+η)) (from σ_j(t)^{1/t} < exp(λ_j+η) = exp(w+η) and rpow_inv_le_iff_le_pow). The fast floor at t+1 for the cut c = exp γ is c^{t+1}.

        theorem Oseledets.stratum_sigma_cap {X : Type u_1} {d : } {T : XX} [NeZero d] {A : XMatrix (Fin d) (Fin d) } (_hA : ∀ (x : X), (A x).det 0) (x : X) (lam0 : ) {η : } (_hη : 0 < η) {N : } (hloc : Localized A T x lam0 η N) {w : } {t : } (ht : N t) (ht1 : 1 t) (j : Fin (Fintype.card (Fin d))) (hj : j stratumBand lam0 w) :
        (Matrix.toEuclideanLin (cocycle A T t x)).singularValues j Real.exp (t * (w + η))

        B3 — per-stratum slow cap. Under localization, every index in stratumBand lam0 w has, at time t ≥ N, σ_j(t) ≤ exp(t(w+η)).

        The multi-source one-step recursion #

        This refines the single-cap bandMass_oneStep_recursion. Instead of bounding the slow-projection norm ‖slowProj_t u‖ by a single cap, we split the slow band into per-stratum sub-bands and bound the leakage source as a sum over strata, each with its own sub-band mass and its own σ-cap. We use the triangle-inequality route: write slowProj_t u = ∑_w fastProj_t (B_w) u over the partition {B_w} of (hiBand)ᶜ, so that the operator step bound distributes; each sub-band term is bounded via oneStep_sandwich applied to that sub-band's span (each fastProj_t (B_w) u lies in the span of e_t over B_w ⊆ (hiBand)ᶜ).

        Private SVDData-level helpers for the multi-source recursion (prefix htgmulti_) #

        theorem Oseledets.bandMass_oneStep_multisource {X : Type u_1} [MeasurableSpace X] {d : } {T : XX} [NeZero d] {W : Type u_2} (A : XMatrix (Fin d) (Fin d) ) {c₀ : } (hc₀ : 0 < c₀) {t : } (x : X) (Wf : Finset W) (sval : W) (hsval : wWf, 0 sval w) (Bw : WFinset (Fin (Fintype.card (Fin d)))) (hcap : wWf, jBw w, (Matrix.toEuclideanLin (cocycle A T t x)).singularValues j sval w) (hpart : (hiBand A T t x c₀) = Wf.biUnion Bw) (hdisj : (↑Wf).PairwiseDisjoint Bw) (u : EuclideanSpace (Fin d)) :
        (Matrix.toEuclideanLin (bandProjector A T ((Set.Ioi c₀).indicator 1) (t + 1) x)) u (Matrix.toEuclideanLin (bandProjector A T ((Set.Ioi c₀).indicator 1) t x)) u + wWf, A (T^[t] x) * sval w / c₀ ^ (t + 1) * (chainSVD A T x).fastProj t (Bw w) u

        B4 — multi-source one-step band-mass recursion. Fix a cut c = exp γ > 0 and a finite set of distinct stratum values Wf whose sub-bands {stratumBand lam0 w : w ∈ Wf} partition the slow band (hiBand A T t x c)ᶜ at time t (hypothesis hpart). With per-stratum slow caps sw : ℝ (σ_j(t) ≤ sw w for j ∈ stratumBand lam0 w), the fast floor c^{t+1}, and the tempered step factor b = ‖A(T^[t]x)‖, the band mass satisfies

        ‖P^{>c}_{t+1} u‖ ≤ ‖P^{>c}_t u‖ + ∑_{w∈Wf} (b·(sw w)/c^{t+1}) · ‖fastProj_t (stratumBand lam0 w) u‖.

        Route: bandMass_oneStep_recursion reduces P^{>c}_{t+1} to P^{>c}_t + (b·s/c^{t+1})·‖slowProj‖ with a single cap; here we instead expand slowProj over the partition and apply the SVD sandwich per sub-band (each sub-band is a slow span), summing. The cleanest formalization re-runs the oneStep_recursion derivation once per sub-band against hiT1 = hiBand (t+1) and uses additivity of fastProj (t+1) over the partition pieces.

        PART B (continued) — the per-stratum envelope by strong induction #

        The conclusion shape #

        PerStratumEnvelope A T lam0 x a v says: for every δ > 0 there is C ≥ 1 such that eventually in n, for all m ≥ n, the time-m mass of the time-n slow eigenvector u_a(n) at the canonical δ-dependent cut for the pair (lam0 a, v) decays like exp(−n(v − lam0 a − δ)).

        The cut is not a free parameter inside the predicate; it is the canonical cut canonCut a v δ = exp(v − δ*) with δ* = min(δ/4, G/2, (v − lam0 a)/4). Running the recursion at this δ-dependent cut is what makes the induction close. We carry the distinct-stratum gap G = distinctGap lam0 as a parameter.

        theorem Oseledets.exists_distinctGap {d : } [NeZero d] (lam0 : ) :
        ∃ (G : ), 0 < G ∀ (i j : Fin d), lam0 i < lam0 jlam0 i + G lam0 j

        B-gap — existence of a positive distinct-stratum gap. The slacks are quantized against this gap, never against raw index-adjacent gaps. There is G > 0 below every gap between distinct stratum values: lam0 i < lam0 j ⟹ lam0 i + G ≤ lam0 j. (The min over the finitely many positive differences lam0 j − lam0 i is positive; if there is at most one distinct stratum the statement is vacuous and any G = 1 works.) Kept as a producer so G stays an abstract parameter elsewhere.

        noncomputable def Oseledets.canonSlack (lam0 : ) (a : ) (v G δ : ) :

        The canonical δ-dependent slack δ* for the pair (lam0 a, v): strictly positive, ≤ δ/4, ≤ G/2, ≤ (v − lam0 a)/4.

        Equations
        Instances For
          noncomputable def Oseledets.canonCut (lam0 : ) (a : ) (v G δ : ) :

          The canonical cut for the pair (lam0 a, v) at slack δ: exp(v − δ*), strictly interior to the gap below v (since δ* ≤ G/2 < G and the predecessor stratum is ≤ v − G).

          Equations
          Instances For
            def Oseledets.PerStratumEnvelope {X : Type u_1} [MeasurableSpace X] {d : } [NeZero d] (A : XMatrix (Fin d) (Fin d) ) (T : XX) (lam0 : ) (x : X) (G : ) (a : Fin d) (v : ) :

            The per-stratum envelope (conclusion shape). For index a and distinct stratum value v > lam0 a: for every δ > 0 there is C ≥ 1 with eventually-in-n, for-all-m ≥ n, the canonical-cut band mass ≤ C·exp(−n(v − lam0 a − δ)).

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              Initialization (a_0 = 0) at the canonical cut #

              At time n past localization with η small, σ_a(n)^{1/n} < exp(lam0 a + η) < canonCut a v G δ (because log(canonCut) = v − δ* > lam0 a + η for η small), so a ∉ hiBand(n, canonCut) and bandMass_init_zero gives a_0 = 0.

              theorem Oseledets.canonCut_init_zero {X : Type u_1} [MeasurableSpace X] {d : } {T : XX} [NeZero d] {A : XMatrix (Fin d) (Fin d) } (_hA : ∀ (x : X), (A x).det 0) (x : X) (lam0 : ) (a : Fin d) {v G δ η : } {N n : } (hloc : Localized A T x lam0 η N) (hn : N n) (_hn1 : 1 n) (_hav : lam0 a < v) (_hη : 0 < η) (hηsmall : lam0 a + η < v - canonSlack lam0 (↑a) v G δ) :
              (Matrix.toEuclideanLin (bandProjector A T ((Set.Ioi (canonCut lam0 (↑a) v G δ)).indicator 1) n x)) ((sortedGramEigenbasis A T n x) a, ) = 0

              B5 — initialization. Under localization with η small relative to v − lam0 a − δ*, the index a is below the canonical cut at time n, so the band projector annihilates u_a(n).

              The inductive step #

              The heart of PART B. Given the localization/tempering windows and the inductive hypothesis — the per-stratum envelope PerStratumEnvelope … a w for every distinct stratum value w with lam0 a < w < v — produce PerStratumEnvelope … a v.

              Mechanism:

              theorem Oseledets.perStratumEnvelope_step {X : Type u_1} [MeasurableSpace X] {d : } {T : XX} [NeZero d] {A : XMatrix (Fin d) (Fin d) } (hA : ∀ (x : X), (A x).det 0) (x : X) (lam0 : ) {G : } (hG : 0 < G) (hGgap : ∀ (i j : Fin d), lam0 i < lam0 jlam0 i + G lam0 j) (hconv : j < d, Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log ((Matrix.toEuclideanLin (cocycle A T n x)).singularValues j)) Filter.atTop (nhds (lam0 j))) (htemp : Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log A (T^[n] x)) Filter.atTop (nhds 0)) (a : Fin d) (v : ) (hav : lam0 a < v) (hvstratum : ∃ (j : Fin d), lam0 j = v) (IH : ∀ (w : ), lam0 a < ww < v(∃ (j : Fin d), lam0 j = w)PerStratumEnvelope A T lam0 x G a w) :
              PerStratumEnvelope A T lam0 x G a v

              B6 — the inductive step. All windows + IH ⟹ the per-stratum envelope for v. The IH is phrased over the finite set of distinct stratum values strictly between lam0 a and v.

              theorem Oseledets.perStratumEnvelope_of_lt {X : Type u_1} [MeasurableSpace X] {d : } {T : XX} [NeZero d] {A : XMatrix (Fin d) (Fin d) } (hA : ∀ (x : X), (A x).det 0) (x : X) (lam0 : ) {G : } (hG : 0 < G) (hGgap : ∀ (i j : Fin d), lam0 i < lam0 jlam0 i + G lam0 j) (hconv : j < d, Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log ((Matrix.toEuclideanLin (cocycle A T n x)).singularValues j)) Filter.atTop (nhds (lam0 j))) (htemp : Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log A (T^[n] x)) Filter.atTop (nhds 0)) (a : Fin d) (v : ) (hav : lam0 a < v) (hvstratum : ∃ (j : Fin d), lam0 j = v) :
              PerStratumEnvelope A T lam0 x G a v

              B7 — the strong induction. For every index a and every distinct stratum value v with lam0 a < v, the per-stratum envelope holds. Strong induction on the number of distinct stratum values in (lam0 a, v) (equivalently Finset well-founded recursion), discharging each level by perStratumEnvelope_step.

              PART C — band stabilization + transfer to all gap-interior cuts + a.e. wrapper #

              Band stabilization #

              Under localization with η small, the band at any cut whose log is strictly gap-separated from every stratum stabilizes: j ∈ hiBand A T m x c ↔ log c < lam0 j, for all m past the localization threshold. Hence two gap-interior cuts to the same top gap below lam0 e give equal bands, so equal band-projector masses.

              theorem Oseledets.bandMass_eq_of_gap_interior {X : Type u_1} [MeasurableSpace X] {d : } {T : XX} [NeZero d] {A : XMatrix (Fin d) (Fin d) } (hA : ∀ (x : X), (A x).det 0) (x : X) (lam0 : ) {η : } ( : 0 < η) {N : } (hloc : Localized A T x lam0 η N) {c₀ c₁ : } (hc₀ : 0 < c₀) (hc₁ : 0 < c₁) (hsep0 : j < d, lam0 j + η < Real.log c₀ Real.log c₀ < lam0 j - η) (hsep1 : j < d, lam0 j + η < Real.log c₁ Real.log c₁ < lam0 j - η) (hsame : ∀ (j : Fin (Fintype.card (Fin d))), Real.log c₀ < lam0 j Real.log c₁ < lam0 j) {m : } (hm : N m) (hm1 : 1 m) (u : EuclideanSpace (Fin d)) :

              C1 — band mass equality for two gap-interior cuts (band stabilization). If log c₀ and log c₁ are both strictly gap-separated from every stratum by more than η (hsep0, hsep1) and they have the same membership pattern (hsame : ∀ j, log c₀ < lam0 j ↔ log c₁ < lam0 j), then for every m past the localization threshold the band-projector masses agree.

              Transfer: per-stratum envelope (canonical cuts) ⟹ TopGapMassEnvelope (all cuts) #

              For the pair (a, e) with lam0 a < lam0 e and a gap-interior cut c₀ (∀ i, lam0 i < log c₀ ∨ lam0 e ≤ lam0 i), the canonical cut canonCut a (lam0 e) G δ is also gap-interior to the same top gap below lam0 e (its log = lam0 e − δ* with δ* ≤ G/2, and the predecessor stratum is ≤ lam0 e − G). Both cuts have membership lam0 j > cut ↔ lam0 e ≤ lam0 j, so by C1 their band masses agree past localization, and the per-stratum envelope at v = lam0 e transfers. The constant C is uniform over the finitely many pairs via a Finset max.

              theorem Oseledets.topGap_bound_at_cut_of_perStratum {X : Type u_1} [MeasurableSpace X] {d : } {T : XX} [NeZero d] {A : XMatrix (Fin d) (Fin d) } (hA : ∀ (x : X), (A x).det 0) (x : X) (lam0 : ) {G : } (hG : 0 < G) (hGgap : ∀ (i j : Fin d), lam0 i < lam0 jlam0 i + G lam0 j) (hconv : j < d, Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log ((Matrix.toEuclideanLin (cocycle A T n x)).singularValues j)) Filter.atTop (nhds (lam0 j))) (a e : Fin d) (hgap : lam0 a < lam0 e) (_henv : PerStratumEnvelope A T lam0 x G a (lam0 e)) {δ : } ( : 0 < δ) {C : } (_hC1 : 1 C) (hCenv : ∀ᶠ (n : ) in Filter.atTop, ∀ (m : ), n m(Matrix.toEuclideanLin (bandProjector A T ((Set.Ioi (canonCut lam0 (↑a) (lam0 e) G δ)).indicator 1) m x)) ((sortedGramEigenbasis A T n x) a, ) C * Real.exp (-n * (lam0 e - lam0 a - δ))) (c₀ : ) (hc₀lo : Real.exp (lam0 a) < c₀) (hc₀hi : c₀ < Real.exp (lam0 e)) (hc₀gap : ∀ (i : Fin d), lam0 i < Real.log c₀ lam0 e lam0 i) :
              ∀ᶠ (n : ) in Filter.atTop, ∀ (m : ), n m(Matrix.toEuclideanLin (bandProjector A T ((Set.Ioi c₀).indicator 1) m x)) ((sortedGramEigenbasis A T n x) a, ) C * Real.exp (-n * (lam0 e - lam0 a - δ))

              C2 — transfer to a single gap-interior cut. From PerStratumEnvelope … a (lam0 e) and localization, the TopGap-style bound holds at the arbitrary gap-interior cut c₀.

              theorem Oseledets.topGapMassEnvelope_of_perStratum {X : Type u_1} [MeasurableSpace X] {d : } {T : XX} [NeZero d] {A : XMatrix (Fin d) (Fin d) } (hA : ∀ (x : X), (A x).det 0) (x : X) (lam0 : ) {G : } (hG : 0 < G) (hGgap : ∀ (i j : Fin d), lam0 i < lam0 jlam0 i + G lam0 j) (hconv : j < d, Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log ((Matrix.toEuclideanLin (cocycle A T n x)).singularValues j)) Filter.atTop (nhds (lam0 j))) (henv : ∀ (a e : Fin d), lam0 a < lam0 ePerStratumEnvelope A T lam0 x G a (lam0 e)) :

              C3 — uniform-C transfer (the per-x deterministic TopGapMassEnvelope). Assembling C2 across the finitely many gap pairs (a, e) with a single constant C via a Finset max over Fin d × Fin d gives TopGapMassEnvelope A T lam0 x, given the per-stratum envelopes for all gap pairs.

              The a.e. wrapper — assembling the target theorem #

              Collect the a.e. windows (σ-convergence for every j < d, tempering) from hlam0 and tendsto_logNorm_orbit_div_atTop_zero, fix the distinct gap G (deterministic), build all per-stratum envelopes via perStratumEnvelope_of_lt, and transfer via topGapMassEnvelope_of_perStratum.

              theorem Oseledets.topGapMassEnvelope_ae {X : Type u_1} [MeasurableSpace X] {μ : MeasureTheory.Measure X} {d : } {T : XX} [MeasureTheory.IsProbabilityMeasure μ] [NeZero d] (hT : Ergodic T μ) {A : XMatrix (Fin d) (Fin d) } (hA : ∀ (x : X), (A x).det 0) (hAmeas : Measurable A) (hint : IntegrableLogNorm A μ) (hint' : IntegrableLogNorm (fun (x : X) => (A x)⁻¹) μ) (lam0 : ) (hlam0 : i < d, ∀ᵐ (x : X) μ, Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log ((Matrix.toEuclideanLin (cocycle A T n x)).singularValues i)) Filter.atTop (nhds (lam0 i))) :
              ∀ᵐ (x : X) μ, TopGapMassEnvelope A T lam0 x

              The top-gap band-mass envelope topGapMassEnvelope_ae: almost everywhere the top-gap fast-band-mass envelope holds, discharging htopgap in forward_graded_overlap_of_topGapEnvelope.