Skip to content

Commit dfa2fe7

Browse files
DavidLedvinkaDavid Ledvinka
andcommitted
feat(MeasureTheory): Add MeasurableSingletonClass version of Measure.map_dirac (#35784)
Gives the new theorem the name `Measure.map_dirac` and rename the current `Measure.map_dirac` to `Measure.map_dirac'`. This follows a convention used elsewhere that for each Measure.dirac lemma with a MeasurableSingleton instance version and a version requiring some sort of measurability, the MeasurableSingleton version has the unprimed name, and the version requiring measurability has the primed name. Co-authored-by: David Ledvinka <dledvinka.ledvinka@mail.utoronto.ca>
1 parent 6e128b2 commit dfa2fe7

File tree

10 files changed

+19
-14
lines changed

10 files changed

+19
-14
lines changed

Mathlib/MeasureTheory/Category/MeasCat.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ def Giry : CategoryTheory.Monad MeasCat where
9494
η :=
9595
{ app := fun X => ⟨@Measure.dirac X.1 X.2, Measure.measurable_dirac⟩
9696
naturality :=
97-
fun _ _ ⟨_, hf⟩ => Subtype.ext <| funext fun a => (Measure.map_dirac hf a).symm }
97+
fun _ _ ⟨_, hf⟩ => Subtype.ext <| funext fun a => (Measure.map_dirac' hf a).symm }
9898
μ :=
9999
{ app := fun X => ⟨@Measure.join X.1 X.2, Measure.measurable_join⟩
100100
naturality := fun _ _ ⟨_, hf⟩ => Subtype.ext <| funext fun μ => Measure.join_map_map hf μ }

Mathlib/MeasureTheory/Constructions/Pi.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -884,7 +884,7 @@ theorem measurePreserving_pi_empty {ι : Type u} {α : ι → Type v} [Fintype
884884
(Measure.dirac ()) := by
885885
set e := MeasurableEquiv.ofUniqueOfUnique (∀ i, α i) Unit
886886
refine ⟨e.measurable, ?_⟩
887-
rw [Measure.pi_of_empty, Measure.map_dirac e.measurable]
887+
rw [Measure.pi_of_empty, Measure.map_dirac' e.measurable]
888888

889889
theorem volume_preserving_pi_empty {ι : Type u} (α : ι → Type v) [Fintype ι] [IsEmpty ι]
890890
[∀ i, MeasureSpace (α i)] :

Mathlib/MeasureTheory/Group/Convolution.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ lemma mconv_dirac [MeasurableMul₂ M] (μ : Measure M) [SFinite μ] (x : M) :
7070
@[to_additive (attr := simp)]
7171
lemma dirac_mconv_dirac [MeasurableMul₂ M] (x y : M) :
7272
(dirac x) ∗ₘ (dirac y) = dirac (x * y) := by
73-
rw [mconv_dirac, map_dirac (by fun_prop)]
73+
rw [mconv_dirac, map_dirac' (by fun_prop)]
7474

7575
/-- Convolution of the dirac measure at 1 with a measure μ returns μ. -/
7676
@[to_additive (attr := simp)

Mathlib/MeasureTheory/Measure/Dirac.lean

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ theorem dirac_apply [MeasurableSingletonClass α] (a : α) (s : Set α) :
8383
fun h ↦ by simpa [h] using dirac_apply_of_mem (mem_univ a)
8484

8585
@[simp]
86-
theorem map_dirac {f : α → β} (hf : Measurable f) (a : α) : (dirac a).map f = dirac (f a) := by
86+
theorem map_dirac' {f : α → β} (hf : Measurable f) (a : α) : (dirac a).map f = dirac (f a) := by
8787
classical
8888
exact ext fun s hs => by simp [hs, map_apply hf hs, hf hs, indicator_apply]
8989

@@ -215,6 +215,14 @@ lemma aemeasurable_dirac [MeasurableSingletonClass α] {a : α} {f : α → β}
215215
AEMeasurable f (Measure.dirac a) :=
216216
fun _ ↦ f a, measurable_const, ae_eq_dirac f⟩
217217

218+
@[simp]
219+
theorem Measure.map_dirac [MeasurableSingletonClass α] [MeasurableSingletonClass β]
220+
{f : α → β} (a : α) : (dirac a).map f = dirac (f a) := by
221+
classical
222+
ext s hs
223+
rw [map_apply_of_aemeasurable (by fun_prop) hs]
224+
simp [indicator_apply]
225+
218226
instance Measure.dirac.isProbabilityMeasure {x : α} : IsProbabilityMeasure (dirac x) :=
219227
⟨dirac_apply_of_mem <| mem_univ x⟩
220228

Mathlib/MeasureTheory/Measure/GiryMonad.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ theorem bind_bind {γ} [MeasurableSpace γ] {m : Measure α} {f : α → Measure
300300

301301
@[simp]
302302
theorem dirac_bind {f : α → Measure β} (hf : Measurable f) (a : α) : bind (dirac a) f = f a := by
303-
simp [bind, map_dirac hf]
303+
simp [bind, map_dirac' hf]
304304

305305
@[simp]
306306
theorem bind_dirac {m : Measure α} : bind m dirac = m := by

Mathlib/MeasureTheory/Measure/Haar/InnerProductSpace.lean

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,7 @@ theorem PiLp.volume_preserving_toLp : MeasurePreserving (@toLp 2 (ι → ℝ)) :
162162
set_option backward.isDefEq.respectTransparency false in
163163
lemma volume_euclideanSpace_eq_dirac [IsEmpty ι] :
164164
(volume : Measure (EuclideanSpace ℝ ι)) = Measure.dirac 0 := by
165-
rw [← (PiLp.volume_preserving_toLp ι).map_eq, volume_pi_eq_dirac 0,
166-
map_dirac (measurable_toLp 2 _), toLp_zero]
165+
rw [← (PiLp.volume_preserving_toLp ι).map_eq, volume_pi_eq_dirac 0, map_dirac, toLp_zero]
167166

168167
end PiLp
169168

Mathlib/MeasureTheory/Measure/Prod.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -800,7 +800,7 @@ theorem dirac_prod (x : α) : (dirac x).prod ν = map (Prod.mk x) ν := by
800800
dirac_apply' _ hs, ← indicator_mul_left _ _ fun _ => sfiniteSeq ν i t, Pi.one_apply, one_mul]
801801

802802
theorem dirac_prod_dirac {x : α} {y : β} : (dirac x).prod (dirac y) = dirac (x, y) := by
803-
rw [prod_dirac, map_dirac measurable_prodMk_right]
803+
rw [prod_dirac, map_dirac' measurable_prodMk_right]
804804

805805
theorem prod_add (ν' : Measure β) [SFinite ν'] : μ.prod (ν + ν') = μ.prod ν + μ.prod ν' := by
806806
simp_rw [← sum_sfiniteSeq ν, ← sum_sfiniteSeq ν', sum_add_sum, ← sum_sfiniteSeq μ, prod_sum,

Mathlib/Probability/Distributions/Gaussian/Basic.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ variable {E F : Type*} [NormedAddCommGroup E] [NormedSpace ℝ E] [MeasurableSpa
108108

109109
/-- Dirac measures are Gaussian. -/
110110
instance {x : E} : IsGaussian (Measure.dirac x) where
111-
map_eq_gaussianReal L := by rw [Measure.map_dirac (by fun_prop)]; simp
111+
map_eq_gaussianReal L := by simp
112112

113113
lemma IsGaussian.memLp_dual (μ : Measure E) [IsGaussian μ] (L : StrongDual ℝ E)
114114
(p : ℝ≥0∞) (hp : p ≠ ∞) :

Mathlib/Probability/Distributions/Gaussian/Real.lean

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,7 @@ lemma _root_.MeasurableEquiv.gaussianReal_map_symm_apply (hv : v ≠ 0) (f : ℝ
278278
lemma gaussianReal_map_add_const (y : ℝ) :
279279
(gaussianReal μ v).map (· + y) = gaussianReal (μ + y) v := by
280280
by_cases hv : v = 0
281-
· simp only [hv, gaussianReal_zero_var]
282-
exact Measure.map_dirac (measurable_id'.add_const _) _
281+
· simp [hv, gaussianReal_zero_var]
283282
let e : ℝ ≃ᵐ ℝ := (Homeomorph.addRight y).symm.toMeasurableEquiv
284283
have he' : ∀ x, HasDerivAt e ((fun _ ↦ 1) x) x := fun _ ↦ (hasDerivAt_id _).sub_const y
285284
change (gaussianReal μ v).map e.symm = gaussianReal (μ + y) v
@@ -300,8 +299,7 @@ set_option backward.isDefEq.respectTransparency false in
300299
lemma gaussianReal_map_const_mul (c : ℝ) :
301300
(gaussianReal μ v).map (c * ·) = gaussianReal (c * μ) (⟨c ^ 2, sq_nonneg _⟩ * v) := by
302301
by_cases hv : v = 0
303-
· simp only [hv, mul_zero, gaussianReal_zero_var]
304-
exact Measure.map_dirac (measurable_id'.const_mul c) μ
302+
· simp [hv, mul_zero, gaussianReal_zero_var]
305303
by_cases hc : c = 0
306304
· simp only [hc, zero_mul]
307305
rw [Measure.map_const]

Mathlib/Probability/Kernel/Composition/MapComap.lean

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ end MapComap
218218
@[simp]
219219
lemma id_map {f : α → β} (hf : Measurable f) : Kernel.id.map f = deterministic f hf := by
220220
ext
221-
rw [Kernel.map_apply _ hf, Kernel.deterministic_apply, Kernel.id_apply, Measure.map_dirac hf]
221+
rw [Kernel.map_apply _ hf, Kernel.deterministic_apply, Kernel.id_apply, Measure.map_dirac' hf]
222222

223223
@[simp]
224224
lemma id_comap {f : α → β} (hf : Measurable f) : Kernel.id.comap f hf = deterministic f hf := by

0 commit comments

Comments
 (0)