Skip to content

Commit 158d852

Browse files
committed
feat: construct Haar measure in locally compact non-Hausdorff groups (#9746)
The construction we have is given in T2 spaces, but it works in non-Hausdorff spaces modulo a few modifications. For this, we introduce an ad hoc class `T2OrLocallyCompactRegularSpace`, which is just enough to unify the arguments, as a replacement for the class `ClosableCompactSubsetOpenSpace` (which is not strong enough). In the file `Separation.lean`, we move some material that was only available on T2 spaces to this new class. The construction is needed for a forthcoming improvement of uniqueness results for Haar measures, based on https://mathoverflow.net/questions/456670/uniqueness-of-left-invariant-borel-probability-measure-on-compact-groups.
1 parent 1872765 commit 158d852

File tree

8 files changed

+412
-308
lines changed

8 files changed

+412
-308
lines changed

Mathlib/Analysis/Fourier/RiemannLebesgueLemma.lean

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ spaces `V`: if `f` is a function on `V` (valued in a complete normed space `E`),
2323
Fourier transform of `f`, viewed as a function on the dual space of `V`, tends to 0 along the
2424
cocompact filter. Here the Fourier transform is defined by
2525
26-
`λ w : V →L[ℝ] ℝ, ∫ (v : V), exp (↑(2 * π * w v) * I) • f x`.
26+
`fun w : V →L[ℝ] ℝ ∫ (v : V), exp (↑(2 * π * w v) * I) • f x`.
2727
2828
This is true for arbitrary functions, but is only interesting for `L¹` functions (if `f` is not
2929
integrable then the integral is zero for all `w`). This is proved first for continuous
@@ -260,10 +260,9 @@ via dual space. **Do not use** -- it is only a stepping stone to
260260
`tendsto_integral_exp_smul_cocompact` where the inner-product-space structure isn't required. -/
261261
theorem tendsto_integral_exp_smul_cocompact_of_inner_product (μ : Measure V) [μ.IsAddHaarMeasure] :
262262
Tendsto (fun w : V →L[ℝ] ℝ => ∫ v, e[-w v] • f v ∂μ) (cocompact (V →L[ℝ] ℝ)) (𝓝 0) := by
263-
obtain ⟨C, _, _, hC⟩ := μ.isAddHaarMeasure_eq_smul volume
264-
rw [hC]
265-
simp_rw [integral_smul_measure]
266-
rw [← (smul_zero _ : C.toReal • (0 : E) = 0)]
263+
rw [μ.isAddHaarMeasure_eq_smul volume]
264+
simp_rw [integral_smul_nnreal_measure]
265+
rw [← (smul_zero _ : Measure.addHaarScalarFactor μ volume • (0 : E) = 0)]
267266
apply Tendsto.const_smul
268267
let A := (InnerProductSpace.toDual ℝ V).symm
269268
have : (fun w : V →L[ℝ] ℝ => ∫ v, e[-w v] • f v) = (fun w : V => ∫ v, e[-⟪v, w⟫] • f v) ∘ A := by

Mathlib/MeasureTheory/Measure/Content.lean

Lines changed: 51 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ For `μ : Content G`, we define
4141
* `μ.outerMeasure` : the outer measure associated to `μ`.
4242
* `μ.measure` : the Borel measure associated to `μ`.
4343
44-
We prove that, on a locally compact space, the measure `μ.measure` is regular.
44+
These definitions are given for spaces which are either T2, or locally compact and regular (which
45+
covers possibly non-Hausdorff locally compact groups). The resulting measure `μ.measure` is always
46+
outer regular by design. When the space is locally compact, `μ.measure` is also regular.
4547
4648
## References
4749
@@ -68,7 +70,8 @@ structure Content (G : Type w) [TopologicalSpace G] where
6870
toFun : Compacts G → ℝ≥0
6971
mono' : ∀ K₁ K₂ : Compacts G, (K₁ : Set G) ⊆ K₂ → toFun K₁ ≤ toFun K₂
7072
sup_disjoint' :
71-
∀ K₁ K₂ : Compacts G, Disjoint (K₁ : Set G) K₂ → toFun (K₁ ⊔ K₂) = toFun K₁ + toFun K₂
73+
∀ K₁ K₂ : Compacts G, Disjoint (K₁ : Set G) K₂ → IsClosed (K₁ : Set G) → IsClosed (K₂ : Set G)
74+
→ toFun (K₁ ⊔ K₂) = toFun K₁ + toFun K₂
7275
sup_le' : ∀ K₁ K₂ : Compacts G, toFun (K₁ ⊔ K₂) ≤ toFun K₁ + toFun K₂
7376
#align measure_theory.content MeasureTheory.Content
7477

@@ -96,7 +99,8 @@ theorem mono (K₁ K₂ : Compacts G) (h : (K₁ : Set G) ⊆ K₂) : μ K₁
9699
simp [apply_eq_coe_toFun, μ.mono' _ _ h]
97100
#align measure_theory.content.mono MeasureTheory.Content.mono
98101

99-
theorem sup_disjoint (K₁ K₂ : Compacts G) (h : Disjoint (K₁ : Set G) K₂) :
102+
theorem sup_disjoint (K₁ K₂ : Compacts G) (h : Disjoint (K₁ : Set G) K₂)
103+
(h₁ : IsClosed (K₁ : Set G)) (h₂ : IsClosed (K₂ : Set G)) :
100104
μ (K₁ ⊔ K₂) = μ K₁ + μ K₂ := by
101105
simp [apply_eq_coe_toFun, μ.sup_disjoint' _ _ h]
102106
#align measure_theory.content.sup_disjoint MeasureTheory.Content.sup_disjoint
@@ -167,7 +171,7 @@ theorem innerContent_exists_compact {U : Opens G} (hU : μ.innerContent U ≠
167171
#align measure_theory.content.inner_content_exists_compact MeasureTheory.Content.innerContent_exists_compact
168172

169173
/-- The inner content of a supremum of opens is at most the sum of the individual inner contents. -/
170-
theorem innerContent_iSup_nat [T2Space G] (U : ℕ → Opens G) :
174+
theorem innerContent_iSup_nat [T2OrLocallyCompactRegularSpace G] (U : ℕ → Opens G) :
171175
μ.innerContent (⨆ i : ℕ, U i) ≤ ∑' i : ℕ, μ.innerContent (U i) := by
172176
have h3 : ∀ (t : Finset ℕ) (K : ℕ → Compacts G), μ (t.sup K) ≤ t.sum fun i => μ (K i) := by
173177
intro t K
@@ -196,7 +200,8 @@ theorem innerContent_iSup_nat [T2Space G] (U : ℕ → Opens G) :
196200
/-- The inner content of a union of sets is at most the sum of the individual inner contents.
197201
This is the "unbundled" version of `innerContent_iSup_nat`.
198202
It is required for the API of `inducedOuterMeasure`. -/
199-
theorem innerContent_iUnion_nat [T2Space G] ⦃U : ℕ → Set G⦄ (hU : ∀ i : ℕ, IsOpen (U i)) :
203+
theorem innerContent_iUnion_nat [T2OrLocallyCompactRegularSpace G] ⦃U : ℕ → Set G⦄
204+
(hU : ∀ i : ℕ, IsOpen (U i)) :
200205
μ.innerContent ⟨⋃ i : ℕ, U i, isOpen_iUnion hU⟩ ≤ ∑' i : ℕ, μ.innerContent ⟨U i, hU i⟩ := by
201206
have := μ.innerContent_iSup_nat fun i => ⟨U i, hU i⟩
202207
rwa [Opens.iSup_def] at this
@@ -220,7 +225,8 @@ theorem is_mul_left_invariant_innerContent [Group G] [TopologicalGroup G]
220225
#align measure_theory.content.is_add_left_invariant_inner_content MeasureTheory.Content.is_add_left_invariant_innerContent
221226

222227
@[to_additive]
223-
theorem innerContent_pos_of_is_mul_left_invariant [T2Space G] [Group G] [TopologicalGroup G]
228+
theorem innerContent_pos_of_is_mul_left_invariant [T2OrLocallyCompactRegularSpace G] [Group G]
229+
[TopologicalGroup G]
224230
(h3 : ∀ (g : G) {K : Compacts G}, μ (K.map _ <| continuous_mul_left g) = μ K) (K : Compacts G)
225231
(hK : μ K ≠ 0) (U : Opens G) (hU : (U : Set G).Nonempty) : 0 < μ.innerContent U := by
226232
have : (interior (U : Set G)).Nonempty
@@ -249,7 +255,7 @@ protected def outerMeasure : OuterMeasure G :=
249255
inducedOuterMeasure (fun U hU => μ.innerContent ⟨U, hU⟩) isOpen_empty μ.innerContent_bot
250256
#align measure_theory.content.outer_measure MeasureTheory.Content.outerMeasure
251257

252-
variable [T2Space G]
258+
variable [T2OrLocallyCompactRegularSpace G]
253259

254260
theorem outerMeasure_opens (U : Opens G) : μ.outerMeasure U = μ.innerContent U :=
255261
inducedOuterMeasure_eq' (fun _ => isOpen_iUnion) μ.innerContent_iUnion_nat μ.innerContent_mono U.2
@@ -358,22 +364,34 @@ theorem borel_le_caratheodory : S ≤ μ.outerMeasure.caratheodory := by
358364
rw [ENNReal.iSup_add]
359365
refine' iSup_le _
360366
rintro ⟨L, hL⟩
367+
let L' : Compacts G := ⟨closure L, L.isCompact.closure⟩
368+
suffices μ L' + μ.outerMeasure (↑U' \ U) ≤ μ.outerMeasure U' by
369+
have A : μ L ≤ μ L' := μ.mono _ _ subset_closure
370+
exact (add_le_add_right A _).trans this
361371
simp only [subset_inter_iff] at hL
362-
have : ↑U' \ U ⊆ U' \ L := diff_subset_diff_right hL.2
372+
have hL'U : (L' : Set G) ⊆ U := IsCompact.closure_subset_of_isOpen L.2 hU hL.2
373+
have hL'U' : (L' : Set G) ⊆ (U' : Set G) := IsCompact.closure_subset_of_isOpen L.2 U'.2 hL.1
374+
have : ↑U' \ U ⊆ U' \ L' := diff_subset_diff_right hL'U
363375
refine' le_trans (add_le_add_left (μ.outerMeasure.mono' this) _) _
364-
rw [μ.outerMeasure_of_isOpen (↑U' \ L) (IsOpen.sdiff U'.2 L.2.isClosed)]
376+
rw [μ.outerMeasure_of_isOpen (↑U' \ L') (IsOpen.sdiff U'.2 isClosed_closure)]
365377
simp only [innerContent, iSup_subtype']
366378
rw [Opens.coe_mk]
367-
haveI : Nonempty { M : Compacts G // (M : Set G) ⊆ ↑U' \ L } := ⟨⟨⊥, empty_subset _⟩⟩
379+
haveI : Nonempty { M : Compacts G // (M : Set G) ⊆ ↑U' \ closure L } := ⟨⟨⊥, empty_subset _⟩⟩
368380
rw [ENNReal.add_iSup]
369381
refine' iSup_le _
370382
rintro ⟨M, hM⟩
371-
simp only [subset_diff] at hM
372-
have : (↑(L ⊔ M) : Set G) ⊆ U' := by
373-
simp only [union_subset_iff, Compacts.coe_sup, hM, hL, and_self_iff]
383+
let M' : Compacts G := ⟨closure M, M.isCompact.closure⟩
384+
suffices μ L' + μ M' ≤ μ.outerMeasure U' by
385+
have A : μ M ≤ μ M' := μ.mono _ _ subset_closure
386+
exact (add_le_add_left A _).trans this
387+
have hM' : (M' : Set G) ⊆ U' \ L' :=
388+
IsCompact.closure_subset_of_isOpen M.2 (IsOpen.sdiff U'.2 isClosed_closure) hM
389+
have : (↑(L' ⊔ M') : Set G) ⊆ U' := by
390+
simp only [Compacts.coe_sup, union_subset_iff, hL'U', true_and]
391+
exact hM'.trans (diff_subset _ _ )
374392
rw [μ.outerMeasure_of_isOpen (↑U') U'.2]
375393
refine' le_trans (ge_of_eq _) (μ.le_innerContent _ _ this)
376-
exact μ.sup_disjoint _ _ hM.2.symm
394+
exact μ.sup_disjoint L' M' (subset_diff.1 hM').2.symm isClosed_closure isClosed_closure
377395
#align measure_theory.content.borel_le_caratheodory MeasureTheory.Content.borel_le_caratheodory
378396

379397
/-- The measure induced by the outer measure coming from a content, on the Borel sigma-algebra. -/
@@ -385,19 +403,21 @@ theorem measure_apply {s : Set G} (hs : MeasurableSet s) : μ.measure s = μ.out
385403
toMeasure_apply _ _ hs
386404
#align measure_theory.content.measure_apply MeasureTheory.Content.measure_apply
387405

406+
instance outerRegular : μ.measure.OuterRegular := by
407+
refine ⟨fun A hA r (hr : _ < _) ↦ ?_⟩
408+
rw [μ.measure_apply hA, outerMeasure_eq_iInf] at hr
409+
simp only [iInf_lt_iff] at hr
410+
rcases hr with ⟨U, hUo, hAU, hr⟩
411+
rw [← μ.outerMeasure_of_isOpen U hUo, ← μ.measure_apply hUo.measurableSet] at hr
412+
exact ⟨U, hAU, hUo, hr⟩
413+
388414
/-- In a locally compact space, any measure constructed from a content is regular. -/
389415
instance regular [WeaklyLocallyCompactSpace G] : μ.measure.Regular := by
390-
have : μ.measure.OuterRegular := by
391-
refine' ⟨fun A hA r (hr : _ < _) => _⟩
392-
rw [μ.measure_apply hA, outerMeasure_eq_iInf] at hr
393-
simp only [iInf_lt_iff] at hr
394-
rcases hr with ⟨U, hUo, hAU, hr⟩
395-
rw [← μ.outerMeasure_of_isOpen U hUo, ← μ.measure_apply hUo.measurableSet] at hr
396-
exact ⟨U, hAU, hUo, hr⟩
397416
have : IsFiniteMeasureOnCompacts μ.measure := by
398417
refine' ⟨fun K hK => _⟩
399-
rw [measure_apply _ hK.measurableSet]
400-
exact μ.outerMeasure_lt_top_of_isCompact hK
418+
apply (measure_mono subset_closure).trans_lt _
419+
rw [measure_apply _ isClosed_closure.measurableSet]
420+
exact μ.outerMeasure_lt_top_of_isCompact hK.closure
401421
refine' ⟨fun U hU r hr => _⟩
402422
rw [measure_apply _ hU.measurableSet, μ.outerMeasure_of_isOpen U hU] at hr
403423
simp only [innerContent, lt_iSup_iff] at hr
@@ -430,7 +450,7 @@ theorem contentRegular_exists_compact (H : ContentRegular μ) (K : TopologicalSp
430450
(ENNReal.lt_add_right (ne_top_of_lt (μ.lt_top K)) (ENNReal.coe_ne_zero.mpr hε)))
431451
#align measure_theory.content.content_regular_exists_compact MeasureTheory.Content.contentRegular_exists_compact
432452

433-
variable [MeasurableSpace G] [T2Space G] [BorelSpace G]
453+
variable [MeasurableSpace G] [T2OrLocallyCompactRegularSpace G] [BorelSpace G]
434454

435455
/-- If `μ` is a regular content, then the measure induced by `μ` will agree with `μ`
436456
on compact sets. -/
@@ -441,16 +461,17 @@ theorem measure_eq_content_of_regular (H : MeasureTheory.Content.ContentRegular
441461
intro ε εpos _
442462
obtain ⟨K', K'_hyp⟩ := contentRegular_exists_compact μ H K (ne_bot_of_gt εpos)
443463
calc
444-
μ.measure ↑K ≤ μ.measure (interior ↑K') := by
445-
rw [μ.measure_apply isOpen_interior.measurableSet,
446-
μ.measure_apply K.isCompact.measurableSet]
447-
exact μ.outerMeasure.mono K'_hyp.left
464+
μ.measure ↑K ≤ μ.measure (interior ↑K') := measure_mono K'_hyp.1
448465
_ ≤ μ K' := by
449466
rw [μ.measure_apply (IsOpen.measurableSet isOpen_interior)]
450467
exact μ.outerMeasure_interior_compacts K'
451468
_ ≤ μ K + ε := K'_hyp.right
452-
· rw [μ.measure_apply (IsCompact.measurableSet K.isCompact)]
453-
exact μ.le_outerMeasure_compacts K
469+
· calc
470+
μ K ≤ μ ⟨closure K, K.2.closure⟩ := μ.mono _ _ subset_closure
471+
_ ≤ μ.measure (closure K) := by
472+
rw [μ.measure_apply (isClosed_closure.measurableSet)]
473+
exact μ.le_outerMeasure_compacts _
474+
_ = μ.measure K := Measure.OuterRegular.measure_closure_eq_of_isCompact K.2
454475
#align measure_theory.content.measure_eq_content_of_regular MeasureTheory.Content.measure_eq_content_of_regular
455476

456477
end RegularContents

0 commit comments

Comments
 (0)