@@ -3,14 +3,17 @@ Copyright (c) 2023 Igor Khavkine. All rights reserved.
3
3
Released under Apache 2.0 license as described in the file LICENSE.
4
4
Authors: Igor Khavkine
5
5
-/
6
- import Mathlib.MeasureTheory.Function.LpSpace
6
+ import Mathlib.MeasureTheory.Function.ConvergenceInMeasure
7
+ import Mathlib.MeasureTheory.Function.L1Space
8
+ import Mathlib.MeasureTheory.Function.UniformIntegrable
7
9
8
10
/-!
9
11
# Uniform tightness
10
12
11
13
This file contains the definitions for uniform tightness for a family of Lp functions.
12
14
It is used as a hypothesis to the version of Vitali's convergence theorem for Lp spaces
13
- that works also for spaces of infinite measure.
15
+ that works also for spaces of infinite measure. This version of Vitali's theorem
16
+ is also proved later in the file.
14
17
15
18
## Main definitions
16
19
@@ -23,6 +26,11 @@ that works also for spaces of infinite measure.
23
26
24
27
* `MeasureTheory.unifTight_finite`: a finite sequence of Lp functions is uniformly
25
28
tight.
29
+ * `MeasureTheory.tendsto_Lp_of_tendsto_ae`: a sequence of Lp functions which is uniformly
30
+ integrable and uniformly tight converges in Lp if it converges almost everywhere.
31
+ * `MeasureTheory.tendstoInMeasure_iff_tendsto_Lp`: Vitali convergence theorem:
32
+ a sequence of Lp functions converges in Lp if and only if it is uniformly integrable,
33
+ uniformly tight and converges in measure.
26
34
27
35
## Tags
28
36
@@ -70,15 +78,16 @@ theorem unifTight_iff_real {_ : MeasurableSpace α} (f : ι → α → β) (p :
70
78
71
79
namespace UnifTight
72
80
73
- theorem eventually_cofinite_indicator (hf : UnifTight f p μ) {ε : ℝ≥0 } (hε : ε ≠ 0 ) :
81
+ theorem eventually_cofinite_indicator (hf : UnifTight f p μ) {ε : ℝ≥0 ∞ } (hε : ε ≠ 0 ) :
74
82
∀ᶠ s in μ.cofinite.smallSets, ∀ i, snorm (s.indicator (f i)) p μ ≤ ε := by
75
- rcases hf (pos_iff_ne_zero.2 hε) with ⟨s, hμs, hfs⟩
76
- refine (eventually_smallSets' ?_).2 ⟨sᶜ, ?_, fun i ↦ hfs i⟩
83
+ by_cases hε_top : ε = ∞; subst hε_top; simp
84
+ rcases hf (pos_iff_ne_zero.2 (toNNReal_ne_zero.mpr ⟨hε,hε_top⟩)) with ⟨s, hμs, hfs⟩
85
+ refine (eventually_smallSets' ?_).2 ⟨sᶜ, ?_, fun i ↦ (coe_toNNReal hε_top) ▸ hfs i⟩
77
86
· intro s t hst ht i
78
87
exact (snorm_mono <| norm_indicator_le_of_subset hst _).trans (ht i)
79
88
· rwa [Measure.compl_mem_cofinite, lt_top_iff_ne_top]
80
89
81
- protected theorem exists_measurableSet_indicator (hf : UnifTight f p μ) {ε : ℝ≥0 } (hε : ε ≠ 0 ) :
90
+ protected theorem exists_measurableSet_indicator (hf : UnifTight f p μ) {ε : ℝ≥0 ∞ } (hε : ε ≠ 0 ) :
82
91
∃ s, MeasurableSet s ∧ μ s < ∞ ∧ ∀ i, snorm (sᶜ.indicator (f i)) p μ ≤ ε :=
83
92
let ⟨s, hμs, hsm, hfs⟩ := (hf.eventually_cofinite_indicator hε).exists_measurable_mem_of_smallSets
84
93
⟨sᶜ, hsm.compl, hμs, by rwa [compl_compl s]⟩
@@ -92,13 +101,12 @@ protected theorem add (hf : UnifTight f p μ) (hg : UnifTight g p μ)
92
101
refine ⟨∅, (by measurability), fun i ↦ ?_⟩
93
102
simp only [compl_empty, indicator_univ, Pi.add_apply]
94
103
exact (hη (f i) (g i) (hf_meas i) (hg_meas i) le_top le_top).le
95
- have nnη_nz := (toNNReal_ne_zero.mpr ⟨hη_pos.ne',hη_top⟩)
96
104
obtain ⟨s, hμs, hsm, hfs, hgs⟩ :
97
105
∃ s ∈ μ.cofinite, MeasurableSet s ∧
98
- (∀ i, snorm (s.indicator (f i)) p μ ≤ η.toNNReal ) ∧
99
- (∀ i, snorm (s.indicator (g i)) p μ ≤ η.toNNReal ) :=
100
- ((hf.eventually_cofinite_indicator nnη_nz ).and
101
- (hg.eventually_cofinite_indicator nnη_nz )).exists_measurable_mem_of_smallSets
106
+ (∀ i, snorm (s.indicator (f i)) p μ ≤ η) ∧
107
+ (∀ i, snorm (s.indicator (g i)) p μ ≤ η) :=
108
+ ((hf.eventually_cofinite_indicator hη_pos.ne' ).and
109
+ (hg.eventually_cofinite_indicator hη_pos.ne' )).exists_measurable_mem_of_smallSets
102
110
refine ⟨sᶜ, ne_of_lt hμs, fun i ↦ ?_⟩
103
111
have η_cast : ↑η.toNNReal = η := coe_toNNReal hη_top
104
112
calc
@@ -199,4 +207,183 @@ theorem unifTight_finite [Finite ι] (hp_top : p ≠ ∞) {f : ι → α → β}
199
207
200
208
end UnifTight
201
209
210
+ section VitaliConvergence
211
+
212
+ variable {μ : Measure α} {p : ℝ≥0 ∞} {f : ℕ → α → β} {g : α → β}
213
+
214
+ /-! Both directions and an iff version of Vitali's convergence theorem on measure spaces
215
+ of not necessarily finite volume. See `Thm III.6.15` of Dunford & Schwartz, Part I (1958). -/
216
+
217
+ /- We start with the reverse direction. We only need to show that uniform tightness follows
218
+ from convergence in Lp. Mathlib already has the analogous `unifIntegrable_of_tendsto_Lp`
219
+ and `tendstoInMeasure_of_tendsto_snorm`. -/
220
+
221
+ /-- Intermediate lemma for `unifTight_of_tendsto_Lp`. -/
222
+ private theorem unifTight_of_tendsto_Lp_zero (hp' : p ≠ ∞) (hf : ∀ n, Memℒp (f n) p μ)
223
+ (hf_tendsto : Tendsto (fun n => snorm (f n) p μ) atTop (𝓝 0 )) : UnifTight f p μ := fun ε hε ↦by
224
+ rw [ENNReal.tendsto_atTop_zero] at hf_tendsto
225
+ obtain ⟨N, hNε⟩ := hf_tendsto ε (by simpa only [gt_iff_lt, ENNReal.coe_pos])
226
+ let F : Fin N → α → β := fun n => f n
227
+ have hF : ∀ n, Memℒp (F n) p μ := fun n => hf n
228
+ obtain ⟨s, hμs, hFε⟩ := unifTight_fin hp' hF hε
229
+ refine ⟨s, hμs, fun n => ?_⟩
230
+ by_cases hn : n < N
231
+ · exact hFε ⟨n, hn⟩
232
+ · exact (snorm_indicator_le _).trans (hNε n (not_lt.mp hn))
233
+
234
+ /-- Convergence in Lp implies uniform tightness. -/
235
+ private theorem unifTight_of_tendsto_Lp (hp' : p ≠ ∞) (hf : ∀ n, Memℒp (f n) p μ)
236
+ (hg : Memℒp g p μ) (hfg : Tendsto (fun n => snorm (f n - g) p μ) atTop (𝓝 0 )) :
237
+ UnifTight f p μ := by
238
+ have : f = (fun _ => g) + fun n => f n - g := by ext1 n; simp
239
+ rw [this]
240
+ refine UnifTight.add ?_ ?_ (fun _ => hg.aestronglyMeasurable)
241
+ fun n => (hf n).1 .sub hg.aestronglyMeasurable
242
+ · exact unifTight_const hp' hg
243
+ · exact unifTight_of_tendsto_Lp_zero hp' (fun n => (hf n).sub hg) hfg
244
+
245
+ /- Next we deal with the forward direction. The `Memℒp` and `TendstoInMeasure` hypotheses
246
+ are unwrapped and strengthened (by known lemmas) to also have the `StronglyMeasurable`
247
+ and a.e. convergence hypotheses. The bulk of the proof is done under these stronger hypotheses.-/
248
+
249
+ /-- Bulk of the proof under strengthened hypotheses. Invoked from `tendsto_Lp_of_tendsto_ae`. -/
250
+ private theorem tendsto_Lp_of_tendsto_ae_of_meas (hp : 1 ≤ p) (hp' : p ≠ ∞)
251
+ {f : ℕ → α → β} {g : α → β} (hf : ∀ n, StronglyMeasurable (f n)) (hg : StronglyMeasurable g)
252
+ (hg' : Memℒp g p μ) (hui : UnifIntegrable f p μ) (hut : UnifTight f p μ)
253
+ (hfg : ∀ᵐ x ∂μ, Tendsto (fun n => f n x) atTop (𝓝 (g x))) :
254
+ Tendsto (fun n => snorm (f n - g) p μ) atTop (𝓝 0 ) := by
255
+ rw [ENNReal.tendsto_atTop_zero]
256
+ intro ε hε
257
+ by_cases hfinε : ε ≠ ∞; swap
258
+ · rw [not_ne_iff.mp hfinε]; exact ⟨0 , fun n _ => le_top⟩
259
+ by_cases hμ : μ = 0
260
+ · rw [hμ]; use 0 ; intro n _; rw [snorm_measure_zero]; exact zero_le ε
261
+ have hε' : 0 < ε / 3 := ENNReal.div_pos hε.ne' (coe_ne_top)
262
+ -- use tightness to divide the domain into interior and exterior
263
+ obtain ⟨Eg, hmEg, hμEg, hgε⟩ := Memℒp.exists_snorm_indicator_compl_lt hp' hg' hε'.ne' --hrε'
264
+ obtain ⟨Ef, hmEf, hμEf, hfε⟩ := hut.exists_measurableSet_indicator hε'.ne'
265
+ have hmE := hmEf.union hmEg
266
+ have hfmE := (measure_union_le Ef Eg).trans_lt (add_lt_top.mpr ⟨hμEf, hμEg⟩)
267
+ set E : Set α := Ef ∪ Eg
268
+ -- use uniform integrability to get control on the limit over E
269
+ have hgE' := Memℒp.restrict E hg'
270
+ have huiE := hui.restrict E
271
+ have hfgE : (∀ᵐ x ∂(μ.restrict E), Tendsto (fun n => f n x) atTop (𝓝 (g x))) :=
272
+ ae_restrict_of_ae hfg
273
+ -- `tendsto_Lp_of_tendsto_ae_of_meas` needs to
274
+ -- synthesize an argument `[IsFiniteMeasure (μ.restrict E)]`.
275
+ -- It is enough to have in the context a term of `Fact (μ E < ∞)`, which is our `ffmE` below,
276
+ -- which is automatically fed into `Restrict.isFiniteInstance`.
277
+ have ffmE : Fact _ := { out := hfmE }
278
+ have hInner := tendsto_Lp_finite_of_tendsto_ae_of_meas hp hp' hf hg hgE' huiE hfgE
279
+ rw [ENNReal.tendsto_atTop_zero] at hInner
280
+ -- get a sufficiently large N for given ε, and consider any n ≥ N
281
+ obtain ⟨N, hfngε⟩ := hInner (ε / 3 ) hε'
282
+ use N; intro n hn
283
+ -- get interior estimates
284
+ have hmfngE : AEStronglyMeasurable _ μ := (((hf n).sub hg).indicator hmE).aestronglyMeasurable
285
+ have hfngEε := calc
286
+ snorm (E.indicator (f n - g)) p μ
287
+ = snorm (f n - g) p (μ.restrict E) := snorm_indicator_eq_snorm_restrict hmE
288
+ _ ≤ ε / 3 := hfngε n hn
289
+ -- get exterior estimates
290
+ have hmgEc : AEStronglyMeasurable _ μ := (hg.indicator hmE.compl).aestronglyMeasurable
291
+ have hgEcε := calc
292
+ snorm (Eᶜ.indicator g) p μ
293
+ ≤ snorm (Efᶜ.indicator (Egᶜ.indicator g)) p μ := by
294
+ unfold_let E; rw [compl_union, ← indicator_indicator]
295
+ _ ≤ snorm (Egᶜ.indicator g) p μ := snorm_indicator_le _
296
+ _ ≤ ε / 3 := hgε.le
297
+ have hmfnEc : AEStronglyMeasurable _ μ := ((hf n).indicator hmE.compl).aestronglyMeasurable
298
+ have hfnEcε : snorm (Eᶜ.indicator (f n)) p μ ≤ ε / 3 := calc
299
+ snorm (Eᶜ.indicator (f n)) p μ
300
+ ≤ snorm (Egᶜ.indicator (Efᶜ.indicator (f n))) p μ := by
301
+ unfold_let E; rw [compl_union, inter_comm, ← indicator_indicator]
302
+ _ ≤ snorm (Efᶜ.indicator (f n)) p μ := snorm_indicator_le _
303
+ _ ≤ ε / 3 := hfε n
304
+ have hmfngEc : AEStronglyMeasurable _ μ :=
305
+ (((hf n).sub hg).indicator hmE.compl).aestronglyMeasurable
306
+ have hfngEcε := calc
307
+ snorm (Eᶜ.indicator (f n - g)) p μ
308
+ = snorm (Eᶜ.indicator (f n) - Eᶜ.indicator g) p μ := by
309
+ rw [(Eᶜ.indicator_sub' _ _)]
310
+ _ ≤ snorm (Eᶜ.indicator (f n)) p μ + snorm (Eᶜ.indicator g) p μ := by
311
+ apply snorm_sub_le (by assumption) (by assumption) hp
312
+ _ ≤ ε / 3 + ε / 3 := add_le_add hfnEcε hgEcε
313
+ -- finally, combine interior and exterior estimates
314
+ calc
315
+ snorm (f n - g) p μ
316
+ = snorm (Eᶜ.indicator (f n - g) + E.indicator (f n - g)) p μ := by
317
+ congr; exact (E.indicator_compl_add_self _).symm
318
+ _ ≤ snorm (indicator Eᶜ (f n - g)) p μ + snorm (indicator E (f n - g)) p μ := by
319
+ apply snorm_add_le (by assumption) (by assumption) hp
320
+ _ ≤ (ε / 3 + ε / 3 ) + ε / 3 := add_le_add hfngEcε hfngEε
321
+ _ = ε := by simp only [ENNReal.add_thirds] --ENNReal.add_thirds ε
322
+
323
+ /-- Lemma used in `tendsto_Lp_of_tendsto_ae`. -/
324
+ private theorem ae_tendsto_ae_congr {f f' : ℕ → α → β} {g g' : α → β}
325
+ (hff' : ∀ (n : ℕ), f n =ᵐ[μ] f' n) (hgg' : g =ᵐ[μ] g')
326
+ (hfg : ∀ᵐ x ∂μ, Tendsto (fun n => f n x) atTop (𝓝 (g x))) :
327
+ ∀ᵐ x ∂μ, Tendsto (fun n => f' n x) atTop (𝓝 (g' x)) := by
328
+ have hff'' := eventually_countable_forall.mpr hff'
329
+ filter_upwards [hff'', hgg', hfg] with x hff'x hgg'x hfgx
330
+ apply Tendsto.congr hff'x
331
+ rw [← hgg'x]; exact hfgx
332
+
333
+ /-- Forward direction of Vitali's convergnece theorem, with a.e. instead of InMeasure convergence.-/
334
+ theorem tendsto_Lp_of_tendsto_ae (hp : 1 ≤ p) (hp' : p ≠ ∞)
335
+ {f : ℕ → α → β} {g : α → β} (haef : ∀ n, AEStronglyMeasurable (f n) μ)
336
+ (hg' : Memℒp g p μ) (hui : UnifIntegrable f p μ) (hut : UnifTight f p μ)
337
+ (hfg : ∀ᵐ x ∂μ, Tendsto (fun n => f n x) atTop (𝓝 (g x))) :
338
+ Tendsto (fun n => snorm (f n - g) p μ) atTop (𝓝 0 ) := by
339
+ -- come up with an a.e. equal strongly measurable replacement `f` for `g`
340
+ have hf := fun n => (haef n).stronglyMeasurable_mk
341
+ have hff' := fun n => (haef n).ae_eq_mk (μ := μ)
342
+ have hui' := hui.ae_eq hff'
343
+ have hut' := hut.aeeq hff'
344
+ have hg := hg'.aestronglyMeasurable.stronglyMeasurable_mk
345
+ have hgg' := hg'.aestronglyMeasurable.ae_eq_mk (μ := μ)
346
+ have hg'' := hg'.ae_eq hgg'
347
+ have haefg' := ae_tendsto_ae_congr hff' hgg' hfg
348
+ set f' := fun n => (haef n).mk (μ := μ)
349
+ set g' := hg'.aestronglyMeasurable.mk (μ := μ)
350
+ have haefg (n : ℕ) : f n - g =ᵐ[μ] f' n - g' := (hff' n).sub hgg'
351
+ have hsnfg (n : ℕ) := snorm_congr_ae (p := p) (haefg n)
352
+ apply Filter.Tendsto.congr (fun n => (hsnfg n).symm)
353
+ exact tendsto_Lp_of_tendsto_ae_of_meas hp hp' hf hg hg'' hui' hut' haefg'
354
+
355
+ /-- Forward direction of Vitali's convergence theorem:
356
+ if `f` is a sequence of uniformly integrable, uniformly tight functions that converge in
357
+ measure to some function `g` in a finite measure space, then `f` converge in Lp to `g`. -/
358
+ theorem tendsto_Lp_of_tendstoInMeasure (hp : 1 ≤ p) (hp' : p ≠ ∞)
359
+ (hf : ∀ n, AEStronglyMeasurable (f n) μ) (hg : Memℒp g p μ)
360
+ (hui : UnifIntegrable f p μ) (hut : UnifTight f p μ)
361
+ (hfg : TendstoInMeasure μ f atTop g) : Tendsto (fun n => snorm (f n - g) p μ) atTop (𝓝 0 ) := by
362
+ refine tendsto_of_subseq_tendsto fun ns hns => ?_
363
+ obtain ⟨ms, _, hms'⟩ := TendstoInMeasure.exists_seq_tendsto_ae fun ε hε => (hfg ε hε).comp hns
364
+ exact ⟨ms,
365
+ tendsto_Lp_of_tendsto_ae hp hp' (fun _ => hf _) hg
366
+ (fun ε hε => -- `UnifIntegrable` on a subsequence
367
+ let ⟨δ, hδ, hδ'⟩ := hui hε
368
+ ⟨δ, hδ, fun i s hs hμs => hδ' _ s hs hμs⟩)
369
+ (fun ε hε => -- `UnifTight` on a subsequence
370
+ let ⟨s, hμs, hfε⟩ := hut hε
371
+ ⟨s, hμs, fun i => hfε _⟩)
372
+ hms'⟩
373
+
374
+ /-- **Vitali's convergence theorem** (non-finite measure version).
375
+
376
+ A sequence of functions `f` converges to `g` in Lp
377
+ if and only if it is uniformly integrable, uniformly tight and converges to `g` in measure. -/
378
+ theorem tendstoInMeasure_iff_tendsto_Lp (hp : 1 ≤ p) (hp' : p ≠ ∞)
379
+ (hf : ∀ n, Memℒp (f n) p μ) (hg : Memℒp g p μ) :
380
+ TendstoInMeasure μ f atTop g ∧ UnifIntegrable f p μ ∧ UnifTight f p μ
381
+ ↔ Tendsto (fun n => snorm (f n - g) p μ) atTop (𝓝 0 ) where
382
+ mp h := tendsto_Lp_of_tendstoInMeasure hp hp' (fun n => (hf n).1 ) hg h.2 .1 h.2 .2 h.1
383
+ mpr h := ⟨tendstoInMeasure_of_tendsto_snorm (lt_of_lt_of_le zero_lt_one hp).ne'
384
+ (fun n => (hf n).aestronglyMeasurable) hg.aestronglyMeasurable h,
385
+ unifIntegrable_of_tendsto_Lp hp hp' hf hg h,
386
+ unifTight_of_tendsto_Lp hp' hf hg h⟩
387
+
388
+ end VitaliConvergence
202
389
end MeasureTheory
0 commit comments