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

Commit 787e6b3

Browse files
committed
feat(measure_theory/haar_measure): Prove uniqueness (#5663)
Prove the uniqueness of Haar measure (up to a scalar) following *Measure Theory* by Paul Halmos. This proof seems to contain an omission which we fix by adding an extra hypothesis to an intermediate lemma. Add some lemmas about left invariant regular measures. We add the file `measure_theory.prod_group` which contain various measure-theoretic properties of products of topological groups, needed for the uniqueness. We add `@[to_additive]` to some declarations in `measure_theory`, but leave it out for many because of #4210. This causes some renamings in concepts, like `is_left_invariant` -> `is_mul_left_invariant` and `measure.conj` -> `measure.inv` (though a better naming suggestion for this one is welcome).
1 parent 23373d1 commit 787e6b3

File tree

7 files changed

+444
-59
lines changed

7 files changed

+444
-59
lines changed

docs/references.bib

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,15 @@ @book {gouvea1997
9797
URL = {https://doi.org/10.1007/978-3-642-59058-0},
9898
}
9999

100+
@book{halmos2013measure,
101+
title = {Measure theory},
102+
author = {Halmos, Paul R},
103+
volume = {18},
104+
year = {1950},
105+
publisher = {Springer},
106+
isbn = {0-387-90088-8}
107+
}
108+
100109
@article {huneke2002,
101110
AUTHOR = {Huneke, Craig},
102111
TITLE = {The Friendship Theorem},

src/measure_theory/borel_space.lean

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1203,7 +1203,7 @@ end normed_space
12031203
namespace measure_theory
12041204
namespace measure
12051205

1206-
variables [topological_space α]
1206+
variables [topological_space α] {μ : measure α}
12071207

12081208
/-- A measure `μ` is regular if
12091209
- it is finite on all compact sets;
@@ -1218,16 +1218,20 @@ structure regular (μ : measure α) : Prop :=
12181218

12191219
namespace regular
12201220

1221-
lemma outer_regular_eq {μ : measure α} (hμ : μ.regular) {{A : set α}}
1221+
lemma outer_regular_eq (hμ : μ.regular) {{A : set α}}
12221222
(hA : is_measurable A) : (⨅ (U : set α) (h : is_open U) (h2 : A ⊆ U), μ U) = μ A :=
12231223
le_antisymm (hμ.outer_regular hA) $ le_infi $ λ s, le_infi $ λ hs, le_infi $ λ h2s, μ.mono h2s
12241224

1225-
lemma inner_regular_eq {μ : measure α} (hμ : μ.regular) {{U : set α}}
1225+
lemma inner_regular_eq (hμ : μ.regular) {{U : set α}}
12261226
(hU : is_open U) : (⨆ (K : set α) (h : is_compact K) (h2 : K ⊆ U), μ K) = μ U :=
12271227
le_antisymm (supr_le $ λ s, supr_le $ λ hs, supr_le $ λ h2s, μ.mono h2s) (hμ.inner_regular hU)
12281228

1229+
lemma exists_compact_not_null (hμ : regular μ) : (∃ K, is_compact K ∧ μ K ≠ 0) ↔ μ ≠ 0 :=
1230+
by simp_rw [ne.def, ← measure_univ_eq_zero, ← hμ.inner_regular_eq is_open_univ,
1231+
ennreal.supr_eq_zero, not_forall, exists_prop, subset_univ, true_and]
1232+
12291233
protected lemma map [opens_measurable_space α] [measurable_space β] [topological_space β]
1230-
[t2_space β] [borel_space β] {μ : measure α} (hμ : μ.regular) (f : α ≃ₜ β) :
1234+
[t2_space β] [borel_space β] (hμ : μ.regular) (f : α ≃ₜ β) :
12311235
(measure.map f μ).regular :=
12321236
begin
12331237
have hf := f.continuous.measurable,
@@ -1249,7 +1253,7 @@ begin
12491253
rw [map_apply hf hK.is_measurable] }
12501254
end
12511255

1252-
protected lemma smul {μ : measure α} (hμ : μ.regular) {x : ennreal} (hx : x < ⊤) :
1256+
protected lemma smul (hμ : μ.regular) {x : ennreal} (hx : x < ⊤) :
12531257
(x • μ).regular :=
12541258
begin
12551259
split,
@@ -1264,6 +1268,15 @@ begin
12641268
rw [ennreal.mul_supr], refl' }
12651269
end
12661270

1271+
/-- A regular measure in a σ-compact space is σ-finite. -/
1272+
protected lemma sigma_finite [opens_measurable_space α] [t2_space α] [sigma_compact_space α]
1273+
(hμ : regular μ) : sigma_finite μ :=
1274+
⟨{ set := compact_covering α,
1275+
set_mem := λ n, (is_compact_compact_covering α n).is_measurable,
1276+
finite := λ n, hμ.lt_top_of_is_compact $ is_compact_compact_covering α n,
1277+
spanning := Union_compact_covering α }⟩
1278+
1279+
12671280
end regular
12681281

12691282
end measure

src/measure_theory/content.lean

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,15 @@ begin
141141
apply h,
142142
end
143143

144-
lemma is_left_invariant_inner_content [group G] [topological_group G] {μ : compacts G → ennreal}
144+
@[to_additive]
145+
lemma is_mul_left_invariant_inner_content [group G] [topological_group G] {μ : compacts G → ennreal}
145146
(h : ∀ (g : G) {K : compacts G}, μ (K.map _ $ continuous_mul_left g) = μ K) (g : G)
146147
(U : opens G) : inner_content μ (U.comap $ continuous_mul_left g) = inner_content μ U :=
147148
by convert inner_content_comap (homeomorph.mul_left g) (λ K, h g) U
148149

149-
lemma inner_content_pos [t2_space G] [group G] [topological_group G] {μ : compacts G → ennreal}
150+
-- @[to_additive] (fails for now)
151+
lemma inner_content_pos_of_is_mul_left_invariant [t2_space G] [group G] [topological_group G]
152+
{μ : compacts G → ennreal}
150153
(h1 : μ ⊥ = 0)
151154
(h2 : ∀ (K₁ K₂ : compacts G), μ (K₁ ⊔ K₂) ≤ μ K₁ + μ K₂)
152155
(h3 : ∀ (g : G) {K : compacts G}, μ (K.map _ $ continuous_mul_left g) = μ K)
@@ -162,7 +165,7 @@ begin
162165
refine (le_inner_content _ _ this).trans _,
163166
refine (rel_supr_sum (inner_content μ) (inner_content_empty h1) (≤)
164167
(inner_content_Sup_nat h1 h2) _ _).trans _,
165-
simp only [is_left_invariant_inner_content h3, finset.sum_const, nsmul_eq_mul, le_refl]
168+
simp only [is_mul_left_invariant_inner_content h3, finset.sum_const, nsmul_eq_mul, le_refl]
166169
end
167170

168171
lemma inner_content_mono' {μ : compacts G → ennreal} ⦃U V : set G⦄
@@ -228,7 +231,8 @@ begin
228231
intros s hs, convert inner_content_comap f h ⟨s, hs⟩
229232
end
230233

231-
lemma is_left_invariant_of_content [group G] [topological_group G]
234+
@[to_additive]
235+
lemma is_mul_left_invariant_of_content [group G] [topological_group G]
232236
(h : ∀ (g : G) {K : compacts G}, μ (K.map _ $ continuous_mul_left g) = μ K) (g : G)
233237
(A : set G) : of_content μ h1 ((λ h, g * h) ⁻¹' A) = of_content μ h1 A :=
234238
by convert of_content_preimage h2 (homeomorph.mul_left g) (λ K, h g) A
@@ -243,11 +247,13 @@ begin
243247
apply inner_content_mono'
244248
end
245249

246-
lemma of_content_pos_of_is_open [group G] [topological_group G]
250+
-- @[to_additive] (fails for now)
251+
lemma of_content_pos_of_is_mul_left_invariant [group G] [topological_group G]
247252
(h3 : ∀ (g : G) {K : compacts G}, μ (K.map _ $ continuous_mul_left g) = μ K)
248253
(K : compacts G) (hK : 0 < μ K) {U : set G} (h1U : is_open U) (h2U : U.nonempty) :
249254
0 < of_content μ h1 U :=
250-
by { convert inner_content_pos h1 h2 h3 K hK ⟨U, h1U⟩ h2U, exact of_content_opens h2 ⟨U, h1U⟩ }
255+
by { convert inner_content_pos_of_is_mul_left_invariant h1 h2 h3 K hK ⟨U, h1U⟩ h2U,
256+
exact of_content_opens h2 ⟨U, h1U⟩ }
251257

252258
end outer_measure
253259
end measure_theory

src/measure_theory/group.lean

Lines changed: 138 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,21 @@ Copyright (c) 2020 Floris van Doorn. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Floris van Doorn
55
-/
6-
import measure_theory.borel_space
6+
import measure_theory.integration
7+
78
/-!
89
# Measures on Groups
910
1011
We develop some properties of measures on (topological) groups
1112
12-
* We define properties on measures: left and right invariant measures
13-
* We define the conjugate `A ↦ μ (A⁻¹)` of a measure `μ`, and show that it is right invariant iff
14-
`μ` is left invariant
13+
* We define properties on measures: left and right invariant measures.
14+
* We define the measure `μ.inv : A ↦ μ(A⁻¹)` and show that it is right invariant iff
15+
`μ` is left invariant.
1516
-/
17+
1618
noncomputable theory
1719

18-
open has_inv set function
20+
open has_inv set function measure_theory.measure
1921

2022
namespace measure_theory
2123

@@ -25,16 +27,26 @@ section
2527

2628
variables [measurable_space G] [has_mul G]
2729

28-
/-- A measure `μ` on a topological group is left invariant if
29-
for all measurable sets `s` and all `g`, we have `μ (gs) = μ s`,
30-
where `gs` denotes the translate of `s` by left multiplication with `g`. -/
31-
def is_left_invariant (μ : set G → ennreal) : Prop :=
30+
/-- A measure `μ` on a topological group is left invariant
31+
if the measure of left translations of a set are equal to the measure of the set itself.
32+
To left translate sets we use preimage under left multiplication,
33+
since preimages are nicer to work with than images. -/
34+
@[to_additive "A measure on a topological group is left invariant
35+
if the measure of left translations of a set are equal to the measure of the set itself.
36+
To left translate sets we use preimage under left addition,
37+
since preimages are nicer to work with than images."]
38+
def is_mul_left_invariant (μ : set G → ennreal) : Prop :=
3239
∀ (g : G) {A : set G} (h : is_measurable A), μ ((λ h, g * h) ⁻¹' A) = μ A
3340

34-
/-- A measure `μ` on a topological group is right invariant if
35-
for all measurable sets `s` and all `g`, we have `μ (sg) = μ s`,
36-
where `sg` denotes the translate of `s` by right multiplication with `g`. -/
37-
def is_right_invariant (μ : set G → ennreal) : Prop :=
41+
/-- A measure `μ` on a topological group is right invariant
42+
if the measure of right translations of a set are equal to the measure of the set itself.
43+
To right translate sets we use preimage under right multiplication,
44+
since preimages are nicer to work with than images. -/
45+
@[to_additive "A measure on a topological group is right invariant
46+
if the measure of right translations of a set are equal to the measure of the set itself.
47+
To right translate sets we use preimage under right addition,
48+
since preimages are nicer to work with than images."]
49+
def is_mul_right_invariant (μ : set G → ennreal) : Prop :=
3850
∀ (g : G) {A : set G} (h : is_measurable A), μ ((λ h, h * g) ⁻¹' A) = μ A
3951

4052
end
@@ -43,73 +55,160 @@ namespace measure
4355

4456
variables [measurable_space G]
4557

58+
@[to_additive]
4659
lemma map_mul_left_eq_self [topological_space G] [has_mul G] [has_continuous_mul G] [borel_space G]
47-
{μ : measure G} : (∀ g, measure.map ((*) g) μ = μ) ↔ is_left_invariant μ :=
60+
{μ : measure G} : (∀ g, measure.map ((*) g) μ = μ) ↔ is_mul_left_invariant μ :=
4861
begin
4962
apply forall_congr, intro g, rw [measure.ext_iff], apply forall_congr, intro A,
5063
apply forall_congr, intro hA, rw [map_apply (measurable_mul_left g) hA]
5164
end
5265

66+
@[to_additive]
5367
lemma map_mul_right_eq_self [topological_space G] [has_mul G] [has_continuous_mul G] [borel_space G]
54-
{μ : measure G} : (∀ g, measure.map (λ h, h * g) μ = μ) ↔ is_right_invariant μ :=
68+
{μ : measure G} : (∀ g, measure.map (λ h, h * g) μ = μ) ↔ is_mul_right_invariant μ :=
5569
begin
5670
apply forall_congr, intro g, rw [measure.ext_iff], apply forall_congr, intro A,
5771
apply forall_congr, intro hA, rw [map_apply (measurable_mul_right g) hA]
5872
end
5973

60-
/-- The conjugate of a measure on a topological group.
61-
Defined to be `A ↦ μ (A⁻¹)`, where `A⁻¹` is the pointwise inverse of `A`. -/
62-
protected def conj [group G] (μ : measure G) : measure G :=
74+
/-- The measure `A ↦ μ (A⁻¹)`, where `A⁻¹` is the pointwise inverse of `A`. -/
75+
@[to_additive "The measure `A ↦ μ (- A)`, where `- A` is the pointwise negation of `A`."]
76+
protected def inv [has_inv G] (μ : measure G) : measure G :=
6377
measure.map inv μ
6478

6579
variables [group G] [topological_space G] [topological_group G] [borel_space G]
6680

67-
lemma conj_apply (μ : measure G) {s : set G} (hs : is_measurable s) :
68-
μ.conj s = μ s⁻¹ :=
69-
by { unfold measure.conj, rw [measure.map_apply measurable_inv hs, inv_preimage] }
81+
@[to_additive]
82+
lemma inv_apply (μ : measure G) {s : set G} (hs : is_measurable s) :
83+
μ.inv s = μ s⁻¹ :=
84+
by { unfold measure.inv, rw [measure.map_apply measurable_inv hs, inv_preimage] }
7085

71-
@[simp] lemma conj_conj (μ : measure G) : μ.conj.conj = μ :=
86+
@[simp, to_additive] protected lemma inv_inv (μ : measure G) : μ.inv.inv = μ :=
7287
begin
73-
ext1 s hs, rw [μ.conj.conj_apply hs, μ.conj_apply, set.inv_inv], exact measurable_inv hs
88+
ext1 s hs, rw [μ.inv.inv_apply hs, μ.inv_apply, set.inv_inv],
89+
exact measurable_inv hs
7490
end
7591

7692
variables {μ : measure G}
7793

78-
lemma regular.conj [t2_space G] (hμ : μ.regular) : μ.conj.regular :=
94+
@[to_additive]
95+
lemma regular.inv [t2_space G] (hμ : μ.regular) : μ.inv.regular :=
7996
hμ.map (homeomorph.inv G)
8097

8198
end measure
8299

83-
section conj
100+
section inv
84101
variables [measurable_space G] [group G] [topological_space G] [topological_group G] [borel_space G]
85102
{μ : measure G}
86103

87-
@[simp] lemma regular_conj_iff [t2_space G] : μ.conj.regular ↔ μ.regular :=
88-
by { refine ⟨λ h, _, measure.regular.conj⟩, rw ←μ.conj_conj, exact measure.regular.conj h }
104+
@[simp, to_additive] lemma regular_inv_iff [t2_space G] : μ.inv.regular ↔ μ.regular :=
105+
by { refine ⟨λ h, _, measure.regular.inv⟩, rw ←μ.inv_inv, exact measure.regular.inv h }
89106

90-
lemma is_right_invariant_conj' (h : is_left_invariant μ) :
91-
is_right_invariant μ.conj :=
107+
@[to_additive]
108+
lemma is_mul_left_invariant.inv (h : is_mul_left_invariant μ) :
109+
is_mul_right_invariant μ.inv :=
92110
begin
93-
intros g A hA, rw [μ.conj_apply (measurable_mul_right g hA), μ.conj_apply hA],
111+
intros g A hA,
112+
rw [μ.inv_apply (measurable_mul_right g hA), μ.inv_apply hA],
94113
convert h g⁻¹ (measurable_inv hA) using 2,
95114
simp only [←preimage_comp, ← inv_preimage],
96-
apply preimage_congr, intro h, simp only [mul_inv_rev, comp_app, inv_inv]
115+
apply preimage_congr,
116+
intro h,
117+
simp only [mul_inv_rev, comp_app, inv_inv]
97118
end
98119

99-
lemma is_left_invariant_conj' (h : is_right_invariant μ) : is_left_invariant μ.conj :=
120+
@[to_additive]
121+
lemma is_mul_right_invariant.inv (h : is_mul_right_invariant μ) : is_mul_left_invariant μ.inv :=
100122
begin
101-
intros g A hA, rw [μ.conj_apply (measurable_mul_left g hA), μ.conj_apply hA],
123+
intros g A hA,
124+
rw [μ.inv_apply (measurable_mul_left g hA), μ.inv_apply hA],
102125
convert h g⁻¹ (measurable_inv hA) using 2,
103126
simp only [←preimage_comp, ← inv_preimage],
104-
apply preimage_congr, intro h, simp only [mul_inv_rev, comp_app, inv_inv]
127+
apply preimage_congr,
128+
intro h,
129+
simp only [mul_inv_rev, comp_app, inv_inv]
105130
end
106131

107-
@[simp] lemma is_right_invariant_conj : is_right_invariant μ.conj ↔ is_left_invariant μ :=
108-
by { refine ⟨λ h, _, is_right_invariant_conj'⟩, rw ←μ.conj_conj, exact is_left_invariant_conj' h }
132+
@[simp, to_additive]
133+
lemma is_mul_right_invariant_inv : is_mul_right_invariant μ.inv ↔ is_mul_left_invariant μ :=
134+
⟨λ h, by { rw ← μ.inv_inv, exact h.inv }, λ h, h.inv⟩
135+
136+
@[simp, to_additive]
137+
lemma is_mul_left_invariant_inv : is_mul_left_invariant μ.inv ↔ is_mul_right_invariant μ :=
138+
⟨λ h, by { rw ← μ.inv_inv, exact h.inv }, λ h, h.inv⟩
139+
140+
end inv
109141

110-
@[simp] lemma is_left_invariant_conj : is_left_invariant μ.conj ↔ is_right_invariant μ :=
111-
by { refine ⟨λ h, _, is_left_invariant_conj'⟩, rw ←μ.conj_conj, exact is_right_invariant_conj' h }
142+
variables [measurable_space G] [topological_space G] [borel_space G] {μ : measure G}
143+
144+
section group
145+
146+
variables [group G] [topological_group G]
147+
148+
/-! Properties of regular left invariant measures -/
149+
@[to_additive measure_theory.measure.is_add_left_invariant.null_iff_empty]
150+
lemma is_mul_left_invariant.null_iff_empty (hμ : μ.regular) (h2μ : is_mul_left_invariant μ)
151+
(h3μ : μ ≠ 0) {s : set G} (hs : is_open s) : μ s = 0 ↔ s = ∅ :=
152+
begin
153+
obtain ⟨K, hK, h2K⟩ := hμ.exists_compact_not_null.mpr h3μ,
154+
refine ⟨λ h, _, λ h, by simp [h]⟩,
155+
apply classical.by_contradiction, -- `by_contradiction` is very slow
156+
refine mt (λ h2s, _) h2K,
157+
rw [← ne.def, ne_empty_iff_nonempty] at h2s, cases h2s with y hy,
158+
obtain ⟨t, -, h1t, h2t⟩ := hK.elim_finite_subcover_image
159+
(show ∀ x ∈ @univ G, is_open ((λ y, x * y) ⁻¹' s),
160+
from λ x _, (continuous_mul_left x).is_open_preimage _ hs) _,
161+
{ rw [← nonpos_iff_eq_zero],
162+
refine (measure_mono h2t).trans _,
163+
refine (measure_bUnion_le h1t.countable _).trans_eq _,
164+
simp_rw [h2μ _ hs.is_measurable], rw [h, tsum_zero] },
165+
{ intros x _,
166+
simp_rw [mem_Union, mem_preimage],
167+
use [y * x⁻¹, mem_univ _],
168+
rwa [inv_mul_cancel_right] }
169+
end
170+
171+
@[to_additive measure_theory.measure.is_add_left_invariant.null_iff]
172+
lemma is_mul_left_invariant.null_iff (hμ : regular μ) (h2μ : is_mul_left_invariant μ)
173+
{s : set G} (hs : is_open s) : μ s = 0 ↔ s = ∅ ∨ μ = 0 :=
174+
begin
175+
by_cases h3μ : μ = 0, { simp [h3μ] },
176+
simp only [h3μ, or_false],
177+
exact h2μ.null_iff_empty hμ h3μ hs,
178+
end
179+
180+
@[to_additive measure_theory.measure.is_add_left_invariant.measure_ne_zero_iff_nonempty]
181+
lemma is_mul_left_invariant.measure_ne_zero_iff_nonempty (hμ : regular μ)
182+
(h2μ : is_mul_left_invariant μ) (h3μ : μ ≠ 0) {s : set G} (hs : is_open s) :
183+
μ s ≠ 0 ↔ s.nonempty :=
184+
by simp_rw [← ne_empty_iff_nonempty, ne.def, h2μ.null_iff_empty hμ h3μ hs]
185+
186+
/-- For nonzero regular left invariant measures, the integral of a continuous nonnegative function
187+
`f` is 0 iff `f` is 0. -/
188+
-- @[to_additive] (fails for now)
189+
lemma lintegral_eq_zero_of_is_mul_left_invariant (hμ : regular μ)
190+
(h2μ : is_mul_left_invariant μ) (h3μ : μ ≠ 0) {f : G → ennreal} (hf : continuous f) :
191+
∫⁻ x, f x ∂μ = 0 ↔ f = 0 :=
192+
begin
193+
split, swap, { rintro rfl, simp_rw [pi.zero_apply, lintegral_zero] },
194+
intro h, contrapose h,
195+
simp_rw [funext_iff, not_forall, pi.zero_apply] at h, cases h with x hx,
196+
obtain ⟨r, h1r, h2r⟩ : ∃ r : ennreal, 0 < r ∧ r < f x :=
197+
exists_between (pos_iff_ne_zero.mpr hx),
198+
have h3r := hf.is_open_preimage (Ioi r) is_open_Ioi,
199+
let s := Ioi r,
200+
rw [← ne.def, ← pos_iff_ne_zero],
201+
have : 0 < r * μ (f ⁻¹' Ioi r),
202+
{ rw ennreal.mul_pos,
203+
refine ⟨h1r, _⟩,
204+
rw [pos_iff_ne_zero, h2μ.measure_ne_zero_iff_nonempty hμ h3μ h3r],
205+
exact ⟨x, h2r⟩ },
206+
refine this.trans_le _,
207+
rw [← set_lintegral_const, ← lintegral_indicator _ h3r.is_measurable],
208+
apply lintegral_mono,
209+
refine indicator_le (λ y, le_of_lt),
210+
end
112211

113-
end conj
212+
end group
114213

115214
end measure_theory

0 commit comments

Comments
 (0)