|
| 1 | +/- |
| 2 | +Copyright (c) 2025 Thomas Browning. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Thomas Browning |
| 5 | +-/ |
| 6 | +module |
| 7 | + |
| 8 | +public import Mathlib.Analysis.InnerProductSpace.Basic |
| 9 | +public import Mathlib.MeasureTheory.Group.Integral |
| 10 | +public import Mathlib.MeasureTheory.Integral.RieszMarkovKakutani.Real |
| 11 | +public import Mathlib.Topology.Algebra.Group.Extension |
| 12 | + |
| 13 | +/-! |
| 14 | +# Haar measures on group extensions |
| 15 | +
|
| 16 | +In this file, if `1 → A → B → C → 1` is a short exact sequence of topological groups, |
| 17 | +we construct a Haar measure on `B` from Haar measures on `A` and `C`. |
| 18 | +
|
| 19 | +## Main definitions |
| 20 | +
|
| 21 | +* `TopologicalGroup.IsSES.inducedMeasure`: The Haar measure on `B` induced by Haar measures |
| 22 | + on `A` and `C`. |
| 23 | +
|
| 24 | +## Main results |
| 25 | +
|
| 26 | +* `TopologicalGroup.IsSES.isHaarMeasure_inducedMeasure`: `inducedMeasure` is a Haar measure. |
| 27 | +* `TopologicalGroup.IsSES.inducedMeasure_lt_of_injOn`: If `ψ` is injective on an open set `U`, |
| 28 | + then the induced measure on `U` is bounded by `μC Set.univ * μA {1}` (possibly infinite). |
| 29 | +
|
| 30 | +-/ |
| 31 | + |
| 32 | +@[expose] public section |
| 33 | + |
| 34 | +open MeasureTheory Measure |
| 35 | + |
| 36 | +open scoped Pointwise |
| 37 | + |
| 38 | +namespace TopologicalGroup.IsSES |
| 39 | + |
| 40 | +variable {A B C E : Type*} [Group A] [Group B] [Group C] |
| 41 | + [TopologicalSpace A] [TopologicalSpace B] [TopologicalSpace C] |
| 42 | + {φ : A →* B} {ψ : B →* C} (H : TopologicalGroup.IsSES φ ψ) |
| 43 | + [IsTopologicalGroup A] [IsTopologicalGroup B] [NormedAddCommGroup E] |
| 44 | + |
| 45 | +/-- If `φ : A →* B` and `ψ : B →* C` define a short exact sequence of topological groups, then we |
| 46 | +can pull back a continuous compactly supported function `f` on `B` along `φ` to the continuous |
| 47 | +compactly supported function `a ↦ f (b * φ a)` on `A`. -/ |
| 48 | +@[to_additive /-- If `φ : A →+ B` and `ψ : B →+ C` define a short exact sequence of additive |
| 49 | +topological groups, then we can pull back a continuous compactly supported function `f` on `B` along |
| 50 | +`φ` to the continuous compactly supported function `a ↦ f (b + φ a)` on `A`. -/] |
| 51 | +noncomputable abbrev pullback (f : CompactlySupportedContinuousMap B E) (b : B) : |
| 52 | + CompactlySupportedContinuousMap A E := |
| 53 | + f.pullback_monoidHom H.isClosedEmbedding b |
| 54 | + |
| 55 | +@[to_additive] |
| 56 | +theorem pullback_def (f : CompactlySupportedContinuousMap B E) (b : B) (a : A) : |
| 57 | + pullback H f b a = f (b * φ a) := |
| 58 | + f.pullback_monoidHom_def H.isClosedEmbedding b a |
| 59 | + |
| 60 | +variable [MeasurableSpace A] [BorelSpace A] (μA : Measure A) [hμA : IsHaarMeasure μA] |
| 61 | + [NormedSpace ℝ E] |
| 62 | + |
| 63 | +@[to_additive] |
| 64 | +theorem integral_pullback_invFun_apply (f : CompactlySupportedContinuousMap B E) (b : B) : |
| 65 | + ∫ a, H.pullback f (Function.invFun ψ (ψ b)) a ∂μA = ∫ a, H.pullback f b a ∂μA := by |
| 66 | + have h : ψ ((Function.invFun ψ (ψ b))⁻¹ * b) = 1 := by simp [Function.apply_invFun_apply] |
| 67 | + rw [← ψ.mem_ker, H.mulExact.monoidHom_ker_eq] at h |
| 68 | + obtain ⟨a, ha⟩ := h |
| 69 | + rw [← integral_mul_left_eq_self _ a] |
| 70 | + simp [pullback_def, ha, mul_assoc] |
| 71 | + |
| 72 | +variable [IsTopologicalGroup C] [LocallyCompactSpace B] |
| 73 | + |
| 74 | +/-- If `φ : A →* B` and `ψ : B →* C` define a short exact sequence of topological groups, then we |
| 75 | +can push forward a continuous compactly supported function on `B` to a continuous compactly |
| 76 | +supported function on `C` by integrating over `A`. -/ |
| 77 | +@[to_additive /-- If `φ : A →+ B` and `ψ : B →+ C` define a short exact sequence of additive |
| 78 | +topological groups, then we can push forward a continuous compactly supported function on `B` to a |
| 79 | +continuous compactly supported function on `C` by integrating over `A`. -/] |
| 80 | +noncomputable def pushforward : |
| 81 | + CompactlySupportedContinuousMap B E →ₗ[ℝ] CompactlySupportedContinuousMap C E where |
| 82 | + toFun f := |
| 83 | + { toFun := fun c ↦ ∫ a, pullback H f (Function.invFun ψ c) a ∂μA |
| 84 | + hasCompactSupport' := by |
| 85 | + obtain ⟨K, hK, hf⟩ := exists_compact_iff_hasCompactSupport.mpr f.hasCompactSupport |
| 86 | + refine exists_compact_iff_hasCompactSupport.mp |
| 87 | + ⟨ψ '' K, hK.image H.isOpenQuotientMap.continuous, fun x hx ↦ ?_⟩ |
| 88 | + suffices ∀ a : A, f (Function.invFun ψ x * φ a) = 0 by simp [this, pullback_def] |
| 89 | + refine fun a ↦ hf _ (mt (Set.mem_image_of_mem ψ) ?_) |
| 90 | + rwa [map_mul, Function.rightInverse_invFun H.isOpenQuotientMap.surjective, |
| 91 | + H.mulExact.apply_apply_eq_one, mul_one] |
| 92 | + continuous_toFun := by |
| 93 | + let := IsTopologicalGroup.rightUniformSpace B |
| 94 | + simp_rw [← H.isOpenQuotientMap.continuous_comp_iff, Function.comp_def, |
| 95 | + integral_pullback_invFun_apply, Metric.continuous_iff'] |
| 96 | + intro b ε hε |
| 97 | + obtain ⟨U₀, hU₀, hb⟩ := exists_compact_mem_nhds b |
| 98 | + obtain ⟨K, hK, hf₀⟩ := exists_compact_iff_hasCompactSupport.mpr f.hasCompactSupport |
| 99 | + let S : Set A := φ ⁻¹' (U₀⁻¹ * K) |
| 100 | + have hSc : IsCompact S := H.isClosedEmbedding.isCompact_preimage (hU₀.inv.mul hK) |
| 101 | + obtain ⟨δ, hδ0, hδ⟩ : ∃ δ > 0, ENNReal.ofReal δ * μA S < ENNReal.ofReal ε := by |
| 102 | + rw [← ENNReal.ofReal_toReal hSc.measure_ne_top, ← measureReal_def] |
| 103 | + by_cases hS' : μA.real S = 0 |
| 104 | + · simp [hS', hε, exists_gt] |
| 105 | + · refine ⟨ε / 2 / μA.real S, by positivity, ?_⟩ |
| 106 | + rwa [← ENNReal.ofReal_mul' measureReal_nonneg, ENNReal.ofReal_lt_ofReal_iff hε, |
| 107 | + div_mul_cancel₀ _ hS', half_lt_self_iff] |
| 108 | + have hS {x} (hx : x ∈ U₀) {y} (hy : y ∉ S) : H.pullback f x y = 0 := by |
| 109 | + contrapose! hy |
| 110 | + exact Set.mem_mul.mpr ⟨x⁻¹, Set.inv_mem_inv.mpr hx, x * φ y, |
| 111 | + not_imp_comm.mp (hf₀ (x * φ y)) hy, inv_mul_cancel_left x (φ y)⟩ |
| 112 | + have ha := f.hasCompactSupport.uniformContinuous_of_continuous f.continuous |
| 113 | + rw [uniformContinuous_iff_eventually] at ha |
| 114 | + obtain ⟨U, hU, hf⟩ := ha _ (Metric.dist_mem_uniformity hδ0) |
| 115 | + refine Filter.mem_of_superset (Filter.inter_mem |
| 116 | + (mul_singleton_mem_nhds_of_nhds_one b (inv_mem_nhds_one B hU)) hb) ?_ |
| 117 | + rintro - ⟨⟨t, ht, b, rfl, -, rfl⟩, htb⟩ |
| 118 | + have h (a) (ha : a ∈ S) : edist (H.pullback f (t * b) a) (H.pullback f b a) ≤ .ofReal δ := by |
| 119 | + rw [edist_dist] |
| 120 | + exact ENNReal.ofReal_le_ofReal (@hf ⟨t * b * φ a, b * φ a⟩ (by simpa)).le |
| 121 | + grw [Set.mem_setOf_eq, dist_integral_le_lintegral_edist (H.pullback f (t * b)).integrable |
| 122 | + (H.pullback f b).integrable, ← setLIntegral_eq_of_support_subset] |
| 123 | + · refine ENNReal.toReal_lt_of_lt_ofReal ((setLIntegral_mono measurable_const h).trans_lt ?_) |
| 124 | + rwa [lintegral_const, restrict_apply_univ] |
| 125 | + · intro y hy |
| 126 | + contrapose! hy |
| 127 | + rw [Function.notMem_support, hS htb hy, hS (mem_of_mem_nhds hb) hy, edist_self] } |
| 128 | + map_add' f g := by |
| 129 | + ext c |
| 130 | + exact integral_add (pullback H f _).integrable (pullback H g _).integrable |
| 131 | + map_smul' x f := by |
| 132 | + ext c |
| 133 | + apply integral_smul |
| 134 | + |
| 135 | +@[to_additive] |
| 136 | +theorem pushforward_def (f : CompactlySupportedContinuousMap B E) (c : C) : |
| 137 | + pushforward H μA f c = ∫ a, pullback H f (Function.invFun ψ c) a ∂μA := |
| 138 | + rfl |
| 139 | + |
| 140 | +@[to_additive] |
| 141 | +theorem pushforward_apply_apply (f : CompactlySupportedContinuousMap B E) (b : B) : |
| 142 | + pushforward H μA f (ψ b) = ∫ a, pullback H f b a ∂μA := |
| 143 | + integral_pullback_invFun_apply H μA f b |
| 144 | + |
| 145 | +@[to_additive] |
| 146 | +theorem pushforward_mono {f g : CompactlySupportedContinuousMap B ℝ} (h : f ≤ g) : |
| 147 | + pushforward H μA f ≤ pushforward H μA g := |
| 148 | + fun _ ↦ integral_mono (pullback H f _).integrable (pullback H g _).integrable (fun _ ↦ h _) |
| 149 | + |
| 150 | +variable [MeasurableSpace C] [BorelSpace C] (μC : Measure C) [hμC : IsHaarMeasure μC] |
| 151 | + |
| 152 | +/-- If `φ : A →* B` and `ψ : B →* C` define a short exact sequence of topological groups, then we |
| 153 | +can integrate a continuous compactly supported function on `B` by integrating over `A` and `C`. -/ |
| 154 | +@[to_additive /-- If `φ : A →+ B` and `ψ : B →+ C` define a short exact sequence of additive |
| 155 | +topological groups, then we can integrate a continuous compactly supported function on `B` by |
| 156 | +integrating over `A` and `C`. -/] |
| 157 | +noncomputable def integrate : CompactlySupportedContinuousMap B E →ₗ[ℝ] E where |
| 158 | + toFun f := ∫ c, pushforward H μA f c ∂μC |
| 159 | + map_add' f g := by |
| 160 | + rw [map_add] |
| 161 | + exact integral_add (pushforward H μA f).integrable (pushforward H μA g).integrable |
| 162 | + map_smul' x f := by |
| 163 | + rw [map_smul] |
| 164 | + exact integral_smul x (H.pushforward μA f) |
| 165 | + |
| 166 | +@[to_additive] |
| 167 | +theorem integrate_apply (f : CompactlySupportedContinuousMap B E) : |
| 168 | + H.integrate μA μC f = ∫ c, pushforward H μA f c ∂μC := |
| 169 | + rfl |
| 170 | + |
| 171 | +@[to_additive] |
| 172 | +theorem integrate_mono {f g : CompactlySupportedContinuousMap B ℝ} (h : f ≤ g) : |
| 173 | + integrate H μA μC f ≤ integrate H μA μC g := |
| 174 | + integral_mono (pushforward H μA f).integrable (pushforward H μA g).integrable |
| 175 | + (pushforward_mono H μA h) |
| 176 | + |
| 177 | +variable [T2Space B] [MeasurableSpace B] [BorelSpace B] |
| 178 | + |
| 179 | +/-- If `φ : A →* B` and `ψ : B →* C` define a short exact sequence of topological groups, then we |
| 180 | +can define a Haar measure on `B` induced by the Haar measures on `A` and `C`. -/ |
| 181 | +@[to_additive /-- If `φ : A →+ B` and `ψ : B →+ C` define a short exact sequence of additive |
| 182 | +topological groups, then we can define a Haar measure on `B` induced by the Haar measures on `A` |
| 183 | +and `C`. -/] |
| 184 | +noncomputable def inducedMeasure : Measure B := |
| 185 | + RealRMK.rieszMeasure ⟨integrate H μA μC, fun _ _ ↦ integrate_mono H μA μC⟩ |
| 186 | + |
| 187 | +@[to_additive] |
| 188 | +instance inducedMeasure_regular : (inducedMeasure H μA μC).Regular := |
| 189 | + RealRMK.regular_rieszMeasure _ |
| 190 | + |
| 191 | +@[to_additive] |
| 192 | +theorem integral_inducedMeasure (f : CompactlySupportedContinuousMap B ℝ) : |
| 193 | + ∫ b : B, f b ∂(inducedMeasure H μA μC) = integrate H μA μC f := by |
| 194 | + apply RealRMK.integral_rieszMeasure |
| 195 | + |
| 196 | +@[to_additive] |
| 197 | +instance isHaarMeasure_inducedMeasure : IsHaarMeasure (inducedMeasure H μA μC) where |
| 198 | + lt_top_of_isCompact K hK := by |
| 199 | + obtain ⟨f, hf1, hf2, hf3, hf4⟩ := |
| 200 | + exists_continuousMap_one_of_isCompact_subset_isOpen hK isOpen_univ K.subset_univ |
| 201 | + exact lt_of_le_of_lt (RealRMK.rieszMeasure_le_of_eq_one (f := ⟨f, hf2⟩) _ |
| 202 | + (fun x ↦ (hf4 x).1) hK (fun x hx ↦ hf1 hx)) ENNReal.ofReal_lt_top |
| 203 | + map_mul_left_eq_self b := by |
| 204 | + have : ((inducedMeasure H μA μC).map (b * ·)).Regular := Regular.map (Homeomorph.mulLeft b) |
| 205 | + refine ext_of_integral_eq_on_compactlySupported fun f ↦ ?_ |
| 206 | + rw [integral_map (by fun_prop) (by fun_prop)] |
| 207 | + have h (x : B) : f (b * x) = f.comp (Homeomorph.mulLeft b).toCocompactMap x := rfl |
| 208 | + simp_rw [h, integral_inducedMeasure, integrate_apply] |
| 209 | + rw [← integral_mul_left_eq_self _ (ψ b)⁻¹] |
| 210 | + congr with c |
| 211 | + obtain ⟨b', rfl⟩ := H.isOpenQuotientMap.surjective c |
| 212 | + rw [← map_inv, ← map_mul, pushforward_apply_apply, pushforward_apply_apply] |
| 213 | + simp [pullback_def, mul_assoc] |
| 214 | + open_pos U hU := by |
| 215 | + rintro ⟨b, hb⟩ |
| 216 | + obtain ⟨K, hK, hb, hKU⟩ := exists_compact_subset hU hb |
| 217 | + obtain ⟨f, hf1, hf2, hf3, hf4⟩ := exists_continuousMap_one_of_isCompact_subset_isOpen hK hU hKU |
| 218 | + have hf0 : 0 ≤ H.pushforward μA ⟨f, hf2⟩ := by |
| 219 | + rw [← map_zero (H.pushforward μA)] |
| 220 | + apply pushforward_mono |
| 221 | + exact fun x ↦ (hf4 x).1 |
| 222 | + grw [← pos_iff_ne_zero, inducedMeasure, |
| 223 | + ← RealRMK.le_rieszMeasure_tsupport_subset (f := ⟨f, hf2⟩) _ hf4 hf3, ENNReal.ofReal_pos] |
| 224 | + suffices (0 : ℝ) < pushforward H μA ⟨f, hf2⟩ (ψ b) from |
| 225 | + (pushforward H μA ⟨f, hf2⟩).continuous.integral_pos_of_hasCompactSupport_nonneg_nonzero |
| 226 | + (pushforward H μA ⟨f, hf2⟩).hasCompactSupport hf0 this.ne' |
| 227 | + have : (Function.invFun ψ (ψ b))⁻¹ * b ∈ φ.range := by |
| 228 | + simp [← H.mulExact.monoidHom_ker_eq, Function.apply_invFun_apply] |
| 229 | + obtain ⟨a, ha⟩ := this |
| 230 | + replace ha : f (Function.invFun ψ (ψ b) * φ a) ≠ 0 := by simp [ha, hf1 (interior_subset hb)] |
| 231 | + exact (pullback H ⟨f, hf2⟩ _).continuous.integral_pos_of_hasCompactSupport_nonneg_nonzero |
| 232 | + (pullback H ⟨f, hf2⟩ _).hasCompactSupport (fun x ↦ (hf4 _).1) ha |
| 233 | + |
| 234 | +/-- If `φ : A →* B` and `ψ : B →* C` define a short exact sequence of topological groups, and if |
| 235 | +`ψ` is injective on an open set `U`, then the induced measure on `U` is bounded above by |
| 236 | +`μC Set.univ * μA {1}` (possibly infinite). -/ |
| 237 | +@[to_additive /-- If `φ : A →+ B` and `ψ : B →+ C` define a short exact sequence of additive |
| 238 | +topological groups, and if `ψ` is injective on an open set `U`, then the induced measure on `U` is |
| 239 | +bounded above by `μC Set.univ * μA {1}` (possibly infinite). -/] |
| 240 | +theorem inducedMeasure_lt_of_injOn {U : Set B} (hU : IsOpen U) [DiscreteTopology A] |
| 241 | + (h : U.InjOn ψ) : |
| 242 | + inducedMeasure H μA μC U ≤ μC Set.univ * μA {1} := by |
| 243 | + contrapose! h |
| 244 | + have ho : 0 < μA {1} := (isOpen_discrete {1}).measure_pos _ (Set.singleton_nonempty 1) |
| 245 | + have ht : μA {1} < ⊤ := isCompact_singleton.measure_lt_top |
| 246 | + obtain ⟨K, hKU, hK, h⟩ := Regular.innerRegular hU _ h |
| 247 | + obtain ⟨f, hf1, hf2, hf3, hf4⟩ := exists_continuousMap_one_of_isCompact_subset_isOpen hK hU hKU |
| 248 | + replace h : μC Set.univ * μA {1} < ENNReal.ofReal (∫ c : C, pushforward H μA ⟨f, hf2⟩ c ∂μC) := |
| 249 | + lt_of_lt_of_le h ((RealRMK.rieszMeasure_le_of_eq_one (f := ⟨f, hf2⟩) _ (fun x ↦ (hf4 x).1) |
| 250 | + hK (fun x hx ↦ hf1 hx))) |
| 251 | + obtain ⟨c, hc⟩ : ∃ c : C, (μA {1}).toReal < pushforward H μA ⟨f, hf2⟩ c := by |
| 252 | + contrapose! h |
| 253 | + rcases eq_top_or_lt_top (μC Set.univ) with hC | hC |
| 254 | + · simp [hC, ENNReal.top_mul ho.ne'] |
| 255 | + · have : IsFiniteMeasure μC := ⟨hC⟩ |
| 256 | + rw [ENNReal.ofReal_le_iff_le_toReal (ENNReal.mul_lt_top hC ht).ne, ENNReal.toReal_mul, |
| 257 | + ← Measure.real_def, ← smul_eq_mul, ← integral_const] |
| 258 | + exact integral_mono (H.pushforward μA ⟨f, hf2⟩).integrable (integrable_const _) h |
| 259 | + contrapose! hc |
| 260 | + obtain ⟨b, rfl⟩ := H.isOpenQuotientMap.surjective c |
| 261 | + simp only [pushforward_apply_apply, pullback_def, CompactlySupportedContinuousMap.coe_mk] |
| 262 | + rw [← setIntegral_support] |
| 263 | + have key : (Function.support fun a ↦ f (b * φ a)).Subsingleton := by |
| 264 | + intro a ha b hb |
| 265 | + simpa [H.isClosedEmbedding.injective.eq_iff] using hc (hf3 (subset_tsupport _ ha)) |
| 266 | + (hf3 (subset_tsupport _ hb)) (by simp [H.mulExact.apply_apply_eq_one]) |
| 267 | + obtain h | ⟨a, ha⟩ := key.eq_empty_or_singleton |
| 268 | + · simp [h] |
| 269 | + · rw [ha, integral_singleton, real_def, haar_singleton, smul_eq_mul, mul_le_iff_le_one_right] |
| 270 | + · exact (hf4 _).2 |
| 271 | + · exact ENNReal.toReal_pos ho.ne' ht.ne |
| 272 | + |
| 273 | +end TopologicalGroup.IsSES |
0 commit comments