Skip to content

Commit b000f0c

Browse files
committed
feat: MeasurableConstSMul (#24317)
This typeclass will be useful in #23603.
1 parent 55b9074 commit b000f0c

File tree

8 files changed

+148
-98
lines changed

8 files changed

+148
-98
lines changed

Mathlib/MeasureTheory/Constructions/BorelSpace/Basic.lean

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -506,11 +506,16 @@ instance (priority := 100) ContinuousInv.measurableInv [Inv γ] [ContinuousInv
506506
MeasurableInv γ := ⟨continuous_inv.measurable⟩
507507

508508
@[to_additive]
509-
instance (priority := 100) ContinuousSMul.measurableSMul {M α} [TopologicalSpace M]
509+
instance (priority := 100) ContinuousConstSMul.toMeasurableConstSMul {M α} [TopologicalSpace α]
510+
[MeasurableSpace α] [BorelSpace α] [SMul M α] [ContinuousConstSMul M α] :
511+
MeasurableConstSMul M α where
512+
measurable_const_smul _ := (continuous_const_smul _).measurable
513+
514+
@[to_additive]
515+
instance (priority := 100) ContinuousSMul.toMeasurableSMul {M α} [TopologicalSpace M]
510516
[TopologicalSpace α] [MeasurableSpace M] [MeasurableSpace α] [OpensMeasurableSpace M]
511-
[BorelSpace α] [SMul M α] [ContinuousSMul M α] : MeasurableSMul M α :=
512-
fun _ => (continuous_const_smul _).measurable, fun _ =>
513-
(continuous_id.smul continuous_const).measurable⟩
517+
[BorelSpace α] [SMul M α] [ContinuousSMul M α] : MeasurableSMul M α where
518+
measurable_smul_const _ := (continuous_id.smul continuous_const).measurable
514519

515520
section Homeomorph
516521

Mathlib/MeasureTheory/Constructions/BorelSpace/Real.lean

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -262,10 +262,8 @@ instance instMeasurableInv : MeasurableInv ℝ≥0∞ :=
262262
⟨continuous_inv.measurable⟩
263263

264264
instance : MeasurableSMul ℝ≥0 ℝ≥0where
265-
measurable_const_smul := by
266-
simp_rw [ENNReal.smul_def]
267-
exact fun _ ↦ MeasurableSMul.measurable_const_smul _
268-
measurable_smul_const := fun x ↦ by
265+
measurable_const_smul _ := by simp_rw [ENNReal.smul_def]; exact measurable_const_smul _
266+
measurable_smul_const _ := by
269267
simp_rw [ENNReal.smul_def]
270268
exact measurable_coe_nnreal_ennreal.mul_const _
271269

Mathlib/MeasureTheory/Group/Arithmetic.lean

Lines changed: 123 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -468,19 +468,28 @@ instance (priority := 100) MeasurableDiv.toMeasurableInv [MeasurableSpace α] [G
468468
[MeasurableDiv α] : MeasurableInv α where
469469
measurable_inv := by simpa using measurable_const_div (1 : α)
470470

471+
/-- We say that the action of `M` on `α` has `MeasurableConstVAdd` if for each `c` the map
472+
`x ↦ c +ᵥ x` is a measurable function. -/
473+
class MeasurableConstVAdd (M α : Type*) [VAdd M α] [MeasurableSpace α] : Prop where
474+
measurable_const_vadd : ∀ c : M, Measurable (c +ᵥ · : α → α)
475+
476+
/-- We say that the action of `M` on `α` has `MeasurableConstSMul` if for each `c` the map
477+
`x ↦ c • x` is a measurable function. -/
478+
@[to_additive]
479+
class MeasurableConstSMul (M α : Type*) [SMul M α] [MeasurableSpace α] : Prop where
480+
measurable_const_smul : ∀ c : M, Measurable (c • · : α → α)
481+
471482
/-- We say that the action of `M` on `α` has `MeasurableVAdd` if for each `c` the map `x ↦ c +ᵥ x`
472483
is a measurable function and for each `x` the map `c ↦ c +ᵥ x` is a measurable function. -/
473-
class MeasurableVAdd (M α : Type*) [VAdd M α] [MeasurableSpace M] [MeasurableSpace α] :
474-
Prop where
475-
measurable_const_vadd : ∀ c : M, Measurable (c +ᵥ · : α → α)
484+
class MeasurableVAdd (M α : Type*) [VAdd M α] [MeasurableSpace M] [MeasurableSpace α]
485+
extends MeasurableConstVAdd M α where
476486
measurable_vadd_const : ∀ x : α, Measurable (· +ᵥ x : M → α)
477487

478488
/-- We say that the action of `M` on `α` has `MeasurableSMul` if for each `c` the map `x ↦ c • x`
479489
is a measurable function and for each `x` the map `c ↦ c • x` is a measurable function. -/
480490
@[to_additive]
481-
class MeasurableSMul (M α : Type*) [SMul M α] [MeasurableSpace M] [MeasurableSpace α] :
482-
Prop where
483-
measurable_const_smul : ∀ c : M, Measurable (c • · : α → α)
491+
class MeasurableSMul (M α : Type*) [SMul M α] [MeasurableSpace M] [MeasurableSpace α]
492+
extends MeasurableConstSMul M α where
484493
measurable_smul_const : ∀ x : α, Measurable (· • x : M → α)
485494

486495
/-- We say that the action of `M` on `α` has `MeasurableVAdd₂` if the map
@@ -496,39 +505,89 @@ class MeasurableSMul₂ (M α : Type*) [SMul M α] [MeasurableSpace M] [Measurab
496505
Prop where
497506
measurable_smul : Measurable (Function.uncurry (· • ·) : M × α → α)
498507

499-
export MeasurableSMul (measurable_const_smul measurable_smul_const)
500-
508+
export MeasurableConstVAdd (measurable_const_vadd)
509+
export MeasurableConstSMul (measurable_const_smul)
510+
export MeasurableVAdd (measurable_vadd_const)
511+
export MeasurableSMul (measurable_smul_const)
501512
export MeasurableSMul₂ (measurable_smul)
502-
503-
export MeasurableVAdd (measurable_const_vadd measurable_vadd_const)
504-
505513
export MeasurableVAdd₂ (measurable_vadd)
506514

507515
@[to_additive]
508516
instance measurableSMul_of_mul (M : Type*) [Mul M] [MeasurableSpace M] [MeasurableMul M] :
509-
MeasurableSMul M M :=
510-
⟨measurable_id.const_mul, measurable_id.mul_const⟩
517+
MeasurableSMul M M where
518+
measurable_const_smul := measurable_id.const_mul
519+
measurable_smul_const := measurable_id.mul_const
511520

512521
@[to_additive]
513522
instance measurableSMul₂_of_mul (M : Type*) [Mul M] [MeasurableSpace M] [MeasurableMul₂ M] :
514523
MeasurableSMul₂ M M :=
515524
⟨measurable_mul⟩
516525

517526
@[to_additive]
518-
instance Submonoid.measurableSMul {M α} [MeasurableSpace M] [MeasurableSpace α] [Monoid M]
519-
[MulAction M α] [MeasurableSMul M α] (s : Submonoid M) : MeasurableSMul s α :=
520-
fun c => by simpa only using measurable_const_smul (c : M), fun x =>
521-
(measurable_smul_const x : Measurable fun c : M => c • x).comp measurable_subtype_coe⟩
527+
instance Submonoid.instMeasurableConstSMul {M α} [MeasurableSpace α] [Monoid M] [MulAction M α]
528+
[MeasurableConstSMul M α] (s : Submonoid M) : MeasurableConstSMul s α where
529+
measurable_const_smul c := by simpa only using measurable_const_smul (c : M)
530+
531+
@[to_additive]
532+
instance Submonoid.instMeasurableSMul {M α} [MeasurableSpace M] [MeasurableSpace α] [Monoid M]
533+
[MulAction M α] [MeasurableSMul M α] (s : Submonoid M) : MeasurableSMul s α where
534+
measurable_smul_const x := (measurable_smul_const (M := M) x).comp measurable_subtype_coe
522535

523536
@[to_additive]
524-
instance Subgroup.measurableSMul {G α} [MeasurableSpace G] [MeasurableSpace α] [Group G]
537+
instance Subgroup.instMeasurableConstSMul {G α} [MeasurableSpace α] [Group G] [MulAction G α]
538+
[MeasurableConstSMul G α] (s : Subgroup G) : MeasurableConstSMul s α :=
539+
s.toSubmonoid.instMeasurableConstSMul
540+
541+
@[to_additive]
542+
instance Subgroup.instMeasurableSMul {G α} [MeasurableSpace G] [MeasurableSpace α] [Group G]
525543
[MulAction G α] [MeasurableSMul G α] (s : Subgroup G) : MeasurableSMul s α :=
526-
s.toSubmonoid.measurableSMul
544+
s.toSubmonoid.instMeasurableSMul
527545

528546
section SMul
547+
variable {M X α β : Type*} [MeasurableSpace X] [SMul M X]
548+
{m : MeasurableSpace α} {mβ : MeasurableSpace β} {μ : Measure α} {f : α → M} {g : α → X}
549+
550+
section MeasurableConstSMul
551+
variable [MeasurableConstSMul M X]
552+
553+
@[to_additive (attr := fun_prop, measurability)]
554+
lemma Measurable.const_smul (hg : Measurable g) (c : M) : Measurable (c • g) :=
555+
(measurable_const_smul c).comp hg
556+
557+
/-- Compositional version of `Measurable.const_smul` for use by `fun_prop`. -/
558+
@[to_additive (attr := fun_prop)
559+
"Compositional version of `Measurable.const_vadd` for use by `fun_prop`."]
560+
lemma Measurable.fun_const_smul {g : α → β → X} {h : α → β} (hg : Measurable ↿g) (hh : Measurable h)
561+
(c : M) : Measurable fun a ↦ (c • g a) (h a) :=
562+
(hg.comp <| measurable_id.prodMk hh).const_smul _
563+
564+
@[deprecated (since := "2025-04-23")] alias Measurable.const_smul' := Measurable.fun_const_smul
565+
566+
@[to_additive (attr := fun_prop, measurability)]
567+
lemma AEMeasurable.fun_const_smul (hg : AEMeasurable g μ) (c : M) : AEMeasurable (c • g ·) μ :=
568+
(measurable_const_smul c).comp_aemeasurable hg
569+
570+
@[deprecated (since := "2025-04-23")] alias AEMeasurable.const_smul' := AEMeasurable.fun_const_smul
571+
572+
@[to_additive (attr := fun_prop, measurability)]
573+
lemma AEMeasurable.const_smul (hf : AEMeasurable g μ) (c : M) : AEMeasurable (c • g) μ :=
574+
hf.fun_const_smul c
575+
576+
@[to_additive]
577+
instance Pi.instMeasurableConstSMul {ι : Type*} {α : ι → Type*} [∀ i, SMul M (α i)]
578+
[∀ i, MeasurableSpace (α i)] [∀ i, MeasurableConstSMul M (α i)] :
579+
MeasurableConstSMul M (∀ i, α i) where
580+
measurable_const_smul _ := measurable_pi_iff.2 fun i ↦ (measurable_pi_apply i).const_smul _
581+
582+
/-- If a scalar is central, then its right action is measurable when its left action is. -/
583+
@[to_additive]
584+
nonrec instance MulOpposite.instMeasurableConstSMul [SMul M α] [SMul Mᵐᵒᵖ α] [IsCentralScalar M α]
585+
[MeasurableConstSMul M α] : MeasurableConstSMul Mᵐᵒᵖ α where
586+
measurable_const_smul := by simpa using measurable_const_smul
587+
588+
end MeasurableConstSMul
529589

530-
variable {M X α β : Type*} [MeasurableSpace M] [MeasurableSpace X] [SMul M X]
531-
{m : MeasurableSpace α} {mβ : MeasurableSpace β} {f : α → M} {g : α → X}
590+
variable [MeasurableSpace M]
532591

533592
@[to_additive (attr := fun_prop, aesop safe 20 apply (rule_sets := [Measurable]))]
534593
theorem Measurable.smul [MeasurableSMul₂ M X] (hf : Measurable f) (hg : Measurable g) :
@@ -549,10 +608,11 @@ theorem AEMeasurable.smul [MeasurableSMul₂ M X] {μ : Measure α} (hf : AEMeas
549608

550609
@[to_additive]
551610
instance (priority := 100) MeasurableSMul₂.toMeasurableSMul [MeasurableSMul₂ M X] :
552-
MeasurableSMul M X :=
553-
fun _ => measurable_const.smul measurable_id, fun _ => measurable_id.smul measurable_const⟩
611+
MeasurableSMul M X where
612+
measurable_const_smul _ := measurable_const.smul measurable_id
613+
measurable_smul_const _ := measurable_id.smul measurable_const
554614

555-
variable [MeasurableSMul M X] {μ : Measure α}
615+
variable [MeasurableSMul M X]
556616

557617
@[to_additive (attr := fun_prop, measurability)]
558618
theorem Measurable.smul_const (hf : Measurable f) (y : X) : Measurable fun x => f x • y :=
@@ -563,32 +623,11 @@ theorem AEMeasurable.smul_const (hf : AEMeasurable f μ) (y : X) :
563623
AEMeasurable (fun x => f x • y) μ :=
564624
(MeasurableSMul.measurable_smul_const y).comp_aemeasurable hf
565625

566-
@[to_additive (attr := fun_prop, measurability)]
567-
theorem Measurable.const_smul (hg : Measurable g) (c : M) : Measurable (c • g) :=
568-
(MeasurableSMul.measurable_const_smul c).comp hg
569-
570-
/-- Compositional version of `Measurable.const_smul` for use by `fun_prop`. -/
571-
@[to_additive (attr := fun_prop)
572-
"Compositional version of `Measurable.const_vadd` for use by `fun_prop`."]
573-
lemma Measurable.const_smul' {g : α → β → X} {h : α → β} (hg : Measurable ↿g) (hh : Measurable h)
574-
(c : M) : Measurable fun a ↦ (c • g a) (h a) :=
575-
(hg.comp <| measurable_id.prodMk hh).const_smul _
576-
577-
@[to_additive (attr := fun_prop, measurability)]
578-
theorem AEMeasurable.const_smul' (hg : AEMeasurable g μ) (c : M) :
579-
AEMeasurable (fun x => c • g x) μ :=
580-
(MeasurableSMul.measurable_const_smul c).comp_aemeasurable hg
581-
582-
@[to_additive (attr := fun_prop, measurability)]
583-
theorem AEMeasurable.const_smul (hf : AEMeasurable g μ) (c : M) : AEMeasurable (c • g) μ :=
584-
hf.const_smul' c
585-
586626
@[to_additive]
587627
instance Pi.measurableSMul {ι : Type*} {α : ι → Type*} [∀ i, SMul M (α i)]
588628
[∀ i, MeasurableSpace (α i)] [∀ i, MeasurableSMul M (α i)] :
589-
MeasurableSMul M (∀ i, α i) :=
590-
fun _ => measurable_pi_iff.mpr fun i => (measurable_pi_apply i).const_smul _, fun _ =>
591-
measurable_pi_iff.mpr fun _ => measurable_smul_const _⟩
629+
MeasurableSMul M (∀ i, α i) where
630+
measurable_smul_const _ := measurable_pi_iff.2 fun _ ↦ measurable_smul_const _
592631

593632
/-- `AddMonoid.SMul` is measurable. -/
594633
instance AddMonoid.measurableSMul_nat₂ (M : Type*) [AddMonoid M] [MeasurableSpace M]
@@ -641,11 +680,10 @@ theorem measurableSMul₂_iterateMulAct : MeasurableSMul₂ (IterateMulAct f) α
641680
end IterateMulAct
642681

643682
section MulAction
683+
variable {G G₀ M β α : Type*} [MeasurableSpace β] [MeasurableSpace α] {f : α → β} {μ : Measure α}
644684

645-
variable {M β α : Type*} [MeasurableSpace M] [MeasurableSpace β] [Monoid M] [MulAction M β]
646-
[MeasurableSMul M β] [MeasurableSpace α] {f : α → β} {μ : Measure α}
647-
648-
variable {G : Type*} [Group G] [MeasurableSpace G] [MulAction G β] [MeasurableSMul G β]
685+
section Group
686+
variable {G : Type*} [Group G] [MulAction G β] [MeasurableConstSMul G β]
649687

650688
@[to_additive]
651689
theorem measurable_const_smul_iff (c : G) : (Measurable fun x => c • f x) ↔ Measurable f :=
@@ -656,14 +694,17 @@ theorem aemeasurable_const_smul_iff (c : G) :
656694
AEMeasurable (fun x => c • f x) μ ↔ AEMeasurable f μ :=
657695
fun h => by simpa [inv_smul_smul, Pi.smul_def] using h.const_smul c⁻¹, fun h => h.const_smul c⟩
658696

659-
@[to_additive]
660-
instance Units.instMeasurableSpace : MeasurableSpace Mˣ := MeasurableSpace.comap ((↑) : Mˣ → M) ‹_›
697+
end Group
698+
699+
section Monoid
700+
variable [Monoid M] [MulAction M β]
701+
702+
section MeasurableConstSMul
703+
variable [MeasurableConstSMul M β]
661704

662705
@[to_additive]
663-
instance Units.measurableSMul : MeasurableSMul Mˣ β where
706+
instance Units.instMeasurableConstSMul : MeasurableConstSMul Mˣ β where
664707
measurable_const_smul c := measurable_const_smul (c : M)
665-
measurable_smul_const x :=
666-
(measurable_smul_const x : Measurable fun c : M => c • x).comp MeasurableSpace.le_map_comap
667708

668709
@[to_additive]
669710
nonrec theorem IsUnit.measurable_const_smul_iff {c : M} (hc : IsUnit c) :
@@ -677,8 +718,24 @@ nonrec theorem IsUnit.aemeasurable_const_smul_iff {c : M} (hc : IsUnit c) :
677718
let ⟨u, hu⟩ := hc
678719
hu ▸ aemeasurable_const_smul_iff u
679720

680-
variable {G₀ : Type*} [GroupWithZero G₀] [MeasurableSpace G₀] [MulAction G₀ β]
681-
[MeasurableSMul G₀ β]
721+
end MeasurableConstSMul
722+
723+
section MeasurableSMul
724+
variable [MeasurableSpace M] [MeasurableSMul M β]
725+
726+
@[to_additive]
727+
instance Units.instMeasurableSpace : MeasurableSpace Mˣ := .comap Units.val ‹_›
728+
729+
@[to_additive]
730+
instance Units.measurableSMul : MeasurableSMul Mˣ β where
731+
measurable_smul_const x :=
732+
(measurable_smul_const x : Measurable fun c : M => c • x).comp MeasurableSpace.le_map_comap
733+
734+
end MeasurableSMul
735+
end Monoid
736+
737+
section GroupWithZero
738+
variable [GroupWithZero G₀] [MeasurableSpace G₀] [MulAction G₀ β] [MeasurableSMul G₀ β]
682739

683740
theorem measurable_const_smul_iff₀ {c : G₀} (hc : c ≠ 0) :
684741
(Measurable fun x => c • f x) ↔ Measurable f :=
@@ -688,6 +745,7 @@ theorem aemeasurable_const_smul_iff₀ {c : G₀} (hc : c ≠ 0) :
688745
AEMeasurable (fun x => c • f x) μ ↔ AEMeasurable f μ :=
689746
(IsUnit.mk0 c hc).aemeasurable_const_smul_iff
690747

748+
end GroupWithZero
691749
end MulAction
692750

693751
/-!
@@ -725,14 +783,12 @@ instance MulOpposite.instMeasurableMul₂ {M : Type*} [Mul M] [MeasurableSpace M
725783
((measurable_mul_unop.comp measurable_snd).mul (measurable_mul_unop.comp measurable_fst))⟩
726784

727785
/-- If a scalar is central, then its right action is measurable when its left action is. -/
786+
@[to_additive]
728787
nonrec instance MeasurableSMul.op {M α} [MeasurableSpace M] [MeasurableSpace α] [SMul M α]
729-
[SMul Mᵐᵒᵖ α] [IsCentralScalar M α] [MeasurableSMul M α] : MeasurableSMul Mᵐᵒᵖ α :=
730-
⟨MulOpposite.rec' fun c =>
731-
show Measurable fun x => op c • x by
732-
simpa only [op_smul_eq_smul] using measurable_const_smul c,
733-
fun x =>
788+
[SMul Mᵐᵒᵖ α] [IsCentralScalar M α] [MeasurableSMul M α] : MeasurableSMul Mᵐᵒᵖ α where
789+
measurable_smul_const x :=
734790
show Measurable fun c => op (unop c) • x by
735-
simpa only [op_smul_eq_smul] using (measurable_smul_const x).comp measurable_mul_unop
791+
simpa only [op_smul_eq_smul] using (measurable_smul_const x).comp measurable_mul_unop
736792

737793
/-- If a scalar is central, then its right action is measurable when its left action is. -/
738794
nonrec instance MeasurableSMul₂.op {M α} [MeasurableSpace M] [MeasurableSpace α] [SMul M α]
@@ -743,8 +799,9 @@ nonrec instance MeasurableSMul₂.op {M α} [MeasurableSpace M] [MeasurableSpace
743799

744800
@[to_additive]
745801
instance measurableSMul_opposite_of_mul {M : Type*} [Mul M] [MeasurableSpace M]
746-
[MeasurableMul M] : MeasurableSMul Mᵐᵒᵖ M :=
747-
fun c => measurable_mul_const (unop c), fun x => measurable_mul_unop.const_mul x⟩
802+
[MeasurableMul M] : MeasurableSMul Mᵐᵒᵖ M where
803+
measurable_const_smul c := measurable_mul_const (unop c)
804+
measurable_smul_const x := measurable_mul_unop.const_mul x
748805

749806
@[to_additive]
750807
instance measurableSMul₂_opposite_of_mul {M : Type*} [Mul M] [MeasurableSpace M]

Mathlib/MeasureTheory/Group/MeasurableEquiv.lean

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ open scoped Pointwise NNReal
3838

3939
namespace MeasurableEquiv
4040

41-
variable {G G₀ α : Type*} [MeasurableSpace G] [MeasurableSpace G₀] [MeasurableSpace α] [Group G]
42-
[GroupWithZero G₀] [MulAction G α] [MulAction G₀ α] [MeasurableSMul G α] [MeasurableSMul G₀ α]
41+
variable {G G₀ α : Type*} [MeasurableSpace α] [Group G] [GroupWithZero G₀] [MulAction G α]
42+
[MulAction G₀ α] [MeasurableConstSMul G α] [MeasurableConstSMul G₀ α]
4343

4444
/-- If a group `G` acts on `α` by measurable maps, then each element `c : G` defines a measurable
4545
automorphism of `α`. -/
@@ -75,6 +75,8 @@ theorem _root_.measurableEmbedding_const_smul₀ {c : G₀} (hc : c ≠ 0) :
7575
MeasurableEmbedding (c • · : α → α) :=
7676
(smul₀ c hc).measurableEmbedding
7777

78+
variable [MeasurableSpace G] [MeasurableSpace G₀]
79+
7880
section Mul
7981

8082
variable [MeasurableMul G] [MeasurableMul G₀]
@@ -206,10 +208,7 @@ end MeasurableEquiv
206208

207209
namespace MeasureTheory.Measure
208210
variable {G A : Type*} [Group G] [AddCommGroup A] [DistribMulAction G A] [MeasurableSpace A]
209-
-- We only need `MeasurableConstSMul G A` but we don't have this class. So we erroneously must
210-
-- assume `MeasurableSpace G` + `MeasurableSMul G A`
211-
[MeasurableSpace G] [MeasurableSMul G A]
212-
variable {μ ν : Measure A} {g : G}
211+
[MeasurableConstSMul G A] {μ ν : Measure A} {g : G}
213212

214213
noncomputable instance : DistribMulAction Gᵈᵐᵃ (Measure A) where
215214
smul g μ := μ.map (DomMulAct.mk.symm g⁻¹ • ·)

Mathlib/MeasureTheory/Group/Measure.lean

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -864,11 +864,9 @@ instance (priority := 100) IsHaarMeasure.noAtoms [IsTopologicalGroup G] [BorelSp
864864
K_compact.measure_lt_top.ne
865865

866866
instance IsAddHaarMeasure.domSMul {G A : Type*} [Group G] [AddCommGroup A] [DistribMulAction G A]
867-
-- We only need `MeasurableConstSMul G A` but we don't have this class. So we erroneously must
868-
-- assume `MeasurableSpace G` + `MeasurableSMul G A`
869-
[MeasurableSpace A] [MeasurableSpace G] [MeasurableSMul G A] [TopologicalSpace A] [BorelSpace A]
870-
[IsTopologicalAddGroup A] [ContinuousConstSMul G A] {μ : Measure A} [μ.IsAddHaarMeasure]
871-
(g : Gᵈᵐᵃ) : (g • μ).IsAddHaarMeasure :=
867+
[MeasurableSpace A] [TopologicalSpace A] [BorelSpace A] [IsTopologicalAddGroup A]
868+
[ContinuousConstSMul G A] {μ : Measure A} [μ.IsAddHaarMeasure] (g : Gᵈᵐᵃ) :
869+
(g • μ).IsAddHaarMeasure :=
872870
(DistribMulAction.toAddEquiv _ (DomMulAct.mk.symm g⁻¹)).isAddHaarMeasure_map _
873871
(continuous_const_smul _) (continuous_const_smul _)
874872

Mathlib/MeasureTheory/Integral/Bochner/Basic.lean

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1051,10 +1051,8 @@ theorem integral_map_equiv {β} [MeasurableSpace β] (e : α ≃ᵐ β) (f : β
10511051

10521052
omit hE in
10531053
lemma integral_domSMul {G A : Type*} [Group G] [AddCommGroup A] [DistribMulAction G A]
1054-
-- We only need `MeasurableConstSMul G A` but we don't have this class. So we erroneously must
1055-
-- assume `MeasurableSpace G` + `MeasurableSMul G A`
1056-
[MeasurableSpace A] [MeasurableSpace G] [MeasurableSMul G A] {μ : Measure A}
1057-
(g : Gᵈᵐᵃ) (f : A → E) : ∫ x, f x ∂g • μ = ∫ x, f ((DomMulAct.mk.symm g)⁻¹ • x) ∂μ :=
1054+
[MeasurableSpace A] [MeasurableConstSMul G A] {μ : Measure A} (g : Gᵈᵐᵃ) (f : A → E) :
1055+
∫ x, f x ∂g • μ = ∫ x, f ((DomMulAct.mk.symm g)⁻¹ • x) ∂μ :=
10581056
integral_map_equiv (MeasurableEquiv.smul ((DomMulAct.mk.symm g : G)⁻¹)) f
10591057

10601058
theorem MeasurePreserving.integral_comp {β} {_ : MeasurableSpace β} {f : α → β} {ν}

0 commit comments

Comments
 (0)