@@ -12,98 +12,88 @@ import Mathlib.Algebra.Order.Ring.Star
1212import Mathlib.Analysis.InnerProductSpace.Basic
1313import Mathlib.Analysis.RCLike.Lemmas
1414import Mathlib.Data.Real.StarOrdered
15- import Mathlib.Dynamics.BirkhoffSum.Average
15+ public import Mathlib.Dynamics.BirkhoffSum.Average
1616
1717/-!
1818# Maximal ergodic theorem.
1919
20- We define the set `birkhoffAverageSupSet f g a` of points `x` where the supremum of
21- `birkhoffAverage ℝ f g n x` for varying `n` is greater than `a`. Then, we show its
22- measure multiplied by `a` is bounded above by the integral of `g` on this set. In particular,
23- for a positive `g`, this integral is bounded above by the `L1` norm of `g`, so for `g`
24- taking values in a `NormedAddCommGroup`, we get an inequality involving the norm.
20+ We prove the maximal ergodic theorem for a measure-preserving map `f` and an integrable function
21+ `g`. The maximal ergodic operator `birkhoffAverageSup f g x` is defined as the supremum of the
22+ Birkhoff averages of `g` over all `n`. Moreover, we show some results about the auxiliary definition
23+ `birkhoffMax f g n`, defined as the maximum of the Birkhoff sums ranging between `0` and `n`.
2524
2625## Main results
2726
28- * `meas_birkhoffAverageSupSet_smul_const_le_integral`: the measure of `birkhoffAverageSupSet f g a`
29- multiplied by `a` is bounded above by the integral of `g` on the same set.
30- * `meas_birkhoffAverageSupSet_smul_const_le_norm`: the measure of `birkhoffAverageSupSet f ‖g‖ a`
31- multiplied by `a` is bounded above by the `L1` norm of `g`.
27+ * `distribution_birkhoffAverageSup_le_integral`: the cumulative distribution function of
28+ `birkhoffAverageSup` at `a` is less than or equal to the integral of `g` on the set where
29+ `a < birkhoffAverageSup f g x`.
30+ * `iSup_distribution_birkhoffAverageSup_le_norm`: the operator `birkhoffAverageSup` satisfies a
31+ weak-type inequality.
3232 -/
3333
34- variable {α : Type *} {f : α → α}
35-
3634open MeasureTheory Measure MeasurableSpace Filter Topology
3735
38- section BirkhoffMax
36+ variable {α M : Type *} {f : α → α} {g : α → M} {n : ℕ} {x : α}
37+
38+ @[expose]
39+ public section BirkhoffMax
3940
4041/-- The maximum of `birkhoffSum f g i` for `i` ranging from `0` to `n`. -/
41- def birkhoffMax (f : α → α) (g : α → ℝ) : ℕ →o (α → ℝ) :=
42+ def birkhoffMax [AddCommMonoid M] [SemilatticeSup M]
43+ (f : α → α) (g : α → M) : ℕ →o (α → M) :=
4244 partialSups (birkhoffSum f g)
4345
44- lemma birkhoffMax_nonneg {g n} :
45- 0 ≤ birkhoffMax f g n := by
46- apply (le_partialSups_of_le _ n.zero_le).trans'
47- rfl
48-
49- lemma birkhoffMax_succ {g n} :
50- birkhoffMax f g (n + 1 ) = 0 ⊔ (g + birkhoffMax f g n ∘ f) := by
51- have : birkhoffSum f g ∘ Nat.succ = fun k ↦ g + birkhoffSum f g k ∘ f := by
52- funext
53- exact birkhoffSum_succ' ..
54- erw [partialSups_succ', this, partialSups_const_add, birkhoffSum_zero']
55- funext
56- simp [birkhoffMax, partialSups]
57-
58- lemma birkhoffMax_succ' {g n x} (hpos : 0 < birkhoffMax f g (n + 1 ) x) :
46+ lemma birkhoffMax_nonneg [AddCommMonoid M] [SemilatticeSup M] : 0 ≤ birkhoffMax f g n x :=
47+ (birkhoffMax ..).mono n.zero_le x
48+
49+ variable [AddCommGroup M]
50+
51+ variable [SemilatticeSup M] [IsOrderedAddMonoid M] in
52+ lemma birkhoffMax_succ :
53+ birkhoffMax f g (n + 1 ) x = 0 ⊔ (g x + birkhoffMax f g n (f x)) := by
54+ have : birkhoffSum f g ∘ (· + 1 ) = (g + birkhoffSum f g · ∘ f) :=
55+ funext₂ <| fun k x ↦ birkhoffSum_succ' ..
56+ rw [birkhoffMax, partialSups_add_one', this, partialSups_const_add]
57+ simp [partialSups]
58+
59+ variable [LinearOrder M] [IsOrderedAddMonoid M]
60+
61+ lemma birkhoffMax_succ' (hpos : 0 < birkhoffMax f g (n + 1 ) x) :
5962 birkhoffMax f g (n + 1 ) x = g x + birkhoffMax f g n (f x) := by
60- erw [birkhoffMax_succ, lt_sup_iff] at hpos
61- cases hpos with
62- | inl h => absurd h; exact lt_irrefl 0
63- | inr h =>
64- erw [birkhoffMax_succ, Pi.sup_apply, sup_of_le_right h.le]
65- rfl
66-
67- lemma birkhoffMax_comp_le_succ {g n} :
68- birkhoffMax f g n ≤ birkhoffMax f g (n + 1 ) := by
69- gcongr
70- exact n.le_succ
71-
72- lemma birkhoffMax_le_birkhoffMax {g n x} (hpos : 0 < birkhoffMax f g n x) :
63+ rw [birkhoffMax_succ, birkhoffMax, lt_sup_iff] at hpos
64+ rcases hpos with h | h
65+ · grind
66+ · rw [birkhoffMax_succ, birkhoffMax, sup_of_le_right h.le]
67+
68+ lemma birkhoffMax_le_self_add_comp (hpos : 0 < birkhoffMax f g n x) :
7369 birkhoffMax f g n x ≤ g x + birkhoffMax f g n (f x) := by
74- match n with
75- | 0 => absurd hpos; exact lt_irrefl 0
76- | n + 1 =>
77- apply le_of_eq_of_le (birkhoffMax_succ' hpos)
70+ rcases n with _ | n
71+ · simp [birkhoffMax] at *
72+ · apply le_of_eq_of_le (birkhoffMax_succ' hpos)
7873 apply add_le_add_right
79- exact birkhoffMax_comp_le_succ (f x )
74+ apply birkhoffMax f g |>.mono ( by omega )
8075
81- lemma birkhoffMax_pos_of_mem_support {g n x}
82- (hx : x ∈ (birkhoffMax f g n).support) : 0 < birkhoffMax f g n x := by
83- apply lt_or_gt_of_ne at hx
84- cases hx with
85- | inl h =>
86- absurd h; exact (birkhoffMax_nonneg x).not_gt
87- | inr h => exact h
76+ end BirkhoffMax
77+
78+ variable {g : α → ℝ}
8879
8980-- TODO: move elsewhere
9081@[fun_prop]
91- lemma birkhoffSum_measurable [MeasurableSpace α] {f : α → α} (hf : Measurable f) {g : α → ℝ}
92- (hg : Measurable g) {n} : Measurable (birkhoffSum f g n) := by
82+ public lemma birkhoffSum_measurable [MeasurableSpace α] (hf : Measurable f) (hg : Measurable g) :
83+ Measurable (birkhoffSum f g n) := by
9384 apply Finset.measurable_sum
9485 measurability
9586
96- -- TODO: move elsewhere
9787@[fun_prop]
98- lemma birkhoffMax_measurable [MeasurableSpace α] (hf : Measurable f) {g : α → ℝ}
99- (hg : Measurable g) {n} : Measurable (birkhoffMax f g n) := by
88+ public lemma birkhoffMax_measurable [MeasurableSpace α] (hf : Measurable f) (hg : Measurable g) :
89+ Measurable (birkhoffMax f g n) := by
10090 unfold birkhoffMax
10191 induction n <;> measurability
10292
10393section MeasurePreserving
10494
105- variable {f : α → α} [MeasurableSpace α] (μ : Measure α := by volume_tac) {g : α → ℝ} {n}
106- (hf : MeasurePreserving f μ μ) ( hg : Integrable g μ)
95+ variable [MeasurableSpace α] (μ : Measure α := by volume_tac) (hf : MeasurePreserving f μ μ)
96+ (hg : Integrable g μ)
10797
10898include hf
10999
@@ -112,9 +102,8 @@ include hf
112102lemma birkhoffSum_aestronglyMeasurable (hg : AEStronglyMeasurable g μ) :
113103 AEStronglyMeasurable (birkhoffSum f g n) μ := by
114104 apply Finset.aestronglyMeasurable_fun_sum
115- exact fun i _ => hg.comp_measurePreserving (hf.iterate i)
105+ exact fun i _ ↦ hg.comp_measurePreserving (hf.iterate i)
116106
117- -- todo: move elsewhere
118107@[fun_prop]
119108lemma birkhoffMax_aestronglyMeasurable (hg : AEStronglyMeasurable g μ) :
120109 AEStronglyMeasurable (birkhoffMax f g n) μ := by
@@ -127,7 +116,6 @@ include hg
127116lemma birkhoffSum_integrable : Integrable (birkhoffSum f g n) μ :=
128117 integrable_finsetSum _ fun _ _ ↦ (hf.iterate _).integrable_comp_of_integrable hg
129118
130- -- todo: move elsewhere
131119lemma birkhoffMax_integrable : Integrable (birkhoffMax f g n) μ := by
132120 unfold birkhoffMax
133121 induction n with
@@ -145,17 +133,19 @@ lemma birkhoffMax_integral_le :
145133 · exact .add hg.restrict this.restrict
146134 · exact AEStronglyMeasurable.nullMeasurableSet_support (by measurability)
147135 · intro x hx
148- exact birkhoffMax_le_birkhoffMax (birkhoffMax_pos_of_mem_support hx)
136+ rw [Function.mem_support] at hx
137+ apply birkhoffMax_le_self_add_comp
138+ exact birkhoffMax_nonneg |>.lt_of_ne hx.symm
149139 · exact this.restrict
150140
151- lemma setIntegral_nonneg_on_birkhoffMax_support :
141+ lemma setIntegral_birkhoffMax_support_nonneg :
152142 0 ≤ ∫ x in (birkhoffMax f g n).support, g x ∂μ := by
153143 have hg₁ : AEStronglyMeasurable (birkhoffMax f g n) μ := by measurability
154144 have hg₂ : Integrable (birkhoffMax f g n) μ := birkhoffMax_integrable μ hf hg
155145 have hg₃ : Integrable (birkhoffMax f g n ∘ f) μ := hf.integrable_comp_of_integrable hg₂
156146 calc
157147 0 ≤ ∫ x in (birkhoffMax f g n).supportᶜ, birkhoffMax f g n (f x) ∂μ := by
158- exact integral_nonneg (fun x => birkhoffMax_nonneg (f x) )
148+ exact integral_nonneg (fun x ↦ birkhoffMax_nonneg)
159149 _ = ∫ x, birkhoffMax f g n (f x) ∂μ -
160150 ∫ x in (birkhoffMax f g n).support, birkhoffMax f g n (f x) ∂μ := by
161151 exact setIntegral_compl₀ hg₁.nullMeasurableSet_support hg₃
@@ -168,58 +158,56 @@ lemma setIntegral_nonneg_on_birkhoffMax_support :
168158
169159end MeasurePreserving
170160
171- end BirkhoffMax
161+ noncomputable section BirkhoffSup
162+
163+ def birkhoffSumSup (f : α → α) (g : α → ℝ) (x : α) : EReal :=
164+ ⨆ n, ↑(birkhoffSum f g n x)
165+
166+ lemma birkhoffSumSup_eq_iSup_birkhoffMax :
167+ birkhoffSumSup f g x = ⨆ n, ↑(birkhoffMax f g n x) := by
168+ simp [birkhoffMax, Pi.partialSups_apply, ←map_partialSups' EReal.coe_max, birkhoffSumSup]
172169
173- def birkhoffSupSet (f : α → α) (g : α → ℝ) : Set α :=
174- {x | ∃ n : ℕ, 0 < birkhoffSum f g n x}
175-
176- lemma birkhoffSupSet_eq_iSup_birkhoffMax_support {f : α → α} {g : α → ℝ} :
177- birkhoffSupSet f g = ⋃ n : ℕ, (birkhoffMax f g n).support := by
178- ext x
179- simp only [birkhoffSupSet, Set.mem_setOf_eq, Set.mem_iUnion, Function.mem_support]
180- constructor
181- · refine fun ⟨n, hn⟩ => ⟨n, ?_⟩
182- apply ne_of_gt (hn.trans_le _)
183- exact le_partialSups (birkhoffSum f g) _ _
184- · rintro ⟨n, hn⟩
185- apply lt_or_gt_of_ne at hn
186- cases hn with
187- | inl h => absurd h; exact not_lt_of_ge (birkhoffMax_nonneg x)
188- | inr h =>
189- rw [birkhoffMax, Pi.partialSups_apply] at h
190- rcases exists_partialSups_eq (birkhoffSum f g · x) n with ⟨m, _, hm₂⟩
191- exact ⟨m, hm₂ ▸ h⟩
192-
193- /-- The set of `x` for which `birkhoffAverage ℝ f g n x` greater than some `a`
194- for at least one value of `n`. -/
195- public def birkhoffAverageSupSet (f : α → α) (g : α → ℝ) (a : ℝ) : Set α :=
196- {x | ∃ n : ℕ, a < birkhoffAverage ℝ f g n x}
197-
198- theorem birkhoffAverage_iff_birkhoffSum {f : α → α} {x n g} {a : ℝ} (hn : 0 < n) :
170+ @[expose]
171+ public def birkhoffAverageSup (f : α → α) (g : α → ℝ) (x : α) : EReal :=
172+ ⨆ n, ↑(birkhoffAverage ℝ f g n x)
173+
174+ end BirkhoffSup
175+
176+ lemma setOf_birkhoffSumSup_pos_eq_iUnion_birkhoffMax_support :
177+ {x | 0 < birkhoffSumSup f g x} = ⋃ n : ℕ, (birkhoffMax f g n).support := by
178+ simp_rw [birkhoffSumSup_eq_iSup_birkhoffMax, lt_iSup_iff, Set.setOf_exists, EReal.coe_pos,
179+ birkhoffMax_nonneg.lt_iff_ne, Function.support, ne_comm]
180+
181+ theorem lt_birkhoffAverage_iff_lt_birkhoffSum {a : ℝ} (hn : 0 < n) :
199182 a < birkhoffAverage ℝ f g n x ↔ 0 < birkhoffSum f (g - fun _ ↦ a) n x := by
200183 nth_rw 2 [←smul_lt_smul_iff_of_pos_left (a := (↑n : ℝ)⁻¹) (by positivity)]
201184 rw [smul_zero, ←birkhoffAverage, birkhoffAverage_sub]
202185 simp only [Pi.sub_apply, sub_pos]
203186 nth_rw 2 [birkhoffAverage_of_comp_eq _ rfl (by positivity)]
204187
205- theorem birkhoffAverageSupSet_eq_birkhoffSupSet {f : α → α} {g a} (ha : 0 < a) :
206- birkhoffAverageSupSet f g a = birkhoffSupSet f (g - fun _ ↦ a) := by
207- unfold birkhoffAverageSupSet birkhoffSupSet
208- have {n x} : a < birkhoffAverage ℝ f g n x ↔ 0 < birkhoffSum f (g - fun _ ↦ a) n x := by
209- rcases n
210- · refine ⟨fun h => ?_, fun h => ?_⟩
211- · exfalso
212- rw [birkhoffAverage_zero] at h;
213- exact lt_asymm ha h
214- · exfalso
215- rw [birkhoffSum_zero] at h
216- exact lt_irrefl 0 h
217- · exact birkhoffAverage_iff_birkhoffSum (by positivity)
218- simp_rw [this]
188+ theorem lt_birkhoffAverageSup_iff_lt_birkhoffSumSup {a : ℝ} (ha : 0 < a) :
189+ a < birkhoffAverageSup f g x ↔ 0 < birkhoffSumSup f (g - fun _ ↦ a) x := by
190+ refine ⟨fun h ↦ ?_, fun h ↦ ?_⟩
191+ · have ⟨n, hn⟩ := lt_iSup_iff.mp h
192+ apply lt_iSup_iff.mpr (.intro n _)
193+ norm_cast at *
194+ rwa [←lt_birkhoffAverage_iff_lt_birkhoffSum]
195+ by_contra!
196+ apply Nat.eq_zero_of_le_zero at this
197+ simp only [this, birkhoffAverage_zero'] at hn
198+ exact lt_asymm hn ha
199+ · have ⟨n, hn⟩ := lt_iSup_iff.mp h
200+ apply lt_iSup_iff.mpr (.intro n _)
201+ norm_cast at *
202+ rwa [lt_birkhoffAverage_iff_lt_birkhoffSum]
203+ by_contra!
204+ apply Nat.eq_zero_of_le_zero at this
205+ simp only [this, birkhoffSum_zero'] at hn
206+ exact lt_irrefl 0 hn
219207
220208section MeasurePreserving
221209
222- variable {f : α → α} [MeasurableSpace α] (μ : Measure α := by volume_tac) {n}
210+ variable {f : α → α} [MeasurableSpace α] (μ : Measure α := by volume_tac)
223211 (hf : MeasurePreserving f μ μ)
224212
225213include hf
@@ -230,42 +218,40 @@ variable {g : α → ℝ} (hg : Integrable g μ)
230218
231219include hg
232220
233- lemma tendsto_setIntegral_on_birkhoffMax_support_birkhoffSupSet :
221+ lemma tendsto_setIntegral_birkhoffMax_support :
234222 Tendsto (fun n ↦ ∫ x in (birkhoffMax f g n).support, g x ∂μ) atTop
235- (𝓝 <| ∫ x in birkhoffSupSet f g, g x ∂ μ) := by
236- rw [birkhoffSupSet_eq_iSup_birkhoffMax_support ]
223+ (𝓝 <| ∫ x in {x | 0 < birkhoffSumSup f g x} , g x ∂ μ) := by
224+ rw [setOf_birkhoffSumSup_pos_eq_iUnion_birkhoffMax_support ]
237225 apply tendsto_setIntegral_of_monotone₀ _ _ hg.integrableOn
238226 · intros
239227 exact AEStronglyMeasurable.nullMeasurableSet_support (by measurability)
240228 · intro i j hij x
241- have : 0 ≤ birkhoffMax f g i x := birkhoffMax_nonneg x
242- have := (birkhoffMax f g).mono hij x
243- grind [Function.mem_support]
244- theorem setIntegral_nonneg_on_birkhoffSupSet :
245- 0 ≤ ∫ x in birkhoffSupSet f g, g x ∂μ := by
246- apply ge_of_tendsto' (tendsto_setIntegral_on_birkhoffMax_support_birkhoffSupSet μ hf hg)
229+ grind [birkhoffMax_nonneg, (birkhoffMax f g).mono hij x, Function.mem_support]
230+
231+ theorem setIntegral_birkhoffSumSup_nonneg :
232+ 0 ≤ ∫ x in {x | 0 < birkhoffSumSup f g x}, g x ∂μ := by
233+ apply ge_of_tendsto' (tendsto_setIntegral_birkhoffMax_support μ hf hg)
247234 intro n
248- exact setIntegral_nonneg_on_birkhoffMax_support μ hf hg
235+ exact setIntegral_birkhoffMax_support_nonneg μ hf hg
249236
250237variable [IsFiniteMeasure μ]
251238
252- /-- The measure of the set where the supremum of the Birkhoff averages of `g` is greater than `a`,
253- multiplied by `a`, is bounded above by the integral of `g` on this set. -/
254- public theorem meas_birkhoffAverageSupSet_smul_const_le_integral (a : ℝ) (ha : 0 < a) :
255- a * μ.real (birkhoffAverageSupSet f g a) ≤ ∫ x in birkhoffAverageSupSet f g a, g x ∂μ := by
239+ /-- The cumulative distribution function of `birkhoffAverageSup` at `a` is less than or equal to the
240+ integral of `g` on the set where `a < birkhoffAverageSup f g x`. -/
241+ public theorem distribution_birkhoffAverageSup_le_integral (a : ℝ) (ha : 0 < a) :
242+ a * μ.real {x | a < birkhoffAverageSup f g x}
243+ ≤ ∫ x in {x | a < birkhoffAverageSup f g x}, g x ∂μ := by
256244 have p₁ := Integrable.sub hg (integrable_const a)
257245 calc
258- _ = ∫ x in birkhoffSupSet f (g - fun _ ↦ a), a ∂μ := by
259- simp [birkhoffAverageSupSet_eq_birkhoffSupSet ha]
246+ _ = ∫ x in {x | 0 < birkhoffSumSup f (g - fun _ ↦ a) x} , a ∂μ := by
247+ simp [lt_birkhoffAverageSup_iff_lt_birkhoffSumSup ha]
260248 ring
261- _ ≤ ∫ x in birkhoffSupSet f (g - fun _ ↦ a), a ∂μ +
262- ∫ x in birkhoffSupSet f (g - fun _ ↦ a), g x - a ∂μ := by
263- exact le_add_of_nonneg_right (setIntegral_nonneg_on_birkhoffSupSet μ hf p₁)
264- _ = ∫ x in birkhoffAverageSupSet f g a, g x ∂μ := by
265- rw [← integral_add, birkhoffAverageSupSet_eq_birkhoffSupSet ha]
266- · rcongr
267- ring
268- · exact (integrable_const a).restrict
249+ _ ≤ ∫ x in {x | 0 < birkhoffSumSup f (g - fun _ ↦ a) x}, a ∂μ +
250+ ∫ x in {x | 0 < birkhoffSumSup f (g - fun _ ↦ a) x}, g x - a ∂μ := by
251+ exact le_add_of_nonneg_right (setIntegral_birkhoffSumSup_nonneg μ hf p₁)
252+ _ = ∫ x in {x | a < birkhoffAverageSup f g x}, g x ∂μ := by
253+ rw [←integral_add (integrable_const a).restrict]
254+ · simp [lt_birkhoffAverageSup_iff_lt_birkhoffSumSup ha]
269255 · exact p₁.restrict
270256
271257end Real
@@ -276,16 +262,16 @@ variable {E : Type*} [NormedAddCommGroup E] {g : α → E} (hg : Integrable g μ
276262
277263include hg
278264
279- /-- Maximal ergodic theorem: the maximal ergodic operator satisfies a weak-type inequality. -/
280- public theorem meas_birkhoffAverageSupSet_smul_const_le_norm :
281- ⨆ a, a * μ.real (birkhoffAverageSupSet f ( fun x ↦ ‖g x ‖) a) ≤ ∫ x, ‖g x‖ ∂μ := by
265+ /-- Maximal ergodic theorem: the operator `birkhoffAverageSup` satisfies a weak-type inequality. -/
266+ public theorem iSup_distribution_birkhoffAverageSup_le_norm :
267+ ⨆ a : ℝ , a * μ.real {x | a < birkhoffAverageSup f ( ‖g · ‖) x} ≤ ∫ x, ‖g x‖ ∂μ := by
282268 refine ciSup_le fun a ↦ ?_
283269 by_cases! ha : 0 < a; swap
284270 · apply mul_nonpos_of_nonpos_of_nonneg ha measureReal_nonneg |>.trans
285271 exact integral_nonneg (fun _ ↦ norm_nonneg _)
286272 calc
287- _ ≤ ∫ x in birkhoffAverageSupSet f ( fun x ↦ ‖g x ‖) a , ‖g x‖ ∂μ := by
288- exact meas_birkhoffAverageSupSet_smul_const_le_integral μ hf hg.norm a ha
273+ _ ≤ ∫ x in {x | a < birkhoffAverageSup f ( ‖g · ‖) x} , ‖g x‖ ∂μ := by
274+ exact distribution_birkhoffAverageSup_le_integral μ hf hg.norm a ha
289275 _ ≤ ∫ x, ‖g x‖ ∂μ := by
290276 exact setIntegral_le_integral hg.norm (ae_of_all _ (norm_nonneg <| g ·))
291277
0 commit comments