Skip to content

Commit 30ed954

Browse files
committed
feat(MeasureTheory): Pullback of measure preserve properties (#25176)
Add a variety of theorems that prove some property is preserved under the pullback of a measure (under appropriate sufficient conditions on the function). Some of these theorems are needed in the FLT project. Co-authored-by: DavidLedvinka <50644608+DavidLedvinka@users.noreply.github.com>
1 parent 900676a commit 30ed954

File tree

7 files changed

+121
-15
lines changed

7 files changed

+121
-15
lines changed

Mathlib/MeasureTheory/Constructions/BorelSpace/Basic.lean

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -591,7 +591,7 @@ end
591591

592592
section BorelSpace
593593

594-
variable [TopologicalSpace α] [MeasurableSpace α] [BorelSpace α] [TopologicalSpace β]
594+
variable [TopologicalSpace α] [mα : MeasurableSpace α] [BorelSpace α] [mβ : TopologicalSpace β]
595595
[MeasurableSpace β] [BorelSpace β] [TopologicalSpace γ] [MeasurableSpace γ] [BorelSpace γ]
596596
[MeasurableSpace δ]
597597

@@ -696,4 +696,20 @@ instance EReal.measurableSpace : MeasurableSpace EReal :=
696696
instance EReal.borelSpace : BorelSpace EReal :=
697697
⟨rfl⟩
698698

699+
namespace MeasureTheory.Measure.IsFiniteMeasureOnCompacts
700+
701+
variable {mα} in
702+
protected theorem map (μ : Measure α) [IsFiniteMeasureOnCompacts μ] (f : α ≃ₜ β) :
703+
IsFiniteMeasureOnCompacts (μ.map f) := by
704+
refine ⟨fun K hK ↦ ?_⟩
705+
rw [← f.toMeasurableEquiv_coe, MeasurableEquiv.map_apply]
706+
exact IsCompact.measure_lt_top (f.isCompact_preimage.2 hK)
707+
708+
variable {mβ} in
709+
protected theorem comap (μ : Measure β) [IsFiniteMeasureOnCompacts μ] (f : α ≃ₜ β) :
710+
IsFiniteMeasureOnCompacts (μ.comap f) :=
711+
IsFiniteMeasureOnCompacts.comap' μ f.continuous f.measurableEmbedding
712+
713+
end MeasureTheory.Measure.IsFiniteMeasureOnCompacts
714+
699715
end BorelSpace

Mathlib/MeasureTheory/Constructions/BorelSpace/Order.lean

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -915,17 +915,8 @@ theorem Measurable.limsup {f : ℕ → δ → α} (hf : ∀ i, Measurable (f i))
915915

916916
end ConditionallyCompleteLinearOrder
917917

918-
/-- Convert a `Homeomorph` to a `MeasurableEquiv`. -/
919-
def Homemorph.toMeasurableEquiv (h : α ≃ₜ β) : α ≃ᵐ β where
920-
toEquiv := h.toEquiv
921-
measurable_toFun := h.continuous_toFun.measurable
922-
measurable_invFun := h.continuous_invFun.measurable
923-
924-
protected theorem IsFiniteMeasureOnCompacts.map (μ : Measure α) [IsFiniteMeasureOnCompacts μ]
925-
(f : α ≃ₜ β) : IsFiniteMeasureOnCompacts (Measure.map f μ) := by
926-
refine ⟨fun K hK ↦ ?_⟩
927-
rw [← Homeomorph.toMeasurableEquiv_coe, MeasurableEquiv.map_apply]
928-
exact IsCompact.measure_lt_top (f.isCompact_preimage.2 hK)
918+
@[deprecated (since := "2025-05-30")]
919+
alias Homemorph.toMeasurableEquiv := Homeomorph.toMeasurableEquiv
929920

930921
end BorelSpace
931922

Mathlib/MeasureTheory/Group/Measure.lean

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -413,6 +413,24 @@ instance : (count : Measure G).IsMulRightInvariant where
413413
count_apply (measurable_mul_const _ hs),
414414
encard_preimage_of_bijective (Group.mulRight_bijective _)]
415415

416+
@[to_additive]
417+
protected theorem IsMulLeftInvariant.comap {H} [Group H] {mH : MeasurableSpace H} [MeasurableMul H]
418+
(μ : Measure H) [IsMulLeftInvariant μ] {f : G →* H} (hf : MeasurableEmbedding f) :
419+
(μ.comap f).IsMulLeftInvariant where
420+
map_mul_left_eq_self g := by
421+
ext s hs
422+
rw [map_apply (by fun_prop) hs]
423+
repeat rw [hf.comap_apply]
424+
have : f '' ((g * ·) ⁻¹' s) = (f g * ·) ⁻¹' (f '' s) := by
425+
ext
426+
constructor
427+
· rintro ⟨y, hy, rfl⟩
428+
exact ⟨g * y, hy, by simp⟩
429+
· intro ⟨y, yins, hy⟩
430+
exact ⟨g⁻¹ * y, by simp [yins], by simp [hy]⟩
431+
rw [this, ← map_apply (by fun_prop), IsMulLeftInvariant.map_mul_left_eq_self]
432+
exact hf.measurableSet_image.mpr hs
433+
416434
end MeasurableMul
417435

418436
variable [MeasurableInv G]
@@ -753,6 +771,15 @@ theorem isHaarMeasure_map [BorelSpace G] [ContinuousMul G] {H : Type*} [Group H]
753771
exact IsCompact.measure_lt_top (g.isCompact_preimage_of_isClosed hK.closure isClosed_closure)
754772
toIsOpenPosMeasure := hf.isOpenPosMeasure_map h_surj }
755773

774+
protected theorem IsHaarMeasure.comap [BorelSpace G] [MeasurableMul G]
775+
[Group H] [TopologicalSpace H] [BorelSpace H] {mH : MeasurableMul H}
776+
(μ : Measure H) [IsHaarMeasure μ] {f : G →* H} (hf : Topology.IsOpenEmbedding f) :
777+
(μ.comap f).IsHaarMeasure where
778+
map_mul_left_eq_self := (IsMulLeftInvariant.comap μ hf.measurableEmbedding).map_mul_left_eq_self
779+
lt_top_of_isCompact := (IsFiniteMeasureOnCompacts.comap' μ hf.continuous
780+
hf.measurableEmbedding).lt_top_of_isCompact
781+
open_pos := (IsOpenPosMeasure.comap μ hf).open_pos
782+
756783
/-- The image of a finite Haar measure under a continuous surjective group homomorphism is again
757784
a Haar measure. See also `isHaarMeasure_map`. -/
758785
@[to_additive

Mathlib/MeasureTheory/Measure/OpenPos.lean

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,14 @@ theorem _root_.Continuous.isOpenPosMeasure_map [OpensMeasurableSpace X]
146146
rw [Measure.map_apply hf.measurable hUo.measurableSet]
147147
exact (hUo.preimage hf).measure_ne_zero μ (hf_surj.nonempty_preimage.mpr hUne)
148148

149+
protected theorem IsOpenPosMeasure.comap [BorelSpace X]
150+
{Z : Type*} [TopologicalSpace Z] {mZ : MeasurableSpace Z} [BorelSpace Z]
151+
(μ : Measure Z) [IsOpenPosMeasure μ] {f : X → Z} (hf : IsOpenEmbedding f) :
152+
(μ.comap f).IsOpenPosMeasure where
153+
open_pos U hU Une := by
154+
rw [hf.measurableEmbedding.comap_apply]
155+
exact IsOpenPosMeasure.open_pos _ (hf.isOpen_iff_image_isOpen.mp hU) (Une.image f)
156+
149157
end Basic
150158

151159
section LinearOrder

Mathlib/MeasureTheory/Measure/Regular.lean

Lines changed: 57 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ Copyright (c) 2021 Sébastien Gouëzel. All rights reserved.
33
Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Sébastien Gouëzel, Floris van Doorn, Yury Kudryashov
55
-/
6-
import Mathlib.MeasureTheory.Constructions.BorelSpace.Order
6+
import Mathlib.MeasureTheory.Constructions.BorelSpace.Basic
77
import Mathlib.MeasureTheory.Group.MeasurableEquiv
8-
import Mathlib.Topology.MetricSpace.HausdorffDistance
98

109
/-!
1110
# Regular measures
@@ -247,6 +246,19 @@ theorem map' {α β} [MeasurableSpace α] [MeasurableSpace β] {μ : Measure α}
247246
refine ⟨f '' K, image_subset_iff.2 hKU, hAB' _ hKc, ?_⟩
248247
rwa [f.map_apply, f.preimage_image]
249248

249+
protected theorem comap {α β} [MeasurableSpace α] {mβ : MeasurableSpace β}
250+
{μ : Measure β} {pa qa : Set α → Prop} {pb qb : Set β → Prop}
251+
(H : InnerRegularWRT μ pb qb) {f : α → β} (hf : MeasurableEmbedding f)
252+
(hAB : ∀ U, qa U → qb (f '' U)) (hAB' : ∀ K ⊆ range f, pb K → pa (f ⁻¹' K)) :
253+
(μ.comap f).InnerRegularWRT pa qa := by
254+
intro U hU r hr
255+
rw [hf.comap_apply] at hr
256+
obtain ⟨K, hKU, hK, hμU⟩ := H (hAB U hU) r hr
257+
have hKrange := hKU.trans (image_subset_range _ _)
258+
refine ⟨f ⁻¹' K, ?_, hAB' K hKrange hK, ?_⟩
259+
· rw [← hf.injective.preimage_image U]; exact preimage_mono hKU
260+
· rwa [hf.comap_apply, image_preimage_eq_iff.mpr hKrange]
261+
250262
theorem smul (H : InnerRegularWRT μ p q) (c : ℝ≥0∞) : InnerRegularWRT (c • μ) p q := by
251263
intro U hU r hr
252264
rw [smul_apply, H.measure_eq_iSup hU, smul_eq_mul] at hr
@@ -374,6 +386,20 @@ protected theorem map [OpensMeasurableSpace α] [MeasurableSpace β] [Topologica
374386
refine ⟨f.symm ⁻¹' U, image_subset_iff.1 hAU, this, ?_⟩
375387
rwa [map_apply f.measurable this.measurableSet, f.preimage_symm, f.preimage_image]
376388

389+
theorem comap' {mβ : MeasurableSpace β} [TopologicalSpace β] (μ : Measure β) [OuterRegular μ]
390+
{f : α → β} (f_cont : Continuous f) (f_me : MeasurableEmbedding f) :
391+
(μ.comap f).OuterRegular where
392+
outerRegular A hA r hr := by
393+
rw [f_me.comap_apply] at hr
394+
obtain ⟨U, hUA, Uopen, hμU⟩ := OuterRegular.outerRegular (f_me.measurableSet_image' hA) r hr
395+
refine ⟨f ⁻¹' U, by rwa [Superset, ← image_subset_iff], Uopen.preimage f_cont, ?_⟩
396+
rw [f_me.comap_apply]
397+
exact (measure_mono (image_preimage_subset _ _)).trans_lt hμU
398+
399+
protected theorem comap [BorelSpace α] {mβ : MeasurableSpace β} [TopologicalSpace β] [BorelSpace β]
400+
(μ : Measure β) [OuterRegular μ] (f : α ≃ₜ β) : (μ.comap f).OuterRegular :=
401+
OuterRegular.comap' μ f.continuous f.measurableEmbedding
402+
377403
protected theorem smul (μ : Measure α) [OuterRegular μ] {x : ℝ≥0∞} (hx : x ≠ ∞) :
378404
(x • μ).OuterRegular := by
379405
rcases eq_or_ne x 0 with (rfl | h0)
@@ -695,6 +721,21 @@ protected theorem map_iff [BorelSpace α] [MeasurableSpace β] [TopologicalSpace
695721
rw [map_map f.symm.continuous.measurable f.continuous.measurable]
696722
simp
697723

724+
open Topology in
725+
protected theorem comap' [BorelSpace α]
726+
{mβ : MeasurableSpace β} [TopologicalSpace β] [BorelSpace β]
727+
(μ : Measure β) [H : InnerRegular μ] {f : α → β} (hf : IsOpenEmbedding f) :
728+
(μ.comap f).InnerRegular where
729+
innerRegular :=
730+
H.innerRegular.comap hf.measurableEmbedding
731+
(fun _ hU ↦ hf.measurableEmbedding.measurableSet_image' hU)
732+
(fun _ hKrange hK ↦ hf.isInducing.isCompact_preimage' hK hKrange)
733+
734+
protected theorem comap [BorelSpace α] {mβ : MeasurableSpace β} [TopologicalSpace β] [BorelSpace β]
735+
{μ : Measure β} [InnerRegular μ] (f : α ≃ₜ β) :
736+
(μ.comap f).InnerRegular :=
737+
InnerRegular.comap' μ f.isOpenEmbedding
738+
698739
end InnerRegular
699740

700741
namespace InnerRegularCompactLTTop
@@ -1017,6 +1058,20 @@ protected theorem map_iff [BorelSpace α] [MeasurableSpace β] [TopologicalSpace
10171058
rw [map_map f.symm.continuous.measurable f.continuous.measurable]
10181059
simp
10191060

1061+
open Topology in
1062+
protected theorem comap' [BorelSpace α]
1063+
{mβ : MeasurableSpace β} [TopologicalSpace β] [BorelSpace β] (μ : Measure β) [Regular μ]
1064+
{f : α → β} (hf : IsOpenEmbedding f) : (μ.comap f).Regular := by
1065+
haveI := OuterRegular.comap' μ hf.continuous hf.measurableEmbedding
1066+
haveI := IsFiniteMeasureOnCompacts.comap' μ hf.continuous hf.measurableEmbedding
1067+
exact ⟨InnerRegularWRT.comap Regular.innerRegular hf.measurableEmbedding
1068+
(fun _ hU ↦ hf.isOpen_iff_image_isOpen.mp hU)
1069+
(fun _ hKrange hK ↦ hf.isInducing.isCompact_preimage' hK hKrange)⟩
1070+
1071+
protected theorem comap [BorelSpace α] {mβ : MeasurableSpace β} [TopologicalSpace β]
1072+
[BorelSpace β] (μ : Measure β) [Regular μ] (f : α ≃ₜ β) : (μ.comap f).Regular :=
1073+
Regular.comap' μ f.isOpenEmbedding
1074+
10201075
protected theorem smul [Regular μ] {x : ℝ≥0∞} (hx : x ≠ ∞) : (x • μ).Regular := by
10211076
haveI := OuterRegular.smul μ hx
10221077
haveI := IsFiniteMeasureOnCompacts.smul μ hx

Mathlib/MeasureTheory/Measure/Tight.lean

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
44
Authors: Rémy Degenne, Josha Dekker
55
-/
66
import Mathlib.MeasureTheory.Measure.RegularityCompacts
7+
import Mathlib.Topology.Order.Lattice
78

89
/-!
910
# Tight sets of measures

Mathlib/MeasureTheory/Measure/Typeclasses/Finite.lean

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ variable {α β δ ι : Type*}
2121

2222
namespace MeasureTheory
2323

24-
variable {m0 : MeasurableSpace α} [MeasurableSpace β] {μ ν ν₁ ν₂ : Measure α}
24+
variable {m0 : MeasurableSpace α} [mβ : MeasurableSpace β] {μ ν ν₁ ν₂ : Measure α}
2525
{s t : Set α}
2626

2727
section IsFiniteMeasure
@@ -354,6 +354,14 @@ instance instIsFiniteMeasureOnCompactsRestrict [TopologicalSpace α] {μ : Measu
354354
[IsFiniteMeasureOnCompacts μ] {s : Set α} : IsFiniteMeasureOnCompacts (μ.restrict s) :=
355355
fun _k hk ↦ (restrict_apply_le _ _).trans_lt hk.measure_lt_top⟩
356356

357+
variable {mβ} in
358+
protected theorem IsFiniteMeasureOnCompacts.comap' [TopologicalSpace α] [TopologicalSpace β]
359+
(μ : Measure β) [IsFiniteMeasureOnCompacts μ] {f : α → β} (f_cont : Continuous f)
360+
(f_me : MeasurableEmbedding f) : IsFiniteMeasureOnCompacts (μ.comap f) where
361+
lt_top_of_isCompact K hK := by
362+
rw [f_me.comap_apply]
363+
exact IsFiniteMeasureOnCompacts.lt_top_of_isCompact (hK.image f_cont)
364+
357365
instance (priority := 100) CompactSpace.isFiniteMeasure [TopologicalSpace α] [CompactSpace α]
358366
[IsFiniteMeasureOnCompacts μ] : IsFiniteMeasure μ :=
359367
⟨IsFiniteMeasureOnCompacts.lt_top_of_isCompact isCompact_univ⟩

0 commit comments

Comments
 (0)