|
| 1 | +/- |
| 2 | +Copyright (c) 2023 Kalle Kytölä. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Kalle Kytölä |
| 5 | +-/ |
| 6 | +import Mathlib.MeasureTheory.Measure.ProbabilityMeasure |
| 7 | + |
| 8 | +/-! |
| 9 | +# The Lévy-Prokhorov distance on spaces of finite measures and probability measures |
| 10 | +
|
| 11 | +## Main definitions |
| 12 | +
|
| 13 | +* `MeasureTheory.levyProkhorovEDist`: The Lévy-Prokhorov edistance between two measures. |
| 14 | +* `MeasureTheory.levyProkhorovDist`: The Lévy-Prokhorov distance between two finite measures. |
| 15 | +
|
| 16 | +## Main results |
| 17 | +
|
| 18 | +* `levyProkhorovDist_pseudoMetricSpace_finiteMeasure`: The Lévy-Prokhorov distance is a |
| 19 | + pseudoemetric on the space of finite measures. |
| 20 | +* `levyProkhorovDist_pseudoMetricSpace_probabilityMeasure`: The Lévy-Prokhorov distance is a |
| 21 | + pseudoemetric on the space of probability measures. |
| 22 | +
|
| 23 | +## Todo |
| 24 | +
|
| 25 | +* Show that in Borel spaces, the Lévy-Prokhorov distance is a metric; not just a pseudometric. |
| 26 | +* Prove that if `X` is metrizable and separable, then the Lévy-Prokhorov distance metrizes the |
| 27 | + topology of weak convergence. |
| 28 | +
|
| 29 | +## Tags |
| 30 | +
|
| 31 | +finite measure, probability measure, weak convergence, convergence in distribution, metrizability |
| 32 | +-/ |
| 33 | + |
| 34 | +open Topology Metric Filter Set ENNReal NNReal |
| 35 | + |
| 36 | +namespace MeasureTheory |
| 37 | + |
| 38 | +open scoped Topology ENNReal NNReal BoundedContinuousFunction |
| 39 | + |
| 40 | +section Levy_Prokhorov |
| 41 | + |
| 42 | +/-! ### Lévy-Prokhorov metric -/ |
| 43 | + |
| 44 | +variable {ι : Type*} {Ω : Type*} [MeasurableSpace Ω] [MetricSpace Ω] |
| 45 | + |
| 46 | +/-- The Lévy-Prokhorov edistance between measures: |
| 47 | +`d(μ,ν) = inf {r ≥ 0 | ∀ B, μ B ≤ ν Bᵣ + r ∧ ν B ≤ μ Bᵣ + r}`. -/ |
| 48 | +noncomputable def levyProkhorovEDist (μ ν : Measure Ω) : ℝ≥0∞ := |
| 49 | + sInf {ε | ∀ B, MeasurableSet B → |
| 50 | + μ B ≤ ν (thickening ε.toReal B) + ε ∧ ν B ≤ μ (thickening ε.toReal B) + ε} |
| 51 | + |
| 52 | +/- This result is not placed in earlier more generic files, since it is rather specialized; |
| 53 | +it mixes measure and metric in a very particular way. -/ |
| 54 | +lemma meas_le_of_le_of_forall_le_meas_thickening_add {ε₁ ε₂ : ℝ≥0∞} (μ ν : Measure Ω) |
| 55 | + (h_le : ε₁ ≤ ε₂) {B : Set Ω} (hε₁ : μ B ≤ ν (thickening ε₁.toReal B) + ε₁) : |
| 56 | + μ B ≤ ν (thickening ε₂.toReal B) + ε₂ := by |
| 57 | + by_cases ε_top : ε₂ = ∞ |
| 58 | + · simp only [ne_eq, FiniteMeasure.ennreal_coeFn_eq_coeFn_toMeasure, ε_top, top_toReal, |
| 59 | + add_top, le_top] |
| 60 | + apply hε₁.trans (add_le_add ?_ h_le) |
| 61 | + exact measure_mono (μ := ν) (thickening_mono (toReal_mono ε_top h_le) B) |
| 62 | + |
| 63 | +lemma left_measure_le_of_levyProkhorovEDist_lt {μ ν : Measure Ω} {c : ℝ≥0∞} |
| 64 | + (h : levyProkhorovEDist μ ν < c) {B : Set Ω} (B_mble : MeasurableSet B) : |
| 65 | + μ B ≤ ν (thickening c.toReal B) + c := by |
| 66 | + obtain ⟨c', ⟨hc', lt_c⟩⟩ := sInf_lt_iff.mp h |
| 67 | + exact meas_le_of_le_of_forall_le_meas_thickening_add μ ν lt_c.le (hc' B B_mble).1 |
| 68 | + |
| 69 | +lemma right_measure_le_of_levyProkhorovEDist_lt {μ ν : Measure Ω} {c : ℝ≥0∞} |
| 70 | + (h : levyProkhorovEDist μ ν < c) {B : Set Ω} (B_mble : MeasurableSet B) : |
| 71 | + ν B ≤ μ (thickening c.toReal B) + c := by |
| 72 | + obtain ⟨c', ⟨hc', lt_c⟩⟩ := sInf_lt_iff.mp h |
| 73 | + exact meas_le_of_le_of_forall_le_meas_thickening_add ν μ lt_c.le (hc' B B_mble).2 |
| 74 | + |
| 75 | +lemma levyProkhorovEDist_le_of_forall_add_pos_le (μ ν : Measure Ω) (δ : ℝ≥0∞) |
| 76 | + (h : ∀ ε B, 0 < ε → ε < ∞ → MeasurableSet B → |
| 77 | + μ B ≤ ν (thickening (δ + ε).toReal B) + δ + ε ∧ |
| 78 | + ν B ≤ μ (thickening (δ + ε).toReal B) + δ + ε) : |
| 79 | + levyProkhorovEDist μ ν ≤ δ := by |
| 80 | + apply ENNReal.le_of_forall_pos_le_add |
| 81 | + intro ε hε _ |
| 82 | + by_cases ε_top : ε = ∞ |
| 83 | + · simp only [ε_top, add_top, le_top] |
| 84 | + apply sInf_le |
| 85 | + intro B B_mble |
| 86 | + simpa only [add_assoc] using h ε B (coe_pos.mpr hε) coe_lt_top B_mble |
| 87 | + |
| 88 | +lemma levyProkhorovEDist_le_of_forall (μ ν : Measure Ω) (δ : ℝ≥0∞) |
| 89 | + (h : ∀ ε B, δ < ε → ε < ∞ → MeasurableSet B → |
| 90 | + μ B ≤ ν (thickening ε.toReal B) + ε ∧ ν B ≤ μ (thickening ε.toReal B) + ε) : |
| 91 | + levyProkhorovEDist μ ν ≤ δ := by |
| 92 | + by_cases δ_top : δ = ∞ |
| 93 | + · simp only [δ_top, add_top, le_top] |
| 94 | + apply levyProkhorovEDist_le_of_forall_add_pos_le |
| 95 | + intro x B x_pos x_lt_top B_mble |
| 96 | + simpa only [← add_assoc] using h (δ + x) B (ENNReal.lt_add_right δ_top x_pos.ne.symm) |
| 97 | + (by simp only [add_lt_top, Ne.lt_top δ_top, x_lt_top, and_self]) B_mble |
| 98 | + |
| 99 | +lemma levyProkhorovEDist_le_max_measure_univ (μ ν : Measure Ω) : |
| 100 | + levyProkhorovEDist μ ν ≤ max (μ univ) (ν univ) := by |
| 101 | + refine sInf_le fun B _ ↦ ⟨?_, ?_⟩ <;> apply le_add_left <;> simp [measure_mono] |
| 102 | + |
| 103 | +lemma levyProkhorovEDist_lt_top (μ ν : Measure Ω) [IsFiniteMeasure μ] [IsFiniteMeasure ν] : |
| 104 | + levyProkhorovEDist μ ν < ∞ := |
| 105 | + (levyProkhorovEDist_le_max_measure_univ μ ν).trans_lt <| by simp [measure_lt_top] |
| 106 | + |
| 107 | +lemma levyProkhorovEDist_self (μ : Measure Ω) : |
| 108 | + levyProkhorovEDist μ μ = 0 := by |
| 109 | + rw [← nonpos_iff_eq_zero, ← csInf_Ioo zero_lt_top] |
| 110 | + refine sInf_le_sInf fun ε ⟨hε₀, hε_top⟩ B _ ↦ and_self_iff.2 ?_ |
| 111 | + refine le_add_right <| measure_mono <| self_subset_thickening ?_ _ |
| 112 | + exact ENNReal.toReal_pos hε₀.ne' hε_top.ne |
| 113 | + |
| 114 | +lemma levyProkhorovEDist_comm (μ ν : Measure Ω) : |
| 115 | + levyProkhorovEDist μ ν = levyProkhorovEDist ν μ := by |
| 116 | + simp only [levyProkhorovEDist, and_comm] |
| 117 | + |
| 118 | +lemma levyProkhorovEDist_triangle [OpensMeasurableSpace Ω] (μ ν κ : Measure Ω) : |
| 119 | + levyProkhorovEDist μ κ ≤ levyProkhorovEDist μ ν + levyProkhorovEDist ν κ := by |
| 120 | + by_cases LPμν_finite : levyProkhorovEDist μ ν = ∞ |
| 121 | + · simp [LPμν_finite] |
| 122 | + by_cases LPνκ_finite : levyProkhorovEDist ν κ = ∞ |
| 123 | + · simp [LPνκ_finite] |
| 124 | + apply levyProkhorovEDist_le_of_forall_add_pos_le |
| 125 | + intro ε B ε_pos ε_lt_top B_mble |
| 126 | + have half_ε_pos : 0 < ε / 2 := ENNReal.div_pos ε_pos.ne' two_ne_top |
| 127 | + have half_ε_lt_top : ε / 2 < ∞ := ENNReal.div_lt_top ε_lt_top.ne two_ne_zero |
| 128 | + let r := levyProkhorovEDist μ ν + ε / 2 |
| 129 | + let s := levyProkhorovEDist ν κ + ε / 2 |
| 130 | + have lt_r : levyProkhorovEDist μ ν < r := lt_add_right LPμν_finite half_ε_pos.ne' |
| 131 | + have lt_s : levyProkhorovEDist ν κ < s := lt_add_right LPνκ_finite half_ε_pos.ne' |
| 132 | + have hs_add_r : s + r = levyProkhorovEDist μ ν + levyProkhorovEDist ν κ + ε := by |
| 133 | + simp_rw [add_assoc, add_comm (ε / 2), add_assoc, ENNReal.add_halves, ← add_assoc, |
| 134 | + add_comm (levyProkhorovEDist μ ν)] |
| 135 | + have hs_add_r' : s.toReal + r.toReal |
| 136 | + = (levyProkhorovEDist μ ν + levyProkhorovEDist ν κ + ε).toReal := by |
| 137 | + rw [← hs_add_r, ← ENNReal.toReal_add] |
| 138 | + · exact ENNReal.add_ne_top.mpr ⟨LPνκ_finite, half_ε_lt_top.ne⟩ |
| 139 | + · exact ENNReal.add_ne_top.mpr ⟨LPμν_finite, half_ε_lt_top.ne⟩ |
| 140 | + rw [← hs_add_r', add_assoc, ← hs_add_r, add_assoc _ _ ε, ← hs_add_r] |
| 141 | + refine ⟨?_, ?_⟩ |
| 142 | + · calc μ B ≤ ν (thickening r.toReal B) + r := |
| 143 | + left_measure_le_of_levyProkhorovEDist_lt lt_r B_mble |
| 144 | + _ ≤ κ (thickening s.toReal (thickening r.toReal B)) + s + r := |
| 145 | + add_le_add_right |
| 146 | + (left_measure_le_of_levyProkhorovEDist_lt lt_s isOpen_thickening.measurableSet) _ |
| 147 | + _ = κ (thickening s.toReal (thickening r.toReal B)) + (s + r) := add_assoc _ _ _ |
| 148 | + _ ≤ κ (thickening (s.toReal + r.toReal) B) + (s + r) := |
| 149 | + add_le_add_right (measure_mono (thickening_thickening_subset _ _ _)) _ |
| 150 | + · calc κ B ≤ ν (thickening s.toReal B) + s := |
| 151 | + right_measure_le_of_levyProkhorovEDist_lt lt_s B_mble |
| 152 | + _ ≤ μ (thickening r.toReal (thickening s.toReal B)) + r + s := |
| 153 | + add_le_add_right |
| 154 | + (right_measure_le_of_levyProkhorovEDist_lt lt_r isOpen_thickening.measurableSet) s |
| 155 | + _ = μ (thickening r.toReal (thickening s.toReal B)) + (s + r) := by rw [add_assoc, add_comm r] |
| 156 | + _ ≤ μ (thickening (r.toReal + s.toReal) B) + (s + r) := |
| 157 | + add_le_add_right (measure_mono (thickening_thickening_subset _ _ _)) _ |
| 158 | + _ = μ (thickening (s.toReal + r.toReal) B) + (s + r) := by rw [add_comm r.toReal] |
| 159 | + |
| 160 | +/-- The Lévy-Prokhorov distance between finite measures: |
| 161 | +`d(μ,ν) = inf {r ≥ 0 | ∀ B, μ B ≤ ν Bᵣ + r ∧ ν B ≤ μ Bᵣ + r}`. -/ |
| 162 | +noncomputable def levyProkhorovDist (μ ν : Measure Ω) : ℝ := |
| 163 | + (levyProkhorovEDist μ ν).toReal |
| 164 | + |
| 165 | +lemma levyProkhorovDist_self (μ : Measure Ω) : |
| 166 | + levyProkhorovDist μ μ = 0 := by |
| 167 | + simp only [levyProkhorovDist, levyProkhorovEDist_self, zero_toReal] |
| 168 | + |
| 169 | +lemma levyProkhorovDist_comm (μ ν : Measure Ω) : |
| 170 | + levyProkhorovDist μ ν = levyProkhorovDist ν μ := by |
| 171 | + simp only [levyProkhorovDist, levyProkhorovEDist_comm] |
| 172 | + |
| 173 | +lemma levyProkhorovDist_triangle [OpensMeasurableSpace Ω] (μ ν κ : Measure Ω) |
| 174 | + [IsFiniteMeasure μ] [IsFiniteMeasure ν] [IsFiniteMeasure κ] : |
| 175 | + levyProkhorovDist μ κ ≤ levyProkhorovDist μ ν + levyProkhorovDist ν κ := by |
| 176 | + have dμκ_finite := (levyProkhorovEDist_lt_top μ κ).ne |
| 177 | + have dμν_finite := (levyProkhorovEDist_lt_top μ ν).ne |
| 178 | + have dνκ_finite := (levyProkhorovEDist_lt_top ν κ).ne |
| 179 | + convert (ENNReal.toReal_le_toReal (a := levyProkhorovEDist μ κ) |
| 180 | + (b := levyProkhorovEDist μ ν + levyProkhorovEDist ν κ) |
| 181 | + _ _).mpr <| levyProkhorovEDist_triangle μ ν κ |
| 182 | + · simp only [levyProkhorovDist, ENNReal.toReal_add dμν_finite dνκ_finite] |
| 183 | + · exact dμκ_finite |
| 184 | + · exact ENNReal.add_ne_top.mpr ⟨dμν_finite, dνκ_finite⟩ |
| 185 | + |
| 186 | +/-- A type synonym, to be used for `Measure α`, `FiniteMeasure α`, or `ProbabilityMeasure α`, |
| 187 | +when they are to be equipped with the Lévy-Prokhorov distance. -/ |
| 188 | +def LevyProkhorov (α : Type*) := α |
| 189 | + |
| 190 | +variable [OpensMeasurableSpace Ω] |
| 191 | + |
| 192 | +/-- The Lévy-Prokhorov distance `levyProkhorovEDist` makes `Measure Ω` a pseudoemetric |
| 193 | +space. The instance is recorded on the type synonym `LevyProkhorov (Measure Ω) := Measure Ω`. -/ |
| 194 | +noncomputable instance : PseudoEMetricSpace (LevyProkhorov (Measure Ω)) where |
| 195 | + edist := levyProkhorovEDist |
| 196 | + edist_self := levyProkhorovEDist_self |
| 197 | + edist_comm := levyProkhorovEDist_comm |
| 198 | + edist_triangle := levyProkhorovEDist_triangle |
| 199 | + |
| 200 | +/-- The Lévy-Prokhorov distance `levyProkhorovDist` makes `FiniteMeasure Ω` a pseudometric |
| 201 | +space. The instance is recorded on the type synonym |
| 202 | +`LevyProkhorov (FiniteMeasure Ω) := FiniteMeasure Ω`. -/ |
| 203 | +noncomputable instance levyProkhorovDist_pseudoMetricSpace_finiteMeasure : |
| 204 | + PseudoMetricSpace (LevyProkhorov (FiniteMeasure Ω)) where |
| 205 | + dist μ ν := levyProkhorovDist μ.toMeasure ν.toMeasure |
| 206 | + dist_self μ := levyProkhorovDist_self _ |
| 207 | + dist_comm μ ν := levyProkhorovDist_comm _ _ |
| 208 | + dist_triangle μ ν κ := levyProkhorovDist_triangle _ _ _ |
| 209 | + edist_dist μ ν := by simp [← ENNReal.ofReal_coe_nnreal] |
| 210 | + |
| 211 | +/-- The Lévy-Prokhorov distance `levyProkhorovDist` makes `ProbabilityMeasure Ω` a pseudoemetric |
| 212 | +space. The instance is recorded on the type synonym |
| 213 | +`LevyProkhorov (ProbabilityMeasure Ω) := ProbabilityMeasure Ω`. -/ |
| 214 | +noncomputable instance levyProkhorovDist_pseudoMetricSpace_probabilityMeasure : |
| 215 | + PseudoMetricSpace (LevyProkhorov (ProbabilityMeasure Ω)) where |
| 216 | + dist μ ν := levyProkhorovDist μ.toMeasure ν.toMeasure |
| 217 | + dist_self μ := levyProkhorovDist_self _ |
| 218 | + dist_comm μ ν := levyProkhorovDist_comm _ _ |
| 219 | + dist_triangle μ ν κ := levyProkhorovDist_triangle _ _ _ |
| 220 | + edist_dist μ ν := by simp [← ENNReal.ofReal_coe_nnreal] |
| 221 | + |
| 222 | +end Levy_Prokhorov --section |
| 223 | + |
| 224 | +end MeasureTheory -- namespace |
0 commit comments