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

Commit 68ae182

Browse files
committed
feat(measure_theory/group/measure): a product of Haar measures is a Haar measure (#15120)
1 parent 365e30d commit 68ae182

File tree

5 files changed

+149
-0
lines changed

5 files changed

+149
-0
lines changed

src/measure_theory/constructions/prod.lean

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ Authors: Floris van Doorn
66
import measure_theory.measure.giry_monad
77
import dynamics.ergodic.measure_preserving
88
import measure_theory.integral.set_integral
9+
import measure_theory.measure.open_pos
910

1011
/-!
1112
# The product measure
@@ -366,6 +367,53 @@ begin
366367
... = μ.prod ν (s ×ˢ t) : measure_to_measurable _ }
367368
end
368369

370+
instance {X Y : Type*} [topological_space X] [topological_space Y]
371+
{m : measurable_space X} {μ : measure X} [is_open_pos_measure μ]
372+
{m' : measurable_space Y} {ν : measure Y} [is_open_pos_measure ν] [sigma_finite ν] :
373+
is_open_pos_measure (μ.prod ν) :=
374+
begin
375+
constructor,
376+
rintros U U_open ⟨⟨x, y⟩, hxy⟩,
377+
rcases is_open_prod_iff.1 U_open x y hxy with ⟨u, v, u_open, v_open, xu, yv, huv⟩,
378+
refine ne_of_gt (lt_of_lt_of_le _ (measure_mono huv)),
379+
simp only [prod_prod, canonically_ordered_comm_semiring.mul_pos],
380+
split,
381+
{ exact u_open.measure_pos μ ⟨x, xu⟩ },
382+
{ exact v_open.measure_pos ν ⟨y, yv⟩ }
383+
end
384+
385+
instance {α β : Type*} {mα : measurable_space α} {mβ : measurable_space β}
386+
(μ : measure α) (ν : measure β) [is_finite_measure μ] [is_finite_measure ν] :
387+
is_finite_measure (μ.prod ν) :=
388+
begin
389+
constructor,
390+
rw [← univ_prod_univ, prod_prod],
391+
exact mul_lt_top (measure_lt_top _ _).ne (measure_lt_top _ _).ne,
392+
end
393+
394+
instance {α β : Type*} {mα : measurable_space α} {mβ : measurable_space β}
395+
(μ : measure α) (ν : measure β) [is_probability_measure μ] [is_probability_measure ν] :
396+
is_probability_measure (μ.prod ν) :=
397+
by rw [← univ_prod_univ, prod_prod, measure_univ, measure_univ, mul_one]⟩
398+
399+
instance {α β : Type*} [topological_space α] [topological_space β]
400+
{mα : measurable_space α} {mβ : measurable_space β} (μ : measure α) (ν : measure β)
401+
[is_finite_measure_on_compacts μ] [is_finite_measure_on_compacts ν] [sigma_finite ν] :
402+
is_finite_measure_on_compacts (μ.prod ν) :=
403+
begin
404+
refine ⟨λ K hK, _⟩,
405+
set L := (prod.fst '' K) ×ˢ (prod.snd '' K) with hL,
406+
have : K ⊆ L,
407+
{ rintros ⟨x, y⟩ hxy,
408+
simp only [prod_mk_mem_set_prod_eq, mem_image, prod.exists, exists_and_distrib_right,
409+
exists_eq_right],
410+
exact ⟨⟨y, hxy⟩, ⟨x, hxy⟩⟩ },
411+
apply lt_of_le_of_lt (measure_mono this),
412+
rw [hL, prod_prod],
413+
exact mul_lt_top ((is_compact.measure_lt_top ((hK.image continuous_fst))).ne)
414+
((is_compact.measure_lt_top ((hK.image continuous_snd))).ne)
415+
end
416+
369417
lemma ae_measure_lt_top {s : set (α × β)} (hs : measurable_set s)
370418
(h2s : (μ.prod ν) s ≠ ∞) : ∀ᵐ x ∂μ, ν (prod.mk x ⁻¹' s) < ∞ :=
371419
by { simp_rw [prod_apply hs] at h2s, refine ae_lt_top (measurable_measure_prod_mk_left hs) h2s }
@@ -845,6 +893,17 @@ lemma integrable.integral_norm_prod_right [sigma_finite μ] ⦃f : α × β →
845893
(hf : integrable f (μ.prod ν)) : integrable (λ y, ∫ x, ∥f (x, y)∥ ∂μ) ν :=
846894
hf.swap.integral_norm_prod_left
847895

896+
lemma integrable_prod_mul {f : α → ℝ} {g : β → ℝ} (hf : integrable f μ) (hg : integrable g ν) :
897+
integrable (λ (z : α × β), f z.1 * g z.2) (μ.prod ν) :=
898+
begin
899+
refine (integrable_prod_iff _).2 ⟨_, _⟩,
900+
{ apply ae_strongly_measurable.mul,
901+
{ exact (hf.1.mono' prod_fst_absolutely_continuous).comp_measurable measurable_fst },
902+
{ exact (hg.1.mono' prod_snd_absolutely_continuous).comp_measurable measurable_snd } },
903+
{ exact eventually_of_forall (λ x, hg.const_mul (f x)) },
904+
{ simpa only [norm_mul, integral_mul_left] using hf.norm.mul_const _ }
905+
end
906+
848907
end
849908

850909
variables [normed_space ℝ E] [complete_space E]
@@ -1015,4 +1074,21 @@ begin
10151074
exact integral_prod f hf
10161075
end
10171076

1077+
lemma integral_prod_mul (f : α → ℝ) (g : β → ℝ) :
1078+
∫ z, f z.1 * g z.2 ∂(μ.prod ν) = (∫ x, f x ∂μ) * (∫ y, g y ∂ν) :=
1079+
begin
1080+
by_cases h : integrable (λ (z : α × β), f z.1 * g z.2) (μ.prod ν),
1081+
{ rw integral_prod _ h,
1082+
simp_rw [integral_mul_left, integral_mul_right] },
1083+
have H : ¬(integrable f μ) ∨ ¬(integrable g ν),
1084+
{ contrapose! h,
1085+
exact integrable_prod_mul h.1 h.2 },
1086+
cases H;
1087+
simp [integral_undef h, integral_undef H],
1088+
end
1089+
1090+
lemma set_integral_prod_mul (f : α → ℝ) (g : β → ℝ) (s : set α) (t : set β) :
1091+
∫ z in s ×ˢ t, f z.1 * g z.2 ∂(μ.prod ν) = (∫ x in s, f x ∂μ) * (∫ y in t, g y ∂ν) :=
1092+
by simp only [← measure.prod_restrict s t, integrable_on, integral_prod_mul]
1093+
10181094
end measure_theory

src/measure_theory/function/jacobian.lean

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1244,4 +1244,16 @@ begin
12441244
refl
12451245
end
12461246

1247+
theorem integral_target_eq_integral_abs_det_fderiv_smul [complete_space F]
1248+
{f : local_homeomorph E E} (hf' : ∀ x ∈ f.source, has_fderiv_at f (f' x) x) (g : E → F) :
1249+
∫ x in f.target, g x ∂μ = ∫ x in f.source, |(f' x).det| • g (f x) ∂μ :=
1250+
begin
1251+
have : f '' f.source = f.target := local_equiv.image_source_eq_target f.to_local_equiv,
1252+
rw ← this,
1253+
apply integral_image_eq_integral_abs_det_fderiv_smul μ f.open_source.measurable_set _ f.inj_on,
1254+
assume x hx,
1255+
exact (hf' x hx).has_fderiv_within_at
1256+
end
1257+
1258+
12471259
end measure_theory

src/measure_theory/group/measure.lean

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import dynamics.ergodic.measure_preserving
77
import measure_theory.measure.regular
88
import measure_theory.group.measurable_equiv
99
import measure_theory.measure.open_pos
10+
import measure_theory.constructions.prod
1011

1112
/-!
1213
# Measures on Groups
@@ -115,6 +116,36 @@ begin
115116
exact ⟨λ h, ⟨h⟩, λ h, h.1
116117
end
117118

119+
@[to_additive]
120+
instance [is_mul_left_invariant μ] [sigma_finite μ] {H : Type*} [has_mul H]
121+
{mH : measurable_space H} {ν : measure H} [has_measurable_mul H]
122+
[is_mul_left_invariant ν] [sigma_finite ν] :
123+
is_mul_left_invariant (μ.prod ν) :=
124+
begin
125+
constructor,
126+
rintros ⟨g, h⟩,
127+
change map (prod.map ((*) g) ((*) h)) (μ.prod ν) = μ.prod ν,
128+
rw [← map_prod_map _ _ (measurable_const_mul g) (measurable_const_mul h),
129+
map_mul_left_eq_self μ g, map_mul_left_eq_self ν h],
130+
{ rw map_mul_left_eq_self μ g, apply_instance },
131+
{ rw map_mul_left_eq_self ν h, apply_instance },
132+
end
133+
134+
@[to_additive]
135+
instance [is_mul_right_invariant μ] [sigma_finite μ] {H : Type*} [has_mul H]
136+
{mH : measurable_space H} {ν : measure H} [has_measurable_mul H]
137+
[is_mul_right_invariant ν] [sigma_finite ν] :
138+
is_mul_right_invariant (μ.prod ν) :=
139+
begin
140+
constructor,
141+
rintros ⟨g, h⟩,
142+
change map (prod.map (* g) (* h)) (μ.prod ν) = μ.prod ν,
143+
rw [← map_prod_map _ _ (measurable_mul_const g) (measurable_mul_const h),
144+
map_mul_right_eq_self μ g, map_mul_right_eq_self ν h],
145+
{ rw map_mul_right_eq_self μ g, apply_instance },
146+
{ rw map_mul_right_eq_self ν h, apply_instance },
147+
end
148+
118149
end has_measurable_mul
119150

120151
end mul
@@ -488,6 +519,14 @@ instance is_haar_measure.sigma_finite [sigma_compact_space G] : sigma_finite μ
488519
finite := λ n, is_compact.measure_lt_top $ is_compact_compact_covering G n,
489520
spanning := Union_compact_covering G }⟩⟩
490521

522+
@[to_additive]
523+
instance {G : Type*} [group G] [topological_space G] {mG : measurable_space G}
524+
{H : Type*} [group H] [topological_space H] {mH : measurable_space H}
525+
(μ : measure G) (ν : measure H) [is_haar_measure μ] [is_haar_measure ν]
526+
[sigma_finite μ] [sigma_finite ν]
527+
[has_measurable_mul G] [has_measurable_mul H] :
528+
is_haar_measure (μ.prod ν) := {}
529+
491530
open_locale topological_space
492531
open filter
493532

src/measure_theory/integral/interval_integral.lean

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,20 @@ lemma interval_integrable_iff_integrable_Icc_of_le {E : Type*} [normed_group E]
248248
interval_integrable f μ a b ↔ integrable_on f (Icc a b) μ :=
249249
by rw [interval_integrable_iff_integrable_Ioc_of_le hab, integrable_on_Icc_iff_integrable_on_Ioc]
250250

251+
lemma integrable_on_Ici_iff_integrable_on_Ioi'
252+
{E : Type*} [normed_group E] {f : ℝ → E} (ha : μ {a} ≠ ∞) :
253+
integrable_on f (Ici a) μ ↔ integrable_on f (Ioi a) μ :=
254+
begin
255+
have : Ici a = Icc a a ∪ Ioi a := (Icc_union_Ioi_eq_Ici le_rfl).symm,
256+
rw [this, integrable_on_union],
257+
simp [ha.lt_top]
258+
end
259+
260+
lemma integrable_on_Ici_iff_integrable_on_Ioi
261+
{E : Type*} [normed_group E] [has_no_atoms μ] {f : ℝ → E} :
262+
integrable_on f (Ici a) μ ↔ integrable_on f (Ioi a) μ :=
263+
integrable_on_Ici_iff_integrable_on_Ioi' (by simp)
264+
251265
/-- If a function is integrable with respect to a given measure `μ` then it is interval integrable
252266
with respect to `μ` on `interval a b`. -/
253267
lemma measure_theory.integrable.interval_integrable (hf : integrable f μ) :

src/measure_theory/measure/haar.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -728,5 +728,13 @@ calc μ (s⁻¹) = measure.map (has_inv.inv) μ s :
728728
((homeomorph.inv G).to_measurable_equiv.map_apply s).symm
729729
... = μ s : by rw map_haar_inv
730730

731+
@[to_additive]
732+
lemma measure_preserving_inv
733+
{G : Type*} [comm_group G] [topological_space G] [topological_group G] [t2_space G]
734+
[measurable_space G] [borel_space G] [locally_compact_space G] [second_countable_topology G]
735+
(μ : measure G) [is_haar_measure μ] :
736+
measure_preserving has_inv.inv μ μ :=
737+
⟨measurable_inv, map_haar_inv μ⟩
738+
731739
end measure
732740
end measure_theory

0 commit comments

Comments
 (0)