Documentation

Oseledets.TwoSided.Transversality

The transversality crux of the two-sided Oseledets theorem #

This module establishes the transversality crux χ⁺ + χ⁻ ≥ 0: if a nonzero vector has forward (restricted) growth rate ≤ a along the backward orbit and backward decay rate ≤ b with a + b < 0, then it cannot exist. Concretely the opposite-sign sublevels of the forward and backward Oseledets filtrations are transverse, and the resulting dimension count is the combinatorial input consumed by reflect_of_counting_and_sum.

The architecture:

The per-point transversality crux #

theorem Oseledets.inf_eq_bot_of_neg_sum {X : Type u_1} {d : } [MeasurableSpace X] [NeZero d] {A : XMatrix (Fin d) (Fin d) } (hA : ∀ (x : X), (A x).det 0) (T : X ≃ᵐ X) {Vfam : XSubmodule (EuclideanSpace (Fin d))} {Ux : Submodule (EuclideanSpace (Fin d))} {x : X} {a b : } (henvbdd : Filter.IsBoundedUnder (fun (x1 x2 : ) => x1 x2) Filter.atTop fun (n : ) => (↑n)⁻¹ * Real.log cocycle A (⇑T) n ((⇑T.symm)^[n] x) * orthProjMatrix (Vfam ((⇑T.symm)^[n] x))) (henv : Filter.limsup (fun (n : ) => (↑n)⁻¹ * Real.log cocycle A (⇑T) n ((⇑T.symm)^[n] x) * orthProjMatrix (Vfam ((⇑T.symm)^[n] x))) Filter.atTop a) (hmem : vVfam xUx, ∀ (n : ), (Matrix.toEuclideanCLM (cocycle (backwardGen A T) (⇑T.symm) n x)) v Vfam ((⇑T.symm)^[n] x)) (hdecbdd : vVfam xUx, v 0Filter.IsBoundedUnder (fun (x1 x2 : ) => x1 x2) Filter.atTop fun (n : ) => (↑n)⁻¹ * Real.log (Matrix.toEuclideanCLM (cocycle (backwardGen A T) (⇑T.symm) n x)) v) (hdec : vVfam xUx, v 0Filter.limsup (fun (n : ) => (↑n)⁻¹ * Real.log (Matrix.toEuclideanCLM (cocycle (backwardGen A T) (⇑T.symm) n x)) v) Filter.atTop b) (hsum : a + b < 0) :
Vfam xUx =

The per-point transversality crux.

Let A be an everywhere-invertible generator over the invertible system T : X ≃ᵐ X, with backward generator B = backwardGen A T running over S = T.symm. Suppose:

  • henv : the backward-orbit envelope of a forward level family Vfam at the point x has limsup at most a, i.e. limsup (1/n) log ‖A⁽ⁿ⁾(Sⁿx) · P_{Vfam(Sⁿx)}‖ ≤ a (with the sequence bounded above, henvbdd);
  • hmem : forward equivariance places the backward image of any intersection vector into the forward level along the backward orbit, B⁽ⁿ⁾(x) v ∈ Vfam(Sⁿx);
  • hdec : every nonzero intersection vector decays backward with limsup at most b (bounded above, hdecbdd);
  • hsum : a + b < 0.

Then Vfam x ⊓ Ux = ⊥. Indeed for a nonzero v in the intersection, v = A⁽ⁿ⁾(Sⁿx) · (B⁽ⁿ⁾(x) v) (the cocycle identity cocycle_succ'), so log‖v‖ ≤ log ‖A⁽ⁿ⁾(Sⁿx) · P‖ + log ‖B⁽ⁿ⁾(x) v‖; dividing by n and letting n → ∞ the right side has limsup ≤ a + b < 0 while the left side tends to 0, a contradiction.

The a.e. crux and the counting bound #

theorem Oseledets.mem_iterate_backward_of_orbit {X : Type u_1} {d : } [MeasurableSpace X] {T : X ≃ᵐ X} {A : XMatrix (Fin d) (Fin d) } (hA : ∀ (x : X), (A x).det 0) {Vfam : XSubmodule (EuclideanSpace (Fin d))} {x : X} (hmap : ∀ (m : ), Submodule.map (↑(Matrix.toEuclideanCLM (A ((⇑T.symm)^[m + 1] x)))) (Vfam ((⇑T.symm)^[m + 1] x)) = Vfam ((⇑T.symm)^[m] x)) {v : EuclideanSpace (Fin d)} (hv : v Vfam x) (n : ) :
(Matrix.toEuclideanCLM (cocycle (backwardGen A T) (⇑T.symm) n x)) v Vfam ((⇑T.symm)^[n] x)

Membership equivariance along the backward orbit, derived from forward equivariance. If B⁽ᵏ⁾(x) v ∈ Vfam(Sᵏx) is to be shown for all k, it suffices to know one-step equivariance of A/Vfam along the backward orbit (the projection-conjugation form) together with v ∈ Vfam x.

theorem Oseledets.ae_tendsto_restricted_backward {X : Type u_1} {d : } [MeasurableSpace X] [NeZero d] {μ : MeasureTheory.Measure X} [MeasureTheory.IsProbabilityMeasure μ] {T : X ≃ᵐ X} (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 : ) (V : Fin (numExp lam0 d + 1)XSubmodule (EuclideanSpace (Fin d))) (hVmeas : ∀ (i : Fin (numExp lam0 d + 1)), MeasurableSubspace fun (x : X) => V i x) (hVae : ∀ᵐ (x : X) μ, V 0 x = V (Fin.last (numExp lam0 d)) x = (∀ (i : Fin (numExp lam0 d)), V i.succ x < V i.castSucc x) (∀ (i : Fin (numExp lam0 d + 1)), Submodule.map (↑(Matrix.toEuclideanCLM (A x))) (V i x) = V i (T x)) ∀ (i : Fin (numExp lam0 d)), v(V i.castSucc x), vV i.succ xFilter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log (Matrix.toEuclideanCLM (cocycle A (⇑T) n x)) v) Filter.atTop (nhds (expEnum lam0 d i))) (i : Fin (numExp lam0 d)) :
∀ᵐ (x : X) μ, Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log cocycle A (⇑T) n ((⇑T.symm)^[n] x) * orthProjMatrix (V i.castSucc ((⇑T.symm)^[n] x))) Filter.atTop (nhds (expEnum lam0 d i))

The backward-orbit envelope converges (a.e.). For the forward Oseledets level Vᵢ = V i.castSucc, the floor-absorbed restricted operator norm along the backward orbit converges to the Lyapunov exponent λᵢ: (1/n) log ‖A⁽ⁿ⁾(Sⁿx) · P_{Vᵢ(Sⁿx)}‖ → λᵢ a.e.

This is the convergent strengthening of ae_limsup_restricted_backward_le (whose limsup ≤ λᵢ is the consumed direction): it is obtained from the backward Kingman limit restLog_backward_kingman (shared constant c), the identification c = λᵢ (restricted_const_eq), and the floor absorption along the backward orbit (restLog_eq_on_good). The convergence supplies the IsBoundedUnder proviso that the crux needs, while the rate bound itself is taken from ae_limsup_restricted_backward_le.

theorem Oseledets.ae_crux {X : Type u_1} {d : } [MeasurableSpace X] [NeZero d] {μ : MeasureTheory.Measure X} [MeasureTheory.IsProbabilityMeasure μ] {T : X ≃ᵐ X} (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 mu0 : ) (V : Fin (numExp lam0 d + 1)XSubmodule (EuclideanSpace (Fin d))) (W : Fin (numExp mu0 d + 1)XSubmodule (EuclideanSpace (Fin d))) (hVmeas : ∀ (i : Fin (numExp lam0 d + 1)), MeasurableSubspace fun (x : X) => V i x) (hVae : ∀ᵐ (x : X) μ, V 0 x = V (Fin.last (numExp lam0 d)) x = (∀ (i : Fin (numExp lam0 d)), V i.succ x < V i.castSucc x) (∀ (i : Fin (numExp lam0 d + 1)), Submodule.map (↑(Matrix.toEuclideanCLM (A x))) (V i x) = V i (T x)) ∀ (i : Fin (numExp lam0 d)), v(V i.castSucc x), vV i.succ xFilter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log (Matrix.toEuclideanCLM (cocycle A (⇑T) n x)) v) Filter.atTop (nhds (expEnum lam0 d i))) (hWae : ∀ᵐ (x : X) μ, W 0 x = W (Fin.last (numExp mu0 d)) x = (∀ (s : Fin (numExp mu0 d)), W s.succ x < W s.castSucc x) ∀ (s : Fin (numExp mu0 d)), v(W s.castSucc x), vW s.succ xFilter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log (Matrix.toEuclideanCLM (cocycle (backwardGen A T) (⇑T.symm) n x)) v) Filter.atTop (nhds (expEnum mu0 d s))) :
∀ᵐ (x : X) μ, ∀ (i : Fin (numExp lam0 d)) (s : Fin (numExp mu0 d)), expEnum lam0 d i + expEnum mu0 d s < 0V i.castSucc xW s.castSucc x =

The a.e. transversality crux.

For the forward Oseledets filtration V (with exponents expEnum lam0 d) of the system (T, A) and the backward Oseledets filtration W (with exponents expEnum mu0 d) of the backward system (T.symm, backwardGen A T), at a.e. x the opposite-sign interior sublevels are transverse: for every forward level i and backward level s with λᵢ + μₛ < 0, V i.castSucc x ⊓ W s.castSucc x = ⊥.

The proof bundles, on a single conull set, the backward-orbit envelope (ae_limsup_restricted_backward_le, with the IsBoundedUnder proviso from the convergent strengthening ae_tendsto_restricted_backward), the forward equivariance along the backward orbit (ae_forall_iterate_of_ae over T.symm + mem_iterate_backward_of_orbit), and the backward growth limits (the backward strong-export growth clause + flag descent exists_stratum), then applies the per-point crux inf_eq_bot_of_neg_sum. All quantifiers over levels range over the finite types Fin (numExp lam0 d) and Fin (numExp mu0 d).

Threshold-to-level conversion and the counting bound #

theorem Oseledets.exists_level_eq_countLe {d : } {p : } {a : } (hpos : 0 < {jFinset.range d | p j a}.card) :
∃ (i : Fin (numExp p d)), expEnum p d i a {jFinset.range d | p j a}.card = {jFinset.range d | p j expEnum p d i}.card

Threshold-to-level conversion. If the sublevel count #{j < d | p j ≤ a} of an enumeration p is positive, then there is a distinct-exponent level i whose value is ≤ a and whose sublevel count agrees with the count at a (no realized p-value lies strictly between expEnum p d i and a).

theorem Oseledets.ae_counting {X : Type u_1} {d : } [MeasurableSpace X] {μ : MeasureTheory.Measure X} [MeasureTheory.IsProbabilityMeasure μ] (lam0 mu0 : ) (V : Fin (numExp lam0 d + 1)XSubmodule (EuclideanSpace (Fin d))) (W : Fin (numExp mu0 d + 1)XSubmodule (EuclideanSpace (Fin d))) (hVdim : ∀ᵐ (x : X) μ, ∀ (i : Fin (numExp lam0 d)), Module.finrank (V i.castSucc x) = {jFinset.range d | lam0 j expEnum lam0 d i}.card) (hWdim : ∀ᵐ (x : X) μ, ∀ (s : Fin (numExp mu0 d)), Module.finrank (W s.castSucc x) = {jFinset.range d | mu0 j expEnum mu0 d s}.card) (hcrux : ∀ᵐ (x : X) μ, ∀ (i : Fin (numExp lam0 d)) (s : Fin (numExp mu0 d)), expEnum lam0 d i + expEnum mu0 d s < 0V i.castSucc xW s.castSucc x = ) (a b : ) :
a + b < 0{jFinset.range d | lam0 j a}.card + {jFinset.range d | mu0 j b}.card d

The counting bound. At a.e. x — hence (being a deterministic inequality on the spectra) outright — for all thresholds a, b with a + b < 0, #{j < d | lam0 j ≤ a} + #{j < d | mu0 j ≤ b} ≤ d.

The bound is the combinatorial input consumed by reflect_of_counting_and_sum. Each positive count is realized by a forward (resp. backward) interior level via exists_level_eq_countLe, the dimension formula oseledets_filtration_dims identifies the filtration finrank with the count, and the Grassmann identity Submodule.finrank_sup_add_finrank_inf_eq with the crux V i.castSucc x ⊓ W s.castSucc x = ⊥ (from ae_crux) bounds the sum by finrank (V ⊔ W) ≤ d.