Documentation

Oseledets.TwoSided.SplittingAssembly

The two-sided Oseledets splitting #

This is the two-sided Oseledets multiplicative ergodic theorem. It assembles the forward and backward one-sided Oseledets filtrations into a single measurable, A-equivariant splitting ℝᵈ = E₁(x) ⊕ ⋯ ⊕ E_k(x) with two-sided growth: for a nonzero v ∈ Eᵢ(x) the forward cocycle grows at rate λᵢ and the backward cocycle at rate −λᵢ.

The pieces consumed are:

The internal-direct-sum structure is obtained from a pure telescoping-flag lattice lemma (flag_iSupIndep_and_iSup): the split subspaces Eᵢ = V i.castSucc ⊓ W (sidx i).castSucc satisfy V i.castSucc = Eᵢ ⊔ V i.succ and Eᵢ ⊓ V i.succ = ⊥, which telescope a -to- flag into an internal direct sum.

Main results #

References #

A pure telescoping-flag lattice lemma #

The aligned backward index and the transported backward equivariance #

noncomputable def Oseledets.sidx {d : } {lam0 mu0 : } (hrefl : j < d, mu0 j = -lam0 (d - 1 - j)) (i : Fin (numExp lam0 d)) :
Fin (numExp mu0 d)

The backward filtration index aligned to the forward level i, so that its exponent is −λᵢ: sidx i = cast (Fin.rev i) under numExp mu0 d = numExp lam0 d.

Equations
Instances For
    theorem Oseledets.sidx_exp {d : } {lam0 mu0 : } (hrefl : j < d, mu0 j = -lam0 (d - 1 - j)) (i : Fin (numExp lam0 d)) :
    expEnum mu0 d (sidx hrefl i) = -expEnum lam0 d i

    The aligned backward exponent is the negated forward one: μ_{sidx i} = −λᵢ.

    theorem Oseledets.map_of_map_inv {d : } {M : Matrix (Fin d) (Fin d) } (hM : M.det 0) {P Q : Submodule (EuclideanSpace (Fin d))} (h : Submodule.map (↑(Matrix.toEuclideanCLM M⁻¹)) Q = P) :

    Transport of equivariance through the inverse generator. If M is invertible and map (M⁻¹) Q = P, then map (M) P = Q. Used to convert the backward filtration's backwardGen-equivariance into forward A-equivariance.

    Per-point dimension and lattice facts #

    theorem Oseledets.finrank_Vsucc {d : } {lam0 : } {Vx : Fin (numExp lam0 d + 1)Submodule (EuclideanSpace (Fin d))} (hVdim : ∀ (i : Fin (numExp lam0 d)), Module.finrank (Vx i.castSucc) = {jFinset.range d | lam0 j expEnum lam0 d i}.card) (hVlast : Vx (Fin.last (numExp lam0 d)) = ) (i : Fin (numExp lam0 d)) :
    Module.finrank (Vx i.succ) = {jFinset.range d | lam0 j < expEnum lam0 d i}.card

    The forward successor-level finrank equals the strict forward count below λᵢ.

    theorem Oseledets.finrank_Wsidx {d : } {lam0 mu0 : } (hrefl : j < d, mu0 j = -lam0 (d - 1 - j)) {Wx : Fin (numExp mu0 d + 1)Submodule (EuclideanSpace (Fin d))} (hWdim : ∀ (s : Fin (numExp mu0 d)), Module.finrank (Wx s.castSucc) = {jFinset.range d | mu0 j expEnum mu0 d s}.card) (i : Fin (numExp lam0 d)) :
    Module.finrank (Wx (sidx hrefl i).castSucc) = d - {jFinset.range d | lam0 j < expEnum lam0 d i}.card

    The aligned backward-level finrank is d minus the strict forward count below λᵢ.

    theorem Oseledets.crux_succ {d : } {lam0 mu0 : } (hrefl : j < d, mu0 j = -lam0 (d - 1 - j)) {Vx : Fin (numExp lam0 d + 1)Submodule (EuclideanSpace (Fin d))} {Wx : Fin (numExp mu0 d + 1)Submodule (EuclideanSpace (Fin d))} (hVlast : Vx (Fin.last (numExp lam0 d)) = ) (hcrux : ∀ (i' : Fin (numExp lam0 d)) (s : Fin (numExp mu0 d)), expEnum lam0 d i' + expEnum mu0 d s < 0Vx i'.castSuccWx s.castSucc = ) (i : Fin (numExp lam0 d)) :
    Vx i.succWx (sidx hrefl i).castSucc =

    Crux disjointness at the forward successor level.

    theorem Oseledets.crux_succ_backward {d : } {lam0 mu0 : } (hrefl : j < d, mu0 j = -lam0 (d - 1 - j)) {Vx : Fin (numExp lam0 d + 1)Submodule (EuclideanSpace (Fin d))} {Wx : Fin (numExp mu0 d + 1)Submodule (EuclideanSpace (Fin d))} (hWlast : Wx (Fin.last (numExp mu0 d)) = ) (hcrux : ∀ (i' : Fin (numExp lam0 d)) (s : Fin (numExp mu0 d)), expEnum lam0 d i' + expEnum mu0 d s < 0Vx i'.castSuccWx s.castSucc = ) (i : Fin (numExp lam0 d)) :
    Vx i.castSuccWx (sidx hrefl i).succ =

    Crux disjointness at the backward successor level.

    noncomputable def Oseledets.esplitAt {d : } {lam0 mu0 : } (hrefl : j < d, mu0 j = -lam0 (d - 1 - j)) {Vx : Fin (numExp lam0 d + 1)Submodule (EuclideanSpace (Fin d))} {Wx : Fin (numExp mu0 d + 1)Submodule (EuclideanSpace (Fin d))} (i : Fin (numExp lam0 d)) :

    The intersection-splitting subspace at forward level i (per-point).

    Equations
    Instances For
      theorem Oseledets.sup_eq_top {d : } {lam0 mu0 : } (hrefl : j < d, mu0 j = -lam0 (d - 1 - j)) {Vx : Fin (numExp lam0 d + 1)Submodule (EuclideanSpace (Fin d))} {Wx : Fin (numExp mu0 d + 1)Submodule (EuclideanSpace (Fin d))} (hVdim : ∀ (i : Fin (numExp lam0 d)), Module.finrank (Vx i.castSucc) = {jFinset.range d | lam0 j expEnum lam0 d i}.card) (hWdim : ∀ (s : Fin (numExp mu0 d)), Module.finrank (Wx s.castSucc) = {jFinset.range d | mu0 j expEnum mu0 d s}.card) (hVanti : Antitone Vx) (hVlast : Vx (Fin.last (numExp lam0 d)) = ) (hcrux : ∀ (i' : Fin (numExp lam0 d)) (s : Fin (numExp mu0 d)), expEnum lam0 d i' + expEnum mu0 d s < 0Vx i'.castSuccWx s.castSucc = ) (i : Fin (numExp lam0 d)) :
      Vx i.castSuccWx (sidx hrefl i).castSucc =

      Totality at level i: Vx i.castSucc ⊔ Wx (sidx i).castSucc = ⊤.

      theorem Oseledets.finrank_esplitAt {d : } {lam0 mu0 : } (hrefl : j < d, mu0 j = -lam0 (d - 1 - j)) {Vx : Fin (numExp lam0 d + 1)Submodule (EuclideanSpace (Fin d))} {Wx : Fin (numExp mu0 d + 1)Submodule (EuclideanSpace (Fin d))} (hVdim : ∀ (i : Fin (numExp lam0 d)), Module.finrank (Vx i.castSucc) = {jFinset.range d | lam0 j expEnum lam0 d i}.card) (hWdim : ∀ (s : Fin (numExp mu0 d)), Module.finrank (Wx s.castSucc) = {jFinset.range d | mu0 j expEnum mu0 d s}.card) (hVanti : Antitone Vx) (hVlast : Vx (Fin.last (numExp lam0 d)) = ) (hcrux : ∀ (i' : Fin (numExp lam0 d)) (s : Fin (numExp mu0 d)), expEnum lam0 d i' + expEnum mu0 d s < 0Vx i'.castSuccWx s.castSucc = ) (i : Fin (numExp lam0 d)) :
      Module.finrank (esplitAt hrefl i) = {jFinset.range d | lam0 j expEnum lam0 d i}.card - {jFinset.range d | lam0 j < expEnum lam0 d i}.card

      finrank (esplitAt i) = #{j | lam0 j ≤ λᵢ} − #{j | lam0 j < λᵢ}.

      theorem Oseledets.esplitAt_inf_Vsucc {d : } {lam0 mu0 : } (hrefl : j < d, mu0 j = -lam0 (d - 1 - j)) {Vx : Fin (numExp lam0 d + 1)Submodule (EuclideanSpace (Fin d))} {Wx : Fin (numExp mu0 d + 1)Submodule (EuclideanSpace (Fin d))} (hVlast : Vx (Fin.last (numExp lam0 d)) = ) (hcrux : ∀ (i' : Fin (numExp lam0 d)) (s : Fin (numExp mu0 d)), expEnum lam0 d i' + expEnum mu0 d s < 0Vx i'.castSuccWx s.castSucc = ) (i : Fin (numExp lam0 d)) :
      esplitAt hrefl iVx i.succ =

      esplitAt i ⊓ Vx i.succ = ⊥.

      theorem Oseledets.Vcast_eq_esplitAt_sup_Vsucc {d : } {lam0 mu0 : } (hrefl : j < d, mu0 j = -lam0 (d - 1 - j)) {Vx : Fin (numExp lam0 d + 1)Submodule (EuclideanSpace (Fin d))} {Wx : Fin (numExp mu0 d + 1)Submodule (EuclideanSpace (Fin d))} (hVdim : ∀ (i : Fin (numExp lam0 d)), Module.finrank (Vx i.castSucc) = {jFinset.range d | lam0 j expEnum lam0 d i}.card) (hWdim : ∀ (s : Fin (numExp mu0 d)), Module.finrank (Wx s.castSucc) = {jFinset.range d | mu0 j expEnum mu0 d s}.card) (hVanti : Antitone Vx) (hVlast : Vx (Fin.last (numExp lam0 d)) = ) (hcrux : ∀ (i' : Fin (numExp lam0 d)) (s : Fin (numExp mu0 d)), expEnum lam0 d i' + expEnum mu0 d s < 0Vx i'.castSuccWx s.castSucc = ) (i : Fin (numExp lam0 d)) :
      Vx i.castSucc = esplitAt hrefl iVx i.succ

      The telescoping identity Vx i.castSucc = esplitAt i ⊔ Vx i.succ.

      theorem Oseledets.one_le_finrank_esplitAt {d : } {lam0 mu0 : } (hrefl : j < d, mu0 j = -lam0 (d - 1 - j)) {Vx : Fin (numExp lam0 d + 1)Submodule (EuclideanSpace (Fin d))} {Wx : Fin (numExp mu0 d + 1)Submodule (EuclideanSpace (Fin d))} (hVdim : ∀ (i : Fin (numExp lam0 d)), Module.finrank (Vx i.castSucc) = {jFinset.range d | lam0 j expEnum lam0 d i}.card) (hWdim : ∀ (s : Fin (numExp mu0 d)), Module.finrank (Wx s.castSucc) = {jFinset.range d | mu0 j expEnum mu0 d s}.card) (hVanti : Antitone Vx) (hVlast : Vx (Fin.last (numExp lam0 d)) = ) (hcrux : ∀ (i' : Fin (numExp lam0 d)) (s : Fin (numExp mu0 d)), expEnum lam0 d i' + expEnum mu0 d s < 0Vx i'.castSuccWx s.castSucc = ) (i : Fin (numExp lam0 d)) :

      The split subspace is nonzero: 1 ≤ finrank (esplitAt i).

      The splitting in positive dimension #

      theorem Oseledets.oseledets_splitting_pos {X : Type u_1} [MeasurableSpace X] {d : } [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)⁻¹) μ) :
      ∃ (k : ) (lam : Fin k) (E : Fin kXSubmodule (EuclideanSpace (Fin d))), StrictAnti lam (∀ (i : Fin k), MeasurableSubspace fun (x : X) => E i x) ∀ᵐ (x : X) μ, (DirectSum.IsInternal fun (i : Fin k) => E i x) (∀ (i : Fin k), E i x ) (∀ (i : Fin k), Submodule.map (↑(Matrix.toEuclideanCLM (A x))) (E i x) = E i (T x)) ∀ (i : Fin k), vE i x, v 0Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log (Matrix.toEuclideanCLM (cocycle A (⇑T) n x)) v) Filter.atTop (nhds (lam i)) Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log (Matrix.toEuclideanCLM (cocycle A (⇑T) n ((⇑T.symm)^[n] x))⁻¹) v) Filter.atTop (nhds (-lam i))

      The two-sided Oseledets splitting (positive dimension). The headline statement, established for d > 0; the public oseledets_splitting adds the trivial d = 0 branch.

      The dimension-zero case #

      theorem Oseledets.oseledets_splitting_dim_zero {X : Type u_1} [MeasurableSpace X] {μ : MeasureTheory.Measure X} [MeasureTheory.IsProbabilityMeasure μ] {T : X ≃ᵐ X} (_hT : Ergodic (⇑T) μ) (A : XMatrix (Fin 0) (Fin 0) ) (_hA : ∀ (x : X), (A x).det 0) (_hAmeas : Measurable A) (_hint : IntegrableLogNorm A μ) (_hint' : IntegrableLogNorm (fun (x : X) => (A x)⁻¹) μ) :
      ∃ (k : ) (lam : Fin k) (E : Fin kXSubmodule (EuclideanSpace (Fin 0))), StrictAnti lam (∀ (i : Fin k), MeasurableSubspace fun (x : X) => E i x) ∀ᵐ (x : X) μ, (DirectSum.IsInternal fun (i : Fin k) => E i x) (∀ (i : Fin k), E i x ) (∀ (i : Fin k), Submodule.map (↑(Matrix.toEuclideanCLM (A x))) (E i x) = E i (T x)) ∀ (i : Fin k), vE i x, v 0Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log (Matrix.toEuclideanCLM (cocycle A (⇑T) n x)) v) Filter.atTop (nhds (lam i)) Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log (Matrix.toEuclideanCLM (cocycle A (⇑T) n ((⇑T.symm)^[n] x))⁻¹) v) Filter.atTop (nhds (-lam i))

      The two-sided Oseledets splitting, dimension-zero case. Trivial: k = 0, the empty internal direct sum of the zero module.

      The two-sided Oseledets splitting #

      theorem Oseledets.oseledets_splitting {X : Type u_1} [MeasurableSpace X] {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)⁻¹) μ) :
      ∃ (k : ) (lam : Fin k) (E : Fin kXSubmodule (EuclideanSpace (Fin d))), StrictAnti lam (∀ (i : Fin k), MeasurableSubspace fun (x : X) => E i x) ∀ᵐ (x : X) μ, (DirectSum.IsInternal fun (i : Fin k) => E i x) (∀ (i : Fin k), E i x ) (∀ (i : Fin k), Submodule.map (↑(Matrix.toEuclideanCLM (A x))) (E i x) = E i (T x)) ∀ (i : Fin k), vE i x, v 0Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log (Matrix.toEuclideanCLM (cocycle A (⇑T) n x)) v) Filter.atTop (nhds (lam i)) Filter.Tendsto (fun (n : ) => (↑n)⁻¹ * Real.log (Matrix.toEuclideanCLM (cocycle A (⇑T) n ((⇑T.symm)^[n] x))⁻¹) v) Filter.atTop (nhds (-lam i))

      The two-sided Oseledets multiplicative ergodic theorem (splitting form).

      For an invertible ergodic measure-preserving system T : X ≃ᵐ X and a measurable everywhere-invertible cocycle generator A with log⁺‖A‖, log⁺‖A⁻¹‖ ∈ L¹(μ), there are k distinct Lyapunov exponents λ₀ > ⋯ > λ_{k-1} and a measurable, A-equivariant splitting ℝᵈ = E₀(x) ⊕ ⋯ ⊕ E_{k-1}(x) of EuclideanSpace ℝ (Fin d) such that, for μ-a.e. x, every nonzero v ∈ Eᵢ(x) grows forward at rate λᵢ and backward at rate −λᵢ: (1/n) log‖A⁽ⁿ⁾(x) v‖ → λᵢ and (1/n) log‖(A⁽ⁿ⁾(T⁻ⁿx))⁻¹ v‖ → −λᵢ.