Skip to content

Commit 95aba72

Browse files
feat: the Unfolding Trick (#6223)
This PR is a forward port of mathlib3 PR !3#18863 Co-authored-by: Heather Macbeth <25316162+hrmacbeth@users.noreply.github.com> Co-authored-by: Matthew Ballard <matt@mrb.email>
1 parent 4ac1d22 commit 95aba72

File tree

4 files changed

+316
-10
lines changed

4 files changed

+316
-10
lines changed

Mathlib/GroupTheory/GroupAction/Group.lean

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Authors: Chris Hughes
66
import Mathlib.Algebra.Hom.Aut
77
import Mathlib.GroupTheory.GroupAction.Units
88

9-
#align_import group_theory.group_action.group from "leanprover-community/mathlib"@"ba2245edf0c8bb155f1569fd9b9492a9b384cde6"
9+
#align_import group_theory.group_action.group from "leanprover-community/mathlib"@"3b52265189f3fb43aa631edffce5d060fafaf82f"
1010

1111
/-!
1212
# Group actions applied to various types of group
@@ -265,6 +265,16 @@ def DistribMulAction.toAddAut : α →* AddAut β where
265265
#align distrib_mul_action.to_add_aut DistribMulAction.toAddAut
266266
#align distrib_mul_action.to_add_aut_apply DistribMulAction.toAddAut_apply
267267

268+
/-- Each non-zero element of a `GroupWithZero` defines an additive monoid isomorphism of an
269+
`AddMonoid` on which it acts distributively.
270+
This is a stronger version of `DistribMulAction.toAddMonoidHom`. -/
271+
def DistribMulAction.toAddEquiv₀ {α : Type*} (β : Type*) [GroupWithZero α] [AddMonoid β]
272+
[DistribMulAction α β] (x : α) (hx : x ≠ 0) : β ≃+ β :=
273+
{ DistribMulAction.toAddMonoidHom β x with
274+
invFun := fun b ↦ x⁻¹ • b
275+
left_inv := fun b ↦ inv_smul_smul₀ hx b
276+
right_inv := fun b ↦ smul_inv_smul₀ hx b }
277+
268278
variable {α β}
269279

270280
theorem smul_eq_zero_iff_eq (a : α) {x : β} : a • x = 0 ↔ x = 0 :=

Mathlib/MeasureTheory/Group/FundamentalDomain.lean

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Authors: Yury G. Kudryashov
66
import Mathlib.MeasureTheory.Group.Action
77
import Mathlib.MeasureTheory.Integral.SetIntegral
88

9-
#align_import measure_theory.group.fundamental_domain from "leanprover-community/mathlib"@"eb810cf549db839dadf13353dbe69bac55acdbbc"
9+
#align_import measure_theory.group.fundamental_domain from "leanprover-community/mathlib"@"3b52265189f3fb43aa631edffce5d060fafaf82f"
1010

1111
/-!
1212
# Fundamental domain of a group action
@@ -253,6 +253,10 @@ theorem lintegral_eq_tsum' (h : IsFundamentalDomain G s μ) (f : α → ℝ≥0
253253
#align measure_theory.is_fundamental_domain.lintegral_eq_tsum' MeasureTheory.IsFundamentalDomain.lintegral_eq_tsum'
254254
#align measure_theory.is_add_fundamental_domain.lintegral_eq_tsum' MeasureTheory.IsAddFundamentalDomain.lintegral_eq_tsum'
255255

256+
@[to_additive] lemma lintegral_eq_tsum'' (h : IsFundamentalDomain G s μ) (f : α → ℝ≥0∞) :
257+
∫⁻ x, f x ∂μ = ∑' g : G, ∫⁻ x in s, f (g • x) ∂μ :=
258+
(lintegral_eq_tsum' h f).trans ((Equiv.inv G).tsum_eq (fun g ↦ ∫⁻ (x : α) in s, f (g • x) ∂μ))
259+
256260
@[to_additive]
257261
theorem set_lintegral_eq_tsum (h : IsFundamentalDomain G s μ) (f : α → ℝ≥0∞) (t : Set α) :
258262
∫⁻ x in t, f x ∂μ = ∑' g : G, ∫⁻ x in t ∩ g • s, f x ∂μ :=
@@ -426,6 +430,10 @@ theorem integral_eq_tsum' (h : IsFundamentalDomain G s μ) (f : α → E) (hf :
426430
#align measure_theory.is_fundamental_domain.integral_eq_tsum' MeasureTheory.IsFundamentalDomain.integral_eq_tsum'
427431
#align measure_theory.is_add_fundamental_domain.integral_eq_tsum' MeasureTheory.IsAddFundamentalDomain.integral_eq_tsum'
428432

433+
@[to_additive] lemma integral_eq_tsum'' (h : IsFundamentalDomain G s μ)
434+
(f : α → E) (hf : Integrable f μ) : ∫ x, f x ∂μ = ∑' g : G, ∫ x in s, f (g • x) ∂μ :=
435+
(integral_eq_tsum' h f hf).trans ((Equiv.inv G).tsum_eq (fun g ↦ ∫ (x : α) in s, f (g • x) ∂μ))
436+
429437
@[to_additive]
430438
theorem set_integral_eq_tsum (h : IsFundamentalDomain G s μ) {f : α → E} {t : Set α}
431439
(hf : IntegrableOn f t μ) : ∫ x in t, f x ∂μ = ∑' g : G, ∫ x in t ∩ g • s, f x ∂μ :=

Mathlib/MeasureTheory/Measure/Haar/Quotient.lean

Lines changed: 161 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Mathlib.MeasureTheory.Measure.Haar.Basic
77
import Mathlib.MeasureTheory.Group.FundamentalDomain
88
import Mathlib.Algebra.Group.Opposite
99

10-
#align_import measure_theory.measure.haar.quotient from "leanprover-community/mathlib"@"fd5edc43dc4f10b85abfe544b88f82cf13c5f844"
10+
#align_import measure_theory.measure.haar.quotient from "leanprover-community/mathlib"@"3b52265189f3fb43aa631edffce5d060fafaf82f"
1111

1212
/-!
1313
# Haar quotient measure
@@ -34,7 +34,7 @@ Note that a group `G` with Haar measure that is both left and right invariant is
3434

3535
open Set MeasureTheory TopologicalSpace MeasureTheory.Measure
3636

37-
open scoped Pointwise NNReal
37+
open scoped Pointwise NNReal ENNReal
3838

3939
variable {G : Type*} [Group G] [MeasurableSpace G] [TopologicalSpace G] [TopologicalGroup G]
4040
[BorelSpace G] {μ : Measure G} {Γ : Subgroup G}
@@ -113,16 +113,15 @@ theorem MeasureTheory.IsFundamentalDomain.isMulLeftInvariant_map [Subgroup.Norma
113113
#align measure_theory.is_fundamental_domain.is_mul_left_invariant_map MeasureTheory.IsFundamentalDomain.isMulLeftInvariant_map
114114
#align measure_theory.is_add_fundamental_domain.is_add_left_invariant_map MeasureTheory.IsAddFundamentalDomain.isAddLeftInvariant_map
115115

116-
variable [T2Space (G ⧸ Γ)] [SecondCountableTopology (G ⧸ Γ)] (K : PositiveCompacts (G ⧸ Γ))
117-
118116
/-- Given a normal subgroup `Γ` of a topological group `G` with Haar measure `μ`, which is also
119117
right-invariant, and a finite volume fundamental domain `𝓕`, the pushforward to the quotient
120118
group `G ⧸ Γ` of the restriction of `μ` to `𝓕` is a multiple of Haar measure on `G ⧸ Γ`. -/
121119
@[to_additive "Given a normal subgroup `Γ` of an additive topological group `G` with Haar measure
122120
`μ`, which is also right-invariant, and a finite volume fundamental domain `𝓕`, the pushforward
123121
to the quotient group `G ⧸ Γ` of the restriction of `μ` to `𝓕` is a multiple of Haar measure on
124122
`G ⧸ Γ`."]
125-
theorem MeasureTheory.IsFundamentalDomain.map_restrict_quotient [Subgroup.Normal Γ]
123+
theorem MeasureTheory.IsFundamentalDomain.map_restrict_quotient [T2Space (G ⧸ Γ)]
124+
[SecondCountableTopology (G ⧸ Γ)] (K : PositiveCompacts (G ⧸ Γ)) [Subgroup.Normal Γ]
126125
[MeasureTheory.Measure.IsHaarMeasure μ] [μ.IsMulRightInvariant] (h𝓕_finite : μ 𝓕 < ⊤) :
127126
Measure.map (QuotientGroup.mk' Γ) (μ.restrict 𝓕) =
128127
μ (𝓕 ∩ QuotientGroup.mk' Γ ⁻¹' K) • MeasureTheory.Measure.haarMeasure K := by
@@ -147,12 +146,167 @@ theorem MeasureTheory.IsFundamentalDomain.map_restrict_quotient [Subgroup.Normal
147146
topological group `G` with Haar measure `μ`, which is also right-invariant, and a finite volume
148147
fundamental domain `𝓕`, the quotient map to `G ⧸ Γ` is measure-preserving between appropriate
149148
multiples of Haar measure on `G` and `G ⧸ Γ`."]
150-
theorem MeasurePreservingQuotientGroup.mk' [Subgroup.Normal Γ]
151-
[MeasureTheory.Measure.IsHaarMeasure μ] [μ.IsMulRightInvariant] (h𝓕_finite : μ 𝓕 < ⊤) (c : ℝ≥0)
149+
theorem MeasurePreservingQuotientGroup.mk' [T2Space (G ⧸ Γ)] [SecondCountableTopology (G ⧸ Γ)]
150+
(K : PositiveCompacts (G ⧸ Γ)) [Subgroup.Normal Γ] [μ.IsHaarMeasure]
151+
[μ.IsMulRightInvariant] (h𝓕_finite : μ 𝓕 < ⊤) (c : ℝ≥0)
152152
(h : μ (𝓕 ∩ QuotientGroup.mk' Γ ⁻¹' K) = c) :
153153
MeasurePreserving (QuotientGroup.mk' Γ) (μ.restrict 𝓕)
154154
(c • MeasureTheory.Measure.haarMeasure K) where
155155
measurable := continuous_quotient_mk'.measurable
156156
map_eq := by rw [h𝓕.map_restrict_quotient K h𝓕_finite, h]; rfl
157157
#align measure_preserving_quotient_group.mk' MeasurePreservingQuotientGroup.mk'
158158
#align measure_preserving_quotient_add_group.mk' MeasurePreservingQuotientAddGroup.mk'
159+
160+
section
161+
162+
local notation "μ_𝓕" => Measure.map (@QuotientGroup.mk G _ Γ) (μ.restrict 𝓕)
163+
164+
/-- The `essSup` of a function `g` on the quotient space `G ⧸ Γ` with respect to the pushforward
165+
of the restriction, `μ_𝓕`, of a right-invariant measure `μ` to a fundamental domain `𝓕`, is the
166+
same as the `essSup` of `g`'s lift to the universal cover `G` with respect to `μ`. -/
167+
@[to_additive "The `essSup` of a function `g` on the additive quotient space `G ⧸ Γ` with respect
168+
to the pushforward of the restriction, `μ_𝓕`, of a right-invariant measure `μ` to a fundamental
169+
domain `𝓕`, is the same as the `essSup` of `g`'s lift to the universal cover `G` with respect
170+
to `μ`."]
171+
lemma essSup_comp_quotientGroup_mk [μ.IsMulRightInvariant] {g : G ⧸ Γ → ℝ≥0∞}
172+
(g_ae_measurable : AEMeasurable g μ_𝓕) : essSup g μ_𝓕 = essSup (fun (x : G) ↦ g x) μ := by
173+
have hπ : Measurable (QuotientGroup.mk : G → G ⧸ Γ) := continuous_quotient_mk'.measurable
174+
rw [essSup_map_measure g_ae_measurable hπ.aemeasurable]
175+
refine h𝓕.essSup_measure_restrict ?_
176+
intro ⟨γ, hγ⟩ x
177+
dsimp
178+
congr 1
179+
exact QuotientGroup.mk_mul_of_mem x hγ
180+
181+
/-- Given a quotient space `G ⧸ Γ` where `Γ` is `Countable`, and the restriction,
182+
`μ_𝓕`, of a right-invariant measure `μ` on `G` to a fundamental domain `𝓕`, a set
183+
in the quotient which has `μ_𝓕`-measure zero, also has measure zero under the
184+
folding of `μ` under the quotient. Note that, if `Γ` is infinite, then the folded map
185+
will take the value `∞` on any open set in the quotient! -/
186+
@[to_additive "Given an additive quotient space `G ⧸ Γ` where `Γ` is `Countable`, and the
187+
restriction, `μ_𝓕`, of a right-invariant measure `μ` on `G` to a fundamental domain `𝓕`, a set
188+
in the quotient which has `μ_𝓕`-measure zero, also has measure zero under the
189+
folding of `μ` under the quotient. Note that, if `Γ` is infinite, then the folded map
190+
will take the value `∞` on any open set in the quotient!"]
191+
lemma _root_.MeasureTheory.IsFundamentalDomain.absolutelyContinuous_map
192+
[μ.IsMulRightInvariant] :
193+
map (QuotientGroup.mk : G → G ⧸ Γ) μ ≪ map (QuotientGroup.mk : G → G ⧸ Γ) (μ.restrict 𝓕) := by
194+
set π : G → G ⧸ Γ := QuotientGroup.mk
195+
have meas_π : Measurable π := continuous_quotient_mk'.measurable
196+
apply AbsolutelyContinuous.mk
197+
intro s s_meas hs
198+
rw [map_apply meas_π s_meas] at hs ⊢
199+
rw [Measure.restrict_apply] at hs
200+
apply h𝓕.measure_zero_of_invariant _ _ hs
201+
· intro γ
202+
ext g
203+
rw [Set.mem_smul_set_iff_inv_smul_mem, mem_preimage, mem_preimage]
204+
congr! 1
205+
convert QuotientGroup.mk_mul_of_mem g (γ⁻¹).2 using 1
206+
exact MeasurableSet.preimage s_meas meas_π
207+
208+
attribute [-instance] Quotient.instMeasurableSpace
209+
210+
/-- This is a simple version of the **Unfolding Trick**: Given a subgroup `Γ` of a group `G`, the
211+
integral of a function `f` on `G` with respect to a right-invariant measure `μ` is equal to the
212+
integral over the quotient `G ⧸ Γ` of the automorphization of `f`. -/
213+
@[to_additive "This is a simple version of the **Unfolding Trick**: Given a subgroup `Γ` of an
214+
additive group `G`, the integral of a function `f` on `G` with respect to a right-invariant
215+
measure `μ` is equal to the integral over the quotient `G ⧸ Γ` of the automorphization of `f`."]
216+
lemma QuotientGroup.integral_eq_integral_automorphize {E : Type*} [NormedAddCommGroup E]
217+
[NormedSpace ℝ E] [μ.IsMulRightInvariant] {f : G → E}
218+
(hf₁ : Integrable f μ) (hf₂ : AEStronglyMeasurable (automorphize f) μ_𝓕) :
219+
∫ x : G, f x ∂μ = ∫ x : G ⧸ Γ, automorphize f x ∂μ_𝓕 := by
220+
calc ∫ x : G, f x ∂μ = ∑' γ : (Subgroup.opposite Γ), ∫ x in 𝓕, f (γ • x) ∂μ :=
221+
h𝓕.integral_eq_tsum'' f hf₁
222+
_ = ∫ x in 𝓕, ∑' γ : (Subgroup.opposite Γ), f (γ • x) ∂μ := ?_
223+
_ = ∫ x : G ⧸ Γ, automorphize f x ∂μ_𝓕 :=
224+
(integral_map continuous_quotient_mk'.aemeasurable hf₂).symm
225+
rw [integral_tsum]
226+
· exact fun i ↦ (hf₁.1.comp_quasiMeasurePreserving
227+
(measurePreserving_smul i μ).quasiMeasurePreserving).restrict
228+
· rw [← h𝓕.lintegral_eq_tsum'' (fun x ↦ ‖f x‖₊)]
229+
exact ne_of_lt hf₁.2
230+
231+
/-- This is the **Unfolding Trick**: Given a subgroup `Γ` of a group `G`, the integral of a
232+
function `f` on `G` times the lift to `G` of a function `g` on the quotient `G ⧸ Γ` with respect
233+
to a right-invariant measure `μ` on `G`, is equal to the integral over the quotient of the
234+
automorphization of `f` times `g`. -/
235+
lemma QuotientGroup.integral_mul_eq_integral_automorphize_mul {K : Type*} [NormedField K]
236+
[NormedSpace ℝ K] [μ.IsMulRightInvariant] {f : G → K}
237+
(f_ℒ_1 : Integrable f μ) {g : G ⧸ Γ → K} (hg : AEStronglyMeasurable g μ_𝓕)
238+
(g_ℒ_infinity : essSup (fun x ↦ ↑‖g x‖₊) μ_𝓕 ≠ ∞)
239+
(F_ae_measurable : AEStronglyMeasurable (QuotientGroup.automorphize f) μ_𝓕) :
240+
∫ x : G, g (x : G ⧸ Γ) * (f x) ∂μ
241+
= ∫ x : G ⧸ Γ, g x * (QuotientGroup.automorphize f x) ∂μ_𝓕 := by
242+
let π : G → G ⧸ Γ := QuotientGroup.mk
243+
have meas_π : Measurable π := continuous_quotient_mk'.measurable
244+
have H₀ : QuotientGroup.automorphize ((g ∘ π) * f) = g * (QuotientGroup.automorphize f) := by
245+
exact QuotientGroup.automorphize_smul_left f g
246+
calc ∫ (x : G), g (π x) * (f x) ∂μ =
247+
∫ (x : G ⧸ Γ), QuotientGroup.automorphize ((g ∘ π) * f) x ∂μ_𝓕 := ?_
248+
_ = ∫ (x : G ⧸ Γ), g x * (QuotientGroup.automorphize f x) ∂μ_𝓕 := by simp [H₀]
249+
have H₁ : Integrable ((g ∘ π) * f) μ
250+
· have : AEStronglyMeasurable (fun (x : G) ↦ g (x : (G ⧸ Γ))) μ
251+
· refine (AEStronglyMeasurable.mono' hg ?_).comp_measurable meas_π
252+
exact h𝓕.absolutelyContinuous_map
253+
refine Integrable.essSup_smul f_ℒ_1 this ?_
254+
have hg' : AEStronglyMeasurable (fun x ↦ (‖g x‖₊ : ℝ≥0∞)) μ_𝓕 :=
255+
(ENNReal.continuous_coe.comp continuous_nnnorm).comp_aestronglyMeasurable hg
256+
rw [← essSup_comp_quotientGroup_mk h𝓕 hg'.aemeasurable]
257+
exact g_ℒ_infinity
258+
have H₂ : AEStronglyMeasurable (QuotientGroup.automorphize ((g ∘ π) * f)) μ_𝓕
259+
· simp_rw [H₀]
260+
exact hg.mul F_ae_measurable
261+
apply QuotientGroup.integral_eq_integral_automorphize h𝓕 H₁ H₂
262+
263+
end
264+
265+
section
266+
267+
variable {G' : Type*} [AddGroup G'] [MeasurableSpace G'] [TopologicalSpace G']
268+
[TopologicalAddGroup G'] [BorelSpace G']
269+
{μ' : Measure G'}
270+
{Γ' : AddSubgroup G'}
271+
[Countable Γ'] [MeasurableSpace (G' ⧸ Γ')] [BorelSpace (G' ⧸ Γ')]
272+
{𝓕' : Set G'}
273+
274+
local notation "μ_𝓕" => Measure.map (@QuotientAddGroup.mk G' _ Γ') (μ'.restrict 𝓕')
275+
276+
/-- This is the **Unfolding Trick**: Given an additive subgroup `Γ'` of an additive group `G'`, the
277+
integral of a function `f` on `G'` times the lift to `G'` of a function `g` on the quotient
278+
`G' ⧸ Γ'` with respect to a right-invariant measure `μ` on `G'`, is equal to the integral over
279+
the quotient of the automorphization of `f` times `g`. -/
280+
lemma QuotientAddGroup.integral_mul_eq_integral_automorphize_mul {K : Type*} [NormedField K]
281+
[NormedSpace ℝ K] [μ'.IsAddRightInvariant] {f : G' → K}
282+
(f_ℒ_1 : Integrable f μ') {g : G' ⧸ Γ' → K} (hg : AEStronglyMeasurable g μ_𝓕)
283+
(g_ℒ_infinity : essSup (fun x ↦ (‖g x‖₊ : ℝ≥0∞)) μ_𝓕 ≠ ∞)
284+
(F_ae_measurable : AEStronglyMeasurable (QuotientAddGroup.automorphize f) μ_𝓕)
285+
(h𝓕 : IsAddFundamentalDomain (AddSubgroup.opposite Γ') 𝓕' μ') :
286+
∫ x : G', g (x : G' ⧸ Γ') * (f x) ∂μ'
287+
= ∫ x : G' ⧸ Γ', g x * (QuotientAddGroup.automorphize f x) ∂μ_𝓕 := by
288+
let π : G' → G' ⧸ Γ' := QuotientAddGroup.mk
289+
have meas_π : Measurable π := continuous_quotient_mk'.measurable
290+
have H₀ : QuotientAddGroup.automorphize ((g ∘ π) * f) = g * (QuotientAddGroup.automorphize f) :=
291+
by exact QuotientAddGroup.automorphize_smul_left f g
292+
calc ∫ (x : G'), g (π x) * f x ∂μ' =
293+
∫ (x : G' ⧸ Γ'), QuotientAddGroup.automorphize ((g ∘ π) * f) x ∂μ_𝓕 := ?_
294+
_ = ∫ (x : G' ⧸ Γ'), g x * (QuotientAddGroup.automorphize f x) ∂μ_𝓕 := by simp [H₀]
295+
have H₁ : Integrable ((g ∘ π) * f) μ'
296+
· have : AEStronglyMeasurable (fun (x : G') ↦ g (x : (G' ⧸ Γ'))) μ'
297+
· refine (AEStronglyMeasurable.mono' hg ?_).comp_measurable meas_π
298+
exact h𝓕.absolutelyContinuous_map
299+
refine Integrable.essSup_smul f_ℒ_1 this ?_
300+
have hg' : AEStronglyMeasurable (fun x ↦ (‖g x‖₊ : ℝ≥0∞)) μ_𝓕 :=
301+
(ENNReal.continuous_coe.comp continuous_nnnorm).comp_aestronglyMeasurable hg
302+
rw [← essSup_comp_quotientAddGroup_mk h𝓕 hg'.aemeasurable]
303+
exact g_ℒ_infinity
304+
have H₂ : AEStronglyMeasurable (QuotientAddGroup.automorphize ((g ∘ π) * f)) μ_𝓕
305+
· simp_rw [H₀]
306+
exact hg.mul F_ae_measurable
307+
apply QuotientAddGroup.integral_eq_integral_automorphize h𝓕 H₁ H₂
308+
309+
end
310+
311+
attribute [to_additive existing QuotientGroup.integral_mul_eq_integral_automorphize_mul]
312+
QuotientAddGroup.integral_mul_eq_integral_automorphize_mul

0 commit comments

Comments
 (0)