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

Commit 95413e2

Browse files
committed
feat(measure_theory/group/*): various lemmas about invariant measures (#13539)
* Make the `measurable_equiv` argument to `measure_preserving.symm` explicit. This argument is cannot always be deduced from the other explicit arguments (which can be seen form the changes in `src/measure_theory/constructions/pi.lean`). * From the sphere eversion project * Required for convolutions
1 parent ebac9f0 commit 95413e2

File tree

16 files changed

+293
-83
lines changed

16 files changed

+293
-83
lines changed

src/analysis/complex/cauchy_integral.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,7 @@ begin
189189
refine (integral2_divergence_prod_of_has_fderiv_within_at_off_countable
190190
(λ p, -(I • F p)) F (λ p, - (I • F' p)) F' z.re w.im w.re z.im t (hs.preimage e.injective)
191191
(htc.const_smul _).neg htc (λ p hp, ((htd p hp).const_smul I).neg) htd _).symm,
192-
rw [← volume_preserving_equiv_real_prod.symm.integrable_on_comp_preimage
192+
rw [← (volume_preserving_equiv_real_prod.symm _).integrable_on_comp_preimage
193193
(measurable_equiv.measurable_embedding _)] at Hi,
194194
simpa only [hF'] using Hi.neg
195195
end

src/dynamics/ergodic/measure_preserving.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ protected lemma ae_measurable {f : α → β} (hf : measure_preserving f μa μb
5656
ae_measurable f μa :=
5757
hf.1.ae_measurable
5858

59-
lemma symm {e : α ≃ᵐ β} {μa : measure α} {μb : measure β} (h : measure_preserving e μa μb) :
59+
lemma symm (e : α ≃ᵐ β) {μa : measure α} {μb : measure β} (h : measure_preserving e μa μb) :
6060
measure_preserving e.symm μb μa :=
6161
⟨e.symm.measurable,
6262
by rw [← h.map_eq, map_map e.symm.measurable e.measurable, e.symm_comp_self, map_id]⟩

src/measure_theory/constructions/pi.lean

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,7 @@ lemma measure_preserving_pi_equiv_pi_subtype_prod {ι : Type u} {α : ι → Typ
591591
((measure.pi $ λ i : subtype p, μ i).prod (measure.pi $ λ i, μ i)) :=
592592
begin
593593
set e := (measurable_equiv.pi_equiv_pi_subtype_prod α p).symm,
594-
suffices : measure_preserving e _ _, from this.symm,
594+
refine measure_preserving.symm e _,
595595
refine ⟨e.measurable, (pi_eq $ λ s hs, _).symm⟩,
596596
have : e ⁻¹' (pi univ s) =
597597
(pi univ (λ i : {i // p i}, s i)) ×ˢ (pi univ (λ i : {i // ¬p i}, s i)),
@@ -613,7 +613,7 @@ lemma measure_preserving_pi_fin_succ_above_equiv {n : ℕ} {α : fin (n + 1) →
613613
((μ i).prod $ measure.pi $ λ j, μ (i.succ_above j)) :=
614614
begin
615615
set e := (measurable_equiv.pi_fin_succ_above_equiv α i).symm,
616-
suffices : measure_preserving e _ _, from this.symm,
616+
refine measure_preserving.symm e _,
617617
refine ⟨e.measurable, (pi_eq $ λ s hs, _).symm⟩,
618618
rw [e.map_apply, i.prod_univ_succ_above _, ← pi_pi, ← prod_prod],
619619
congr' 1 with ⟨x, f⟩,
@@ -635,7 +635,7 @@ begin
635635
rw [pi_premeasure, fintype.prod_unique, to_outer_measure_apply, e.symm.map_apply],
636636
congr' 1, exact e.to_equiv.image_eq_preimage s },
637637
simp only [measure.pi, outer_measure.pi, this, bounded_by_measure, to_outer_measure_to_measure],
638-
exact ((measurable_equiv.fun_unique α β).symm.measurable.measure_preserving _).symm
638+
exact (e.symm.measurable.measure_preserving _).symm e.symm
639639
end
640640

641641
lemma volume_preserving_fun_unique (α : Type u) (β : Type v) [unique α] [measure_space β] :

src/measure_theory/constructions/prod.lean

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -557,10 +557,10 @@ end
557557

558558
end measure
559559

560-
namespace measure_preserving
561-
562560
open measure
563561

562+
namespace measure_preserving
563+
564564
variables {δ : Type*} [measurable_space δ] {μa : measure α} {μb : measure β}
565565
{μc : measure γ} {μd : measure δ}
566566

@@ -603,6 +603,34 @@ hf.skew_product this $ filter.eventually_of_forall $ λ _, hg.map_eq
603603

604604
end measure_preserving
605605

606+
namespace quasi_measure_preserving
607+
608+
lemma prod_of_right {f : α × β → γ} {μ : measure α} {ν : measure β} {τ : measure γ}
609+
(hf : measurable f) [sigma_finite ν]
610+
(h2f : ∀ᵐ x ∂μ, quasi_measure_preserving (λ y, f (x, y)) ν τ) :
611+
quasi_measure_preserving f (μ.prod ν) τ :=
612+
begin
613+
refine ⟨hf, _⟩,
614+
refine absolutely_continuous.mk (λ s hs h2s, _),
615+
simp_rw [map_apply hf hs, prod_apply (hf hs), preimage_preimage,
616+
lintegral_congr_ae (h2f.mono (λ x hx, hx.preimage_null h2s)), lintegral_zero],
617+
end
618+
619+
lemma prod_of_left {α β γ} [measurable_space α] [measurable_space β]
620+
[measurable_space γ] {f : α × β → γ} {μ : measure α} {ν : measure β} {τ : measure γ}
621+
(hf : measurable f) [sigma_finite μ] [sigma_finite ν]
622+
(h2f : ∀ᵐ y ∂ν, quasi_measure_preserving (λ x, f (x, y)) μ τ) :
623+
quasi_measure_preserving f (μ.prod ν) τ :=
624+
begin
625+
rw [← prod_swap],
626+
convert (quasi_measure_preserving.prod_of_right (hf.comp measurable_swap) h2f).comp
627+
((measurable_swap.measure_preserving (ν.prod μ)).symm measurable_equiv.prod_comm)
628+
.quasi_measure_preserving,
629+
ext ⟨x, y⟩, refl,
630+
end
631+
632+
end quasi_measure_preserving
633+
606634
end measure_theory
607635

608636
open measure_theory.measure
@@ -627,6 +655,16 @@ lemma ae_measurable.snd [sigma_finite ν] {f : β → γ}
627655
(hf : ae_measurable f ν) : ae_measurable (λ (z : α × β), f z.2) (μ.prod ν) :=
628656
hf.comp_measurable' measurable_snd prod_snd_absolutely_continuous
629657

658+
lemma measure_theory.ae_strongly_measurable.fst {γ} [topological_space γ] [sigma_finite ν]
659+
{f : α → γ} (hf : ae_strongly_measurable f μ) :
660+
ae_strongly_measurable (λ (z : α × β), f z.1) (μ.prod ν) :=
661+
hf.comp_measurable' measurable_fst prod_fst_absolutely_continuous
662+
663+
lemma measure_theory.ae_strongly_measurable.snd {γ} [topological_space γ] [sigma_finite ν]
664+
{f : β → γ} (hf : ae_strongly_measurable f ν) :
665+
ae_strongly_measurable (λ (z : α × β), f z.2) (μ.prod ν) :=
666+
hf.comp_measurable' measurable_snd prod_snd_absolutely_continuous
667+
630668
/-- The Bochner integral is a.e.-measurable.
631669
This shows that the integrand of (the right-hand-side of) Fubini's theorem is a.e.-measurable. -/
632670
lemma measure_theory.ae_strongly_measurable.integral_prod_right' [sigma_finite ν]

src/measure_theory/function/strongly_measurable.lean

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1299,6 +1299,11 @@ lemma comp_measurable {γ : Type*} {mγ : measurable_space γ} {mα : measurable
12991299
ae_strongly_measurable (g ∘ f) μ :=
13001300
hg.comp_ae_measurable hf.ae_measurable
13011301

1302+
lemma comp_measurable' {γ : Type*} {mγ : measurable_space γ} {mα : measurable_space α} {f : γ → α}
1303+
{μ : measure γ} {ν : measure α} (hg : ae_strongly_measurable g ν) (hf : measurable f)
1304+
(h : μ.map f ≪ ν) : ae_strongly_measurable (g ∘ f) μ :=
1305+
(hg.mono' h).comp_measurable hf
1306+
13021307
lemma is_separable_ae_range (hf : ae_strongly_measurable f μ) :
13031308
∃ (t : set β), is_separable t ∧ ∀ᵐ x ∂μ, f x ∈ t :=
13041309
begin
@@ -1513,10 +1518,12 @@ lemma apply_continuous_linear_map {φ : α → F →L[𝕜] E}
15131518
ae_strongly_measurable (λ a, φ a v) μ :=
15141519
(continuous_linear_map.apply 𝕜 E v).continuous.comp_ae_strongly_measurable hφ
15151520

1516-
lemma ae_strongly_measurable_comp₂ (L : E →L[𝕜] F →L[𝕜] G) {f : α → E} {g : α → F}
1521+
lemma _root_.continuous_linear_map.ae_strongly_measurable_comp₂ (L : E →L[𝕜] F →L[𝕜] G)
1522+
{f : α → E} {g : α → F}
15171523
(hf : ae_strongly_measurable f μ) (hg : ae_strongly_measurable g μ) :
15181524
ae_strongly_measurable (λ x, L (f x) (g x)) μ :=
15191525
L.continuous₂.comp_ae_strongly_measurable $ hf.prod_mk hg
1526+
15201527
end continuous_linear_map_nondiscrete_normed_field
15211528

15221529
lemma _root_.ae_strongly_measurable_with_density_iff {E : Type*} [normed_group E] [normed_space ℝ E]

src/measure_theory/group/arithmetic.lean

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ class has_measurable_add (M : Type*) [measurable_space M] [has_add M] : Prop :=
5757
(measurable_const_add : ∀ c : M, measurable ((+) c))
5858
(measurable_add_const : ∀ c : M, measurable (+ c))
5959

60+
export has_measurable_add (measurable_const_add measurable_add_const)
61+
6062
/-- We say that a type `has_measurable_add` if `uncurry (+)` is a measurable functions.
6163
For a typeclass assuming measurability of `((+) c)` and `(+ c)` see `has_measurable_add`. -/
6264
class has_measurable_add₂ (M : Type*) [measurable_space M] [has_add M] : Prop :=
@@ -72,14 +74,15 @@ class has_measurable_mul (M : Type*) [measurable_space M] [has_mul M] : Prop :=
7274
(measurable_const_mul : ∀ c : M, measurable ((*) c))
7375
(measurable_mul_const : ∀ c : M, measurable (* c))
7476

77+
export has_measurable_mul (measurable_const_mul measurable_mul_const)
78+
7579
/-- We say that a type `has_measurable_mul` if `uncurry (*)` is a measurable functions.
7680
For a typeclass assuming measurability of `((*) c)` and `(* c)` see `has_measurable_mul`. -/
7781
@[to_additive has_measurable_add₂]
7882
class has_measurable_mul₂ (M : Type*) [measurable_space M] [has_mul M] : Prop :=
7983
(measurable_mul : measurable (λ p : M × M, p.1 * p.2))
8084

8185
export has_measurable_mul₂ (measurable_mul)
82-
has_measurable_mul (measurable_const_mul measurable_mul_const)
8386

8487
section mul
8588

@@ -152,9 +155,16 @@ instance pi.has_measurable_mul₂ {ι : Type*} {α : ι → Type*} [∀ i, has_m
152155
attribute [measurability] measurable.add' measurable.add ae_measurable.add ae_measurable.add'
153156
measurable.const_add ae_measurable.const_add measurable.add_const ae_measurable.add_const
154157

155-
156158
end mul
157159

160+
/-- A version of `measurable_div_const` that assumes `has_measurable_mul` instead of
161+
`has_measurable_div`. This can be nice to avoid unnecessary type-class assumptions. -/
162+
@[to_additive /-" A version of `measurable_sub_const` that assumes `has_measurable_add` instead of
163+
`has_measurable_sub`. This can be nice to avoid unnecessary type-class assumptions. "-/]
164+
lemma measurable_div_const' {G : Type*} [div_inv_monoid G] [measurable_space G]
165+
[has_measurable_mul G] (g : G) : measurable (λ h, h / g) :=
166+
by simp_rw [div_eq_mul_inv, measurable_mul_const]
167+
158168
/-- This class assumes that the map `β × γ → β` given by `(x, y) ↦ x ^ y` is measurable. -/
159169
class has_measurable_pow (β γ : Type*) [measurable_space β] [measurable_space γ] [has_pow β γ] :=
160170
(measurable_pow : measurable (λ p : β × γ, p.1 ^ p.2))
@@ -217,6 +227,8 @@ class has_measurable_sub (G : Type*) [measurable_space G] [has_sub G] : Prop :=
217227
(measurable_const_sub : ∀ c : G, measurable (λ x, c - x))
218228
(measurable_sub_const : ∀ c : G, measurable (λ x, x - c))
219229

230+
export has_measurable_sub (measurable_const_sub measurable_sub_const)
231+
220232
/-- We say that a type `has_measurable_sub` if `uncurry (-)` is a measurable functions.
221233
For a typeclass assuming measurability of `((-) c)` and `(- c)` see `has_measurable_sub`. -/
222234
class has_measurable_sub₂ (G : Type*) [measurable_space G] [has_sub G] : Prop :=
@@ -230,6 +242,8 @@ For a typeclass assuming measurability of `uncurry (/)` see `has_measurable_div
230242
(measurable_const_div : ∀ c : G₀, measurable ((/) c))
231243
(measurable_div_const : ∀ c : G₀, measurable (/ c))
232244

245+
export has_measurable_div (measurable_const_div measurable_div_const)
246+
233247
/-- We say that a type `has_measurable_div` if `uncurry (/)` is a measurable functions.
234248
For a typeclass assuming measurability of `((/) c)` and `(/ c)` see `has_measurable_div`. -/
235249
@[to_additive has_measurable_sub₂]
@@ -447,9 +461,9 @@ class has_measurable_smul₂ (M α : Type*) [has_scalar M α] [measurable_space
447461
(measurable_smul : measurable (function.uncurry (•) : M × α → α))
448462

449463
export has_measurable_smul (measurable_const_smul measurable_smul_const)
450-
has_measurable_smul₂ (measurable_smul)
464+
export has_measurable_smul₂ (measurable_smul)
451465
export has_measurable_vadd (measurable_const_vadd measurable_vadd_const)
452-
has_measurable_vadd₂ (measurable_vadd)
466+
export has_measurable_vadd₂ (measurable_vadd)
453467

454468
@[to_additive]
455469
instance has_measurable_smul_of_mul (M : Type*) [has_mul M] [measurable_space M]

src/measure_theory/group/fundamental_domain.lean

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,12 @@ h.pairwise_ae_disjoint.mono $ λ g₁ g₂ H, hν H
119119
end }
120120

121121
@[to_additive] lemma image_of_equiv (h : is_fundamental_domain G s μ)
122-
(f : measurable_equiv α α) (hfμ : measure_preserving f μ μ)
122+
(f : α ≃ᵐ α) (hfμ : measure_preserving f μ μ)
123123
(e : equiv.perm G) (hef : ∀ g, semiconj f ((•) (e g)) ((•) g)) :
124124
is_fundamental_domain G (f '' s) μ :=
125125
begin
126126
rw f.image_eq_preimage,
127-
refine h.preimage_of_equiv hfμ.symm.quasi_measure_preserving e.symm.bijective (λ g x, _),
127+
refine h.preimage_of_equiv (hfμ.symm f).quasi_measure_preserving e.symm.bijective (λ g x, _),
128128
rcases f.surjective x with ⟨x, rfl⟩,
129129
rw [← hef _ _, f.symm_apply_apply, f.symm_apply_apply, e.apply_symm_apply]
130130
end

src/measure_theory/group/integration.lean

Lines changed: 42 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ Authors: Floris van Doorn
55
-/
66
import measure_theory.integral.bochner
77
import measure_theory.group.measure
8+
import measure_theory.group.action
89

910
/-!
1011
# Integration on Groups
@@ -18,7 +19,7 @@ namespace measure_theory
1819
open measure topological_space
1920
open_locale ennreal
2021

21-
variables {𝕜 G E F : Type*} [measurable_space G]
22+
variables {𝕜 M α G E F : Type*} [measurable_space G]
2223
variables [normed_group E] [normed_space ℝ E] [complete_space E] [normed_group F]
2324
variables {μ : measure G} {f : G → E} {g : G}
2425

@@ -68,10 +69,15 @@ begin
6869
simp [map_mul_right_eq_self μ g]
6970
end
7071

72+
@[simp, to_additive]
73+
lemma lintegral_div_right_eq_self [is_mul_right_invariant μ] (f : G → ℝ≥0∞) (g : G) :
74+
∫⁻ x, f (x / g) ∂μ = ∫⁻ x, f x ∂μ :=
75+
by simp_rw [div_eq_mul_inv, lintegral_mul_right_eq_self f g⁻¹]
76+
7177
/-- Translating a function by left-multiplication does not change its integral with respect to a
7278
left-invariant measure. -/
73-
@[to_additive "Translating a function by left-addition does not change its integral with respect to
74-
a left-invariant measure."]
79+
@[simp, to_additive "Translating a function by left-addition does not change its integral with
80+
respect to a left-invariant measure."]
7581
lemma integral_mul_left_eq_self [is_mul_left_invariant μ] (f : G → E) (g : G) :
7682
∫ x, f (g * x) ∂μ = ∫ x, f x ∂μ :=
7783
begin
@@ -82,8 +88,8 @@ end
8288

8389
/-- Translating a function by right-multiplication does not change its integral with respect to a
8490
right-invariant measure. -/
85-
@[to_additive "Translating a function by right-addition does not change its integral with respect to
86-
a right-invariant measure."]
91+
@[simp, to_additive "Translating a function by right-addition does not change its integral with
92+
respect to a right-invariant measure."]
8793
lemma integral_mul_right_eq_self [is_mul_right_invariant μ] (f : G → E) (g : G) :
8894
∫ x, f (x * g) ∂μ = ∫ x, f x ∂μ :=
8995
begin
@@ -92,6 +98,11 @@ begin
9298
rw [← h_mul.integral_map, map_mul_right_eq_self]
9399
end
94100

101+
@[simp, to_additive]
102+
lemma integral_div_right_eq_self [is_mul_right_invariant μ] (f : G → E) (g : G) :
103+
∫ x, f (x / g) ∂μ = ∫ x, f x ∂μ :=
104+
by simp_rw [div_eq_mul_inv, integral_mul_right_eq_self f g⁻¹]
105+
95106
/-- If some left-translate of a function negates it, then the integral of the function with respect
96107
to a left-invariant measure is 0. -/
97108
@[to_additive "If some left-translate of a function negates it, then the integral of the function
@@ -139,14 +150,39 @@ begin
139150
{ exact (measurable_id'.const_mul g⁻¹).inv.ae_measurable }
140151
end
141152

142-
@[to_additive]
153+
@[simp, to_additive]
154+
lemma integrable_comp_div_left (f : G → F)
155+
[is_inv_invariant μ] [is_mul_left_invariant μ] (g : G) :
156+
integrable (λ t, f (g / t)) μ ↔ integrable f μ :=
157+
begin
158+
refine ⟨λ h, _, λ h, h.comp_div_left g⟩,
159+
convert h.comp_inv.comp_mul_left g⁻¹,
160+
simp_rw [div_inv_eq_mul, mul_inv_cancel_left]
161+
end
162+
163+
@[simp, to_additive]
143164
lemma integral_div_left_eq_self (f : G → E) (μ : measure G) [is_inv_invariant μ]
144165
[is_mul_left_invariant μ] (x' : G) : ∫ x, f (x' / x) ∂μ = ∫ x, f x ∂μ :=
145166
by simp_rw [div_eq_mul_inv, integral_inv_eq_self (λ x, f (x' * x)) μ,
146167
integral_mul_left_eq_self f x']
147168

148169
end measurable_mul
149170

171+
section smul
172+
173+
variables [group G] [measurable_space α] [mul_action G α] [has_measurable_smul G α]
174+
175+
@[simp, to_additive]
176+
lemma integral_smul_eq_self {μ : measure α} [smul_invariant_measure G α μ] (f : α → E) {g : G} :
177+
∫ x, f (g • x) ∂μ = ∫ x, f x ∂μ :=
178+
begin
179+
have h : measurable_embedding (λ x : α, g • x) :=
180+
(measurable_equiv.smul g).measurable_embedding,
181+
rw [← h.integral_map, map_smul]
182+
end
183+
184+
end smul
185+
150186

151187
section topological_group
152188

src/measure_theory/group/measurable_equiv.lean

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,4 +160,18 @@ def inv (G) [measurable_space G] [has_involutive_inv G] [has_measurable_inv G] :
160160
lemma symm_inv {G} [measurable_space G] [has_involutive_inv G] [has_measurable_inv G] :
161161
(inv G).symm = inv G := rfl
162162

163+
/-- `equiv.div_right` as a `measurable_equiv`. -/
164+
@[to_additive /-" `equiv.sub_right` as a `measurable_equiv` "-/]
165+
def div_right [has_measurable_mul G] (g : G) : G ≃ᵐ G :=
166+
{ to_equiv := equiv.div_right g,
167+
measurable_to_fun := measurable_div_const' g,
168+
measurable_inv_fun := measurable_mul_const g }
169+
170+
/-- `equiv.div_left` as a `measurable_equiv` -/
171+
@[to_additive /-" `equiv.sub_left` as a `measurable_equiv` "-/]
172+
def div_left [has_measurable_mul G] [has_measurable_inv G] (g : G) : G ≃ᵐ G :=
173+
{ to_equiv := equiv.div_left g,
174+
measurable_to_fun := measurable_id.const_div g,
175+
measurable_inv_fun := measurable_inv.mul_const g }
176+
163177
end measurable_equiv

0 commit comments

Comments
 (0)