Skip to content

Commit 43b01a3

Browse files
committed
mean ergodic
3 parents 0f3829e + 5acb9ea + 5e83c4f commit 43b01a3

5 files changed

Lines changed: 268 additions & 62 deletions

File tree

Mathlib/Analysis/BoxIntegral/Basic.lean

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -658,11 +658,11 @@ theorem integrable_of_bounded_and_ae_continuousWithinAt [CompleteSpace E] {I : B
658658
centered at x is ≤ ε₁ -/
659659
have comp : IsCompact (Box.Icc I \ U) :=
660660
I.isCompact_Icc.of_isClosed_subset (I.isCompact_Icc.isClosed.sdiff Uopen) Set.diff_subset
661-
have : ∀ x ∈ (Box.Icc I \ U), oscillationWithin f (Box.Icc I) x < (ENNReal.ofReal ε₁) := by
661+
have : ∀ x ∈ (Box.Icc I \ U), oscillationWithinAt f (Box.Icc I) x < (ENNReal.ofReal ε₁) := by
662662
intro x hx
663-
suffices oscillationWithin f (Box.Icc I) x = 0 by rw [this]; exact ofReal_pos.2 ε₁0
664-
simpa [OscillationWithin.eq_zero_iff_continuousWithinAt, D, hx.1] using hx.2 ∘ (fun a ↦ UD a)
665-
rcases comp.uniform_oscillationWithin this with ⟨r, r0, hr⟩
663+
suffices oscillationWithinAt f (Box.Icc I) x = 0 by rw [this]; exact ofReal_pos.2 ε₁0
664+
simpa [OscillationWithinAt.eq_zero_iff_continuousWithinAt, D, hx.1] using hx.2 ∘ (fun a ↦ UD a)
665+
rcases comp.uniform_oscillationWithinAt this with ⟨r, r0, hr⟩
666666
/- We prove the claim for partitions π₁ and π₂ subordinate to r/2, by writing the difference as
667667
an integralSum over π₁ ⊓ π₂ and considering separately the boxes of π₁ ⊓ π₂ which are/aren't
668668
fully contained within U. -/

Mathlib/Analysis/InnerProductSpace/MeanErgodic.lean

Lines changed: 50 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,22 @@ see `ContinuousLinearMap.tendsto_birkhoffAverage_orthogonalProjection`.
2323

2424
public section
2525

26-
open Filter Finset Function Bornology
26+
namespace LinearMap
27+
28+
variable {R M : Type*} [Semiring R]
29+
30+
abbrev fixedPoints [AddCommMonoid M] [Module R M] (f : M →ₗ[R] M) : Submodule R M := f.eqLocus 1
31+
32+
instance _root_.ContinuousLinearMap.completeSpace_fixedPoints
33+
[AddCommMonoid M] [Module R M] [UniformSpace M] [CompleteSpace M] [T2Space M]
34+
(f : M →L[R] M) : CompleteSpace f.fixedPoints :=
35+
ContinuousLinearMap.completeSpace_eqLocus f (1 : M →L[R] M)
36+
37+
abbrev coboundaries [AddCommGroup M] [Module R M] (f : M →ₗ[R] M) : Submodule R M := (f - 1).range
38+
39+
end LinearMap
40+
41+
open Filter Set Function Bornology Module
2742
open scoped Topology
2843

2944
variable {𝕜 E : Type*} [RCLike 𝕜] [NormedAddCommGroup E]
@@ -45,9 +60,9 @@ I chose to do it in order to isolate parts of the proof that do not rely
4560
on the inner product space structure.
4661
-/
4762
theorem LinearMap.tendsto_birkhoffAverage_of_ker_subset_closure [NormedSpace 𝕜 E]
48-
(f : E →ₗ[𝕜] E) (hf : LipschitzWith 1 f) (g : E →L[𝕜] LinearMap.eqLocus f 1)
49-
(hg_proj : ∀ x : LinearMap.eqLocus f 1, g x = x)
50-
(hg_ker : (g.ker : Set E) ⊆ closure (LinearMap.range (f - 1))) (x : E) :
63+
(f : E →ₗ[𝕜] E) (hf : LipschitzWith 1 f) (g : E →L[𝕜] f.fixedPoints)
64+
(hg_proj : ∀ x : f.fixedPoints, g x = x)
65+
(hg_ker : g.ker ≤ f.coboundaries.topologicalClosure) (x : E) :
5166
Tendsto (birkhoffAverage 𝕜 f _root_.id · x) atTop (𝓝 (g x)) := by
5267
/- Any point can be represented as a sum of `y ∈ LinearMap.ker g` and a fixed point `z`. -/
5368
obtain ⟨y, hy, z, hz, rfl⟩ : ∃ y, g y = 0 ∧ ∃ z, IsFixedPt f z ∧ x = y + z :=
@@ -59,7 +74,7 @@ theorem LinearMap.tendsto_birkhoffAverage_of_ker_subset_closure [NormedSpace
5974
simpa [hy, hgz, birkhoffAverage, birkhoffSum, Finset.sum_add_distrib, smul_add]
6075
using this.add (hz.tendsto_birkhoffAverage 𝕜 _root_.id)
6176
/- By continuity, it suffices to prove the theorem on a dense subset of `LinearMap.ker g`.
62-
By assumption, `LinearMap.range (f - 1)` is dense in the kernel of `g`,
77+
By assumption, `f.coboundaries` is dense in the kernel of `g`,
6378
so it suffices to prove the theorem for `y = f x - x`. -/
6479
have : IsClosed {x | Tendsto (birkhoffAverage 𝕜 f _root_.id · x) atTop (𝓝 0)} :=
6580
isClosed_setOf_tendsto_birkhoffAverage 𝕜 hf uniformContinuous_id continuous_const
@@ -78,6 +93,31 @@ variable [InnerProductSpace 𝕜 E] [CompleteSpace E]
7893

7994
local notation "⟪" x ", " y "⟫" => inner 𝕜 x y
8095

96+
open Submodule
97+
98+
/-- The closure of the coboundaries of the form `f x - x` contains the orthogonal complement of the
99+
fixed points of `f`.
100+
-/
101+
theorem ContinuousLinearMap.fixedPoints_orthogonal_le_topologicalClosure_coboundary
102+
(f : E →L[𝕜] E) (hf : ‖f‖ ≤ 1) : f.fixedPointsᗮ ≤ f.coboundaries.topologicalClosure := by
103+
/- In other words, we need to verify that any vector that is orthogonal to the range of `f - 1`
104+
is a fixed point of `f`. -/
105+
rw [← Submodule.orthogonal_orthogonal_eq_closure]
106+
/- To verify this, we verify `‖f x‖ ≤ ‖x‖` (because `‖f‖ ≤ 1`) and `⟪f x, x⟫ = ‖x‖²`. -/
107+
refine Submodule.orthogonal_le fun x hx ↦ eq_of_norm_le_re_inner_eq_norm_sq (𝕜 := 𝕜) ?_ ?_
108+
· simpa using f.le_of_opNorm_le hf x
109+
· have : ∀ y, ⟪f y, x⟫ = ⟪y, x⟫ := by
110+
simpa [Submodule.mem_orthogonal, inner_sub_left, sub_eq_zero] using hx
111+
simp [this]
112+
113+
theorem ContinuousLinearMap.topologicalClosure_eqLocus_sum_coboundary_eq_top
114+
(f : E →L[𝕜] E) (hf : ‖f‖ ≤ 1) : (f.fixedPoints + f.coboundaries).topologicalClosure = ⊤ := by
115+
have h := sup_orthogonal_of_hasOrthogonalProjection (K := f.fixedPoints)
116+
rw [eq_top_iff] at *
117+
grw [f.fixedPoints_orthogonal_le_topologicalClosure_coboundary hf,
118+
ClosureOperator.sup_closure_le _ f.fixedPoints] at h
119+
assumption
120+
81121
set_option backward.isDefEq.respectTransparency false in
82122
/-- **Von Neumann Mean Ergodic Theorem** for an operator in a Hilbert space.
83123
For a contracting continuous linear self-map `f : E →L[𝕜] E` of a Hilbert space, `‖f‖ ≤ 1`,
@@ -88,21 +128,13 @@ birkhoffAverage 𝕜 f id N x = (N : 𝕜)⁻¹ • ∑ n ∈ Finset.range N, f^
88128
converge to the orthogonal projection of `x` to the subspace of fixed points of `f`. -/
89129
theorem ContinuousLinearMap.tendsto_birkhoffAverage_orthogonalProjection (f : E →L[𝕜] E)
90130
(hf : ‖f‖ ≤ 1) (x : E) :
91-
Tendsto (birkhoffAverage 𝕜 f _root_.id · x) atTop
92-
(𝓝 <| (f.eqLocus (1 : E →L[𝕜] E)).orthogonalProjection x) := by
131+
Tendsto (birkhoffAverage 𝕜 f id · x) atTop
132+
(𝓝 <| f.fixedPoints.orthogonalProjection x) := by
93133
/- Due to the previous theorem, it suffices to verify
94134
that the range of `f - 1` is dense in the orthogonal complement
95135
to the submodule of fixed points of `f`. -/
96136
apply (f : E →ₗ[𝕜] E).tendsto_birkhoffAverage_of_ker_subset_closure (f.lipschitz.weaken hf)
97-
· exact (f.eqLocus (1 : E →L[𝕜] E)).orthogonalProjection_mem_subspace_eq_self
137+
· exact f.fixedPoints.orthogonalProjection_mem_subspace_eq_self
98138
· clear x
99-
/- In other words, we need to verify that any vector that is orthogonal to the range of `f - 1`
100-
is a fixed point of `f`. -/
101-
rw [Submodule.ker_orthogonalProjection, ← Submodule.topologicalClosure_coe,
102-
SetLike.coe_subset_coe, ← Submodule.orthogonal_orthogonal_eq_closure]
103-
/- To verify this, we verify `‖f x‖ ≤ ‖x‖` (because `‖f‖ ≤ 1`) and `⟪f x, x⟫ = ‖x‖²`. -/
104-
refine Submodule.orthogonal_le fun x hx ↦ eq_of_norm_le_re_inner_eq_norm_sq (𝕜 := 𝕜) ?_ ?_
105-
· simpa using f.le_of_opNorm_le hf x
106-
· have : ∀ y, ⟪f y, x⟫ = ⟪y, x⟫ := by
107-
simpa [Submodule.mem_orthogonal, inner_sub_left, sub_eq_zero] using hx
108-
simp [this]
139+
rw [Submodule.ker_orthogonalProjection]
140+
exact f.fixedPoints_orthogonal_le_topologicalClosure_coboundary hf

0 commit comments

Comments
 (0)