|
| 1 | +/- |
| 2 | +Copyright (c) 2023 Igor Khavkine. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Igor Khavkine |
| 5 | +-/ |
| 6 | +import Mathlib.MeasureTheory.Function.LpSpace |
| 7 | + |
| 8 | +/-! |
| 9 | +# Uniform tightness |
| 10 | +
|
| 11 | +This file contains the definitions for uniform tightness for a family of Lp functions. |
| 12 | +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. |
| 14 | +
|
| 15 | +## Main definitions |
| 16 | +
|
| 17 | +* `MeasureTheory.UnifTight`: |
| 18 | + A sequence of functions `f` is uniformly tight in `L^p` if for all `ε > 0`, there |
| 19 | + exists some measurable set `s` with finite measure such that the Lp-norm of |
| 20 | + `f i` restricted to `sᶜ` is smaller than `ε` for all `i`. |
| 21 | +
|
| 22 | +# Main results |
| 23 | +
|
| 24 | +* `MeasureTheory.unifTight_finite`: a finite sequence of Lp functions is uniformly |
| 25 | + tight. |
| 26 | +
|
| 27 | +## Tags |
| 28 | +
|
| 29 | +uniform integrable, uniformly tight, Vitali convergence theorem |
| 30 | +-/ |
| 31 | + |
| 32 | + |
| 33 | +namespace MeasureTheory |
| 34 | + |
| 35 | +open Classical Set Filter Topology MeasureTheory NNReal ENNReal |
| 36 | + |
| 37 | +variable {α β ι : Type*} {m : MeasurableSpace α} {μ : Measure α} [NormedAddCommGroup β] |
| 38 | + |
| 39 | + |
| 40 | + |
| 41 | +section UnifTight |
| 42 | + |
| 43 | +/- This follows closely the `UnifIntegrable` section |
| 44 | +from `MeasureTheory.Functions.UniformIntegrable`.-/ |
| 45 | + |
| 46 | +variable {f g : ι → α → β} {p : ℝ≥0∞} |
| 47 | + |
| 48 | + |
| 49 | +/-- A sequence of functions `f` is uniformly tight in `L^p` if for all `ε > 0`, there |
| 50 | +exists some measurable set `s` with finite measure such that the Lp-norm of |
| 51 | +`f i` restricted to `sᶜ` is smaller than `ε` for all `i`. -/ |
| 52 | +def UnifTight {_ : MeasurableSpace α} (f : ι → α → β) (p : ℝ≥0∞) (μ : Measure α) : Prop := |
| 53 | + ∀ ⦃ε : ℝ≥0⦄, 0 < ε → ∃ s : Set α, μ s ≠ ∞ ∧ ∀ i, snorm (sᶜ.indicator (f i)) p μ ≤ ε |
| 54 | + |
| 55 | +theorem unifTight_iff_ennreal {_ : MeasurableSpace α} (f : ι → α → β) (p : ℝ≥0∞) (μ : Measure α) : |
| 56 | + UnifTight f p μ ↔ ∀ ⦃ε : ℝ≥0∞⦄, 0 < ε → ∃ s : Set α, |
| 57 | + μ s ≠ ∞ ∧ ∀ i, snorm (sᶜ.indicator (f i)) p μ ≤ ε := by |
| 58 | + simp only [ENNReal.forall_ennreal, ENNReal.coe_pos] |
| 59 | + refine (and_iff_left ?_).symm |
| 60 | + simp [-ne_eq, zero_lt_top, le_top] |
| 61 | + use ∅; simpa only [measure_empty] using zero_ne_top |
| 62 | + |
| 63 | +theorem unifTight_iff_real {_ : MeasurableSpace α} (f : ι → α → β) (p : ℝ≥0∞) (μ : Measure α) : |
| 64 | + UnifTight f p μ ↔ ∀ ⦃ε : ℝ⦄, 0 < ε → ∃ s : Set α, |
| 65 | + μ s ≠ ∞ ∧ ∀ i, snorm (sᶜ.indicator (f i)) p μ ≤ .ofReal ε := by |
| 66 | + refine ⟨fun hut rε hrε ↦ hut (Real.toNNReal_pos.mpr hrε), fun hut ε hε ↦ ?_⟩ |
| 67 | + obtain ⟨s, hμs, hfε⟩ := hut hε |
| 68 | + use s, hμs; intro i |
| 69 | + exact (hfε i).trans_eq (ofReal_coe_nnreal (p := ε)) |
| 70 | + |
| 71 | +namespace UnifTight |
| 72 | + |
| 73 | +theorem eventually_cofinite_indicator (hf : UnifTight f p μ) {ε : ℝ≥0} (hε : ε ≠ 0) : |
| 74 | + ∀ᶠ 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⟩ |
| 77 | + · intro s t hst ht i |
| 78 | + exact (snorm_mono <| norm_indicator_le_of_subset hst _).trans (ht i) |
| 79 | + · rwa [Measure.compl_mem_cofinite, lt_top_iff_ne_top] |
| 80 | + |
| 81 | +protected theorem exists_measurableSet_indicator (hf : UnifTight f p μ) {ε : ℝ≥0} (hε : ε ≠ 0) : |
| 82 | + ∃ s, MeasurableSet s ∧ μ s < ∞ ∧ ∀ i, snorm (sᶜ.indicator (f i)) p μ ≤ ε := |
| 83 | + let ⟨s, hμs, hsm, hfs⟩ := (hf.eventually_cofinite_indicator hε).exists_measurable_mem_of_smallSets |
| 84 | + ⟨sᶜ, hsm.compl, hμs, by rwa [compl_compl s]⟩ |
| 85 | + |
| 86 | +protected theorem add (hf : UnifTight f p μ) (hg : UnifTight g p μ) |
| 87 | + (hf_meas : ∀ i, AEStronglyMeasurable (f i) μ) (hg_meas : ∀ i, AEStronglyMeasurable (g i) μ) : |
| 88 | + UnifTight (f + g) p μ := fun ε hε ↦ by |
| 89 | + rcases exists_Lp_half β μ p (coe_ne_zero.mpr hε.ne') with ⟨η, hη_pos, hη⟩ |
| 90 | + by_cases hη_top : η = ∞ |
| 91 | + · replace hη := hη_top ▸ hη |
| 92 | + refine ⟨∅, (by measurability), fun i ↦ ?_⟩ |
| 93 | + simp only [compl_empty, indicator_univ, Pi.add_apply] |
| 94 | + 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 | + obtain ⟨s, hμs, hsm, hfs, hgs⟩ : |
| 97 | + ∃ 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 |
| 102 | + refine ⟨sᶜ, ne_of_lt hμs, fun i ↦ ?_⟩ |
| 103 | + have η_cast : ↑η.toNNReal = η := coe_toNNReal hη_top |
| 104 | + calc |
| 105 | + snorm (indicator sᶜᶜ (f i + g i)) p μ = snorm (indicator s (f i) + indicator s (g i)) p μ := by |
| 106 | + rw [compl_compl, indicator_add'] |
| 107 | + _ ≤ ε := le_of_lt <| |
| 108 | + hη _ _ ((hf_meas i).indicator hsm) ((hg_meas i).indicator hsm) |
| 109 | + (η_cast ▸ hfs i) (η_cast ▸ hgs i) |
| 110 | + |
| 111 | +protected theorem neg (hf : UnifTight f p μ) : UnifTight (-f) p μ := by |
| 112 | + simp_rw [UnifTight, Pi.neg_apply, Set.indicator_neg', snorm_neg] |
| 113 | + exact hf |
| 114 | + |
| 115 | +protected theorem sub (hf : UnifTight f p μ) (hg : UnifTight g p μ) |
| 116 | + (hf_meas : ∀ i, AEStronglyMeasurable (f i) μ) (hg_meas : ∀ i, AEStronglyMeasurable (g i) μ) : |
| 117 | + UnifTight (f - g) p μ := by |
| 118 | + rw [sub_eq_add_neg] |
| 119 | + exact hf.add hg.neg hf_meas fun i => (hg_meas i).neg |
| 120 | + |
| 121 | +protected theorem aeeq (hf : UnifTight f p μ) (hfg : ∀ n, f n =ᵐ[μ] g n) : |
| 122 | + UnifTight g p μ := by |
| 123 | + intro ε hε |
| 124 | + obtain ⟨s, hμs, hfε⟩ := hf hε |
| 125 | + refine ⟨s, hμs, fun n => (le_of_eq <| snorm_congr_ae ?_).trans (hfε n)⟩ |
| 126 | + filter_upwards [hfg n] with x hx |
| 127 | + simp only [indicator, mem_compl_iff, ite_not, hx] |
| 128 | + |
| 129 | +end UnifTight |
| 130 | + |
| 131 | +/-- If two functions agree a.e., then one is tight iff the other is tight. -/ |
| 132 | +theorem unifTight_congr_ae {g : ι → α → β} (hfg : ∀ n, f n =ᵐ[μ] g n) : |
| 133 | + UnifTight f p μ ↔ UnifTight g p μ := |
| 134 | + ⟨fun h => h.aeeq hfg, fun h => h.aeeq fun i => (hfg i).symm⟩ |
| 135 | + |
| 136 | +/-- A constant sequence is tight. -/ |
| 137 | +theorem unifTight_const {g : α → β} (hp_ne_top : p ≠ ∞) (hg : Memℒp g p μ) : |
| 138 | + UnifTight (fun _ : ι => g) p μ := by |
| 139 | + intro ε hε |
| 140 | + by_cases hε_top : ε = ∞ |
| 141 | + · exact ⟨∅, (by measurability), fun _ => hε_top.symm ▸ le_top⟩ |
| 142 | + obtain ⟨s, _, hμs, hgε⟩ := hg.exists_snorm_indicator_compl_lt hp_ne_top (coe_ne_zero.mpr hε.ne') |
| 143 | + exact ⟨s, ne_of_lt hμs, fun _ => hgε.le⟩ |
| 144 | + |
| 145 | +/-- A single function is tight. -/ |
| 146 | +theorem unifTight_of_subsingleton [Subsingleton ι] (hp_top : p ≠ ∞) |
| 147 | + {f : ι → α → β} (hf : ∀ i, Memℒp (f i) p μ) : UnifTight f p μ := fun ε hε ↦ by |
| 148 | + by_cases hε_top : ε = ∞ |
| 149 | + · exact ⟨∅, by measurability, fun _ => hε_top.symm ▸ le_top⟩ |
| 150 | + by_cases hι : Nonempty ι |
| 151 | + case neg => exact ⟨∅, (by measurability), fun i => False.elim <| hι <| Nonempty.intro i⟩ |
| 152 | + cases' hι with i |
| 153 | + obtain ⟨s, _, hμs, hfε⟩ := (hf i).exists_snorm_indicator_compl_lt hp_top (coe_ne_zero.mpr hε.ne') |
| 154 | + refine ⟨s, ne_of_lt hμs, fun j => ?_⟩ |
| 155 | + convert hfε.le |
| 156 | + |
| 157 | +/-- This lemma is less general than `MeasureTheory.unifTight_finite` which applies to |
| 158 | +all sequences indexed by a finite type. -/ |
| 159 | +private theorem unifTight_fin (hp_top : p ≠ ∞) {n : ℕ} {f : Fin n → α → β} |
| 160 | + (hf : ∀ i, Memℒp (f i) p μ) : UnifTight f p μ := by |
| 161 | + revert f |
| 162 | + induction' n with n h |
| 163 | + · intro f hf |
| 164 | + have : Subsingleton (Fin Nat.zero) := subsingleton_fin_zero -- Porting note: Added this instance |
| 165 | + exact unifTight_of_subsingleton hp_top hf |
| 166 | + intro f hfLp ε hε |
| 167 | + by_cases hε_top : ε = ∞ |
| 168 | + · exact ⟨∅, (by measurability), fun _ => hε_top.symm ▸ le_top⟩ |
| 169 | + let g : Fin n → α → β := fun k => f k |
| 170 | + have hgLp : ∀ i, Memℒp (g i) p μ := fun i => hfLp i |
| 171 | + obtain ⟨S, hμS, hFε⟩ := h hgLp hε |
| 172 | + obtain ⟨s, _, hμs, hfε⟩ :=(hfLp n).exists_snorm_indicator_compl_lt hp_top (coe_ne_zero.mpr hε.ne') |
| 173 | + refine ⟨s ∪ S, (by measurability), fun i => ?_⟩ |
| 174 | + by_cases hi : i.val < n |
| 175 | + · rw [(_ : f i = g ⟨i.val, hi⟩)] |
| 176 | + · rw [compl_union, ← indicator_indicator] |
| 177 | + apply (snorm_indicator_le _).trans |
| 178 | + exact hFε (Fin.castLT i hi) |
| 179 | + · simp only [Fin.coe_eq_castSucc, Fin.castSucc_mk, g] |
| 180 | + · rw [(_ : i = n)] |
| 181 | + · rw [compl_union, inter_comm, ← indicator_indicator] |
| 182 | + apply (snorm_indicator_le _).trans |
| 183 | + convert hfε.le |
| 184 | + · have hi' := Fin.is_lt i |
| 185 | + rw [Nat.lt_succ_iff] at hi' |
| 186 | + rw [not_lt] at hi |
| 187 | + -- Porting note: Original proof was `simp [← le_antisymm hi' hi]` |
| 188 | + ext; symm; rw [Fin.coe_ofNat_eq_mod, le_antisymm hi' hi, Nat.mod_succ_eq_iff_lt, Nat.lt_succ] |
| 189 | + |
| 190 | +/-- A finite sequence of Lp functions is uniformly tight. -/ |
| 191 | +theorem unifTight_finite [Finite ι] (hp_top : p ≠ ∞) {f : ι → α → β} |
| 192 | + (hf : ∀ i, Memℒp (f i) p μ) : UnifTight f p μ := fun ε hε ↦ by |
| 193 | + obtain ⟨n, hn⟩ := Finite.exists_equiv_fin ι |
| 194 | + set g : Fin n → α → β := f ∘ hn.some.symm |
| 195 | + have hg : ∀ i, Memℒp (g i) p μ := fun _ => hf _ |
| 196 | + obtain ⟨s, hμs, hfε⟩ := unifTight_fin hp_top hg hε |
| 197 | + refine ⟨s, hμs, fun i => ?_⟩ |
| 198 | + simpa only [g, Function.comp_apply, Equiv.symm_apply_apply] using hfε (hn.some i) |
| 199 | + |
| 200 | +end UnifTight |
| 201 | + |
| 202 | +end MeasureTheory |
0 commit comments