Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 59cda6d

Browse files
committed
feat(measure_theory/group/basic): introduce a class is_haar_measure, and its basic properties (#9142)
We have in mathlib a construction of Haar measures. But there are many measures which do not come from this construction, and are still Haar measures (Lebesgue measure on a vector space, Hausdorff measure of the right dimension, for instance). We introduce a new class `is_haar_measure` (and its additive analogue) to be able to express facts simultaneously for all these measures, and prove their basic properties.
1 parent 76f87b7 commit 59cda6d

File tree

2 files changed

+296
-25
lines changed

2 files changed

+296
-25
lines changed

src/measure_theory/group/basic.lean

Lines changed: 266 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,15 @@ We develop some properties of measures on (topological) groups
1414
* We define properties on measures: left and right invariant measures.
1515
* We define the measure `μ.inv : A ↦ μ(A⁻¹)` and show that it is right invariant iff
1616
`μ` is left invariant.
17+
* We define a class `is_haar_measure μ`, requiring that the measure `μ` is left-invariant, finite
18+
on compact sets, and positive on open sets.
19+
20+
We also give analogues of all these notions in the additive world.
1721
-/
1822

1923
noncomputable theory
2024

21-
open_locale ennreal pointwise
25+
open_locale ennreal pointwise big_operators
2226
open has_inv set function measure_theory.measure
2327

2428
namespace measure_theory
@@ -51,6 +55,16 @@ def is_mul_left_invariant (μ : set G → ℝ≥0∞) : Prop :=
5155
def is_mul_right_invariant (μ : set G → ℝ≥0∞) : Prop :=
5256
∀ (g : G) {A : set G} (h : measurable_set A), μ ((λ h, h * g) ⁻¹' A) = μ A
5357

58+
@[to_additive measure_theory.is_add_left_invariant.smul]
59+
lemma is_mul_left_invariant.smul {μ : measure G} (h : is_mul_left_invariant μ) (c : ℝ≥0∞) :
60+
is_mul_left_invariant ((c • μ : measure G) : set G → ℝ≥0∞) :=
61+
λ g A hA, by rw [smul_apply, smul_apply, h g hA]
62+
63+
@[to_additive measure_theory.is_add_right_invariant.smul]
64+
lemma is_mul_right_invariant.smul {μ : measure G} (h : is_mul_right_invariant μ) (c : ℝ≥0∞) :
65+
is_mul_right_invariant ((c • μ : measure G) : set G → ℝ≥0∞) :=
66+
λ g A hA, by rw [smul_apply, smul_apply, h g hA]
67+
5468
end
5569

5670
namespace measure
@@ -65,9 +79,19 @@ begin
6579
apply forall_congr, intro hA, rw [map_apply (measurable_const_mul g) hA]
6680
end
6781

82+
@[to_additive]
83+
lemma _root_.measure_theory.is_mul_left_invariant.measure_preimage_mul
84+
[topological_space G] [group G] [topological_group G] [borel_space G]
85+
{μ : measure G} (h : is_mul_left_invariant μ) (g : G) (A : set G) :
86+
μ ((λ h, g * h) ⁻¹' A) = μ A :=
87+
calc μ ((λ h, g * h) ⁻¹' A) = measure.map (λ h, g * h) μ A :
88+
((homeomorph.mul_left g).to_measurable_equiv.map_apply A).symm
89+
... = μ A : by rw map_mul_left_eq_self.2 h g
90+
6891
@[to_additive]
6992
lemma map_mul_right_eq_self [topological_space G] [has_mul G] [has_continuous_mul G] [borel_space G]
70-
{μ : measure G} : (∀ g, measure.map (λ h, h * g) μ = μ) ↔ is_mul_right_invariant μ :=
93+
{μ : measure G} :
94+
(∀ g, measure.map (λ h, h * g) μ = μ) ↔ is_mul_right_invariant μ :=
7195
begin
7296
apply forall_congr, intro g, rw [measure.ext_iff], apply forall_congr, intro A,
7397
apply forall_congr, intro hA, rw [map_apply (measurable_mul_const g) hA]
@@ -148,38 +172,45 @@ lemma is_mul_left_invariant_inv : is_mul_left_invariant μ.inv ↔ is_mul_right_
148172

149173
end inv
150174

151-
variables [measurable_space G] [topological_space G] [borel_space G] {μ : measure G}
152-
153175
section group
154176

177+
variables [measurable_space G] [topological_space G] [borel_space G] {μ : measure G}
155178
variables [group G] [topological_group G]
156179

157-
/-! Properties of regular left invariant measures -/
180+
/-- If a left-invariant measure gives positive mass to a compact set, then
181+
it gives positive mass to any open set. -/
182+
@[to_additive]
183+
lemma is_mul_left_invariant.measure_pos_of_is_open (hμ : is_mul_left_invariant μ)
184+
(K : set G) (hK : is_compact K) (h : μ K ≠ 0) {U : set G} (hU : is_open U) (h'U : U.nonempty) :
185+
0 < μ U :=
186+
begin
187+
contrapose! h,
188+
rw ← nonpos_iff_eq_zero,
189+
rw nonpos_iff_eq_zero at h,
190+
rw ← hU.interior_eq at h'U,
191+
obtain ⟨t, hKt⟩ : ∃ (t : finset G), K ⊆ ⋃ (g : G) (H : g ∈ t), (λ (h : G), g * h) ⁻¹' U :=
192+
compact_covered_by_mul_left_translates hK h'U,
193+
calc μ K ≤ μ (⋃ (g : G) (H : g ∈ t), (λ (h : G), g * h) ⁻¹' U) : measure_mono hKt
194+
... ≤ ∑ g in t, μ ((λ (h : G), g * h) ⁻¹' U) : measure_bUnion_finset_le _ _
195+
... = 0 : by simp [hμ _ hU.measurable_set, h]
196+
end
197+
198+
/-! A nonzero left-invariant regular measure gives positive mass to any open set. -/
158199
@[to_additive]
159-
lemma is_mul_left_invariant.null_iff_empty [regular μ] (h2μ : is_mul_left_invariant μ)
160-
(h3μ : μ ≠ 0) {s : set G} (hs : is_open s) : μ s = 0 ↔ s = ∅ :=
200+
lemma is_mul_left_invariant.null_iff_empty [regular μ] (hμ : is_mul_left_invariant μ)
201+
(h3μ : μ ≠ 0) {s : set G} (hs : is_open s) :
202+
μ s = 0 ↔ s = ∅ :=
161203
begin
162204
obtain ⟨K, hK, h2K⟩ := regular.exists_compact_not_null.mpr h3μ,
163-
refine ⟨λ h, _, λ h, by simp [h]⟩,
164-
apply classical.by_contradiction, -- `by_contradiction` is very slow
165-
refine mt (λ h2s, _) h2K,
166-
rw [← ne.def, ne_empty_iff_nonempty] at h2s, cases h2s with y hy,
167-
obtain ⟨t, -, h1t, h2t⟩ := hK.elim_finite_subcover_image
168-
(show ∀ x ∈ @univ G, is_open ((λ y, x * y) ⁻¹' s),
169-
from λ x _, (continuous_mul_left x).is_open_preimage _ hs) _,
170-
{ rw [← nonpos_iff_eq_zero],
171-
refine (measure_mono h2t).trans _,
172-
refine (measure_bUnion_le h1t.countable _).trans_eq _,
173-
simp_rw [h2μ _ hs.measurable_set], rw [h, tsum_zero] },
174-
{ intros x _,
175-
simp_rw [mem_Union, mem_preimage],
176-
use [y * x⁻¹, mem_univ _],
177-
rwa [inv_mul_cancel_right] }
205+
refine ⟨λ h, _, λ h, by simp only [h, measure_empty]⟩,
206+
contrapose h,
207+
exact (hμ.measure_pos_of_is_open K hK h2K hs (ne_empty_iff_nonempty.mp h)).ne'
178208
end
179209

180210
@[to_additive]
181211
lemma is_mul_left_invariant.null_iff [regular μ] (h2μ : is_mul_left_invariant μ)
182-
{s : set G} (hs : is_open s) : μ s = 0 ↔ s = ∅ ∨ μ = 0 :=
212+
{s : set G} (hs : is_open s) :
213+
μ s = 0 ↔ s = ∅ ∨ μ = 0 :=
183214
begin
184215
by_cases h3μ : μ = 0, { simp [h3μ] },
185216
simp only [h3μ, or_false],
@@ -192,6 +223,32 @@ lemma is_mul_left_invariant.measure_ne_zero_iff_nonempty [regular μ]
192223
μ s ≠ 0 ↔ s.nonempty :=
193224
by simp_rw [← ne_empty_iff_nonempty, ne.def, h2μ.null_iff_empty h3μ hs]
194225

226+
/-- If a left-invariant measure gives finite mass to a nonempty open set, then
227+
it gives finite mass to any compact set. -/
228+
@[to_additive]
229+
lemma is_mul_left_invariant.measure_lt_top_of_is_compact (hμ : is_mul_left_invariant μ)
230+
(U : set G) (hU : is_open U) (h'U : U.nonempty) (h : μ U ≠ ∞) {K : set G} (hK : is_compact K) :
231+
μ K < ∞ :=
232+
begin
233+
rw ← hU.interior_eq at h'U,
234+
obtain ⟨t, hKt⟩ : ∃ (t : finset G), K ⊆ ⋃ (g : G) (H : g ∈ t), (λ (h : G), g * h) ⁻¹' U :=
235+
compact_covered_by_mul_left_translates hK h'U,
236+
calc μ K ≤ μ (⋃ (g : G) (H : g ∈ t), (λ (h : G), g * h) ⁻¹' U) : measure_mono hKt
237+
... ≤ ∑ g in t, μ ((λ (h : G), g * h) ⁻¹' U) : measure_bUnion_finset_le _ _
238+
... = finset.card t * μ U : by simp only [hμ _ hU.measurable_set, finset.sum_const, nsmul_eq_mul]
239+
... < ∞ : by simp only [ennreal.lt_top_iff_ne_top, h, ennreal.nat_ne_top, with_top.mul_eq_top_iff,
240+
ne.def, not_false_iff, and_false, false_and, or_self]
241+
end
242+
243+
/-- If a left-invariant measure gives finite mass to a set with nonempty interior, then
244+
it gives finite mass to any compact set. -/
245+
@[to_additive]
246+
lemma is_mul_left_invariant.measure_lt_top_of_is_compact' (hμ : is_mul_left_invariant μ)
247+
(U : set G) (hU : (interior U).nonempty) (h : μ U ≠ ∞) {K : set G} (hK : is_compact K) :
248+
μ K < ∞ :=
249+
hμ.measure_lt_top_of_is_compact (interior U) is_open_interior hU
250+
((measure_mono (interior_subset)).trans_lt (lt_top_iff_ne_top.2 h)).ne hK
251+
195252
/-- For nonzero regular left invariant measures, the integral of a continuous nonnegative function
196253
`f` is 0 iff `f` is 0. -/
197254
@[to_additive]
@@ -222,6 +279,7 @@ end group
222279

223280
section integration
224281

282+
variables [measurable_space G] [topological_space G] [borel_space G] {μ : measure G}
225283
variables [group G] [has_continuous_mul G]
226284
open measure
227285

@@ -253,4 +311,189 @@ end
253311

254312
end integration
255313

314+
section haar
315+
namespace measure
316+
317+
/-- A measure on a group is a Haar measure if it is left-invariant, and gives finite mass to compact
318+
sets and positive mass to open sets. -/
319+
class is_haar_measure {G : Type*} [group G] [topological_space G] [measurable_space G]
320+
(μ : measure G) : Prop :=
321+
(left_invariant : is_mul_left_invariant μ)
322+
(compact_lt_top : ∀ (K : set G), is_compact K → μ K < ∞)
323+
(open_pos : ∀ (U : set G), is_open U → U.nonempty → 0 < μ U)
324+
325+
/-- A measure on an additive group is an additive Haar measure if it is left-invariant, and gives
326+
finite mass to compact sets and positive mass to open sets. -/
327+
class is_add_haar_measure {G : Type*} [add_group G] [topological_space G] [measurable_space G]
328+
(μ : measure G) : Prop :=
329+
(add_left_invariant : is_add_left_invariant μ)
330+
(compact_lt_top : ∀ (K : set G), is_compact K → μ K < ∞)
331+
(open_pos : ∀ (U : set G), is_open U → U.nonempty → 0 < μ U)
332+
333+
attribute [to_additive] is_haar_measure
334+
335+
section
336+
337+
variables [group G] [measurable_space G] [topological_space G] (μ : measure G) [is_haar_measure μ]
338+
339+
@[to_additive]
340+
lemma _root_.is_compact.haar_lt_top {K : set G} (hK : is_compact K) :
341+
μ K < ∞ :=
342+
is_haar_measure.compact_lt_top K hK
343+
344+
@[to_additive]
345+
lemma _root_.is_open.haar_pos {U : set G} (hU : is_open U) (h'U : U.nonempty) :
346+
0 < μ U :=
347+
is_haar_measure.open_pos U hU h'U
348+
349+
@[to_additive]
350+
lemma haar_pos_of_nonempty_interior {U : set G} (hU : (interior U).nonempty) : 0 < μ U :=
351+
lt_of_lt_of_le (is_open_interior.haar_pos μ hU) (measure_mono (interior_subset))
352+
353+
@[to_additive]
354+
lemma is_mul_left_invariant_haar : is_mul_left_invariant μ :=
355+
is_haar_measure.left_invariant
356+
357+
@[simp, to_additive]
358+
lemma haar_preimage_mul [topological_group G] [borel_space G] (g : G) (A : set G) :
359+
μ ((λ h, g * h) ⁻¹' A) = μ A :=
360+
(is_mul_left_invariant_haar μ).measure_preimage_mul _ _
361+
362+
@[simp, to_additive]
363+
lemma haar_singleton [topological_group G] [borel_space G] (g : G) :
364+
μ {g} = μ {(1 : G)} :=
365+
begin
366+
convert haar_preimage_mul μ (g⁻¹) _,
367+
simp only [mul_one, preimage_mul_left_singleton, inv_inv],
368+
end
369+
370+
@[simp, to_additive]
371+
lemma haar_preimage_mul_right {G : Type*}
372+
[comm_group G] [measurable_space G] [topological_space G] (μ : measure G) [is_haar_measure μ]
373+
[topological_group G] [borel_space G] (g : G) (A : set G) :
374+
μ ((λ h, h * g) ⁻¹' A) = μ A :=
375+
by simp_rw [mul_comm, haar_preimage_mul μ g A]
376+
377+
@[to_additive measure_theory.measure.is_add_haar_measure.smul]
378+
lemma is_haar_measure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞) :
379+
is_haar_measure (c • μ) :=
380+
{ left_invariant := (is_mul_left_invariant_haar μ).smul _,
381+
compact_lt_top := λ K hK, begin
382+
change c * μ K < ∞,
383+
simp [lt_top_iff_ne_top, (hK.haar_lt_top μ).ne, cpos, ctop],
384+
end,
385+
open_pos := λ U U_open U_ne, bot_lt_iff_ne_bot.2 $ begin
386+
change c * μ U ≠ 0,
387+
simp [cpos, (_root_.is_open.haar_pos μ U_open U_ne).ne'],
388+
end }
389+
390+
/-- If a left-invariant measure gives positive mass to some compact set with nonempty interior, then
391+
it is a Haar measure -/
392+
@[to_additive]
393+
lemma is_haar_measure_of_is_compact_nonempty_interior [topological_group G] [borel_space G]
394+
(μ : measure G) (hμ : is_mul_left_invariant μ)
395+
(K : set G) (hK : is_compact K) (h'K : (interior K).nonempty) (h : μ K ≠ 0) (h' : μ K ≠ ∞) :
396+
is_haar_measure μ :=
397+
{ left_invariant := hμ,
398+
compact_lt_top := λ L hL, hμ.measure_lt_top_of_is_compact' _ h'K h' hL,
399+
open_pos := λ U hU, hμ.measure_pos_of_is_open K hK h hU }
400+
401+
/-- The image of a Haar measure under a group homomorphism which is also a homeomorphism is again
402+
a Haar measure. -/
403+
@[to_additive]
404+
lemma is_haar_measure_map [borel_space G] [topological_group G] {H : Type*} [group H]
405+
[topological_space H] [measurable_space H] [borel_space H] [t2_space H] [topological_group H]
406+
(f : G ≃* H) (hf : continuous f) (hfsymm : continuous f.symm) :
407+
is_haar_measure (measure.map f μ) :=
408+
{ left_invariant := begin
409+
rw ← map_mul_left_eq_self,
410+
assume h,
411+
rw map_map (continuous_mul_left h).measurable hf.measurable,
412+
conv_rhs { rw ← map_mul_left_eq_self.2 (is_mul_left_invariant_haar μ) (f.symm h) },
413+
rw map_map hf.measurable (continuous_mul_left _).measurable,
414+
congr' 2,
415+
ext y,
416+
simp only [mul_equiv.apply_symm_apply, comp_app, mul_equiv.map_mul],
417+
end,
418+
compact_lt_top := begin
419+
assume K hK,
420+
rw map_apply hf.measurable hK.measurable_set,
421+
have : f.symm '' K = f ⁻¹' K := equiv.image_eq_preimage _ _,
422+
rw ← this,
423+
exact is_compact.haar_lt_top _ (hK.image hfsymm)
424+
end,
425+
open_pos := begin
426+
assume U hU h'U,
427+
rw map_apply hf.measurable hU.measurable_set,
428+
refine (hU.preimage hf).haar_pos _ _,
429+
have : f.symm '' U = f ⁻¹' U := equiv.image_eq_preimage _ _,
430+
rw ← this,
431+
simp [h'U],
432+
end }
433+
434+
/-- A Haar measure on a sigma-compact space is sigma-finite. -/
435+
@[priority 100, to_additive] -- see Note [lower instance priority]
436+
instance is_haar_measure.sigma_finite
437+
{G : Type*} [group G] [measurable_space G] [topological_space G] [sigma_compact_space G]
438+
(μ : measure G) [μ.is_haar_measure] :
439+
sigma_finite μ :=
440+
⟨⟨{ set := compact_covering G,
441+
set_mem := λ n, mem_univ _,
442+
finite := λ n, is_compact.haar_lt_top μ $ is_compact_compact_covering G n,
443+
spanning := Union_compact_covering G }⟩⟩
444+
445+
open_locale topological_space
446+
open filter
447+
448+
/-- If the neutral element of a group is not isolated, then a Haar measure on this group has
449+
no atom.
450+
451+
This applies in particular to show that an additive Haar measure on a nontrivial
452+
finite-dimensional real vector space has no atom. -/
453+
@[priority 100, to_additive]
454+
instance is_haar_measure.has_no_atoms
455+
{G : Type*} [group G] [measurable_space G] [topological_space G] [t1_space G]
456+
[topological_group G] [locally_compact_space G] [borel_space G] [(𝓝[{(1 : G)}ᶜ] (1 : G)).ne_bot]
457+
(μ : measure G) [μ.is_haar_measure] :
458+
has_no_atoms μ :=
459+
begin
460+
suffices H : μ {(1 : G)} ≤ 0, by { constructor, simp [le_bot_iff.1 H] },
461+
obtain ⟨K, K_compact, K_int⟩ : ∃ (K : set G), is_compact K ∧ (1 : G) ∈ interior K,
462+
{ rcases exists_compact_subset is_open_univ (mem_univ (1 : G)) with ⟨K, hK⟩,
463+
exact ⟨K, hK.1, hK.2.1⟩ },
464+
have K_inf : set.infinite K := infinite_of_mem_nhds (1 : G) (mem_interior_iff_mem_nhds.1 K_int),
465+
have μKlt : μ K ≠ ∞ := (K_compact.haar_lt_top μ).ne,
466+
have I : ∀ (n : ℕ), μ {(1 : G)} ≤ μ K / n,
467+
{ assume n,
468+
obtain ⟨t, tK, tn⟩ : ∃ (t : finset G), ↑t ⊆ K ∧ t.card = n := K_inf.exists_subset_card_eq n,
469+
have A : μ t ≤ μ K := measure_mono tK,
470+
have B : μ t = n * μ {(1 : G)},
471+
{ rw ← bUnion_of_singleton ↑t,
472+
change μ (⋃ (x ∈ t), {x}) = n * μ {1},
473+
rw @measure_bUnion_finset G G _ μ t (λ i, {i}),
474+
{ simp only [tn, finset.sum_const, nsmul_eq_mul, haar_singleton] },
475+
{ assume x hx y hy xy,
476+
simp only [on_fun, xy.symm, mem_singleton_iff, not_false_iff, disjoint_singleton_right] },
477+
{ assume b hb, exact measurable_set_singleton b } },
478+
rw B at A,
479+
rwa [ennreal.le_div_iff_mul_le _ (or.inr μKlt), mul_comm],
480+
right,
481+
apply ne_of_gt (haar_pos_of_nonempty_interior μ ⟨_, K_int⟩) },
482+
have J : tendsto (λ (n : ℕ), μ K / n) at_top (𝓝 (μ K / ∞)) :=
483+
ennreal.tendsto.const_div ennreal.tendsto_nat_nhds_top (or.inr μKlt),
484+
simp only [ennreal.div_top] at J,
485+
exact ge_of_tendsto' J I,
486+
end
487+
488+
/- The above instance applies in particular to show that an additive Haar measure on a nontrivial
489+
finite-dimensional real vector space has no atom. -/
490+
example {E : Type*} [normed_group E] [normed_space ℝ E] [nontrivial E] [finite_dimensional ℝ E]
491+
[measurable_space E] [borel_space E] (μ : measure E) [is_add_haar_measure μ] :
492+
has_no_atoms μ := by apply_instance
493+
494+
end
495+
496+
end measure
497+
end haar
498+
256499
end measure_theory

src/topology/separation.lean

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,13 +276,41 @@ begin
276276
apply is_closed_map.of_nonempty, intros s hs h2s, simp_rw [h2s.image_const, is_closed_singleton]
277277
end
278278

279+
lemma finite.is_closed {α} [topological_space α] [t1_space α] {s : set α} (hs : set.finite s) :
280+
is_closed s :=
281+
begin
282+
rw ← bUnion_of_singleton s,
283+
exact is_closed_bUnion hs (λ i hi, is_closed_singleton)
284+
end
285+
286+
/-- If the punctured neighborhoods of a point form a nontrivial filter, then any neighborhood is
287+
infinite. -/
288+
lemma infinite_of_mem_nhds {α} [topological_space α] [t1_space α] (x : α) [hx : ne_bot (𝓝[{x}ᶜ] x)]
289+
{s : set α} (hs : s ∈ 𝓝 x) : set.infinite s :=
290+
begin
291+
unfreezingI { contrapose! hx },
292+
rw set.not_infinite at hx,
293+
have A : is_closed (s \ {x}) := finite.is_closed (hx.subset (diff_subset _ _)),
294+
have B : (s \ {x})ᶜ ∈ 𝓝 x,
295+
{ apply is_open.mem_nhds,
296+
{ apply is_open_compl_iff.2 A },
297+
{ simp only [not_true, not_false_iff, mem_diff, and_false, mem_compl_eq, mem_singleton] } },
298+
have C : {x} ∈ 𝓝 x,
299+
{ apply filter.mem_of_superset (filter.inter_mem hs B),
300+
assume y hy,
301+
simp only [mem_singleton_iff, mem_inter_eq, not_and, not_not, mem_diff, mem_compl_eq] at hy,
302+
simp only [hy.right hy.left, mem_singleton] },
303+
have D : {x}ᶜ ∈ 𝓝[{x}ᶜ] x := self_mem_nhds_within,
304+
simpa [← empty_mem_iff_bot] using filter.inter_mem (mem_nhds_within_of_mem_nhds C) D
305+
end
306+
279307
lemma discrete_of_t1_of_finite {X : Type*} [topological_space X] [t1_space X] [fintype X] :
280308
discrete_topology X :=
281309
begin
282310
apply singletons_open_iff_discrete.mp,
283311
intros x,
284-
rw [← is_closed_compl_iff, ← bUnion_of_singleton ({x} : set X)ᶜ],
285-
exact is_closed_bUnion (finite.of_fintype _) (λ y _, is_closed_singleton)
312+
rw [← is_closed_compl_iff],
313+
exact finite.is_closed (finite.of_fintype _)
286314
end
287315

288316
lemma singleton_mem_nhds_within_of_mem_discrete {s : set α} [discrete_topology s]

0 commit comments

Comments
 (0)