Skip to content

Commit f807a98

Browse files
igorkhavkineigorkhavkineurkud
committed
feat(MeasureTheory/Function): stronger version of Vitali's convergence theorem (#9163)
Prove a stronger version of Vitali's convergence theorem, which does not require an `IsFiniteMeasure` hypothesis. Instead it uses a new uniform tightness hypothesis. The hypothesis `UnifTight` is implemented closely following the structure of the existing `UnifIntegrable`. Co-authored-by: igorkhavkine <133780155+igorkhavkine@users.noreply.github.com> Co-authored-by: Yury G. Kudryashov <urkud@urkud.name>
1 parent 41dc4b4 commit f807a98

File tree

2 files changed

+226
-13
lines changed

2 files changed

+226
-13
lines changed

Mathlib/MeasureTheory/Function/UnifTight.lean

Lines changed: 198 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,17 @@ Copyright (c) 2023 Igor Khavkine. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Igor Khavkine
55
-/
6-
import Mathlib.MeasureTheory.Function.LpSpace
6+
import Mathlib.MeasureTheory.Function.ConvergenceInMeasure
7+
import Mathlib.MeasureTheory.Function.L1Space
8+
import Mathlib.MeasureTheory.Function.UniformIntegrable
79

810
/-!
911
# Uniform tightness
1012
1113
This file contains the definitions for uniform tightness for a family of Lp functions.
1214
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.
1417
1518
## Main definitions
1619
@@ -23,6 +26,11 @@ that works also for spaces of infinite measure.
2326
2427
* `MeasureTheory.unifTight_finite`: a finite sequence of Lp functions is uniformly
2528
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.
2634
2735
## Tags
2836
@@ -70,15 +78,16 @@ theorem unifTight_iff_real {_ : MeasurableSpace α} (f : ι → α → β) (p :
7078

7179
namespace UnifTight
7280

73-
theorem eventually_cofinite_indicator (hf : UnifTight f p μ) {ε : ℝ≥0} (hε : ε ≠ 0) :
81+
theorem eventually_cofinite_indicator (hf : UnifTight f p μ) {ε : ℝ≥0} (hε : ε ≠ 0) :
7482
∀ᶠ 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⟩
7786
· intro s t hst ht i
7887
exact (snorm_mono <| norm_indicator_le_of_subset hst _).trans (ht i)
7988
· rwa [Measure.compl_mem_cofinite, lt_top_iff_ne_top]
8089

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) :
8291
∃ s, MeasurableSet s ∧ μ s < ∞ ∧ ∀ i, snorm (sᶜ.indicator (f i)) p μ ≤ ε :=
8392
let ⟨s, hμs, hsm, hfs⟩ := (hf.eventually_cofinite_indicator hε).exists_measurable_mem_of_smallSets
8493
⟨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 μ)
92101
refine ⟨∅, (by measurability), fun i ↦ ?_⟩
93102
simp only [compl_empty, indicator_univ, Pi.add_apply]
94103
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⟩)
96104
obtain ⟨s, hμs, hsm, hfs, hgs⟩ :
97105
∃ 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
102110
refine ⟨sᶜ, ne_of_lt hμs, fun i ↦ ?_⟩
103111
have η_cast : ↑η.toNNReal = η := coe_toNNReal hη_top
104112
calc
@@ -199,4 +207,183 @@ theorem unifTight_finite [Finite ι] (hp_top : p ≠ ∞) {f : ι → α → β}
199207

200208
end UnifTight
201209

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
202389
end MeasureTheory

Mathlib/MeasureTheory/Function/UniformIntegrable.lean

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,9 @@ formulate the martingale convergence theorem.
3232
3333
* `MeasureTheory.unifIntegrable_finite`: a finite sequence of Lp functions is uniformly
3434
integrable.
35-
* `MeasureTheory.tendsto_Lp_of_tendsto_ae`: a sequence of Lp functions which is uniformly
35+
* `MeasureTheory.tendsto_Lp_finite_of_tendsto_ae`: a sequence of Lp functions which is uniformly
3636
integrable converges in Lp if they converge almost everywhere.
37-
* `MeasureTheory.tendstoInMeasure_iff_tendsto_Lp`: Vitali convergence theorem:
37+
* `MeasureTheory.tendstoInMeasure_iff_tendsto_Lp_finite`: Vitali convergence theorem:
3838
a sequence of Lp functions converges in Lp if and only if it is uniformly integrable
3939
and converges in measure.
4040
@@ -132,6 +132,32 @@ protected theorem ae_eq (hf : UnifIntegrable f p μ) (hfg : ∀ n, f n =ᵐ[μ]
132132
filter_upwards [hfg n] with x hx
133133
simp_rw [Set.indicator_apply, hx]
134134

135+
/-- Uniform integrability is preserved by restriction of the functions to a set. -/
136+
protected theorem indicator (hf : UnifIntegrable f p μ) (E : Set α) :
137+
UnifIntegrable (fun i => E.indicator (f i)) p μ := fun ε hε ↦ by
138+
obtain ⟨δ, hδ_pos, hε⟩ := hf hε
139+
refine ⟨δ, hδ_pos, fun i s hs hμs ↦ ?_⟩
140+
calc
141+
snorm (s.indicator (E.indicator (f i))) p μ = snorm (E.indicator (s.indicator (f i))) p μ := by
142+
simp only [indicator_indicator, inter_comm]
143+
_ ≤ snorm (s.indicator (f i)) p μ := snorm_indicator_le _
144+
_ ≤ ENNReal.ofReal ε := hε _ _ hs hμs
145+
146+
/-- Uniform integrability is preserved by restriction of the measure to a set. -/
147+
protected theorem restrict (hf : UnifIntegrable f p μ) (E : Set α) :
148+
UnifIntegrable f p (μ.restrict E) := fun ε hε ↦ by
149+
obtain ⟨δ, hδ_pos, hδε⟩ := hf hε
150+
refine ⟨δ, hδ_pos, fun i s hs hμs ↦ ?_⟩
151+
rw [μ.restrict_apply hs, ← measure_toMeasurable] at hμs
152+
calc
153+
snorm (indicator s (f i)) p (μ.restrict E) = snorm (f i) p (μ.restrict (s ∩ E)) := by
154+
rw [snorm_indicator_eq_snorm_restrict hs, μ.restrict_restrict hs]
155+
_ ≤ snorm (f i) p (μ.restrict (toMeasurable μ (s ∩ E))) :=
156+
snorm_mono_measure _ <| Measure.restrict_mono (subset_toMeasurable _ _) le_rfl
157+
_ = snorm (indicator (toMeasurable μ (s ∩ E)) (f i)) p μ :=
158+
(snorm_indicator_eq_snorm_restrict (measurableSet_toMeasurable _ _)).symm
159+
_ ≤ ENNReal.ofReal ε := hδε i _ (measurableSet_toMeasurable _ _) hμs
160+
135161
end UnifIntegrable
136162

137163
theorem unifIntegrable_zero_meas [MeasurableSpace α] {p : ℝ≥0∞} {f : ι → α → β} :

0 commit comments

Comments
 (0)