measure_theory.group.measure
⟷
Mathlib.MeasureTheory.Group.Measure
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -683,7 +683,7 @@ theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOp
μ K ≤ μ (⋃ (g : G) (H : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_bUnion_finset_le _ _)
_ = Finset.card t * μ U := by simp only [measure_preimage_mul, Finset.sum_const, nsmul_eq_mul]
- _ < ∞ := ENNReal.mul_lt_top (ENNReal.nat_ne_top _) h
+ _ < ∞ := ENNReal.mul_lt_top (ENNReal.natCast_ne_top _) h
#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant
#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isAddLeftInvariant
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -617,7 +617,7 @@ theorem isOpenPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsComp
refine' ⟨fun U hU hne => _⟩
contrapose! h
rw [← nonpos_iff_eq_zero]
- rw [← hU.interior_eq] at hne
+ rw [← hU.interior_eq] at hne
obtain ⟨t, hKt⟩ : ∃ t : Finset G, K ⊆ ⋃ (g : G) (H : g ∈ t), (fun h : G => g * h) ⁻¹' U :=
compact_covered_by_mul_left_translates hK hne
calc
@@ -676,7 +676,7 @@ to any compact set. -/
theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOpen U)
(h'U : U.Nonempty) (h : μ U ≠ ∞) {K : Set G} (hK : IsCompact K) : μ K < ∞ :=
by
- rw [← hU.interior_eq] at h'U
+ rw [← hU.interior_eq] at h'U
obtain ⟨t, hKt⟩ : ∃ t : Finset G, K ⊆ ⋃ (g : G) (H : g ∈ t), (fun h : G => g * h) ⁻¹' U :=
compact_covered_by_mul_left_translates hK h'U
calc
@@ -753,7 +753,7 @@ theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSp
simp_rw [M]
apply ENNReal.Tendsto.mul_const _ (Or.inl ENNReal.top_ne_zero)
exact ennreal.tendsto_nat_nhds_top.comp (tendsto_add_at_top_nat _)
- simp only [ENNReal.top_mul', K_pos.ne', if_false] at N
+ simp only [ENNReal.top_mul', K_pos.ne', if_false] at N
apply top_le_iff.1
exact le_of_tendsto' N fun n => measure_mono (subset_univ _)
#align measure_theory.measure_univ_of_is_mul_left_invariant MeasureTheory.measure_univ_of_isMulLeftInvariant
@@ -940,13 +940,13 @@ instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpac
· intro x hx y hy xy
simp only [on_fun, xy.symm, mem_singleton_iff, not_false_iff, disjoint_singleton_right]
· intro b hb; exact measurable_set_singleton b
- rw [B] at A
+ rw [B] at A
rwa [ENNReal.le_div_iff_mul_le _ (Or.inr μKlt), mul_comm]
right
apply (measure_pos_of_nonempty_interior μ ⟨_, K_int⟩).ne'
have J : tendsto (fun n : ℕ => μ K / n) at_top (𝓝 (μ K / ∞)) :=
ENNReal.Tendsto.const_div ENNReal.tendsto_nat_nhds_top (Or.inr μKlt)
- simp only [ENNReal.div_top] at J
+ simp only [ENNReal.div_top] at J
exact ge_of_tendsto' J I
#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.noAtoms
#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.noAtoms
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -805,7 +805,6 @@ class IsHaarMeasure {G : Type _} [Group G] [TopologicalSpace G] [MeasurableSpace
#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
-/
-#print MeasureTheory.Measure.isLocallyFiniteMeasure_of_isHaarMeasure /-
/-- Record that a Haar measure on a locally compact space is locally finite. This is needed as the
fact that a measure which is finite on compacts is locally finite is not registered as an instance,
to avoid an instance loop.
@@ -818,8 +817,7 @@ instance (priority := 100) isLocallyFiniteMeasure_of_isHaarMeasure {G : Type _}
[IsHaarMeasure μ] : IsLocallyFiniteMeasure μ :=
isLocallyFiniteMeasure_of_isFiniteMeasureOnCompacts
#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_isHaarMeasure
-#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_isAddHaarMeasure
--/
+#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_is_add_haar_measure
section
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,13 +3,13 @@ Copyright (c) 2020 Floris van Doorn. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn
-/
-import Mathbin.Dynamics.Ergodic.MeasurePreserving
-import Mathbin.MeasureTheory.Measure.Regular
-import Mathbin.MeasureTheory.Group.MeasurableEquiv
-import Mathbin.MeasureTheory.Measure.OpenPos
-import Mathbin.MeasureTheory.Group.Action
-import Mathbin.MeasureTheory.Constructions.Prod.Basic
-import Mathbin.Topology.ContinuousFunction.CocompactMap
+import Dynamics.Ergodic.MeasurePreserving
+import MeasureTheory.Measure.Regular
+import MeasureTheory.Group.MeasurableEquiv
+import MeasureTheory.Measure.OpenPos
+import MeasureTheory.Group.Action
+import MeasureTheory.Constructions.Prod.Basic
+import Topology.ContinuousFunction.CocompactMap
#align_import measure_theory.group.measure from "leanprover-community/mathlib"@"61b5e2755ccb464b68d05a9acf891ae04992d09d"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2020 Floris van Doorn. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn
-
-! This file was ported from Lean 3 source module measure_theory.group.measure
-! leanprover-community/mathlib commit 61b5e2755ccb464b68d05a9acf891ae04992d09d
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Dynamics.Ergodic.MeasurePreserving
import Mathbin.MeasureTheory.Measure.Regular
@@ -16,6 +11,8 @@ import Mathbin.MeasureTheory.Group.Action
import Mathbin.MeasureTheory.Constructions.Prod.Basic
import Mathbin.Topology.ContinuousFunction.CocompactMap
+#align_import measure_theory.group.measure from "leanprover-community/mathlib"@"61b5e2755ccb464b68d05a9acf891ae04992d09d"
+
/-!
# Measures on Groups
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -107,32 +107,40 @@ theorem map_mul_right_eq_self (μ : Measure G) [IsMulRightInvariant μ] (g : G)
#align measure_theory.map_add_right_eq_self MeasureTheory.map_add_right_eq_self
-/
+#print MeasureTheory.isMulLeftInvariant_smul /-
@[to_additive MeasureTheory.isAddLeftInvariant_smul]
instance isMulLeftInvariant_smul [IsMulLeftInvariant μ] (c : ℝ≥0∞) : IsMulLeftInvariant (c • μ) :=
⟨fun g => by rw [measure.map_smul, map_mul_left_eq_self]⟩
#align measure_theory.is_mul_left_invariant_smul MeasureTheory.isMulLeftInvariant_smul
#align measure_theory.is_add_left_invariant_smul MeasureTheory.isAddLeftInvariant_smul
+-/
+#print MeasureTheory.isMulRightInvariant_smul /-
@[to_additive MeasureTheory.isAddRightInvariant_smul]
instance isMulRightInvariant_smul [IsMulRightInvariant μ] (c : ℝ≥0∞) :
IsMulRightInvariant (c • μ) :=
⟨fun g => by rw [measure.map_smul, map_mul_right_eq_self]⟩
#align measure_theory.is_mul_right_invariant_smul MeasureTheory.isMulRightInvariant_smul
#align measure_theory.is_add_right_invariant_smul MeasureTheory.isAddRightInvariant_smul
+-/
+#print MeasureTheory.isMulLeftInvariant_smul_nnreal /-
@[to_additive MeasureTheory.isAddLeftInvariant_smul_nnreal]
instance isMulLeftInvariant_smul_nnreal [IsMulLeftInvariant μ] (c : ℝ≥0) :
IsMulLeftInvariant (c • μ) :=
MeasureTheory.isMulLeftInvariant_smul (c : ℝ≥0∞)
#align measure_theory.is_mul_left_invariant_smul_nnreal MeasureTheory.isMulLeftInvariant_smul_nnreal
#align measure_theory.is_add_left_invariant_smul_nnreal MeasureTheory.isAddLeftInvariant_smul_nnreal
+-/
+#print MeasureTheory.isMulRightInvariant_smul_nnreal /-
@[to_additive MeasureTheory.isAddRightInvariant_smul_nnreal]
instance isMulRightInvariant_smul_nnreal [IsMulRightInvariant μ] (c : ℝ≥0) :
IsMulRightInvariant (c • μ) :=
MeasureTheory.isMulRightInvariant_smul (c : ℝ≥0∞)
#align measure_theory.is_mul_right_invariant_smul_nnreal MeasureTheory.isMulRightInvariant_smul_nnreal
#align measure_theory.is_add_right_invariant_smul_nnreal MeasureTheory.isAddRightInvariant_smul_nnreal
+-/
section MeasurableMul
@@ -147,6 +155,7 @@ theorem measurePreserving_mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g :
#align measure_theory.measure_preserving_add_left MeasureTheory.measurePreserving_add_left
-/
+#print MeasureTheory.MeasurePreserving.mul_left /-
@[to_additive]
theorem MeasurePreserving.mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) {X : Type _}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
@@ -154,6 +163,7 @@ theorem MeasurePreserving.mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g :
(measurePreserving_mul_left μ g).comp hf
#align measure_theory.measure_preserving.mul_left MeasureTheory.MeasurePreserving.mul_left
#align measure_theory.measure_preserving.add_left MeasureTheory.MeasurePreserving.add_left
+-/
#print MeasureTheory.measurePreserving_mul_right /-
@[to_additive]
@@ -164,6 +174,7 @@ theorem measurePreserving_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g
#align measure_theory.measure_preserving_add_right MeasureTheory.measurePreserving_add_right
-/
+#print MeasureTheory.MeasurePreserving.mul_right /-
@[to_additive]
theorem MeasurePreserving.mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) {X : Type _}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
@@ -171,6 +182,7 @@ theorem MeasurePreserving.mul_right (μ : Measure G) [IsMulRightInvariant μ] (g
(measurePreserving_mul_right μ g).comp hf
#align measure_theory.measure_preserving.mul_right MeasureTheory.MeasurePreserving.mul_right
#align measure_theory.measure_preserving.add_right MeasureTheory.MeasurePreserving.add_right
+-/
#print MeasureTheory.IsMulLeftInvariant.smulInvariantMeasure /-
@[to_additive]
@@ -190,12 +202,14 @@ instance IsMulRightInvariant.toSMulInvariantMeasure_op [μ.IsMulRightInvariant]
#align measure_theory.is_mul_right_invariant.to_vadd_invariant_measure_op MeasureTheory.IsMulRightInvariant.toVAddInvariantMeasure_op
-/
+#print MeasureTheory.Subgroup.smulInvariantMeasure /-
@[to_additive]
instance Subgroup.smulInvariantMeasure {G α : Type _} [Group G] [MulAction G α] [MeasurableSpace α]
{μ : Measure α} [SMulInvariantMeasure G α μ] (H : Subgroup G) : SMulInvariantMeasure H α μ :=
⟨fun y s hs => by convert smul_invariant_measure.measure_preimage_smul μ (y : G) hs⟩
#align measure_theory.subgroup.smul_invariant_measure MeasureTheory.Subgroup.smulInvariantMeasure
#align measure_theory.subgroup.vadd_invariant_measure MeasureTheory.Subgroup.vaddInvariantMeasure
+-/
#print MeasureTheory.forall_measure_preimage_mul_iff /-
/-- An alternative way to prove that `μ` is left invariant under multiplication. -/
@@ -279,11 +293,13 @@ section DivInvMonoid
variable [DivInvMonoid G]
+#print MeasureTheory.map_div_right_eq_self /-
@[to_additive]
theorem map_div_right_eq_self (μ : Measure G) [IsMulRightInvariant μ] (g : G) : map (· / g) μ = μ :=
by simp_rw [div_eq_mul_inv, map_mul_right_eq_self μ g⁻¹]
#align measure_theory.map_div_right_eq_self MeasureTheory.map_div_right_eq_self
#align measure_theory.map_sub_right_eq_self MeasureTheory.map_sub_right_eq_self
+-/
end DivInvMonoid
@@ -291,12 +307,15 @@ section Group
variable [Group G] [MeasurableMul G]
+#print MeasureTheory.measurePreserving_div_right /-
@[to_additive]
theorem measurePreserving_div_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
MeasurePreserving (· / g) μ μ := by simp_rw [div_eq_mul_inv, measure_preserving_mul_right μ g⁻¹]
#align measure_theory.measure_preserving_div_right MeasureTheory.measurePreserving_div_right
#align measure_theory.measure_preserving_sub_right MeasureTheory.measurePreserving_sub_right
+-/
+#print MeasureTheory.measure_preimage_mul /-
/-- We shorten this from `measure_preimage_mul_left`, since left invariant is the preferred option
for measures in this formalization. -/
@[simp,
@@ -310,7 +329,9 @@ theorem measure_preimage_mul (μ : Measure G) [IsMulLeftInvariant μ] (g : G) (A
_ = μ A := by rw [map_mul_left_eq_self μ g]
#align measure_theory.measure_preimage_mul MeasureTheory.measure_preimage_mul
#align measure_theory.measure_preimage_add MeasureTheory.measure_preimage_add
+-/
+#print MeasureTheory.measure_preimage_mul_right /-
@[simp, to_additive]
theorem measure_preimage_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) (A : Set G) :
μ ((fun h => h * g) ⁻¹' A) = μ A :=
@@ -320,48 +341,61 @@ theorem measure_preimage_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g
_ = μ A := by rw [map_mul_right_eq_self μ g]
#align measure_theory.measure_preimage_mul_right MeasureTheory.measure_preimage_mul_right
#align measure_theory.measure_preimage_add_right MeasureTheory.measure_preimage_add_right
+-/
+#print MeasureTheory.map_mul_left_ae /-
@[to_additive]
theorem map_mul_left_ae (μ : Measure G) [IsMulLeftInvariant μ] (x : G) :
Filter.map (fun h => x * h) μ.ae = μ.ae :=
((MeasurableEquiv.mulLeft x).map_ae μ).trans <| congr_arg ae <| map_mul_left_eq_self μ x
#align measure_theory.map_mul_left_ae MeasureTheory.map_mul_left_ae
#align measure_theory.map_add_left_ae MeasureTheory.map_add_left_ae
+-/
+#print MeasureTheory.map_mul_right_ae /-
@[to_additive]
theorem map_mul_right_ae (μ : Measure G) [IsMulRightInvariant μ] (x : G) :
Filter.map (fun h => h * x) μ.ae = μ.ae :=
((MeasurableEquiv.mulRight x).map_ae μ).trans <| congr_arg ae <| map_mul_right_eq_self μ x
#align measure_theory.map_mul_right_ae MeasureTheory.map_mul_right_ae
#align measure_theory.map_add_right_ae MeasureTheory.map_add_right_ae
+-/
+#print MeasureTheory.map_div_right_ae /-
@[to_additive]
theorem map_div_right_ae (μ : Measure G) [IsMulRightInvariant μ] (x : G) :
Filter.map (fun t => t / x) μ.ae = μ.ae :=
((MeasurableEquiv.divRight x).map_ae μ).trans <| congr_arg ae <| map_div_right_eq_self μ x
#align measure_theory.map_div_right_ae MeasureTheory.map_div_right_ae
#align measure_theory.map_sub_right_ae MeasureTheory.map_sub_right_ae
+-/
+#print MeasureTheory.eventually_mul_left_iff /-
@[to_additive]
theorem eventually_mul_left_iff (μ : Measure G) [IsMulLeftInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (t * x)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_mul_left_ae μ t]; rfl
#align measure_theory.eventually_mul_left_iff MeasureTheory.eventually_mul_left_iff
#align measure_theory.eventually_add_left_iff MeasureTheory.eventually_add_left_iff
+-/
+#print MeasureTheory.eventually_mul_right_iff /-
@[to_additive]
theorem eventually_mul_right_iff (μ : Measure G) [IsMulRightInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (x * t)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_mul_right_ae μ t]; rfl
#align measure_theory.eventually_mul_right_iff MeasureTheory.eventually_mul_right_iff
#align measure_theory.eventually_add_right_iff MeasureTheory.eventually_add_right_iff
+-/
+#print MeasureTheory.eventually_div_right_iff /-
@[to_additive]
theorem eventually_div_right_iff (μ : Measure G) [IsMulRightInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (x / t)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_div_right_ae μ t]; rfl
#align measure_theory.eventually_div_right_iff MeasureTheory.eventually_div_right_iff
#align measure_theory.eventually_sub_right_iff MeasureTheory.eventually_sub_right_iff
+-/
end Group
@@ -430,30 +464,38 @@ section InvolutiveInv
variable [InvolutiveInv G] [MeasurableInv G]
+#print MeasureTheory.Measure.inv_apply /-
@[simp, to_additive]
theorem inv_apply (μ : Measure G) (s : Set G) : μ.inv s = μ s⁻¹ :=
(MeasurableEquiv.inv G).map_apply s
#align measure_theory.measure.inv_apply MeasureTheory.Measure.inv_apply
#align measure_theory.measure.neg_apply MeasureTheory.Measure.neg_apply
+-/
+#print MeasureTheory.Measure.inv_inv /-
@[simp, to_additive]
protected theorem inv_inv (μ : Measure G) : μ.inv.inv = μ :=
(MeasurableEquiv.inv G).map_symm_map
#align measure_theory.measure.inv_inv MeasureTheory.Measure.inv_inv
#align measure_theory.measure.neg_neg MeasureTheory.Measure.neg_neg
+-/
+#print MeasureTheory.Measure.measure_inv /-
@[simp, to_additive]
theorem measure_inv (μ : Measure G) [IsInvInvariant μ] (A : Set G) : μ A⁻¹ = μ A := by
rw [← inv_apply, inv_eq_self]
#align measure_theory.measure.measure_inv MeasureTheory.Measure.measure_inv
#align measure_theory.measure.measure_neg MeasureTheory.Measure.measure_neg
+-/
+#print MeasureTheory.Measure.measure_preimage_inv /-
@[to_additive]
theorem measure_preimage_inv (μ : Measure G) [IsInvInvariant μ] (A : Set G) :
μ (Inv.inv ⁻¹' A) = μ A :=
μ.measure_inv A
#align measure_theory.measure.measure_preimage_inv MeasureTheory.Measure.measure_preimage_inv
#align measure_theory.measure.measure_preimage_neg MeasureTheory.Measure.measure_preimage_neg
+-/
@[to_additive]
instance (μ : Measure G) [SigmaFinite μ] : SigmaFinite μ.inv :=
@@ -483,6 +525,7 @@ instance [IsMulRightInvariant μ] : IsMulLeftInvariant μ.inv :=
simp_rw [measure.inv, map_map (measurable_const_mul g) measurable_inv,
map_map measurable_inv (measurable_mul_const g⁻¹), Function.comp, mul_inv_rev, inv_inv]
+#print MeasureTheory.Measure.measurePreserving_div_left /-
@[to_additive]
theorem measurePreserving_div_left (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
(g : G) : MeasurePreserving (fun t => g / t) μ μ :=
@@ -491,27 +534,34 @@ theorem measurePreserving_div_left (μ : Measure G) [IsInvInvariant μ] [IsMulLe
exact (measure_preserving_mul_left μ g).comp (measure_preserving_inv μ)
#align measure_theory.measure.measure_preserving_div_left MeasureTheory.Measure.measurePreserving_div_left
#align measure_theory.measure.measure_preserving_sub_left MeasureTheory.Measure.measurePreserving_sub_left
+-/
+#print MeasureTheory.Measure.map_div_left_eq_self /-
@[to_additive]
theorem map_div_left_eq_self (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ] (g : G) :
map (fun t => g / t) μ = μ :=
(measurePreserving_div_left μ g).map_eq
#align measure_theory.measure.map_div_left_eq_self MeasureTheory.Measure.map_div_left_eq_self
#align measure_theory.measure.map_sub_left_eq_self MeasureTheory.Measure.map_sub_left_eq_self
+-/
+#print MeasureTheory.Measure.measurePreserving_mul_right_inv /-
@[to_additive]
theorem measurePreserving_mul_right_inv (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
(g : G) : MeasurePreserving (fun t => (g * t)⁻¹) μ μ :=
(measurePreserving_inv μ).comp <| measurePreserving_mul_left μ g
#align measure_theory.measure.measure_preserving_mul_right_inv MeasureTheory.Measure.measurePreserving_mul_right_inv
#align measure_theory.measure.measure_preserving_add_right_neg MeasureTheory.Measure.measurePreserving_add_right_neg
+-/
+#print MeasureTheory.Measure.map_mul_right_inv_eq_self /-
@[to_additive]
theorem map_mul_right_inv_eq_self (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
(g : G) : map (fun t => (g * t)⁻¹) μ = μ :=
(measurePreserving_mul_right_inv μ g).map_eq
#align measure_theory.measure.map_mul_right_inv_eq_self MeasureTheory.Measure.map_mul_right_inv_eq_self
#align measure_theory.measure.map_add_right_neg_eq_self MeasureTheory.Measure.map_add_right_neg_eq_self
+-/
end DivisionMonoid
@@ -519,12 +569,14 @@ section Group
variable [Group G] [MeasurableMul G] [MeasurableInv G] {μ : Measure G}
+#print MeasureTheory.Measure.map_div_left_ae /-
@[to_additive]
theorem map_div_left_ae (μ : Measure G) [IsMulLeftInvariant μ] [IsInvInvariant μ] (x : G) :
Filter.map (fun t => x / t) μ.ae = μ.ae :=
((MeasurableEquiv.divLeft x).map_ae μ).trans <| congr_arg ae <| map_div_left_eq_self μ x
#align measure_theory.measure.map_div_left_ae MeasureTheory.Measure.map_div_left_ae
#align measure_theory.measure.map_sub_left_ae MeasureTheory.Measure.map_sub_left_ae
+-/
end Group
@@ -534,14 +586,17 @@ section TopologicalGroup
variable [TopologicalSpace G] [BorelSpace G] {μ : Measure G} [Group G]
+#print MeasureTheory.Measure.Regular.inv /-
@[to_additive]
instance Measure.Regular.inv [ContinuousInv G] [T2Space G] [Regular μ] : Regular μ.inv :=
Regular.map (Homeomorph.inv G)
#align measure_theory.measure.regular.inv MeasureTheory.Measure.Regular.inv
#align measure_theory.measure.regular.neg MeasureTheory.Measure.Regular.neg
+-/
variable [TopologicalGroup G]
+#print MeasureTheory.regular_inv_iff /-
@[to_additive]
theorem regular_inv_iff [T2Space G] : μ.inv.regular ↔ μ.regular :=
by
@@ -550,9 +605,11 @@ theorem regular_inv_iff [T2Space G] : μ.inv.regular ↔ μ.regular :=
· intro h; exact measure.regular.inv
#align measure_theory.regular_inv_iff MeasureTheory.regular_inv_iff
#align measure_theory.regular_neg_iff MeasureTheory.regular_neg_iff
+-/
variable [IsMulLeftInvariant μ]
+#print MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_compact /-
/-- If a left-invariant measure gives positive mass to a compact set, then it gives positive mass to
any open set. -/
@[to_additive
@@ -572,7 +629,9 @@ theorem isOpenPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsComp
_ = 0 := by simp [measure_preimage_mul, h]
#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_compact
#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_addLeftInvariant_of_compact
+-/
+#print MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_regular /-
/-- A nonzero left-invariant regular measure gives positive mass to any open set. -/
@[to_additive "A nonzero left-invariant regular measure gives positive mass to any open set."]
theorem isOpenPosMeasure_of_mulLeftInvariant_of_regular [Regular μ] (h₀ : μ ≠ 0) :
@@ -581,7 +640,9 @@ theorem isOpenPosMeasure_of_mulLeftInvariant_of_regular [Regular μ] (h₀ : μ
isOpenPosMeasure_of_mulLeftInvariant_of_compact K hK h2K
#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_regular
#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_addLeftInvariant_of_regular
+-/
+#print MeasureTheory.null_iff_of_isMulLeftInvariant /-
@[to_additive]
theorem null_iff_of_isMulLeftInvariant [Regular μ] {s : Set G} (hs : IsOpen s) :
μ s = 0 ↔ s = ∅ ∨ μ = 0 := by
@@ -590,21 +651,27 @@ theorem null_iff_of_isMulLeftInvariant [Regular μ] {s : Set G} (hs : IsOpen s)
simp only [h3μ, or_false_iff, hs.measure_eq_zero_iff μ]
#align measure_theory.null_iff_of_is_mul_left_invariant MeasureTheory.null_iff_of_isMulLeftInvariant
#align measure_theory.null_iff_of_is_add_left_invariant MeasureTheory.null_iff_of_isAddLeftInvariant
+-/
+#print MeasureTheory.measure_ne_zero_iff_nonempty_of_isMulLeftInvariant /-
@[to_additive]
theorem measure_ne_zero_iff_nonempty_of_isMulLeftInvariant [Regular μ] (hμ : μ ≠ 0) {s : Set G}
(hs : IsOpen s) : μ s ≠ 0 ↔ s.Nonempty := by
simpa [null_iff_of_is_mul_left_invariant hs, hμ] using nonempty_iff_ne_empty.symm
#align measure_theory.measure_ne_zero_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_isMulLeftInvariant
#align measure_theory.measure_ne_zero_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_isAddLeftInvariant
+-/
+#print MeasureTheory.measure_pos_iff_nonempty_of_isMulLeftInvariant /-
@[to_additive]
theorem measure_pos_iff_nonempty_of_isMulLeftInvariant [Regular μ] (h3μ : μ ≠ 0) {s : Set G}
(hs : IsOpen s) : 0 < μ s ↔ s.Nonempty :=
pos_iff_ne_zero.trans <| measure_ne_zero_iff_nonempty_of_isMulLeftInvariant h3μ hs
#align measure_theory.measure_pos_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_isMulLeftInvariant
#align measure_theory.measure_pos_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_isAddLeftInvariant
+-/
+#print MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant /-
/-- If a left-invariant measure gives finite mass to a nonempty open set, then it gives finite mass
to any compact set. -/
@[to_additive
@@ -622,7 +689,9 @@ theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOp
_ < ∞ := ENNReal.mul_lt_top (ENNReal.nat_ne_top _) h
#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant
#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isAddLeftInvariant
+-/
+#print MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant' /-
/-- If a left-invariant measure gives finite mass to a set with nonempty interior, then
it gives finite mass to any compact set. -/
@[to_additive
@@ -633,7 +702,9 @@ theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant' {U : Set G} (hU : (in
((measure_mono interior_subset).trans_lt (lt_top_iff_ne_top.2 h)).Ne hK
#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant'
#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_isAddLeftInvariant'
+-/
+#print MeasureTheory.measure_univ_of_isMulLeftInvariant /-
/-- In a noncompact locally compact group, a left-invariant measure which is positive
on open sets has infinite mass. -/
@[simp,
@@ -690,6 +761,7 @@ theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSp
exact le_of_tendsto' N fun n => measure_mono (subset_univ _)
#align measure_theory.measure_univ_of_is_mul_left_invariant MeasureTheory.measure_univ_of_isMulLeftInvariant
#align measure_theory.measure_univ_of_is_add_left_invariant MeasureTheory.measure_univ_of_isAddLeftInvariant
+-/
end TopologicalGroup
@@ -697,6 +769,7 @@ section CommSemigroup
variable [CommSemigroup G]
+#print MeasureTheory.IsMulLeftInvariant.isMulRightInvariant /-
/-- In an abelian group every left invariant measure is also right-invariant.
We don't declare the converse as an instance, since that would loop type-class inference, and
we use `is_mul_left_invariant` as the default hypothesis in abelian groups. -/
@@ -707,6 +780,7 @@ instance (priority := 100) IsMulLeftInvariant.isMulRightInvariant {μ : Measure
⟨fun g => by simp_rw [mul_comm, map_mul_left_eq_self]⟩
#align measure_theory.is_mul_left_invariant.is_mul_right_invariant MeasureTheory.IsMulLeftInvariant.isMulRightInvariant
#align is_add_left_invariant.is_add_right_invariant MeasureTheory.IsAddLeftInvariant.isAddRightInvariant
+-/
end CommSemigroup
@@ -754,6 +828,7 @@ section
variable [Group G] [TopologicalSpace G] (μ : Measure G) [IsHaarMeasure μ]
+#print MeasureTheory.Measure.haar_singleton /-
@[simp, to_additive]
theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ {(1 : G)} :=
by
@@ -761,14 +836,18 @@ theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ
simp only [mul_one, preimage_mul_left_singleton, inv_inv]
#align measure_theory.measure.haar_singleton MeasureTheory.Measure.haar_singleton
#align measure_theory.measure.add_haar_singleton MeasureTheory.Measure.addHaar_singleton
+-/
+#print MeasureTheory.Measure.IsHaarMeasure.smul /-
@[to_additive MeasureTheory.Measure.IsAddHaarMeasure.smul]
theorem IsHaarMeasure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞) : IsHaarMeasure (c • μ) :=
{ lt_top_of_isCompact := fun K hK => ENNReal.mul_lt_top Ctop hK.measure_lt_top.Ne
to_isOpenPosMeasure := isOpenPosMeasure_smul μ cpos }
#align measure_theory.measure.is_haar_measure.smul MeasureTheory.Measure.IsHaarMeasure.smul
#align measure_theory.measure.is_add_haar_measure.smul MeasureTheory.Measure.IsAddHaarMeasure.smul
+-/
+#print MeasureTheory.Measure.isHaarMeasure_of_isCompact_nonempty_interior /-
/-- If a left-invariant measure gives positive mass to some compact set with nonempty interior, then
it is a Haar measure. -/
@[to_additive
@@ -780,7 +859,9 @@ theorem isHaarMeasure_of_isCompact_nonempty_interior [TopologicalGroup G] [Borel
to_isOpenPosMeasure := isOpenPosMeasure_of_mulLeftInvariant_of_compact K hK h }
#align measure_theory.measure.is_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.isHaarMeasure_of_isCompact_nonempty_interior
#align measure_theory.measure.is_add_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.isAddHaarMeasure_of_isCompact_nonempty_interior
+-/
+#print MeasureTheory.Measure.isHaarMeasure_map /-
/-- The image of a Haar measure under a continuous surjective proper group homomorphism is again
a Haar measure. See also `mul_equiv.is_haar_measure_map`. -/
@[to_additive
@@ -797,7 +878,9 @@ theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Grou
to_isOpenPosMeasure := hf.isOpenPosMeasure_map h_surj }
#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.isHaarMeasure_map
#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.isAddHaarMeasure_map
+-/
+#print MulEquiv.isHaarMeasure_map /-
/-- A convenience wrapper for `measure_theory.measure.is_haar_measure_map`. -/
@[to_additive "A convenience wrapper for `measure_theory.measure.is_add_haar_measure_map`."]
theorem MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
@@ -808,6 +891,7 @@ theorem MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type
({ e with } : G ≃ₜ H).toCocompactMap.cocompact_tendsto'
#align mul_equiv.is_haar_measure_map MulEquiv.isHaarMeasure_map
#align add_equiv.is_add_haar_measure_map AddEquiv.isAddHaarMeasure_map
+-/
#print MeasureTheory.Measure.IsHaarMeasure.sigmaFinite /-
/-- A Haar measure on a σ-compact space is σ-finite.
@@ -830,6 +914,7 @@ instance {G : Type _} [Group G] [TopologicalSpace G] {mG : MeasurableSpace G} {H
[IsHaarMeasure ν] [SigmaFinite μ] [SigmaFinite ν] [MeasurableMul G] [MeasurableMul H] :
IsHaarMeasure (μ.Prod ν) where
+#print MeasureTheory.Measure.IsHaarMeasure.noAtoms /-
/-- If the neutral element of a group is not isolated, then a Haar measure on this group has
no atoms.
@@ -870,6 +955,7 @@ instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpac
exact ge_of_tendsto' J I
#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.noAtoms
#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.noAtoms
+-/
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/7e5137f579de09a059a5ce98f364a04e221aabf0
@@ -308,7 +308,6 @@ theorem measure_preimage_mul (μ : Measure G) [IsMulLeftInvariant μ] (g : G) (A
μ ((fun h => g * h) ⁻¹' A) = map (fun h => g * h) μ A :=
((MeasurableEquiv.mulLeft g).map_apply A).symm
_ = μ A := by rw [map_mul_left_eq_self μ g]
-
#align measure_theory.measure_preimage_mul MeasureTheory.measure_preimage_mul
#align measure_theory.measure_preimage_add MeasureTheory.measure_preimage_add
@@ -319,7 +318,6 @@ theorem measure_preimage_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g
μ ((fun h => h * g) ⁻¹' A) = map (fun h => h * g) μ A :=
((MeasurableEquiv.mulRight g).map_apply A).symm
_ = μ A := by rw [map_mul_right_eq_self μ g]
-
#align measure_theory.measure_preimage_mul_right MeasureTheory.measure_preimage_mul_right
#align measure_theory.measure_preimage_add_right MeasureTheory.measure_preimage_add_right
@@ -572,7 +570,6 @@ theorem isOpenPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsComp
μ K ≤ μ (⋃ (g : G) (H : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_bUnion_finset_le _ _)
_ = 0 := by simp [measure_preimage_mul, h]
-
#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_compact
#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_addLeftInvariant_of_compact
@@ -623,7 +620,6 @@ theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOp
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_bUnion_finset_le _ _)
_ = Finset.card t * μ U := by simp only [measure_preimage_mul, Finset.sum_const, nsmul_eq_mul]
_ < ∞ := ENNReal.mul_lt_top (ENNReal.nat_ne_top _) h
-
#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant
#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isAddLeftInvariant
@@ -684,7 +680,6 @@ theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSp
exact measure_union' (hg _ (Lcompact _)) (Lclosed _).MeasurableSet
_ = (n + 1 + 1 : ℕ) * μ K := by
simp only [IH, measure_smul, add_mul, Nat.cast_add, algebraMap.coe_one, one_mul]
-
have N : tendsto (fun n => μ (L n)) at_top (𝓝 (∞ * μ K)) :=
by
simp_rw [M]
mathlib commit https://github.com/leanprover-community/mathlib/commit/5f25c089cb34db4db112556f23c50d12da81b297
@@ -46,40 +46,40 @@ namespace MeasureTheory
namespace Measure
-#print MeasureTheory.Measure.AddLeftInvariant /-
+#print MeasureTheory.Measure.IsAddLeftInvariant /-
/-- A measure `μ` on a measurable additive group is left invariant
if the measure of left translations of a set are equal to the measure of the set itself. -/
-class AddLeftInvariant [Add G] (μ : Measure G) : Prop where
+class IsAddLeftInvariant [Add G] (μ : Measure G) : Prop where
map_add_left_eq_self : ∀ g : G, map ((· + ·) g) μ = μ
-#align measure_theory.measure.is_add_left_invariant MeasureTheory.Measure.AddLeftInvariant
+#align measure_theory.measure.is_add_left_invariant MeasureTheory.Measure.IsAddLeftInvariant
-/
-#print MeasureTheory.Measure.MulLeftInvariant /-
+#print MeasureTheory.Measure.IsMulLeftInvariant /-
/-- A measure `μ` on a measurable group is left invariant
if the measure of left translations of a set are equal to the measure of the set itself. -/
@[to_additive]
-class MulLeftInvariant [Mul G] (μ : Measure G) : Prop where
+class IsMulLeftInvariant [Mul G] (μ : Measure G) : Prop where
map_mul_left_eq_self : ∀ g : G, map ((· * ·) g) μ = μ
-#align measure_theory.measure.is_mul_left_invariant MeasureTheory.Measure.MulLeftInvariant
-#align measure_theory.measure.is_add_left_invariant MeasureTheory.Measure.AddLeftInvariant
+#align measure_theory.measure.is_mul_left_invariant MeasureTheory.Measure.IsMulLeftInvariant
+#align measure_theory.measure.is_add_left_invariant MeasureTheory.Measure.IsAddLeftInvariant
-/
-#print MeasureTheory.Measure.AddRightInvariant /-
+#print MeasureTheory.Measure.IsAddRightInvariant /-
/-- A measure `μ` on a measurable additive group is right invariant
if the measure of right translations of a set are equal to the measure of the set itself. -/
-class AddRightInvariant [Add G] (μ : Measure G) : Prop where
+class IsAddRightInvariant [Add G] (μ : Measure G) : Prop where
map_add_right_eq_self : ∀ g : G, map (· + g) μ = μ
-#align measure_theory.measure.is_add_right_invariant MeasureTheory.Measure.AddRightInvariant
+#align measure_theory.measure.is_add_right_invariant MeasureTheory.Measure.IsAddRightInvariant
-/
-#print MeasureTheory.Measure.MulRightInvariant /-
+#print MeasureTheory.Measure.IsMulRightInvariant /-
/-- A measure `μ` on a measurable group is right invariant
if the measure of right translations of a set are equal to the measure of the set itself. -/
@[to_additive]
-class MulRightInvariant [Mul G] (μ : Measure G) : Prop where
+class IsMulRightInvariant [Mul G] (μ : Measure G) : Prop where
map_mul_right_eq_self : ∀ g : G, map (· * g) μ = μ
-#align measure_theory.measure.is_mul_right_invariant MeasureTheory.Measure.MulRightInvariant
-#align measure_theory.measure.is_add_right_invariant MeasureTheory.Measure.AddRightInvariant
+#align measure_theory.measure.is_mul_right_invariant MeasureTheory.Measure.IsMulRightInvariant
+#align measure_theory.measure.is_add_right_invariant MeasureTheory.Measure.IsAddRightInvariant
-/
end Measure
@@ -92,44 +92,47 @@ variable [Mul G] {μ : Measure G}
#print MeasureTheory.map_mul_left_eq_self /-
@[to_additive]
-theorem map_mul_left_eq_self (μ : Measure G) [MulLeftInvariant μ] (g : G) : map ((· * ·) g) μ = μ :=
- MulLeftInvariant.map_mul_left_eq_self g
+theorem map_mul_left_eq_self (μ : Measure G) [IsMulLeftInvariant μ] (g : G) :
+ map ((· * ·) g) μ = μ :=
+ IsMulLeftInvariant.map_mul_left_eq_self g
#align measure_theory.map_mul_left_eq_self MeasureTheory.map_mul_left_eq_self
#align measure_theory.map_add_left_eq_self MeasureTheory.map_add_left_eq_self
-/
#print MeasureTheory.map_mul_right_eq_self /-
@[to_additive]
-theorem map_mul_right_eq_self (μ : Measure G) [MulRightInvariant μ] (g : G) : map (· * g) μ = μ :=
- MulRightInvariant.map_mul_right_eq_self g
+theorem map_mul_right_eq_self (μ : Measure G) [IsMulRightInvariant μ] (g : G) : map (· * g) μ = μ :=
+ IsMulRightInvariant.map_mul_right_eq_self g
#align measure_theory.map_mul_right_eq_self MeasureTheory.map_mul_right_eq_self
#align measure_theory.map_add_right_eq_self MeasureTheory.map_add_right_eq_self
-/
-@[to_additive MeasureTheory.addLeftInvariant_smul]
-instance mulLeftInvariant_smul [MulLeftInvariant μ] (c : ℝ≥0∞) : MulLeftInvariant (c • μ) :=
+@[to_additive MeasureTheory.isAddLeftInvariant_smul]
+instance isMulLeftInvariant_smul [IsMulLeftInvariant μ] (c : ℝ≥0∞) : IsMulLeftInvariant (c • μ) :=
⟨fun g => by rw [measure.map_smul, map_mul_left_eq_self]⟩
-#align measure_theory.is_mul_left_invariant_smul MeasureTheory.mulLeftInvariant_smul
-#align measure_theory.is_add_left_invariant_smul MeasureTheory.addLeftInvariant_smul
+#align measure_theory.is_mul_left_invariant_smul MeasureTheory.isMulLeftInvariant_smul
+#align measure_theory.is_add_left_invariant_smul MeasureTheory.isAddLeftInvariant_smul
-@[to_additive MeasureTheory.addRightInvariant_smul]
-instance mulRightInvariant_smul [MulRightInvariant μ] (c : ℝ≥0∞) : MulRightInvariant (c • μ) :=
+@[to_additive MeasureTheory.isAddRightInvariant_smul]
+instance isMulRightInvariant_smul [IsMulRightInvariant μ] (c : ℝ≥0∞) :
+ IsMulRightInvariant (c • μ) :=
⟨fun g => by rw [measure.map_smul, map_mul_right_eq_self]⟩
-#align measure_theory.is_mul_right_invariant_smul MeasureTheory.mulRightInvariant_smul
-#align measure_theory.is_add_right_invariant_smul MeasureTheory.addRightInvariant_smul
-
-@[to_additive MeasureTheory.addLeftInvariant_smul_nnreal]
-instance mulLeftInvariant_smul_nnreal [MulLeftInvariant μ] (c : ℝ≥0) : MulLeftInvariant (c • μ) :=
- MeasureTheory.mulLeftInvariant_smul (c : ℝ≥0∞)
-#align measure_theory.is_mul_left_invariant_smul_nnreal MeasureTheory.mulLeftInvariant_smul_nnreal
-#align measure_theory.is_add_left_invariant_smul_nnreal MeasureTheory.addLeftInvariant_smul_nnreal
-
-@[to_additive MeasureTheory.addRightInvariant_smul_nnreal]
-instance mulRightInvariant_smul_nnreal [MulRightInvariant μ] (c : ℝ≥0) :
- MulRightInvariant (c • μ) :=
- MeasureTheory.mulRightInvariant_smul (c : ℝ≥0∞)
-#align measure_theory.is_mul_right_invariant_smul_nnreal MeasureTheory.mulRightInvariant_smul_nnreal
-#align measure_theory.is_add_right_invariant_smul_nnreal MeasureTheory.addRightInvariant_smul_nnreal
+#align measure_theory.is_mul_right_invariant_smul MeasureTheory.isMulRightInvariant_smul
+#align measure_theory.is_add_right_invariant_smul MeasureTheory.isAddRightInvariant_smul
+
+@[to_additive MeasureTheory.isAddLeftInvariant_smul_nnreal]
+instance isMulLeftInvariant_smul_nnreal [IsMulLeftInvariant μ] (c : ℝ≥0) :
+ IsMulLeftInvariant (c • μ) :=
+ MeasureTheory.isMulLeftInvariant_smul (c : ℝ≥0∞)
+#align measure_theory.is_mul_left_invariant_smul_nnreal MeasureTheory.isMulLeftInvariant_smul_nnreal
+#align measure_theory.is_add_left_invariant_smul_nnreal MeasureTheory.isAddLeftInvariant_smul_nnreal
+
+@[to_additive MeasureTheory.isAddRightInvariant_smul_nnreal]
+instance isMulRightInvariant_smul_nnreal [IsMulRightInvariant μ] (c : ℝ≥0) :
+ IsMulRightInvariant (c • μ) :=
+ MeasureTheory.isMulRightInvariant_smul (c : ℝ≥0∞)
+#align measure_theory.is_mul_right_invariant_smul_nnreal MeasureTheory.isMulRightInvariant_smul_nnreal
+#align measure_theory.is_add_right_invariant_smul_nnreal MeasureTheory.isAddRightInvariant_smul_nnreal
section MeasurableMul
@@ -137,7 +140,7 @@ variable [MeasurableMul G]
#print MeasureTheory.measurePreserving_mul_left /-
@[to_additive]
-theorem measurePreserving_mul_left (μ : Measure G) [MulLeftInvariant μ] (g : G) :
+theorem measurePreserving_mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) :
MeasurePreserving ((· * ·) g) μ μ :=
⟨measurable_const_mul g, map_mul_left_eq_self μ g⟩
#align measure_theory.measure_preserving_mul_left MeasureTheory.measurePreserving_mul_left
@@ -145,7 +148,7 @@ theorem measurePreserving_mul_left (μ : Measure G) [MulLeftInvariant μ] (g : G
-/
@[to_additive]
-theorem MeasurePreserving.mul_left (μ : Measure G) [MulLeftInvariant μ] (g : G) {X : Type _}
+theorem MeasurePreserving.mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) {X : Type _}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
MeasurePreserving (fun x => g * f x) μ' μ :=
(measurePreserving_mul_left μ g).comp hf
@@ -154,7 +157,7 @@ theorem MeasurePreserving.mul_left (μ : Measure G) [MulLeftInvariant μ] (g : G
#print MeasureTheory.measurePreserving_mul_right /-
@[to_additive]
-theorem measurePreserving_mul_right (μ : Measure G) [MulRightInvariant μ] (g : G) :
+theorem measurePreserving_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
MeasurePreserving (· * g) μ μ :=
⟨measurable_mul_const g, map_mul_right_eq_self μ g⟩
#align measure_theory.measure_preserving_mul_right MeasureTheory.measurePreserving_mul_right
@@ -162,28 +165,29 @@ theorem measurePreserving_mul_right (μ : Measure G) [MulRightInvariant μ] (g :
-/
@[to_additive]
-theorem MeasurePreserving.mul_right (μ : Measure G) [MulRightInvariant μ] (g : G) {X : Type _}
+theorem MeasurePreserving.mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) {X : Type _}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
MeasurePreserving (fun x => f x * g) μ' μ :=
(measurePreserving_mul_right μ g).comp hf
#align measure_theory.measure_preserving.mul_right MeasureTheory.MeasurePreserving.mul_right
#align measure_theory.measure_preserving.add_right MeasureTheory.MeasurePreserving.add_right
-#print MeasureTheory.MulLeftInvariant.smulInvariantMeasure /-
+#print MeasureTheory.IsMulLeftInvariant.smulInvariantMeasure /-
@[to_additive]
-instance MulLeftInvariant.smulInvariantMeasure [MulLeftInvariant μ] : SMulInvariantMeasure G G μ :=
+instance IsMulLeftInvariant.smulInvariantMeasure [IsMulLeftInvariant μ] :
+ SMulInvariantMeasure G G μ :=
⟨fun x s hs => (measurePreserving_mul_left μ x).measure_preimage hs⟩
-#align measure_theory.is_mul_left_invariant.smul_invariant_measure MeasureTheory.MulLeftInvariant.smulInvariantMeasure
-#align measure_theory.is_mul_left_invariant.vadd_invariant_measure MeasureTheory.MulLeftInvariant.vaddInvariantMeasure
+#align measure_theory.is_mul_left_invariant.smul_invariant_measure MeasureTheory.IsMulLeftInvariant.smulInvariantMeasure
+#align measure_theory.is_mul_left_invariant.vadd_invariant_measure MeasureTheory.IsMulLeftInvariant.vaddInvariantMeasure
-/
-#print MeasureTheory.MulRightInvariant.toSMulInvariantMeasure_op /-
+#print MeasureTheory.IsMulRightInvariant.toSMulInvariantMeasure_op /-
@[to_additive]
-instance MulRightInvariant.toSMulInvariantMeasure_op [μ.MulRightInvariant] :
+instance IsMulRightInvariant.toSMulInvariantMeasure_op [μ.IsMulRightInvariant] :
SMulInvariantMeasure Gᵐᵒᵖ G μ :=
⟨fun x s hs => (measurePreserving_mul_right μ (MulOpposite.unop x)).measure_preimage hs⟩
-#align measure_theory.is_mul_right_invariant.to_smul_invariant_measure_op MeasureTheory.MulRightInvariant.toSMulInvariantMeasure_op
-#align measure_theory.is_mul_right_invariant.to_vadd_invariant_measure_op MeasureTheory.MulRightInvariant.toVAddInvariantMeasure_op
+#align measure_theory.is_mul_right_invariant.to_smul_invariant_measure_op MeasureTheory.IsMulRightInvariant.toSMulInvariantMeasure_op
+#align measure_theory.is_mul_right_invariant.to_vadd_invariant_measure_op MeasureTheory.IsMulRightInvariant.toVAddInvariantMeasure_op
-/
@[to_additive]
@@ -198,7 +202,7 @@ instance Subgroup.smulInvariantMeasure {G α : Type _} [Group G] [MulAction G α
@[to_additive " An alternative way to prove that `μ` is left invariant under addition. "]
theorem forall_measure_preimage_mul_iff (μ : Measure G) :
(∀ (g : G) (A : Set G), MeasurableSet A → μ ((fun h => g * h) ⁻¹' A) = μ A) ↔
- MulLeftInvariant μ :=
+ IsMulLeftInvariant μ :=
by
trans ∀ g, map ((· * ·) g) μ = μ
· simp_rw [measure.ext_iff]
@@ -214,7 +218,7 @@ theorem forall_measure_preimage_mul_iff (μ : Measure G) :
@[to_additive " An alternative way to prove that `μ` is right invariant under addition. "]
theorem forall_measure_preimage_mul_right_iff (μ : Measure G) :
(∀ (g : G) (A : Set G), MeasurableSet A → μ ((fun h => h * g) ⁻¹' A) = μ A) ↔
- MulRightInvariant μ :=
+ IsMulRightInvariant μ :=
by
trans ∀ g, map (· * g) μ = μ
· simp_rw [measure.ext_iff]
@@ -226,9 +230,9 @@ theorem forall_measure_preimage_mul_right_iff (μ : Measure G) :
-/
@[to_additive]
-instance [MulLeftInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : MeasurableSpace H}
- {ν : Measure H} [MeasurableMul H] [MulLeftInvariant ν] [SigmaFinite ν] :
- MulLeftInvariant (μ.Prod ν) := by
+instance [IsMulLeftInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : MeasurableSpace H}
+ {ν : Measure H} [MeasurableMul H] [IsMulLeftInvariant ν] [SigmaFinite ν] :
+ IsMulLeftInvariant (μ.Prod ν) := by
constructor
rintro ⟨g, h⟩
change map (Prod.map ((· * ·) g) ((· * ·) h)) (μ.prod ν) = μ.prod ν
@@ -238,9 +242,9 @@ instance [MulLeftInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : Measu
· rw [map_mul_left_eq_self ν h]; infer_instance
@[to_additive]
-instance [MulRightInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : MeasurableSpace H}
- {ν : Measure H} [MeasurableMul H] [MulRightInvariant ν] [SigmaFinite ν] :
- MulRightInvariant (μ.Prod ν) := by
+instance [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : MeasurableSpace H}
+ {ν : Measure H} [MeasurableMul H] [IsMulRightInvariant ν] [SigmaFinite ν] :
+ IsMulRightInvariant (μ.Prod ν) := by
constructor
rintro ⟨g, h⟩
change map (Prod.map (· * g) (· * h)) (μ.prod ν) = μ.prod ν
@@ -249,11 +253,11 @@ instance [MulRightInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : Meas
· rw [map_mul_right_eq_self μ g]; infer_instance
· rw [map_mul_right_eq_self ν h]; infer_instance
-#print MeasureTheory.mulLeftInvariant_map /-
+#print MeasureTheory.isMulLeftInvariant_map /-
@[to_additive]
-theorem mulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [MeasurableMul H]
- [MulLeftInvariant μ] (f : G →ₙ* H) (hf : Measurable f) (h_surj : Surjective f) :
- MulLeftInvariant (Measure.map f μ) :=
+theorem isMulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [MeasurableMul H]
+ [IsMulLeftInvariant μ] (f : G →ₙ* H) (hf : Measurable f) (h_surj : Surjective f) :
+ IsMulLeftInvariant (Measure.map f μ) :=
by
refine' ⟨fun h => _⟩
rw [map_map (measurable_const_mul _) hf]
@@ -263,8 +267,8 @@ theorem mulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [Measurabl
congr 2
ext y
simp only [comp_app, map_mul]
-#align measure_theory.is_mul_left_invariant_map MeasureTheory.mulLeftInvariant_map
-#align measure_theory.is_add_left_invariant_map MeasureTheory.addLeftInvariant_map
+#align measure_theory.is_mul_left_invariant_map MeasureTheory.isMulLeftInvariant_map
+#align measure_theory.is_add_left_invariant_map MeasureTheory.isAddLeftInvariant_map
-/
end MeasurableMul
@@ -276,7 +280,7 @@ section DivInvMonoid
variable [DivInvMonoid G]
@[to_additive]
-theorem map_div_right_eq_self (μ : Measure G) [MulRightInvariant μ] (g : G) : map (· / g) μ = μ :=
+theorem map_div_right_eq_self (μ : Measure G) [IsMulRightInvariant μ] (g : G) : map (· / g) μ = μ :=
by simp_rw [div_eq_mul_inv, map_mul_right_eq_self μ g⁻¹]
#align measure_theory.map_div_right_eq_self MeasureTheory.map_div_right_eq_self
#align measure_theory.map_sub_right_eq_self MeasureTheory.map_sub_right_eq_self
@@ -288,7 +292,7 @@ section Group
variable [Group G] [MeasurableMul G]
@[to_additive]
-theorem measurePreserving_div_right (μ : Measure G) [MulRightInvariant μ] (g : G) :
+theorem measurePreserving_div_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
MeasurePreserving (· / g) μ μ := by simp_rw [div_eq_mul_inv, measure_preserving_mul_right μ g⁻¹]
#align measure_theory.measure_preserving_div_right MeasureTheory.measurePreserving_div_right
#align measure_theory.measure_preserving_sub_right MeasureTheory.measurePreserving_sub_right
@@ -298,7 +302,7 @@ theorem measurePreserving_div_right (μ : Measure G) [MulRightInvariant μ] (g :
@[simp,
to_additive
"We shorten this from `measure_preimage_add_left`, since left invariant is the\npreferred option for measures in this formalization."]
-theorem measure_preimage_mul (μ : Measure G) [MulLeftInvariant μ] (g : G) (A : Set G) :
+theorem measure_preimage_mul (μ : Measure G) [IsMulLeftInvariant μ] (g : G) (A : Set G) :
μ ((fun h => g * h) ⁻¹' A) = μ A :=
calc
μ ((fun h => g * h) ⁻¹' A) = map (fun h => g * h) μ A :=
@@ -309,7 +313,7 @@ theorem measure_preimage_mul (μ : Measure G) [MulLeftInvariant μ] (g : G) (A :
#align measure_theory.measure_preimage_add MeasureTheory.measure_preimage_add
@[simp, to_additive]
-theorem measure_preimage_mul_right (μ : Measure G) [MulRightInvariant μ] (g : G) (A : Set G) :
+theorem measure_preimage_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) (A : Set G) :
μ ((fun h => h * g) ⁻¹' A) = μ A :=
calc
μ ((fun h => h * g) ⁻¹' A) = map (fun h => h * g) μ A :=
@@ -320,42 +324,42 @@ theorem measure_preimage_mul_right (μ : Measure G) [MulRightInvariant μ] (g :
#align measure_theory.measure_preimage_add_right MeasureTheory.measure_preimage_add_right
@[to_additive]
-theorem map_mul_left_ae (μ : Measure G) [MulLeftInvariant μ] (x : G) :
+theorem map_mul_left_ae (μ : Measure G) [IsMulLeftInvariant μ] (x : G) :
Filter.map (fun h => x * h) μ.ae = μ.ae :=
((MeasurableEquiv.mulLeft x).map_ae μ).trans <| congr_arg ae <| map_mul_left_eq_self μ x
#align measure_theory.map_mul_left_ae MeasureTheory.map_mul_left_ae
#align measure_theory.map_add_left_ae MeasureTheory.map_add_left_ae
@[to_additive]
-theorem map_mul_right_ae (μ : Measure G) [MulRightInvariant μ] (x : G) :
+theorem map_mul_right_ae (μ : Measure G) [IsMulRightInvariant μ] (x : G) :
Filter.map (fun h => h * x) μ.ae = μ.ae :=
((MeasurableEquiv.mulRight x).map_ae μ).trans <| congr_arg ae <| map_mul_right_eq_self μ x
#align measure_theory.map_mul_right_ae MeasureTheory.map_mul_right_ae
#align measure_theory.map_add_right_ae MeasureTheory.map_add_right_ae
@[to_additive]
-theorem map_div_right_ae (μ : Measure G) [MulRightInvariant μ] (x : G) :
+theorem map_div_right_ae (μ : Measure G) [IsMulRightInvariant μ] (x : G) :
Filter.map (fun t => t / x) μ.ae = μ.ae :=
((MeasurableEquiv.divRight x).map_ae μ).trans <| congr_arg ae <| map_div_right_eq_self μ x
#align measure_theory.map_div_right_ae MeasureTheory.map_div_right_ae
#align measure_theory.map_sub_right_ae MeasureTheory.map_sub_right_ae
@[to_additive]
-theorem eventually_mul_left_iff (μ : Measure G) [MulLeftInvariant μ] (t : G) {p : G → Prop} :
+theorem eventually_mul_left_iff (μ : Measure G) [IsMulLeftInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (t * x)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_mul_left_ae μ t]; rfl
#align measure_theory.eventually_mul_left_iff MeasureTheory.eventually_mul_left_iff
#align measure_theory.eventually_add_left_iff MeasureTheory.eventually_add_left_iff
@[to_additive]
-theorem eventually_mul_right_iff (μ : Measure G) [MulRightInvariant μ] (t : G) {p : G → Prop} :
+theorem eventually_mul_right_iff (μ : Measure G) [IsMulRightInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (x * t)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_mul_right_ae μ t]; rfl
#align measure_theory.eventually_mul_right_iff MeasureTheory.eventually_mul_right_iff
#align measure_theory.eventually_add_right_iff MeasureTheory.eventually_add_right_iff
@[to_additive]
-theorem eventually_div_right_iff (μ : Measure G) [MulRightInvariant μ] (t : G) {p : G → Prop} :
+theorem eventually_div_right_iff (μ : Measure G) [IsMulRightInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (x / t)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_div_right_ae μ t]; rfl
#align measure_theory.eventually_div_right_iff MeasureTheory.eventually_div_right_iff
@@ -374,22 +378,22 @@ protected def inv [Inv G] (μ : Measure G) : Measure G :=
#align measure_theory.measure.neg MeasureTheory.Measure.neg
-/
-#print MeasureTheory.Measure.NegInvariant /-
+#print MeasureTheory.Measure.IsNegInvariant /-
/-- A measure is invariant under negation if `- μ = μ`. Equivalently, this means that for all
measurable `A` we have `μ (- A) = μ A`, where `- A` is the pointwise negation of `A`. -/
-class NegInvariant [Neg G] (μ : Measure G) : Prop where
+class IsNegInvariant [Neg G] (μ : Measure G) : Prop where
neg_eq_self : μ.neg = μ
-#align measure_theory.measure.is_neg_invariant MeasureTheory.Measure.NegInvariant
+#align measure_theory.measure.is_neg_invariant MeasureTheory.Measure.IsNegInvariant
-/
-#print MeasureTheory.Measure.InvInvariant /-
+#print MeasureTheory.Measure.IsInvInvariant /-
/-- A measure is invariant under inversion if `μ⁻¹ = μ`. Equivalently, this means that for all
measurable `A` we have `μ (A⁻¹) = μ A`, where `A⁻¹` is the pointwise inverse of `A`. -/
@[to_additive]
-class InvInvariant [Inv G] (μ : Measure G) : Prop where
+class IsInvInvariant [Inv G] (μ : Measure G) : Prop where
inv_eq_self : μ.inv = μ
-#align measure_theory.measure.is_inv_invariant MeasureTheory.Measure.InvInvariant
-#align measure_theory.measure.is_neg_invariant MeasureTheory.Measure.NegInvariant
+#align measure_theory.measure.is_inv_invariant MeasureTheory.Measure.IsInvInvariant
+#align measure_theory.measure.is_neg_invariant MeasureTheory.Measure.IsNegInvariant
-/
section Inv
@@ -398,16 +402,16 @@ variable [Inv G]
#print MeasureTheory.Measure.inv_eq_self /-
@[simp, to_additive]
-theorem inv_eq_self (μ : Measure G) [InvInvariant μ] : μ.inv = μ :=
- InvInvariant.inv_eq_self
+theorem inv_eq_self (μ : Measure G) [IsInvInvariant μ] : μ.inv = μ :=
+ IsInvInvariant.inv_eq_self
#align measure_theory.measure.inv_eq_self MeasureTheory.Measure.inv_eq_self
#align measure_theory.measure.neg_eq_self MeasureTheory.Measure.neg_eq_self
-/
#print MeasureTheory.Measure.map_inv_eq_self /-
@[simp, to_additive]
-theorem map_inv_eq_self (μ : Measure G) [InvInvariant μ] : map Inv.inv μ = μ :=
- InvInvariant.inv_eq_self
+theorem map_inv_eq_self (μ : Measure G) [IsInvInvariant μ] : map Inv.inv μ = μ :=
+ IsInvInvariant.inv_eq_self
#align measure_theory.measure.map_inv_eq_self MeasureTheory.Measure.map_inv_eq_self
#align measure_theory.measure.map_neg_eq_self MeasureTheory.Measure.map_neg_eq_self
-/
@@ -416,7 +420,7 @@ variable [MeasurableInv G]
#print MeasureTheory.Measure.measurePreserving_inv /-
@[to_additive]
-theorem measurePreserving_inv (μ : Measure G) [InvInvariant μ] : MeasurePreserving Inv.inv μ μ :=
+theorem measurePreserving_inv (μ : Measure G) [IsInvInvariant μ] : MeasurePreserving Inv.inv μ μ :=
⟨measurable_inv, map_inv_eq_self μ⟩
#align measure_theory.measure.measure_preserving_inv MeasureTheory.Measure.measurePreserving_inv
#align measure_theory.measure.measure_preserving_neg MeasureTheory.Measure.measurePreserving_neg
@@ -441,13 +445,13 @@ protected theorem inv_inv (μ : Measure G) : μ.inv.inv = μ :=
#align measure_theory.measure.neg_neg MeasureTheory.Measure.neg_neg
@[simp, to_additive]
-theorem measure_inv (μ : Measure G) [InvInvariant μ] (A : Set G) : μ A⁻¹ = μ A := by
+theorem measure_inv (μ : Measure G) [IsInvInvariant μ] (A : Set G) : μ A⁻¹ = μ A := by
rw [← inv_apply, inv_eq_self]
#align measure_theory.measure.measure_inv MeasureTheory.Measure.measure_inv
#align measure_theory.measure.measure_neg MeasureTheory.Measure.measure_neg
@[to_additive]
-theorem measure_preimage_inv (μ : Measure G) [InvInvariant μ] (A : Set G) :
+theorem measure_preimage_inv (μ : Measure G) [IsInvInvariant μ] (A : Set G) :
μ (Inv.inv ⁻¹' A) = μ A :=
μ.measure_inv A
#align measure_theory.measure.measure_preimage_inv MeasureTheory.Measure.measure_preimage_inv
@@ -464,7 +468,7 @@ section DivisionMonoid
variable [DivisionMonoid G] [MeasurableMul G] [MeasurableInv G] {μ : Measure G}
@[to_additive]
-instance [MulLeftInvariant μ] : MulRightInvariant μ.inv :=
+instance [IsMulLeftInvariant μ] : IsMulRightInvariant μ.inv :=
by
constructor
intro g
@@ -473,7 +477,7 @@ instance [MulLeftInvariant μ] : MulRightInvariant μ.inv :=
map_map measurable_inv (measurable_const_mul g⁻¹), Function.comp, mul_inv_rev, inv_inv]
@[to_additive]
-instance [MulRightInvariant μ] : MulLeftInvariant μ.inv :=
+instance [IsMulRightInvariant μ] : IsMulLeftInvariant μ.inv :=
by
constructor
intro g
@@ -482,8 +486,8 @@ instance [MulRightInvariant μ] : MulLeftInvariant μ.inv :=
map_map measurable_inv (measurable_mul_const g⁻¹), Function.comp, mul_inv_rev, inv_inv]
@[to_additive]
-theorem measurePreserving_div_left (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ] (g : G) :
- MeasurePreserving (fun t => g / t) μ μ :=
+theorem measurePreserving_div_left (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
+ (g : G) : MeasurePreserving (fun t => g / t) μ μ :=
by
simp_rw [div_eq_mul_inv]
exact (measure_preserving_mul_left μ g).comp (measure_preserving_inv μ)
@@ -491,22 +495,22 @@ theorem measurePreserving_div_left (μ : Measure G) [InvInvariant μ] [MulLeftIn
#align measure_theory.measure.measure_preserving_sub_left MeasureTheory.Measure.measurePreserving_sub_left
@[to_additive]
-theorem map_div_left_eq_self (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ] (g : G) :
+theorem map_div_left_eq_self (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ] (g : G) :
map (fun t => g / t) μ = μ :=
(measurePreserving_div_left μ g).map_eq
#align measure_theory.measure.map_div_left_eq_self MeasureTheory.Measure.map_div_left_eq_self
#align measure_theory.measure.map_sub_left_eq_self MeasureTheory.Measure.map_sub_left_eq_self
@[to_additive]
-theorem measurePreserving_mul_right_inv (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ]
+theorem measurePreserving_mul_right_inv (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
(g : G) : MeasurePreserving (fun t => (g * t)⁻¹) μ μ :=
(measurePreserving_inv μ).comp <| measurePreserving_mul_left μ g
#align measure_theory.measure.measure_preserving_mul_right_inv MeasureTheory.Measure.measurePreserving_mul_right_inv
#align measure_theory.measure.measure_preserving_add_right_neg MeasureTheory.Measure.measurePreserving_add_right_neg
@[to_additive]
-theorem map_mul_right_inv_eq_self (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ] (g : G) :
- map (fun t => (g * t)⁻¹) μ = μ :=
+theorem map_mul_right_inv_eq_self (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
+ (g : G) : map (fun t => (g * t)⁻¹) μ = μ :=
(measurePreserving_mul_right_inv μ g).map_eq
#align measure_theory.measure.map_mul_right_inv_eq_self MeasureTheory.Measure.map_mul_right_inv_eq_self
#align measure_theory.measure.map_add_right_neg_eq_self MeasureTheory.Measure.map_add_right_neg_eq_self
@@ -518,7 +522,7 @@ section Group
variable [Group G] [MeasurableMul G] [MeasurableInv G] {μ : Measure G}
@[to_additive]
-theorem map_div_left_ae (μ : Measure G) [MulLeftInvariant μ] [InvInvariant μ] (x : G) :
+theorem map_div_left_ae (μ : Measure G) [IsMulLeftInvariant μ] [IsInvInvariant μ] (x : G) :
Filter.map (fun t => x / t) μ.ae = μ.ae :=
((MeasurableEquiv.divLeft x).map_ae μ).trans <| congr_arg ae <| map_div_left_eq_self μ x
#align measure_theory.measure.map_div_left_ae MeasureTheory.Measure.map_div_left_ae
@@ -549,14 +553,15 @@ theorem regular_inv_iff [T2Space G] : μ.inv.regular ↔ μ.regular :=
#align measure_theory.regular_inv_iff MeasureTheory.regular_inv_iff
#align measure_theory.regular_neg_iff MeasureTheory.regular_neg_iff
-variable [MulLeftInvariant μ]
+variable [IsMulLeftInvariant μ]
/-- If a left-invariant measure gives positive mass to a compact set, then it gives positive mass to
any open set. -/
@[to_additive
"If a left-invariant measure gives positive mass to a compact set, then it gives\npositive mass to any open set."]
-theorem openPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsCompact K) (h : μ K ≠ 0) :
- OpenPosMeasure μ := by
+theorem isOpenPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsCompact K)
+ (h : μ K ≠ 0) : IsOpenPosMeasure μ :=
+ by
refine' ⟨fun U hU hne => _⟩
contrapose! h
rw [← nonpos_iff_eq_zero]
@@ -568,45 +573,46 @@ theorem openPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsCompac
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_bUnion_finset_le _ _)
_ = 0 := by simp [measure_preimage_mul, h]
-#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.openPosMeasure_of_mulLeftInvariant_of_compact
-#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.openPosMeasure_of_addLeftInvariant_of_compact
+#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_compact
+#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_addLeftInvariant_of_compact
/-- A nonzero left-invariant regular measure gives positive mass to any open set. -/
@[to_additive "A nonzero left-invariant regular measure gives positive mass to any open set."]
-theorem openPosMeasure_of_mulLeftInvariant_of_regular [Regular μ] (h₀ : μ ≠ 0) : OpenPosMeasure μ :=
+theorem isOpenPosMeasure_of_mulLeftInvariant_of_regular [Regular μ] (h₀ : μ ≠ 0) :
+ IsOpenPosMeasure μ :=
let ⟨K, hK, h2K⟩ := Regular.exists_compact_not_null.mpr h₀
- openPosMeasure_of_mulLeftInvariant_of_compact K hK h2K
-#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.openPosMeasure_of_mulLeftInvariant_of_regular
-#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.openPosMeasure_of_addLeftInvariant_of_regular
+ isOpenPosMeasure_of_mulLeftInvariant_of_compact K hK h2K
+#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_regular
+#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_addLeftInvariant_of_regular
@[to_additive]
-theorem null_iff_of_mulLeftInvariant [Regular μ] {s : Set G} (hs : IsOpen s) :
+theorem null_iff_of_isMulLeftInvariant [Regular μ] {s : Set G} (hs : IsOpen s) :
μ s = 0 ↔ s = ∅ ∨ μ = 0 := by
by_cases h3μ : μ = 0; · simp [h3μ]
· haveI := is_open_pos_measure_of_mul_left_invariant_of_regular h3μ
simp only [h3μ, or_false_iff, hs.measure_eq_zero_iff μ]
-#align measure_theory.null_iff_of_is_mul_left_invariant MeasureTheory.null_iff_of_mulLeftInvariant
-#align measure_theory.null_iff_of_is_add_left_invariant MeasureTheory.null_iff_of_addLeftInvariant
+#align measure_theory.null_iff_of_is_mul_left_invariant MeasureTheory.null_iff_of_isMulLeftInvariant
+#align measure_theory.null_iff_of_is_add_left_invariant MeasureTheory.null_iff_of_isAddLeftInvariant
@[to_additive]
-theorem measure_ne_zero_iff_nonempty_of_mulLeftInvariant [Regular μ] (hμ : μ ≠ 0) {s : Set G}
+theorem measure_ne_zero_iff_nonempty_of_isMulLeftInvariant [Regular μ] (hμ : μ ≠ 0) {s : Set G}
(hs : IsOpen s) : μ s ≠ 0 ↔ s.Nonempty := by
simpa [null_iff_of_is_mul_left_invariant hs, hμ] using nonempty_iff_ne_empty.symm
-#align measure_theory.measure_ne_zero_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_mulLeftInvariant
-#align measure_theory.measure_ne_zero_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_addLeftInvariant
+#align measure_theory.measure_ne_zero_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_isMulLeftInvariant
+#align measure_theory.measure_ne_zero_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_isAddLeftInvariant
@[to_additive]
-theorem measure_pos_iff_nonempty_of_mulLeftInvariant [Regular μ] (h3μ : μ ≠ 0) {s : Set G}
+theorem measure_pos_iff_nonempty_of_isMulLeftInvariant [Regular μ] (h3μ : μ ≠ 0) {s : Set G}
(hs : IsOpen s) : 0 < μ s ↔ s.Nonempty :=
- pos_iff_ne_zero.trans <| measure_ne_zero_iff_nonempty_of_mulLeftInvariant h3μ hs
-#align measure_theory.measure_pos_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_mulLeftInvariant
-#align measure_theory.measure_pos_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_addLeftInvariant
+ pos_iff_ne_zero.trans <| measure_ne_zero_iff_nonempty_of_isMulLeftInvariant h3μ hs
+#align measure_theory.measure_pos_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_isMulLeftInvariant
+#align measure_theory.measure_pos_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_isAddLeftInvariant
/-- If a left-invariant measure gives finite mass to a nonempty open set, then it gives finite mass
to any compact set. -/
@[to_additive
"If a left-invariant measure gives finite mass to a nonempty open set, then it gives\nfinite mass to any compact set."]
-theorem measure_lt_top_of_isCompact_of_mulLeftInvariant (U : Set G) (hU : IsOpen U)
+theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOpen U)
(h'U : U.Nonempty) (h : μ U ≠ ∞) {K : Set G} (hK : IsCompact K) : μ K < ∞ :=
by
rw [← hU.interior_eq] at h'U
@@ -618,27 +624,27 @@ theorem measure_lt_top_of_isCompact_of_mulLeftInvariant (U : Set G) (hU : IsOpen
_ = Finset.card t * μ U := by simp only [measure_preimage_mul, Finset.sum_const, nsmul_eq_mul]
_ < ∞ := ENNReal.mul_lt_top (ENNReal.nat_ne_top _) h
-#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_mulLeftInvariant
-#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_addLeftInvariant
+#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant
+#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isAddLeftInvariant
/-- If a left-invariant measure gives finite mass to a set with nonempty interior, then
it gives finite mass to any compact set. -/
@[to_additive
"If a left-invariant measure gives finite mass to a set with nonempty interior, then\nit gives finite mass to any compact set."]
-theorem measure_lt_top_of_isCompact_of_mulLeftInvariant' {U : Set G} (hU : (interior U).Nonempty)
+theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant' {U : Set G} (hU : (interior U).Nonempty)
(h : μ U ≠ ∞) {K : Set G} (hK : IsCompact K) : μ K < ∞ :=
- measure_lt_top_of_isCompact_of_mulLeftInvariant (interior U) isOpen_interior hU
+ measure_lt_top_of_isCompact_of_isMulLeftInvariant (interior U) isOpen_interior hU
((measure_mono interior_subset).trans_lt (lt_top_iff_ne_top.2 h)).Ne hK
-#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_mulLeftInvariant'
-#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_addLeftInvariant'
+#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant'
+#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_isAddLeftInvariant'
/-- In a noncompact locally compact group, a left-invariant measure which is positive
on open sets has infinite mass. -/
@[simp,
to_additive
"In a noncompact locally compact additive group, a left-invariant measure which\nis positive on open sets has infinite mass."]
-theorem measure_univ_of_mulLeftInvariant [LocallyCompactSpace G] [NoncompactSpace G] (μ : Measure G)
- [OpenPosMeasure μ] [μ.MulLeftInvariant] : μ univ = ∞ :=
+theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSpace G]
+ (μ : Measure G) [IsOpenPosMeasure μ] [μ.IsMulLeftInvariant] : μ univ = ∞ :=
by
/- Consider a closed compact set `K` with nonempty interior. For any compact set `L`, one may
find `g = g (L)` such that `L` is disjoint from `g • K`. Iterating this, one finds
@@ -687,8 +693,8 @@ theorem measure_univ_of_mulLeftInvariant [LocallyCompactSpace G] [NoncompactSpac
simp only [ENNReal.top_mul', K_pos.ne', if_false] at N
apply top_le_iff.1
exact le_of_tendsto' N fun n => measure_mono (subset_univ _)
-#align measure_theory.measure_univ_of_is_mul_left_invariant MeasureTheory.measure_univ_of_mulLeftInvariant
-#align measure_theory.measure_univ_of_is_add_left_invariant MeasureTheory.measure_univ_of_addLeftInvariant
+#align measure_theory.measure_univ_of_is_mul_left_invariant MeasureTheory.measure_univ_of_isMulLeftInvariant
+#align measure_theory.measure_univ_of_is_add_left_invariant MeasureTheory.measure_univ_of_isAddLeftInvariant
end TopologicalGroup
@@ -699,13 +705,13 @@ variable [CommSemigroup G]
/-- In an abelian group every left invariant measure is also right-invariant.
We don't declare the converse as an instance, since that would loop type-class inference, and
we use `is_mul_left_invariant` as the default hypothesis in abelian groups. -/
-@[to_additive MeasureTheory.AddLeftInvariant.addRightInvariant
+@[to_additive MeasureTheory.IsAddLeftInvariant.isAddRightInvariant
"In an abelian additive\ngroup every left invariant measure is also right-invariant. We don't declare the converse as an\ninstance, since that would loop type-class inference, and we use `is_add_left_invariant` as the\ndefault hypothesis in abelian groups."]
-instance (priority := 100) MulLeftInvariant.mulRightInvariant {μ : Measure G} [MulLeftInvariant μ] :
- MulRightInvariant μ :=
+instance (priority := 100) IsMulLeftInvariant.isMulRightInvariant {μ : Measure G}
+ [IsMulLeftInvariant μ] : IsMulRightInvariant μ :=
⟨fun g => by simp_rw [mul_comm, map_mul_left_eq_self]⟩
-#align measure_theory.is_mul_left_invariant.is_mul_right_invariant MeasureTheory.MulLeftInvariant.mulRightInvariant
-#align is_add_left_invariant.is_add_right_invariant MeasureTheory.AddLeftInvariant.addRightInvariant
+#align measure_theory.is_mul_left_invariant.is_mul_right_invariant MeasureTheory.IsMulLeftInvariant.isMulRightInvariant
+#align is_add_left_invariant.is_add_right_invariant MeasureTheory.IsAddLeftInvariant.isAddRightInvariant
end CommSemigroup
@@ -713,25 +719,27 @@ section Haar
namespace Measure
-#print MeasureTheory.Measure.AddHaarMeasure /-
+#print MeasureTheory.Measure.IsAddHaarMeasure /-
/-- A measure on an additive group is an additive Haar measure if it is left-invariant, and gives
finite mass to compact sets and positive mass to open sets. -/
-class AddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends FiniteMeasureOnCompacts μ, AddLeftInvariant μ, OpenPosMeasure μ : Prop
-#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.AddHaarMeasure
+class IsAddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
+ (μ : Measure G) extends IsFiniteMeasureOnCompacts μ, IsAddLeftInvariant μ, IsOpenPosMeasure μ :
+ Prop
+#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
-/
-#print MeasureTheory.Measure.HaarMeasure /-
+#print MeasureTheory.Measure.IsHaarMeasure /-
/-- A measure on a group is a Haar measure if it is left-invariant, and gives finite mass to compact
sets and positive mass to open sets. -/
@[to_additive]
-class HaarMeasure {G : Type _} [Group G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends FiniteMeasureOnCompacts μ, MulLeftInvariant μ, OpenPosMeasure μ : Prop
-#align measure_theory.measure.is_haar_measure MeasureTheory.Measure.HaarMeasure
-#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.AddHaarMeasure
+class IsHaarMeasure {G : Type _} [Group G] [TopologicalSpace G] [MeasurableSpace G]
+ (μ : Measure G) extends IsFiniteMeasureOnCompacts μ, IsMulLeftInvariant μ, IsOpenPosMeasure μ :
+ Prop
+#align measure_theory.measure.is_haar_measure MeasureTheory.Measure.IsHaarMeasure
+#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
-/
-#print MeasureTheory.Measure.locallyFiniteMeasure_of_haarMeasure /-
+#print MeasureTheory.Measure.isLocallyFiniteMeasure_of_isHaarMeasure /-
/-- Record that a Haar measure on a locally compact space is locally finite. This is needed as the
fact that a measure which is finite on compacts is locally finite is not registered as an instance,
to avoid an instance loop.
@@ -739,17 +747,17 @@ to avoid an instance loop.
See Note [lower instance priority]. -/
@[to_additive
"Record that an additive Haar measure on a locally compact space is\nlocally finite. This is needed as the fact that a measure which is finite on compacts is locally\nfinite is not registered as an instance, to avoid an instance loop.\n\nSee Note [lower instance priority]"]
-instance (priority := 100) locallyFiniteMeasure_of_haarMeasure {G : Type _} [Group G]
+instance (priority := 100) isLocallyFiniteMeasure_of_isHaarMeasure {G : Type _} [Group G]
[MeasurableSpace G] [TopologicalSpace G] [LocallyCompactSpace G] (μ : Measure G)
- [HaarMeasure μ] : LocallyFiniteMeasure μ :=
- locallyFiniteMeasure_of_finiteMeasureOnCompacts
-#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.locallyFiniteMeasure_of_haarMeasure
-#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.locallyFiniteMeasure_of_addHaarMeasure
+ [IsHaarMeasure μ] : IsLocallyFiniteMeasure μ :=
+ isLocallyFiniteMeasure_of_isFiniteMeasureOnCompacts
+#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_isHaarMeasure
+#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_isAddHaarMeasure
-/
section
-variable [Group G] [TopologicalSpace G] (μ : Measure G) [HaarMeasure μ]
+variable [Group G] [TopologicalSpace G] (μ : Measure G) [IsHaarMeasure μ]
@[simp, to_additive]
theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ {(1 : G)} :=
@@ -759,72 +767,73 @@ theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ
#align measure_theory.measure.haar_singleton MeasureTheory.Measure.haar_singleton
#align measure_theory.measure.add_haar_singleton MeasureTheory.Measure.addHaar_singleton
-@[to_additive MeasureTheory.Measure.AddHaarMeasure.smul]
-theorem HaarMeasure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞) : HaarMeasure (c • μ) :=
+@[to_additive MeasureTheory.Measure.IsAddHaarMeasure.smul]
+theorem IsHaarMeasure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞) : IsHaarMeasure (c • μ) :=
{ lt_top_of_isCompact := fun K hK => ENNReal.mul_lt_top Ctop hK.measure_lt_top.Ne
- to_openPosMeasure := openPosMeasure_smul μ cpos }
-#align measure_theory.measure.is_haar_measure.smul MeasureTheory.Measure.HaarMeasure.smul
-#align measure_theory.measure.is_add_haar_measure.smul MeasureTheory.Measure.AddHaarMeasure.smul
+ to_isOpenPosMeasure := isOpenPosMeasure_smul μ cpos }
+#align measure_theory.measure.is_haar_measure.smul MeasureTheory.Measure.IsHaarMeasure.smul
+#align measure_theory.measure.is_add_haar_measure.smul MeasureTheory.Measure.IsAddHaarMeasure.smul
/-- If a left-invariant measure gives positive mass to some compact set with nonempty interior, then
it is a Haar measure. -/
@[to_additive
"If a left-invariant measure gives positive mass to some compact set with nonempty\ninterior, then it is an additive Haar measure."]
-theorem haarMeasure_of_isCompact_nonempty_interior [TopologicalGroup G] [BorelSpace G]
- (μ : Measure G) [MulLeftInvariant μ] (K : Set G) (hK : IsCompact K)
- (h'K : (interior K).Nonempty) (h : μ K ≠ 0) (h' : μ K ≠ ∞) : HaarMeasure μ :=
- { lt_top_of_isCompact := fun L hL => measure_lt_top_of_isCompact_of_mulLeftInvariant' h'K h' hL
- to_openPosMeasure := openPosMeasure_of_mulLeftInvariant_of_compact K hK h }
-#align measure_theory.measure.is_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.haarMeasure_of_isCompact_nonempty_interior
-#align measure_theory.measure.is_add_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.addHaarMeasure_of_isCompact_nonempty_interior
+theorem isHaarMeasure_of_isCompact_nonempty_interior [TopologicalGroup G] [BorelSpace G]
+ (μ : Measure G) [IsMulLeftInvariant μ] (K : Set G) (hK : IsCompact K)
+ (h'K : (interior K).Nonempty) (h : μ K ≠ 0) (h' : μ K ≠ ∞) : IsHaarMeasure μ :=
+ { lt_top_of_isCompact := fun L hL => measure_lt_top_of_isCompact_of_isMulLeftInvariant' h'K h' hL
+ to_isOpenPosMeasure := isOpenPosMeasure_of_mulLeftInvariant_of_compact K hK h }
+#align measure_theory.measure.is_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.isHaarMeasure_of_isCompact_nonempty_interior
+#align measure_theory.measure.is_add_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.isAddHaarMeasure_of_isCompact_nonempty_interior
/-- The image of a Haar measure under a continuous surjective proper group homomorphism is again
a Haar measure. See also `mul_equiv.is_haar_measure_map`. -/
@[to_additive
"The image of an additive Haar measure under a continuous surjective proper additive\ngroup homomorphism is again an additive Haar measure. See also\n`add_equiv.is_add_haar_measure_map`."]
-theorem haarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
+theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
[TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [T2Space H] [TopologicalGroup H]
(f : G →* H) (hf : Continuous f) (h_surj : Surjective f)
- (h_prop : Tendsto f (cocompact G) (cocompact H)) : HaarMeasure (Measure.map f μ) :=
- { to_mulLeftInvariant := mulLeftInvariant_map f.toMulHom hf.Measurable h_surj
+ (h_prop : Tendsto f (cocompact G) (cocompact H)) : IsHaarMeasure (Measure.map f μ) :=
+ { to_isMulLeftInvariant := isMulLeftInvariant_map f.toMulHom hf.Measurable h_surj
lt_top_of_isCompact := by
intro K hK
rw [map_apply hf.measurable hK.measurable_set]
exact IsCompact.measure_lt_top ((⟨⟨f, hf⟩, h_prop⟩ : CocompactMap G H).isCompact_preimage hK)
- to_openPosMeasure := hf.openPosMeasure_map h_surj }
-#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.haarMeasure_map
-#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.addHaarMeasure_map
+ to_isOpenPosMeasure := hf.isOpenPosMeasure_map h_surj }
+#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.isHaarMeasure_map
+#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.isAddHaarMeasure_map
/-- A convenience wrapper for `measure_theory.measure.is_haar_measure_map`. -/
@[to_additive "A convenience wrapper for `measure_theory.measure.is_add_haar_measure_map`."]
-theorem MulEquiv.haarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
+theorem MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
[TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [T2Space H] [TopologicalGroup H]
- (e : G ≃* H) (he : Continuous e) (hesymm : Continuous e.symm) : HaarMeasure (Measure.map e μ) :=
- haarMeasure_map μ (e : G →* H) he e.Surjective
+ (e : G ≃* H) (he : Continuous e) (hesymm : Continuous e.symm) :
+ IsHaarMeasure (Measure.map e μ) :=
+ isHaarMeasure_map μ (e : G →* H) he e.Surjective
({ e with } : G ≃ₜ H).toCocompactMap.cocompact_tendsto'
-#align mul_equiv.is_haar_measure_map MulEquiv.haarMeasure_map
-#align add_equiv.is_add_haar_measure_map AddEquiv.addHaarMeasure_map
+#align mul_equiv.is_haar_measure_map MulEquiv.isHaarMeasure_map
+#align add_equiv.is_add_haar_measure_map AddEquiv.isAddHaarMeasure_map
-#print MeasureTheory.Measure.HaarMeasure.sigmaFinite /-
+#print MeasureTheory.Measure.IsHaarMeasure.sigmaFinite /-
/-- A Haar measure on a σ-compact space is σ-finite.
See Note [lower instance priority] -/
@[to_additive
"A Haar measure on a σ-compact space is σ-finite.\n\nSee Note [lower instance priority]"]
-instance (priority := 100) HaarMeasure.sigmaFinite [SigmaCompactSpace G] : SigmaFinite μ :=
+instance (priority := 100) IsHaarMeasure.sigmaFinite [SigmaCompactSpace G] : SigmaFinite μ :=
⟨⟨{ Set := compactCovering G
set_mem := fun n => mem_univ _
Finite := fun n => IsCompact.measure_lt_top <| isCompact_compactCovering G n
spanning := iUnion_compactCovering G }⟩⟩
-#align measure_theory.measure.is_haar_measure.sigma_finite MeasureTheory.Measure.HaarMeasure.sigmaFinite
-#align measure_theory.measure.is_add_haar_measure.sigma_finite MeasureTheory.Measure.AddHaarMeasure.sigmaFinite
+#align measure_theory.measure.is_haar_measure.sigma_finite MeasureTheory.Measure.IsHaarMeasure.sigmaFinite
+#align measure_theory.measure.is_add_haar_measure.sigma_finite MeasureTheory.Measure.IsAddHaarMeasure.sigmaFinite
-/
@[to_additive]
instance {G : Type _} [Group G] [TopologicalSpace G] {mG : MeasurableSpace G} {H : Type _} [Group H]
- [TopologicalSpace H] {mH : MeasurableSpace H} (μ : Measure G) (ν : Measure H) [HaarMeasure μ]
- [HaarMeasure ν] [SigmaFinite μ] [SigmaFinite ν] [MeasurableMul G] [MeasurableMul H] :
- HaarMeasure (μ.Prod ν) where
+ [TopologicalSpace H] {mH : MeasurableSpace H} (μ : Measure G) (ν : Measure H) [IsHaarMeasure μ]
+ [IsHaarMeasure ν] [SigmaFinite μ] [SigmaFinite ν] [MeasurableMul G] [MeasurableMul H] :
+ IsHaarMeasure (μ.Prod ν) where
/-- If the neutral element of a group is not isolated, then a Haar measure on this group has
no atoms.
@@ -833,8 +842,8 @@ The additive version of this instance applies in particular to show that an addi
a nontrivial finite-dimensional real vector space has no atom. -/
@[to_additive
"If the zero element of an additive group is not isolated, then an\nadditive Haar measure on this group has no atoms.\n\nThis applies in particular to show that an additive Haar measure on a nontrivial finite-dimensional\nreal vector space has no atom."]
-instance (priority := 100) HaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
- [LocallyCompactSpace G] [(𝓝[≠] (1 : G)).ne_bot] (μ : Measure G) [μ.HaarMeasure] : NoAtoms μ :=
+instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
+ [LocallyCompactSpace G] [(𝓝[≠] (1 : G)).ne_bot] (μ : Measure G) [μ.IsHaarMeasure] : NoAtoms μ :=
by
suffices H : μ {(1 : G)} ≤ 0; · constructor; simp [le_bot_iff.1 H]
obtain ⟨K, K_compact, K_int⟩ : ∃ K : Set G, IsCompact K ∧ (1 : G) ∈ interior K :=
@@ -864,8 +873,8 @@ instance (priority := 100) HaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace
ENNReal.Tendsto.const_div ENNReal.tendsto_nat_nhds_top (Or.inr μKlt)
simp only [ENNReal.div_top] at J
exact ge_of_tendsto' J I
-#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.HaarMeasure.noAtoms
-#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.AddHaarMeasure.noAtoms
+#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.noAtoms
+#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.noAtoms
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -560,7 +560,7 @@ theorem openPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsCompac
refine' ⟨fun U hU hne => _⟩
contrapose! h
rw [← nonpos_iff_eq_zero]
- rw [← hU.interior_eq] at hne
+ rw [← hU.interior_eq] at hne
obtain ⟨t, hKt⟩ : ∃ t : Finset G, K ⊆ ⋃ (g : G) (H : g ∈ t), (fun h : G => g * h) ⁻¹' U :=
compact_covered_by_mul_left_translates hK hne
calc
@@ -609,7 +609,7 @@ to any compact set. -/
theorem measure_lt_top_of_isCompact_of_mulLeftInvariant (U : Set G) (hU : IsOpen U)
(h'U : U.Nonempty) (h : μ U ≠ ∞) {K : Set G} (hK : IsCompact K) : μ K < ∞ :=
by
- rw [← hU.interior_eq] at h'U
+ rw [← hU.interior_eq] at h'U
obtain ⟨t, hKt⟩ : ∃ t : Finset G, K ⊆ ⋃ (g : G) (H : g ∈ t), (fun h : G => g * h) ⁻¹' U :=
compact_covered_by_mul_left_translates hK h'U
calc
@@ -684,7 +684,7 @@ theorem measure_univ_of_mulLeftInvariant [LocallyCompactSpace G] [NoncompactSpac
simp_rw [M]
apply ENNReal.Tendsto.mul_const _ (Or.inl ENNReal.top_ne_zero)
exact ennreal.tendsto_nat_nhds_top.comp (tendsto_add_at_top_nat _)
- simp only [ENNReal.top_mul', K_pos.ne', if_false] at N
+ simp only [ENNReal.top_mul', K_pos.ne', if_false] at N
apply top_le_iff.1
exact le_of_tendsto' N fun n => measure_mono (subset_univ _)
#align measure_theory.measure_univ_of_is_mul_left_invariant MeasureTheory.measure_univ_of_mulLeftInvariant
@@ -717,7 +717,7 @@ namespace Measure
/-- A measure on an additive group is an additive Haar measure if it is left-invariant, and gives
finite mass to compact sets and positive mass to open sets. -/
class AddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends FiniteMeasureOnCompacts μ, AddLeftInvariant μ, OpenPosMeasure μ : Prop
+ (μ : Measure G) extends FiniteMeasureOnCompacts μ, AddLeftInvariant μ, OpenPosMeasure μ : Prop
#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.AddHaarMeasure
-/
@@ -726,7 +726,7 @@ class AddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [MeasurableS
sets and positive mass to open sets. -/
@[to_additive]
class HaarMeasure {G : Type _} [Group G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends FiniteMeasureOnCompacts μ, MulLeftInvariant μ, OpenPosMeasure μ : Prop
+ (μ : Measure G) extends FiniteMeasureOnCompacts μ, MulLeftInvariant μ, OpenPosMeasure μ : Prop
#align measure_theory.measure.is_haar_measure MeasureTheory.Measure.HaarMeasure
#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.AddHaarMeasure
-/
@@ -856,13 +856,13 @@ instance (priority := 100) HaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace
· intro x hx y hy xy
simp only [on_fun, xy.symm, mem_singleton_iff, not_false_iff, disjoint_singleton_right]
· intro b hb; exact measurable_set_singleton b
- rw [B] at A
+ rw [B] at A
rwa [ENNReal.le_div_iff_mul_le _ (Or.inr μKlt), mul_comm]
right
apply (measure_pos_of_nonempty_interior μ ⟨_, K_int⟩).ne'
have J : tendsto (fun n : ℕ => μ K / n) at_top (𝓝 (μ K / ∞)) :=
ENNReal.Tendsto.const_div ENNReal.tendsto_nat_nhds_top (Or.inr μKlt)
- simp only [ENNReal.div_top] at J
+ simp only [ENNReal.div_top] at J
exact ge_of_tendsto' J I
#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.HaarMeasure.noAtoms
#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.AddHaarMeasure.noAtoms
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn
! This file was ported from Lean 3 source module measure_theory.group.measure
-! leanprover-community/mathlib commit fd5edc43dc4f10b85abfe544b88f82cf13c5f844
+! leanprover-community/mathlib commit 61b5e2755ccb464b68d05a9acf891ae04992d09d
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -19,6 +19,9 @@ import Mathbin.Topology.ContinuousFunction.CocompactMap
/-!
# Measures on Groups
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
We develop some properties of measures on (topological) groups
* We define properties on measures: measures that are left or right invariant w.r.t. multiplication.
@@ -43,33 +46,41 @@ namespace MeasureTheory
namespace Measure
+#print MeasureTheory.Measure.AddLeftInvariant /-
/-- A measure `μ` on a measurable additive group is left invariant
if the measure of left translations of a set are equal to the measure of the set itself. -/
-class IsAddLeftInvariant [Add G] (μ : Measure G) : Prop where
+class AddLeftInvariant [Add G] (μ : Measure G) : Prop where
map_add_left_eq_self : ∀ g : G, map ((· + ·) g) μ = μ
-#align measure_theory.measure.is_add_left_invariant MeasureTheory.Measure.IsAddLeftInvariant
+#align measure_theory.measure.is_add_left_invariant MeasureTheory.Measure.AddLeftInvariant
+-/
+#print MeasureTheory.Measure.MulLeftInvariant /-
/-- A measure `μ` on a measurable group is left invariant
if the measure of left translations of a set are equal to the measure of the set itself. -/
@[to_additive]
-class IsMulLeftInvariant [Mul G] (μ : Measure G) : Prop where
+class MulLeftInvariant [Mul G] (μ : Measure G) : Prop where
map_mul_left_eq_self : ∀ g : G, map ((· * ·) g) μ = μ
-#align measure_theory.measure.is_mul_left_invariant MeasureTheory.Measure.IsMulLeftInvariant
-#align measure_theory.measure.is_add_left_invariant MeasureTheory.Measure.IsAddLeftInvariant
+#align measure_theory.measure.is_mul_left_invariant MeasureTheory.Measure.MulLeftInvariant
+#align measure_theory.measure.is_add_left_invariant MeasureTheory.Measure.AddLeftInvariant
+-/
+#print MeasureTheory.Measure.AddRightInvariant /-
/-- A measure `μ` on a measurable additive group is right invariant
if the measure of right translations of a set are equal to the measure of the set itself. -/
-class IsAddRightInvariant [Add G] (μ : Measure G) : Prop where
+class AddRightInvariant [Add G] (μ : Measure G) : Prop where
map_add_right_eq_self : ∀ g : G, map (· + g) μ = μ
-#align measure_theory.measure.is_add_right_invariant MeasureTheory.Measure.IsAddRightInvariant
+#align measure_theory.measure.is_add_right_invariant MeasureTheory.Measure.AddRightInvariant
+-/
+#print MeasureTheory.Measure.MulRightInvariant /-
/-- A measure `μ` on a measurable group is right invariant
if the measure of right translations of a set are equal to the measure of the set itself. -/
@[to_additive]
-class IsMulRightInvariant [Mul G] (μ : Measure G) : Prop where
+class MulRightInvariant [Mul G] (μ : Measure G) : Prop where
map_mul_right_eq_self : ∀ g : G, map (· * g) μ = μ
-#align measure_theory.measure.is_mul_right_invariant MeasureTheory.Measure.IsMulRightInvariant
-#align measure_theory.measure.is_add_right_invariant MeasureTheory.Measure.IsAddRightInvariant
+#align measure_theory.measure.is_mul_right_invariant MeasureTheory.Measure.MulRightInvariant
+#align measure_theory.measure.is_add_right_invariant MeasureTheory.Measure.AddRightInvariant
+-/
end Measure
@@ -79,106 +90,115 @@ section Mul
variable [Mul G] {μ : Measure G}
+#print MeasureTheory.map_mul_left_eq_self /-
@[to_additive]
-theorem map_mul_left_eq_self (μ : Measure G) [IsMulLeftInvariant μ] (g : G) :
- map ((· * ·) g) μ = μ :=
- IsMulLeftInvariant.map_mul_left_eq_self g
+theorem map_mul_left_eq_self (μ : Measure G) [MulLeftInvariant μ] (g : G) : map ((· * ·) g) μ = μ :=
+ MulLeftInvariant.map_mul_left_eq_self g
#align measure_theory.map_mul_left_eq_self MeasureTheory.map_mul_left_eq_self
#align measure_theory.map_add_left_eq_self MeasureTheory.map_add_left_eq_self
+-/
+#print MeasureTheory.map_mul_right_eq_self /-
@[to_additive]
-theorem map_mul_right_eq_self (μ : Measure G) [IsMulRightInvariant μ] (g : G) : map (· * g) μ = μ :=
- IsMulRightInvariant.map_mul_right_eq_self g
+theorem map_mul_right_eq_self (μ : Measure G) [MulRightInvariant μ] (g : G) : map (· * g) μ = μ :=
+ MulRightInvariant.map_mul_right_eq_self g
#align measure_theory.map_mul_right_eq_self MeasureTheory.map_mul_right_eq_self
#align measure_theory.map_add_right_eq_self MeasureTheory.map_add_right_eq_self
+-/
-@[to_additive MeasureTheory.is_add_left_invariant_smul]
-instance isMulLeftInvariant_smul [IsMulLeftInvariant μ] (c : ℝ≥0∞) : IsMulLeftInvariant (c • μ) :=
+@[to_additive MeasureTheory.addLeftInvariant_smul]
+instance mulLeftInvariant_smul [MulLeftInvariant μ] (c : ℝ≥0∞) : MulLeftInvariant (c • μ) :=
⟨fun g => by rw [measure.map_smul, map_mul_left_eq_self]⟩
-#align measure_theory.is_mul_left_invariant_smul MeasureTheory.isMulLeftInvariant_smul
-#align measure_theory.is_add_left_invariant_smul MeasureTheory.is_add_left_invariant_smul
+#align measure_theory.is_mul_left_invariant_smul MeasureTheory.mulLeftInvariant_smul
+#align measure_theory.is_add_left_invariant_smul MeasureTheory.addLeftInvariant_smul
-@[to_additive MeasureTheory.is_add_right_invariant_smul]
-instance isMulRightInvariant_smul [IsMulRightInvariant μ] (c : ℝ≥0∞) :
- IsMulRightInvariant (c • μ) :=
+@[to_additive MeasureTheory.addRightInvariant_smul]
+instance mulRightInvariant_smul [MulRightInvariant μ] (c : ℝ≥0∞) : MulRightInvariant (c • μ) :=
⟨fun g => by rw [measure.map_smul, map_mul_right_eq_self]⟩
-#align measure_theory.is_mul_right_invariant_smul MeasureTheory.isMulRightInvariant_smul
-#align measure_theory.is_add_right_invariant_smul MeasureTheory.is_add_right_invariant_smul
-
-@[to_additive MeasureTheory.is_add_left_invariant_smul_nnreal]
-instance isMulLeftInvariant_smul_nNReal [IsMulLeftInvariant μ] (c : ℝ≥0) :
- IsMulLeftInvariant (c • μ) :=
- MeasureTheory.isMulLeftInvariant_smul (c : ℝ≥0∞)
-#align measure_theory.is_mul_left_invariant_smul_nnreal MeasureTheory.isMulLeftInvariant_smul_nNReal
-#align measure_theory.is_add_left_invariant_smul_nnreal MeasureTheory.is_add_left_invariant_smul_nnreal
-
-@[to_additive MeasureTheory.is_add_right_invariant_smul_nnreal]
-instance isMulRightInvariant_smul_nNReal [IsMulRightInvariant μ] (c : ℝ≥0) :
- IsMulRightInvariant (c • μ) :=
- MeasureTheory.isMulRightInvariant_smul (c : ℝ≥0∞)
-#align measure_theory.is_mul_right_invariant_smul_nnreal MeasureTheory.isMulRightInvariant_smul_nNReal
-#align measure_theory.is_add_right_invariant_smul_nnreal MeasureTheory.is_add_right_invariant_smul_nnreal
+#align measure_theory.is_mul_right_invariant_smul MeasureTheory.mulRightInvariant_smul
+#align measure_theory.is_add_right_invariant_smul MeasureTheory.addRightInvariant_smul
+
+@[to_additive MeasureTheory.addLeftInvariant_smul_nnreal]
+instance mulLeftInvariant_smul_nnreal [MulLeftInvariant μ] (c : ℝ≥0) : MulLeftInvariant (c • μ) :=
+ MeasureTheory.mulLeftInvariant_smul (c : ℝ≥0∞)
+#align measure_theory.is_mul_left_invariant_smul_nnreal MeasureTheory.mulLeftInvariant_smul_nnreal
+#align measure_theory.is_add_left_invariant_smul_nnreal MeasureTheory.addLeftInvariant_smul_nnreal
+
+@[to_additive MeasureTheory.addRightInvariant_smul_nnreal]
+instance mulRightInvariant_smul_nnreal [MulRightInvariant μ] (c : ℝ≥0) :
+ MulRightInvariant (c • μ) :=
+ MeasureTheory.mulRightInvariant_smul (c : ℝ≥0∞)
+#align measure_theory.is_mul_right_invariant_smul_nnreal MeasureTheory.mulRightInvariant_smul_nnreal
+#align measure_theory.is_add_right_invariant_smul_nnreal MeasureTheory.addRightInvariant_smul_nnreal
section MeasurableMul
variable [MeasurableMul G]
+#print MeasureTheory.measurePreserving_mul_left /-
@[to_additive]
-theorem measurePreserving_mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) :
+theorem measurePreserving_mul_left (μ : Measure G) [MulLeftInvariant μ] (g : G) :
MeasurePreserving ((· * ·) g) μ μ :=
⟨measurable_const_mul g, map_mul_left_eq_self μ g⟩
#align measure_theory.measure_preserving_mul_left MeasureTheory.measurePreserving_mul_left
#align measure_theory.measure_preserving_add_left MeasureTheory.measurePreserving_add_left
+-/
@[to_additive]
-theorem MeasurePreserving.mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) {X : Type _}
+theorem MeasurePreserving.mul_left (μ : Measure G) [MulLeftInvariant μ] (g : G) {X : Type _}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
MeasurePreserving (fun x => g * f x) μ' μ :=
(measurePreserving_mul_left μ g).comp hf
#align measure_theory.measure_preserving.mul_left MeasureTheory.MeasurePreserving.mul_left
#align measure_theory.measure_preserving.add_left MeasureTheory.MeasurePreserving.add_left
+#print MeasureTheory.measurePreserving_mul_right /-
@[to_additive]
-theorem measurePreserving_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
+theorem measurePreserving_mul_right (μ : Measure G) [MulRightInvariant μ] (g : G) :
MeasurePreserving (· * g) μ μ :=
⟨measurable_mul_const g, map_mul_right_eq_self μ g⟩
#align measure_theory.measure_preserving_mul_right MeasureTheory.measurePreserving_mul_right
#align measure_theory.measure_preserving_add_right MeasureTheory.measurePreserving_add_right
+-/
@[to_additive]
-theorem MeasurePreserving.mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) {X : Type _}
+theorem MeasurePreserving.mul_right (μ : Measure G) [MulRightInvariant μ] (g : G) {X : Type _}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
MeasurePreserving (fun x => f x * g) μ' μ :=
(measurePreserving_mul_right μ g).comp hf
#align measure_theory.measure_preserving.mul_right MeasureTheory.MeasurePreserving.mul_right
#align measure_theory.measure_preserving.add_right MeasureTheory.MeasurePreserving.add_right
+#print MeasureTheory.MulLeftInvariant.smulInvariantMeasure /-
@[to_additive]
-instance IsMulLeftInvariant.smulInvariantMeasure [IsMulLeftInvariant μ] :
- SmulInvariantMeasure G G μ :=
+instance MulLeftInvariant.smulInvariantMeasure [MulLeftInvariant μ] : SMulInvariantMeasure G G μ :=
⟨fun x s hs => (measurePreserving_mul_left μ x).measure_preimage hs⟩
-#align measure_theory.is_mul_left_invariant.smul_invariant_measure MeasureTheory.IsMulLeftInvariant.smulInvariantMeasure
-#align measure_theory.is_mul_left_invariant.vadd_invariant_measure MeasureTheory.IsMulLeftInvariant.vadd_invariant_measure
+#align measure_theory.is_mul_left_invariant.smul_invariant_measure MeasureTheory.MulLeftInvariant.smulInvariantMeasure
+#align measure_theory.is_mul_left_invariant.vadd_invariant_measure MeasureTheory.MulLeftInvariant.vaddInvariantMeasure
+-/
+#print MeasureTheory.MulRightInvariant.toSMulInvariantMeasure_op /-
@[to_additive]
-instance IsMulRightInvariant.to_smulInvariantMeasure_op [μ.IsMulRightInvariant] :
- SmulInvariantMeasure Gᵐᵒᵖ G μ :=
+instance MulRightInvariant.toSMulInvariantMeasure_op [μ.MulRightInvariant] :
+ SMulInvariantMeasure Gᵐᵒᵖ G μ :=
⟨fun x s hs => (measurePreserving_mul_right μ (MulOpposite.unop x)).measure_preimage hs⟩
-#align measure_theory.is_mul_right_invariant.to_smul_invariant_measure_op MeasureTheory.IsMulRightInvariant.to_smulInvariantMeasure_op
-#align measure_theory.is_mul_right_invariant.to_vadd_invariant_measure_op MeasureTheory.IsMulRightInvariant.to_vadd_invariant_measure_op
+#align measure_theory.is_mul_right_invariant.to_smul_invariant_measure_op MeasureTheory.MulRightInvariant.toSMulInvariantMeasure_op
+#align measure_theory.is_mul_right_invariant.to_vadd_invariant_measure_op MeasureTheory.MulRightInvariant.toVAddInvariantMeasure_op
+-/
@[to_additive]
instance Subgroup.smulInvariantMeasure {G α : Type _} [Group G] [MulAction G α] [MeasurableSpace α]
- {μ : Measure α} [SmulInvariantMeasure G α μ] (H : Subgroup G) : SmulInvariantMeasure H α μ :=
+ {μ : Measure α} [SMulInvariantMeasure G α μ] (H : Subgroup G) : SMulInvariantMeasure H α μ :=
⟨fun y s hs => by convert smul_invariant_measure.measure_preimage_smul μ (y : G) hs⟩
#align measure_theory.subgroup.smul_invariant_measure MeasureTheory.Subgroup.smulInvariantMeasure
-#align measure_theory.subgroup.vadd_invariant_measure MeasureTheory.Subgroup.vadd_invariant_measure
+#align measure_theory.subgroup.vadd_invariant_measure MeasureTheory.Subgroup.vaddInvariantMeasure
+#print MeasureTheory.forall_measure_preimage_mul_iff /-
/-- An alternative way to prove that `μ` is left invariant under multiplication. -/
@[to_additive " An alternative way to prove that `μ` is left invariant under addition. "]
theorem forall_measure_preimage_mul_iff (μ : Measure G) :
(∀ (g : G) (A : Set G), MeasurableSet A → μ ((fun h => g * h) ⁻¹' A) = μ A) ↔
- IsMulLeftInvariant μ :=
+ MulLeftInvariant μ :=
by
trans ∀ g, map ((· * ·) g) μ = μ
· simp_rw [measure.ext_iff]
@@ -187,12 +207,14 @@ theorem forall_measure_preimage_mul_iff (μ : Measure G) :
exact ⟨fun h => ⟨h⟩, fun h => h.1⟩
#align measure_theory.forall_measure_preimage_mul_iff MeasureTheory.forall_measure_preimage_mul_iff
#align measure_theory.forall_measure_preimage_add_iff MeasureTheory.forall_measure_preimage_add_iff
+-/
+#print MeasureTheory.forall_measure_preimage_mul_right_iff /-
/-- An alternative way to prove that `μ` is right invariant under multiplication. -/
@[to_additive " An alternative way to prove that `μ` is right invariant under addition. "]
theorem forall_measure_preimage_mul_right_iff (μ : Measure G) :
(∀ (g : G) (A : Set G), MeasurableSet A → μ ((fun h => h * g) ⁻¹' A) = μ A) ↔
- IsMulRightInvariant μ :=
+ MulRightInvariant μ :=
by
trans ∀ g, map (· * g) μ = μ
· simp_rw [measure.ext_iff]
@@ -201,11 +223,12 @@ theorem forall_measure_preimage_mul_right_iff (μ : Measure G) :
exact ⟨fun h => ⟨h⟩, fun h => h.1⟩
#align measure_theory.forall_measure_preimage_mul_right_iff MeasureTheory.forall_measure_preimage_mul_right_iff
#align measure_theory.forall_measure_preimage_add_right_iff MeasureTheory.forall_measure_preimage_add_right_iff
+-/
@[to_additive]
-instance [IsMulLeftInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : MeasurableSpace H}
- {ν : Measure H} [MeasurableMul H] [IsMulLeftInvariant ν] [SigmaFinite ν] :
- IsMulLeftInvariant (μ.Prod ν) := by
+instance [MulLeftInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : MeasurableSpace H}
+ {ν : Measure H} [MeasurableMul H] [MulLeftInvariant ν] [SigmaFinite ν] :
+ MulLeftInvariant (μ.Prod ν) := by
constructor
rintro ⟨g, h⟩
change map (Prod.map ((· * ·) g) ((· * ·) h)) (μ.prod ν) = μ.prod ν
@@ -215,9 +238,9 @@ instance [IsMulLeftInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : Mea
· rw [map_mul_left_eq_self ν h]; infer_instance
@[to_additive]
-instance [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : MeasurableSpace H}
- {ν : Measure H} [MeasurableMul H] [IsMulRightInvariant ν] [SigmaFinite ν] :
- IsMulRightInvariant (μ.Prod ν) := by
+instance [MulRightInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : MeasurableSpace H}
+ {ν : Measure H} [MeasurableMul H] [MulRightInvariant ν] [SigmaFinite ν] :
+ MulRightInvariant (μ.Prod ν) := by
constructor
rintro ⟨g, h⟩
change map (Prod.map (· * g) (· * h)) (μ.prod ν) = μ.prod ν
@@ -226,10 +249,11 @@ instance [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : Me
· rw [map_mul_right_eq_self μ g]; infer_instance
· rw [map_mul_right_eq_self ν h]; infer_instance
+#print MeasureTheory.mulLeftInvariant_map /-
@[to_additive]
-theorem isMulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [MeasurableMul H]
- [IsMulLeftInvariant μ] (f : G →ₙ* H) (hf : Measurable f) (h_surj : Surjective f) :
- IsMulLeftInvariant (Measure.map f μ) :=
+theorem mulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [MeasurableMul H]
+ [MulLeftInvariant μ] (f : G →ₙ* H) (hf : Measurable f) (h_surj : Surjective f) :
+ MulLeftInvariant (Measure.map f μ) :=
by
refine' ⟨fun h => _⟩
rw [map_map (measurable_const_mul _) hf]
@@ -239,8 +263,9 @@ theorem isMulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [Measura
congr 2
ext y
simp only [comp_app, map_mul]
-#align measure_theory.is_mul_left_invariant_map MeasureTheory.isMulLeftInvariant_map
-#align measure_theory.is_add_left_invariant_map MeasureTheory.is_add_left_invariant_map
+#align measure_theory.is_mul_left_invariant_map MeasureTheory.mulLeftInvariant_map
+#align measure_theory.is_add_left_invariant_map MeasureTheory.addLeftInvariant_map
+-/
end MeasurableMul
@@ -251,7 +276,7 @@ section DivInvMonoid
variable [DivInvMonoid G]
@[to_additive]
-theorem map_div_right_eq_self (μ : Measure G) [IsMulRightInvariant μ] (g : G) : map (· / g) μ = μ :=
+theorem map_div_right_eq_self (μ : Measure G) [MulRightInvariant μ] (g : G) : map (· / g) μ = μ :=
by simp_rw [div_eq_mul_inv, map_mul_right_eq_self μ g⁻¹]
#align measure_theory.map_div_right_eq_self MeasureTheory.map_div_right_eq_self
#align measure_theory.map_sub_right_eq_self MeasureTheory.map_sub_right_eq_self
@@ -263,7 +288,7 @@ section Group
variable [Group G] [MeasurableMul G]
@[to_additive]
-theorem measurePreserving_div_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
+theorem measurePreserving_div_right (μ : Measure G) [MulRightInvariant μ] (g : G) :
MeasurePreserving (· / g) μ μ := by simp_rw [div_eq_mul_inv, measure_preserving_mul_right μ g⁻¹]
#align measure_theory.measure_preserving_div_right MeasureTheory.measurePreserving_div_right
#align measure_theory.measure_preserving_sub_right MeasureTheory.measurePreserving_sub_right
@@ -273,7 +298,7 @@ theorem measurePreserving_div_right (μ : Measure G) [IsMulRightInvariant μ] (g
@[simp,
to_additive
"We shorten this from `measure_preimage_add_left`, since left invariant is the\npreferred option for measures in this formalization."]
-theorem measure_preimage_mul (μ : Measure G) [IsMulLeftInvariant μ] (g : G) (A : Set G) :
+theorem measure_preimage_mul (μ : Measure G) [MulLeftInvariant μ] (g : G) (A : Set G) :
μ ((fun h => g * h) ⁻¹' A) = μ A :=
calc
μ ((fun h => g * h) ⁻¹' A) = map (fun h => g * h) μ A :=
@@ -284,7 +309,7 @@ theorem measure_preimage_mul (μ : Measure G) [IsMulLeftInvariant μ] (g : G) (A
#align measure_theory.measure_preimage_add MeasureTheory.measure_preimage_add
@[simp, to_additive]
-theorem measure_preimage_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) (A : Set G) :
+theorem measure_preimage_mul_right (μ : Measure G) [MulRightInvariant μ] (g : G) (A : Set G) :
μ ((fun h => h * g) ⁻¹' A) = μ A :=
calc
μ ((fun h => h * g) ⁻¹' A) = map (fun h => h * g) μ A :=
@@ -295,42 +320,42 @@ theorem measure_preimage_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g
#align measure_theory.measure_preimage_add_right MeasureTheory.measure_preimage_add_right
@[to_additive]
-theorem map_mul_left_ae (μ : Measure G) [IsMulLeftInvariant μ] (x : G) :
+theorem map_mul_left_ae (μ : Measure G) [MulLeftInvariant μ] (x : G) :
Filter.map (fun h => x * h) μ.ae = μ.ae :=
((MeasurableEquiv.mulLeft x).map_ae μ).trans <| congr_arg ae <| map_mul_left_eq_self μ x
#align measure_theory.map_mul_left_ae MeasureTheory.map_mul_left_ae
#align measure_theory.map_add_left_ae MeasureTheory.map_add_left_ae
@[to_additive]
-theorem map_mul_right_ae (μ : Measure G) [IsMulRightInvariant μ] (x : G) :
+theorem map_mul_right_ae (μ : Measure G) [MulRightInvariant μ] (x : G) :
Filter.map (fun h => h * x) μ.ae = μ.ae :=
((MeasurableEquiv.mulRight x).map_ae μ).trans <| congr_arg ae <| map_mul_right_eq_self μ x
#align measure_theory.map_mul_right_ae MeasureTheory.map_mul_right_ae
#align measure_theory.map_add_right_ae MeasureTheory.map_add_right_ae
@[to_additive]
-theorem map_div_right_ae (μ : Measure G) [IsMulRightInvariant μ] (x : G) :
+theorem map_div_right_ae (μ : Measure G) [MulRightInvariant μ] (x : G) :
Filter.map (fun t => t / x) μ.ae = μ.ae :=
((MeasurableEquiv.divRight x).map_ae μ).trans <| congr_arg ae <| map_div_right_eq_self μ x
#align measure_theory.map_div_right_ae MeasureTheory.map_div_right_ae
#align measure_theory.map_sub_right_ae MeasureTheory.map_sub_right_ae
@[to_additive]
-theorem eventually_mul_left_iff (μ : Measure G) [IsMulLeftInvariant μ] (t : G) {p : G → Prop} :
+theorem eventually_mul_left_iff (μ : Measure G) [MulLeftInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (t * x)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_mul_left_ae μ t]; rfl
#align measure_theory.eventually_mul_left_iff MeasureTheory.eventually_mul_left_iff
#align measure_theory.eventually_add_left_iff MeasureTheory.eventually_add_left_iff
@[to_additive]
-theorem eventually_mul_right_iff (μ : Measure G) [IsMulRightInvariant μ] (t : G) {p : G → Prop} :
+theorem eventually_mul_right_iff (μ : Measure G) [MulRightInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (x * t)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_mul_right_ae μ t]; rfl
#align measure_theory.eventually_mul_right_iff MeasureTheory.eventually_mul_right_iff
#align measure_theory.eventually_add_right_iff MeasureTheory.eventually_add_right_iff
@[to_additive]
-theorem eventually_div_right_iff (μ : Measure G) [IsMulRightInvariant μ] (t : G) {p : G → Prop} :
+theorem eventually_div_right_iff (μ : Measure G) [MulRightInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (x / t)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_div_right_ae μ t]; rfl
#align measure_theory.eventually_div_right_iff MeasureTheory.eventually_div_right_iff
@@ -340,50 +365,62 @@ end Group
namespace Measure
+#print MeasureTheory.Measure.inv /-
/-- The measure `A ↦ μ (A⁻¹)`, where `A⁻¹` is the pointwise inverse of `A`. -/
@[to_additive "The measure `A ↦ μ (- A)`, where `- A` is the pointwise negation of `A`."]
protected def inv [Inv G] (μ : Measure G) : Measure G :=
Measure.map inv μ
#align measure_theory.measure.inv MeasureTheory.Measure.inv
#align measure_theory.measure.neg MeasureTheory.Measure.neg
+-/
+#print MeasureTheory.Measure.NegInvariant /-
/-- A measure is invariant under negation if `- μ = μ`. Equivalently, this means that for all
measurable `A` we have `μ (- A) = μ A`, where `- A` is the pointwise negation of `A`. -/
-class IsNegInvariant [Neg G] (μ : Measure G) : Prop where
+class NegInvariant [Neg G] (μ : Measure G) : Prop where
neg_eq_self : μ.neg = μ
-#align measure_theory.measure.is_neg_invariant MeasureTheory.Measure.IsNegInvariant
+#align measure_theory.measure.is_neg_invariant MeasureTheory.Measure.NegInvariant
+-/
+#print MeasureTheory.Measure.InvInvariant /-
/-- A measure is invariant under inversion if `μ⁻¹ = μ`. Equivalently, this means that for all
measurable `A` we have `μ (A⁻¹) = μ A`, where `A⁻¹` is the pointwise inverse of `A`. -/
@[to_additive]
-class IsInvInvariant [Inv G] (μ : Measure G) : Prop where
+class InvInvariant [Inv G] (μ : Measure G) : Prop where
inv_eq_self : μ.inv = μ
-#align measure_theory.measure.is_inv_invariant MeasureTheory.Measure.IsInvInvariant
-#align measure_theory.measure.is_neg_invariant MeasureTheory.Measure.IsNegInvariant
+#align measure_theory.measure.is_inv_invariant MeasureTheory.Measure.InvInvariant
+#align measure_theory.measure.is_neg_invariant MeasureTheory.Measure.NegInvariant
+-/
section Inv
variable [Inv G]
+#print MeasureTheory.Measure.inv_eq_self /-
@[simp, to_additive]
-theorem inv_eq_self (μ : Measure G) [IsInvInvariant μ] : μ.inv = μ :=
- IsInvInvariant.inv_eq_self
+theorem inv_eq_self (μ : Measure G) [InvInvariant μ] : μ.inv = μ :=
+ InvInvariant.inv_eq_self
#align measure_theory.measure.inv_eq_self MeasureTheory.Measure.inv_eq_self
#align measure_theory.measure.neg_eq_self MeasureTheory.Measure.neg_eq_self
+-/
+#print MeasureTheory.Measure.map_inv_eq_self /-
@[simp, to_additive]
-theorem map_inv_eq_self (μ : Measure G) [IsInvInvariant μ] : map Inv.inv μ = μ :=
- IsInvInvariant.inv_eq_self
+theorem map_inv_eq_self (μ : Measure G) [InvInvariant μ] : map Inv.inv μ = μ :=
+ InvInvariant.inv_eq_self
#align measure_theory.measure.map_inv_eq_self MeasureTheory.Measure.map_inv_eq_self
#align measure_theory.measure.map_neg_eq_self MeasureTheory.Measure.map_neg_eq_self
+-/
variable [MeasurableInv G]
+#print MeasureTheory.Measure.measurePreserving_inv /-
@[to_additive]
-theorem measurePreserving_inv (μ : Measure G) [IsInvInvariant μ] : MeasurePreserving Inv.inv μ μ :=
+theorem measurePreserving_inv (μ : Measure G) [InvInvariant μ] : MeasurePreserving Inv.inv μ μ :=
⟨measurable_inv, map_inv_eq_self μ⟩
#align measure_theory.measure.measure_preserving_inv MeasureTheory.Measure.measurePreserving_inv
#align measure_theory.measure.measure_preserving_neg MeasureTheory.Measure.measurePreserving_neg
+-/
end Inv
@@ -404,13 +441,13 @@ protected theorem inv_inv (μ : Measure G) : μ.inv.inv = μ :=
#align measure_theory.measure.neg_neg MeasureTheory.Measure.neg_neg
@[simp, to_additive]
-theorem measure_inv (μ : Measure G) [IsInvInvariant μ] (A : Set G) : μ A⁻¹ = μ A := by
+theorem measure_inv (μ : Measure G) [InvInvariant μ] (A : Set G) : μ A⁻¹ = μ A := by
rw [← inv_apply, inv_eq_self]
#align measure_theory.measure.measure_inv MeasureTheory.Measure.measure_inv
#align measure_theory.measure.measure_neg MeasureTheory.Measure.measure_neg
@[to_additive]
-theorem measure_preimage_inv (μ : Measure G) [IsInvInvariant μ] (A : Set G) :
+theorem measure_preimage_inv (μ : Measure G) [InvInvariant μ] (A : Set G) :
μ (Inv.inv ⁻¹' A) = μ A :=
μ.measure_inv A
#align measure_theory.measure.measure_preimage_inv MeasureTheory.Measure.measure_preimage_inv
@@ -427,7 +464,7 @@ section DivisionMonoid
variable [DivisionMonoid G] [MeasurableMul G] [MeasurableInv G] {μ : Measure G}
@[to_additive]
-instance [IsMulLeftInvariant μ] : IsMulRightInvariant μ.inv :=
+instance [MulLeftInvariant μ] : MulRightInvariant μ.inv :=
by
constructor
intro g
@@ -436,7 +473,7 @@ instance [IsMulLeftInvariant μ] : IsMulRightInvariant μ.inv :=
map_map measurable_inv (measurable_const_mul g⁻¹), Function.comp, mul_inv_rev, inv_inv]
@[to_additive]
-instance [IsMulRightInvariant μ] : IsMulLeftInvariant μ.inv :=
+instance [MulRightInvariant μ] : MulLeftInvariant μ.inv :=
by
constructor
intro g
@@ -445,8 +482,8 @@ instance [IsMulRightInvariant μ] : IsMulLeftInvariant μ.inv :=
map_map measurable_inv (measurable_mul_const g⁻¹), Function.comp, mul_inv_rev, inv_inv]
@[to_additive]
-theorem measurePreserving_div_left (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
- (g : G) : MeasurePreserving (fun t => g / t) μ μ :=
+theorem measurePreserving_div_left (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ] (g : G) :
+ MeasurePreserving (fun t => g / t) μ μ :=
by
simp_rw [div_eq_mul_inv]
exact (measure_preserving_mul_left μ g).comp (measure_preserving_inv μ)
@@ -454,22 +491,22 @@ theorem measurePreserving_div_left (μ : Measure G) [IsInvInvariant μ] [IsMulLe
#align measure_theory.measure.measure_preserving_sub_left MeasureTheory.Measure.measurePreserving_sub_left
@[to_additive]
-theorem map_div_left_eq_self (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ] (g : G) :
+theorem map_div_left_eq_self (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ] (g : G) :
map (fun t => g / t) μ = μ :=
(measurePreserving_div_left μ g).map_eq
#align measure_theory.measure.map_div_left_eq_self MeasureTheory.Measure.map_div_left_eq_self
#align measure_theory.measure.map_sub_left_eq_self MeasureTheory.Measure.map_sub_left_eq_self
@[to_additive]
-theorem measurePreserving_mul_right_inv (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
+theorem measurePreserving_mul_right_inv (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ]
(g : G) : MeasurePreserving (fun t => (g * t)⁻¹) μ μ :=
(measurePreserving_inv μ).comp <| measurePreserving_mul_left μ g
#align measure_theory.measure.measure_preserving_mul_right_inv MeasureTheory.Measure.measurePreserving_mul_right_inv
#align measure_theory.measure.measure_preserving_add_right_neg MeasureTheory.Measure.measurePreserving_add_right_neg
@[to_additive]
-theorem map_mul_right_inv_eq_self (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
- (g : G) : map (fun t => (g * t)⁻¹) μ = μ :=
+theorem map_mul_right_inv_eq_self (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ] (g : G) :
+ map (fun t => (g * t)⁻¹) μ = μ :=
(measurePreserving_mul_right_inv μ g).map_eq
#align measure_theory.measure.map_mul_right_inv_eq_self MeasureTheory.Measure.map_mul_right_inv_eq_self
#align measure_theory.measure.map_add_right_neg_eq_self MeasureTheory.Measure.map_add_right_neg_eq_self
@@ -481,7 +518,7 @@ section Group
variable [Group G] [MeasurableMul G] [MeasurableInv G] {μ : Measure G}
@[to_additive]
-theorem map_div_left_ae (μ : Measure G) [IsMulLeftInvariant μ] [IsInvInvariant μ] (x : G) :
+theorem map_div_left_ae (μ : Measure G) [MulLeftInvariant μ] [InvInvariant μ] (x : G) :
Filter.map (fun t => x / t) μ.ae = μ.ae :=
((MeasurableEquiv.divLeft x).map_ae μ).trans <| congr_arg ae <| map_div_left_eq_self μ x
#align measure_theory.measure.map_div_left_ae MeasureTheory.Measure.map_div_left_ae
@@ -512,15 +549,14 @@ theorem regular_inv_iff [T2Space G] : μ.inv.regular ↔ μ.regular :=
#align measure_theory.regular_inv_iff MeasureTheory.regular_inv_iff
#align measure_theory.regular_neg_iff MeasureTheory.regular_neg_iff
-variable [IsMulLeftInvariant μ]
+variable [MulLeftInvariant μ]
/-- If a left-invariant measure gives positive mass to a compact set, then it gives positive mass to
any open set. -/
@[to_additive
"If a left-invariant measure gives positive mass to a compact set, then it gives\npositive mass to any open set."]
-theorem openPosMeasure_of_mul_left_invariant_of_compact (K : Set G) (hK : IsCompact K)
- (h : μ K ≠ 0) : OpenPosMeasure μ :=
- by
+theorem openPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsCompact K) (h : μ K ≠ 0) :
+ OpenPosMeasure μ := by
refine' ⟨fun U hU hne => _⟩
contrapose! h
rw [← nonpos_iff_eq_zero]
@@ -532,46 +568,45 @@ theorem openPosMeasure_of_mul_left_invariant_of_compact (K : Set G) (hK : IsComp
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_bUnion_finset_le _ _)
_ = 0 := by simp [measure_preimage_mul, h]
-#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.openPosMeasure_of_mul_left_invariant_of_compact
-#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.openPosMeasure_of_add_left_invariant_of_compact
+#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.openPosMeasure_of_mulLeftInvariant_of_compact
+#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.openPosMeasure_of_addLeftInvariant_of_compact
/-- A nonzero left-invariant regular measure gives positive mass to any open set. -/
@[to_additive "A nonzero left-invariant regular measure gives positive mass to any open set."]
-theorem openPosMeasure_of_mul_left_invariant_of_regular [Regular μ] (h₀ : μ ≠ 0) :
- OpenPosMeasure μ :=
+theorem openPosMeasure_of_mulLeftInvariant_of_regular [Regular μ] (h₀ : μ ≠ 0) : OpenPosMeasure μ :=
let ⟨K, hK, h2K⟩ := Regular.exists_compact_not_null.mpr h₀
- openPosMeasure_of_mul_left_invariant_of_compact K hK h2K
-#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.openPosMeasure_of_mul_left_invariant_of_regular
-#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.openPosMeasure_of_add_left_invariant_of_regular
+ openPosMeasure_of_mulLeftInvariant_of_compact K hK h2K
+#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.openPosMeasure_of_mulLeftInvariant_of_regular
+#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.openPosMeasure_of_addLeftInvariant_of_regular
@[to_additive]
-theorem null_iff_of_isMulLeftInvariant [Regular μ] {s : Set G} (hs : IsOpen s) :
+theorem null_iff_of_mulLeftInvariant [Regular μ] {s : Set G} (hs : IsOpen s) :
μ s = 0 ↔ s = ∅ ∨ μ = 0 := by
by_cases h3μ : μ = 0; · simp [h3μ]
· haveI := is_open_pos_measure_of_mul_left_invariant_of_regular h3μ
simp only [h3μ, or_false_iff, hs.measure_eq_zero_iff μ]
-#align measure_theory.null_iff_of_is_mul_left_invariant MeasureTheory.null_iff_of_isMulLeftInvariant
-#align measure_theory.null_iff_of_is_add_left_invariant MeasureTheory.null_iff_of_is_add_left_invariant
+#align measure_theory.null_iff_of_is_mul_left_invariant MeasureTheory.null_iff_of_mulLeftInvariant
+#align measure_theory.null_iff_of_is_add_left_invariant MeasureTheory.null_iff_of_addLeftInvariant
@[to_additive]
-theorem measure_ne_zero_iff_nonempty_of_isMulLeftInvariant [Regular μ] (hμ : μ ≠ 0) {s : Set G}
+theorem measure_ne_zero_iff_nonempty_of_mulLeftInvariant [Regular μ] (hμ : μ ≠ 0) {s : Set G}
(hs : IsOpen s) : μ s ≠ 0 ↔ s.Nonempty := by
simpa [null_iff_of_is_mul_left_invariant hs, hμ] using nonempty_iff_ne_empty.symm
-#align measure_theory.measure_ne_zero_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_isMulLeftInvariant
-#align measure_theory.measure_ne_zero_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_is_add_left_invariant
+#align measure_theory.measure_ne_zero_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_mulLeftInvariant
+#align measure_theory.measure_ne_zero_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_addLeftInvariant
@[to_additive]
-theorem measure_pos_iff_nonempty_of_isMulLeftInvariant [Regular μ] (h3μ : μ ≠ 0) {s : Set G}
+theorem measure_pos_iff_nonempty_of_mulLeftInvariant [Regular μ] (h3μ : μ ≠ 0) {s : Set G}
(hs : IsOpen s) : 0 < μ s ↔ s.Nonempty :=
- pos_iff_ne_zero.trans <| measure_ne_zero_iff_nonempty_of_isMulLeftInvariant h3μ hs
-#align measure_theory.measure_pos_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_isMulLeftInvariant
-#align measure_theory.measure_pos_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_is_add_left_invariant
+ pos_iff_ne_zero.trans <| measure_ne_zero_iff_nonempty_of_mulLeftInvariant h3μ hs
+#align measure_theory.measure_pos_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_mulLeftInvariant
+#align measure_theory.measure_pos_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_addLeftInvariant
/-- If a left-invariant measure gives finite mass to a nonempty open set, then it gives finite mass
to any compact set. -/
@[to_additive
"If a left-invariant measure gives finite mass to a nonempty open set, then it gives\nfinite mass to any compact set."]
-theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOpen U)
+theorem measure_lt_top_of_isCompact_of_mulLeftInvariant (U : Set G) (hU : IsOpen U)
(h'U : U.Nonempty) (h : μ U ≠ ∞) {K : Set G} (hK : IsCompact K) : μ K < ∞ :=
by
rw [← hU.interior_eq] at h'U
@@ -583,27 +618,27 @@ theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOp
_ = Finset.card t * μ U := by simp only [measure_preimage_mul, Finset.sum_const, nsmul_eq_mul]
_ < ∞ := ENNReal.mul_lt_top (ENNReal.nat_ne_top _) h
-#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant
-#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_is_add_left_invariant
+#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_mulLeftInvariant
+#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_addLeftInvariant
/-- If a left-invariant measure gives finite mass to a set with nonempty interior, then
it gives finite mass to any compact set. -/
@[to_additive
"If a left-invariant measure gives finite mass to a set with nonempty interior, then\nit gives finite mass to any compact set."]
-theorem measure_lt_top_of_isCompact_of_is_mul_left_invariant' {U : Set G}
- (hU : (interior U).Nonempty) (h : μ U ≠ ∞) {K : Set G} (hK : IsCompact K) : μ K < ∞ :=
- measure_lt_top_of_isCompact_of_isMulLeftInvariant (interior U) isOpen_interior hU
+theorem measure_lt_top_of_isCompact_of_mulLeftInvariant' {U : Set G} (hU : (interior U).Nonempty)
+ (h : μ U ≠ ∞) {K : Set G} (hK : IsCompact K) : μ K < ∞ :=
+ measure_lt_top_of_isCompact_of_mulLeftInvariant (interior U) isOpen_interior hU
((measure_mono interior_subset).trans_lt (lt_top_iff_ne_top.2 h)).Ne hK
-#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_is_mul_left_invariant'
-#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_is_add_left_invariant'
+#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_mulLeftInvariant'
+#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_addLeftInvariant'
/-- In a noncompact locally compact group, a left-invariant measure which is positive
on open sets has infinite mass. -/
@[simp,
to_additive
"In a noncompact locally compact additive group, a left-invariant measure which\nis positive on open sets has infinite mass."]
-theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSpace G]
- (μ : Measure G) [OpenPosMeasure μ] [μ.IsMulLeftInvariant] : μ univ = ∞ :=
+theorem measure_univ_of_mulLeftInvariant [LocallyCompactSpace G] [NoncompactSpace G] (μ : Measure G)
+ [OpenPosMeasure μ] [μ.MulLeftInvariant] : μ univ = ∞ :=
by
/- Consider a closed compact set `K` with nonempty interior. For any compact set `L`, one may
find `g = g (L)` such that `L` is disjoint from `g • K`. Iterating this, one finds
@@ -652,8 +687,8 @@ theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSp
simp only [ENNReal.top_mul', K_pos.ne', if_false] at N
apply top_le_iff.1
exact le_of_tendsto' N fun n => measure_mono (subset_univ _)
-#align measure_theory.measure_univ_of_is_mul_left_invariant MeasureTheory.measure_univ_of_isMulLeftInvariant
-#align measure_theory.measure_univ_of_is_add_left_invariant MeasureTheory.measure_univ_of_is_add_left_invariant
+#align measure_theory.measure_univ_of_is_mul_left_invariant MeasureTheory.measure_univ_of_mulLeftInvariant
+#align measure_theory.measure_univ_of_is_add_left_invariant MeasureTheory.measure_univ_of_addLeftInvariant
end TopologicalGroup
@@ -664,13 +699,13 @@ variable [CommSemigroup G]
/-- In an abelian group every left invariant measure is also right-invariant.
We don't declare the converse as an instance, since that would loop type-class inference, and
we use `is_mul_left_invariant` as the default hypothesis in abelian groups. -/
-@[to_additive IsAddLeftInvariant.is_add_right_invariant
+@[to_additive MeasureTheory.AddLeftInvariant.addRightInvariant
"In an abelian additive\ngroup every left invariant measure is also right-invariant. We don't declare the converse as an\ninstance, since that would loop type-class inference, and we use `is_add_left_invariant` as the\ndefault hypothesis in abelian groups."]
-instance (priority := 100) IsMulLeftInvariant.isMulRightInvariant {μ : Measure G}
- [IsMulLeftInvariant μ] : IsMulRightInvariant μ :=
+instance (priority := 100) MulLeftInvariant.mulRightInvariant {μ : Measure G} [MulLeftInvariant μ] :
+ MulRightInvariant μ :=
⟨fun g => by simp_rw [mul_comm, map_mul_left_eq_self]⟩
-#align measure_theory.is_mul_left_invariant.is_mul_right_invariant MeasureTheory.IsMulLeftInvariant.isMulRightInvariant
-#align is_add_left_invariant.is_add_right_invariant IsAddLeftInvariant.is_add_right_invariant
+#align measure_theory.is_mul_left_invariant.is_mul_right_invariant MeasureTheory.MulLeftInvariant.mulRightInvariant
+#align is_add_left_invariant.is_add_right_invariant MeasureTheory.AddLeftInvariant.addRightInvariant
end CommSemigroup
@@ -678,20 +713,25 @@ section Haar
namespace Measure
+#print MeasureTheory.Measure.AddHaarMeasure /-
/-- A measure on an additive group is an additive Haar measure if it is left-invariant, and gives
finite mass to compact sets and positive mass to open sets. -/
-class IsAddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends FiniteMeasureOnCompacts μ, IsAddLeftInvariant μ, OpenPosMeasure μ : Prop
-#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
+class AddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
+ (μ : Measure G) extends FiniteMeasureOnCompacts μ, AddLeftInvariant μ, OpenPosMeasure μ : Prop
+#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.AddHaarMeasure
+-/
+#print MeasureTheory.Measure.HaarMeasure /-
/-- A measure on a group is a Haar measure if it is left-invariant, and gives finite mass to compact
sets and positive mass to open sets. -/
@[to_additive]
-class IsHaarMeasure {G : Type _} [Group G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends FiniteMeasureOnCompacts μ, IsMulLeftInvariant μ, OpenPosMeasure μ : Prop
-#align measure_theory.measure.is_haar_measure MeasureTheory.Measure.IsHaarMeasure
-#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
+class HaarMeasure {G : Type _} [Group G] [TopologicalSpace G] [MeasurableSpace G]
+ (μ : Measure G) extends FiniteMeasureOnCompacts μ, MulLeftInvariant μ, OpenPosMeasure μ : Prop
+#align measure_theory.measure.is_haar_measure MeasureTheory.Measure.HaarMeasure
+#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.AddHaarMeasure
+-/
+#print MeasureTheory.Measure.locallyFiniteMeasure_of_haarMeasure /-
/-- Record that a Haar measure on a locally compact space is locally finite. This is needed as the
fact that a measure which is finite on compacts is locally finite is not registered as an instance,
to avoid an instance loop.
@@ -699,16 +739,17 @@ to avoid an instance loop.
See Note [lower instance priority]. -/
@[to_additive
"Record that an additive Haar measure on a locally compact space is\nlocally finite. This is needed as the fact that a measure which is finite on compacts is locally\nfinite is not registered as an instance, to avoid an instance loop.\n\nSee Note [lower instance priority]"]
-instance (priority := 100) locallyFiniteMeasure_of_isHaarMeasure {G : Type _} [Group G]
+instance (priority := 100) locallyFiniteMeasure_of_haarMeasure {G : Type _} [Group G]
[MeasurableSpace G] [TopologicalSpace G] [LocallyCompactSpace G] (μ : Measure G)
- [IsHaarMeasure μ] : LocallyFiniteMeasure μ :=
+ [HaarMeasure μ] : LocallyFiniteMeasure μ :=
locallyFiniteMeasure_of_finiteMeasureOnCompacts
-#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.locallyFiniteMeasure_of_isHaarMeasure
-#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.locallyFiniteMeasure_of_is_add_haar_measure
+#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.locallyFiniteMeasure_of_haarMeasure
+#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.locallyFiniteMeasure_of_addHaarMeasure
+-/
section
-variable [Group G] [TopologicalSpace G] (μ : Measure G) [IsHaarMeasure μ]
+variable [Group G] [TopologicalSpace G] (μ : Measure G) [HaarMeasure μ]
@[simp, to_additive]
theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ {(1 : G)} :=
@@ -716,74 +757,74 @@ theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ
convert measure_preimage_mul μ g⁻¹ _
simp only [mul_one, preimage_mul_left_singleton, inv_inv]
#align measure_theory.measure.haar_singleton MeasureTheory.Measure.haar_singleton
-#align measure_theory.measure.add_haar_singleton MeasureTheory.Measure.add_haar_singleton
+#align measure_theory.measure.add_haar_singleton MeasureTheory.Measure.addHaar_singleton
-@[to_additive MeasureTheory.Measure.IsAddHaarMeasure.smul]
-theorem IsHaarMeasure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞) : IsHaarMeasure (c • μ) :=
+@[to_additive MeasureTheory.Measure.AddHaarMeasure.smul]
+theorem HaarMeasure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞) : HaarMeasure (c • μ) :=
{ lt_top_of_isCompact := fun K hK => ENNReal.mul_lt_top Ctop hK.measure_lt_top.Ne
to_openPosMeasure := openPosMeasure_smul μ cpos }
-#align measure_theory.measure.is_haar_measure.smul MeasureTheory.Measure.IsHaarMeasure.smul
-#align measure_theory.measure.is_add_haar_measure.smul MeasureTheory.Measure.IsAddHaarMeasure.smul
+#align measure_theory.measure.is_haar_measure.smul MeasureTheory.Measure.HaarMeasure.smul
+#align measure_theory.measure.is_add_haar_measure.smul MeasureTheory.Measure.AddHaarMeasure.smul
/-- If a left-invariant measure gives positive mass to some compact set with nonempty interior, then
it is a Haar measure. -/
@[to_additive
"If a left-invariant measure gives positive mass to some compact set with nonempty\ninterior, then it is an additive Haar measure."]
-theorem isHaarMeasure_of_isCompact_nonempty_interior [TopologicalGroup G] [BorelSpace G]
- (μ : Measure G) [IsMulLeftInvariant μ] (K : Set G) (hK : IsCompact K)
- (h'K : (interior K).Nonempty) (h : μ K ≠ 0) (h' : μ K ≠ ∞) : IsHaarMeasure μ :=
- { lt_top_of_isCompact := fun L hL =>
- measure_lt_top_of_isCompact_of_is_mul_left_invariant' h'K h' hL
- to_openPosMeasure := openPosMeasure_of_mul_left_invariant_of_compact K hK h }
-#align measure_theory.measure.is_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.isHaarMeasure_of_isCompact_nonempty_interior
-#align measure_theory.measure.is_add_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.is_add_haar_measure_of_isCompact_nonempty_interior
+theorem haarMeasure_of_isCompact_nonempty_interior [TopologicalGroup G] [BorelSpace G]
+ (μ : Measure G) [MulLeftInvariant μ] (K : Set G) (hK : IsCompact K)
+ (h'K : (interior K).Nonempty) (h : μ K ≠ 0) (h' : μ K ≠ ∞) : HaarMeasure μ :=
+ { lt_top_of_isCompact := fun L hL => measure_lt_top_of_isCompact_of_mulLeftInvariant' h'K h' hL
+ to_openPosMeasure := openPosMeasure_of_mulLeftInvariant_of_compact K hK h }
+#align measure_theory.measure.is_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.haarMeasure_of_isCompact_nonempty_interior
+#align measure_theory.measure.is_add_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.addHaarMeasure_of_isCompact_nonempty_interior
/-- The image of a Haar measure under a continuous surjective proper group homomorphism is again
a Haar measure. See also `mul_equiv.is_haar_measure_map`. -/
@[to_additive
"The image of an additive Haar measure under a continuous surjective proper additive\ngroup homomorphism is again an additive Haar measure. See also\n`add_equiv.is_add_haar_measure_map`."]
-theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
+theorem haarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
[TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [T2Space H] [TopologicalGroup H]
(f : G →* H) (hf : Continuous f) (h_surj : Surjective f)
- (h_prop : Tendsto f (cocompact G) (cocompact H)) : IsHaarMeasure (Measure.map f μ) :=
- { to_isMulLeftInvariant := isMulLeftInvariant_map f.toMulHom hf.Measurable h_surj
+ (h_prop : Tendsto f (cocompact G) (cocompact H)) : HaarMeasure (Measure.map f μ) :=
+ { to_mulLeftInvariant := mulLeftInvariant_map f.toMulHom hf.Measurable h_surj
lt_top_of_isCompact := by
intro K hK
rw [map_apply hf.measurable hK.measurable_set]
exact IsCompact.measure_lt_top ((⟨⟨f, hf⟩, h_prop⟩ : CocompactMap G H).isCompact_preimage hK)
to_openPosMeasure := hf.openPosMeasure_map h_surj }
-#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.isHaarMeasure_map
-#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.is_add_haar_measure_map
+#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.haarMeasure_map
+#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.addHaarMeasure_map
/-- A convenience wrapper for `measure_theory.measure.is_haar_measure_map`. -/
@[to_additive "A convenience wrapper for `measure_theory.measure.is_add_haar_measure_map`."]
-theorem MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
+theorem MulEquiv.haarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
[TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [T2Space H] [TopologicalGroup H]
- (e : G ≃* H) (he : Continuous e) (hesymm : Continuous e.symm) :
- IsHaarMeasure (Measure.map e μ) :=
- isHaarMeasure_map μ (e : G →* H) he e.Surjective
+ (e : G ≃* H) (he : Continuous e) (hesymm : Continuous e.symm) : HaarMeasure (Measure.map e μ) :=
+ haarMeasure_map μ (e : G →* H) he e.Surjective
({ e with } : G ≃ₜ H).toCocompactMap.cocompact_tendsto'
-#align mul_equiv.is_haar_measure_map MulEquiv.isHaarMeasure_map
-#align add_equiv.is_add_haar_measure_map AddEquiv.is_add_haar_measure_map
+#align mul_equiv.is_haar_measure_map MulEquiv.haarMeasure_map
+#align add_equiv.is_add_haar_measure_map AddEquiv.addHaarMeasure_map
+#print MeasureTheory.Measure.HaarMeasure.sigmaFinite /-
/-- A Haar measure on a σ-compact space is σ-finite.
See Note [lower instance priority] -/
@[to_additive
"A Haar measure on a σ-compact space is σ-finite.\n\nSee Note [lower instance priority]"]
-instance (priority := 100) IsHaarMeasure.sigmaFinite [SigmaCompactSpace G] : SigmaFinite μ :=
+instance (priority := 100) HaarMeasure.sigmaFinite [SigmaCompactSpace G] : SigmaFinite μ :=
⟨⟨{ Set := compactCovering G
set_mem := fun n => mem_univ _
Finite := fun n => IsCompact.measure_lt_top <| isCompact_compactCovering G n
spanning := iUnion_compactCovering G }⟩⟩
-#align measure_theory.measure.is_haar_measure.sigma_finite MeasureTheory.Measure.IsHaarMeasure.sigmaFinite
-#align measure_theory.measure.is_add_haar_measure.sigma_finite MeasureTheory.Measure.IsAddHaarMeasure.sigmaFinite
+#align measure_theory.measure.is_haar_measure.sigma_finite MeasureTheory.Measure.HaarMeasure.sigmaFinite
+#align measure_theory.measure.is_add_haar_measure.sigma_finite MeasureTheory.Measure.AddHaarMeasure.sigmaFinite
+-/
@[to_additive]
instance {G : Type _} [Group G] [TopologicalSpace G] {mG : MeasurableSpace G} {H : Type _} [Group H]
- [TopologicalSpace H] {mH : MeasurableSpace H} (μ : Measure G) (ν : Measure H) [IsHaarMeasure μ]
- [IsHaarMeasure ν] [SigmaFinite μ] [SigmaFinite ν] [MeasurableMul G] [MeasurableMul H] :
- IsHaarMeasure (μ.Prod ν) where
+ [TopologicalSpace H] {mH : MeasurableSpace H} (μ : Measure G) (ν : Measure H) [HaarMeasure μ]
+ [HaarMeasure ν] [SigmaFinite μ] [SigmaFinite ν] [MeasurableMul G] [MeasurableMul H] :
+ HaarMeasure (μ.Prod ν) where
/-- If the neutral element of a group is not isolated, then a Haar measure on this group has
no atoms.
@@ -792,8 +833,8 @@ The additive version of this instance applies in particular to show that an addi
a nontrivial finite-dimensional real vector space has no atom. -/
@[to_additive
"If the zero element of an additive group is not isolated, then an\nadditive Haar measure on this group has no atoms.\n\nThis applies in particular to show that an additive Haar measure on a nontrivial finite-dimensional\nreal vector space has no atom."]
-instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
- [LocallyCompactSpace G] [(𝓝[≠] (1 : G)).ne_bot] (μ : Measure G) [μ.IsHaarMeasure] : NoAtoms μ :=
+instance (priority := 100) HaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
+ [LocallyCompactSpace G] [(𝓝[≠] (1 : G)).ne_bot] (μ : Measure G) [μ.HaarMeasure] : NoAtoms μ :=
by
suffices H : μ {(1 : G)} ≤ 0; · constructor; simp [le_bot_iff.1 H]
obtain ⟨K, K_compact, K_int⟩ : ∃ K : Set G, IsCompact K ∧ (1 : G) ∈ interior K :=
@@ -823,8 +864,8 @@ instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpac
ENNReal.Tendsto.const_div ENNReal.tendsto_nat_nhds_top (Or.inr μKlt)
simp only [ENNReal.div_top] at J
exact ge_of_tendsto' J I
-#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.noAtoms
-#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.noAtoms
+#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.HaarMeasure.noAtoms
+#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.AddHaarMeasure.noAtoms
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -33,7 +33,7 @@ We also give analogues of all these notions in the additive world.
noncomputable section
-open NNReal ENNReal Pointwise BigOperators Topology
+open scoped NNReal ENNReal Pointwise BigOperators Topology
open Inv Set Function MeasureTheory.Measure Filter
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -211,10 +211,8 @@ instance [IsMulLeftInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : Mea
change map (Prod.map ((· * ·) g) ((· * ·) h)) (μ.prod ν) = μ.prod ν
rw [← map_prod_map _ _ (measurable_const_mul g) (measurable_const_mul h),
map_mul_left_eq_self μ g, map_mul_left_eq_self ν h]
- · rw [map_mul_left_eq_self μ g]
- infer_instance
- · rw [map_mul_left_eq_self ν h]
- infer_instance
+ · rw [map_mul_left_eq_self μ g]; infer_instance
+ · rw [map_mul_left_eq_self ν h]; infer_instance
@[to_additive]
instance [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : MeasurableSpace H}
@@ -225,10 +223,8 @@ instance [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : Me
change map (Prod.map (· * g) (· * h)) (μ.prod ν) = μ.prod ν
rw [← map_prod_map _ _ (measurable_mul_const g) (measurable_mul_const h),
map_mul_right_eq_self μ g, map_mul_right_eq_self ν h]
- · rw [map_mul_right_eq_self μ g]
- infer_instance
- · rw [map_mul_right_eq_self ν h]
- infer_instance
+ · rw [map_mul_right_eq_self μ g]; infer_instance
+ · rw [map_mul_right_eq_self ν h]; infer_instance
@[to_additive]
theorem isMulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [MeasurableMul H]
@@ -321,28 +317,22 @@ theorem map_div_right_ae (μ : Measure G) [IsMulRightInvariant μ] (x : G) :
@[to_additive]
theorem eventually_mul_left_iff (μ : Measure G) [IsMulLeftInvariant μ] (t : G) {p : G → Prop} :
- (∀ᵐ x ∂μ, p (t * x)) ↔ ∀ᵐ x ∂μ, p x :=
- by
- conv_rhs => rw [Filter.Eventually, ← map_mul_left_ae μ t]
- rfl
+ (∀ᵐ x ∂μ, p (t * x)) ↔ ∀ᵐ x ∂μ, p x := by
+ conv_rhs => rw [Filter.Eventually, ← map_mul_left_ae μ t]; rfl
#align measure_theory.eventually_mul_left_iff MeasureTheory.eventually_mul_left_iff
#align measure_theory.eventually_add_left_iff MeasureTheory.eventually_add_left_iff
@[to_additive]
theorem eventually_mul_right_iff (μ : Measure G) [IsMulRightInvariant μ] (t : G) {p : G → Prop} :
- (∀ᵐ x ∂μ, p (x * t)) ↔ ∀ᵐ x ∂μ, p x :=
- by
- conv_rhs => rw [Filter.Eventually, ← map_mul_right_ae μ t]
- rfl
+ (∀ᵐ x ∂μ, p (x * t)) ↔ ∀ᵐ x ∂μ, p x := by
+ conv_rhs => rw [Filter.Eventually, ← map_mul_right_ae μ t]; rfl
#align measure_theory.eventually_mul_right_iff MeasureTheory.eventually_mul_right_iff
#align measure_theory.eventually_add_right_iff MeasureTheory.eventually_add_right_iff
@[to_additive]
theorem eventually_div_right_iff (μ : Measure G) [IsMulRightInvariant μ] (t : G) {p : G → Prop} :
- (∀ᵐ x ∂μ, p (x / t)) ↔ ∀ᵐ x ∂μ, p x :=
- by
- conv_rhs => rw [Filter.Eventually, ← map_div_right_ae μ t]
- rfl
+ (∀ᵐ x ∂μ, p (x / t)) ↔ ∀ᵐ x ∂μ, p x := by
+ conv_rhs => rw [Filter.Eventually, ← map_div_right_ae μ t]; rfl
#align measure_theory.eventually_div_right_iff MeasureTheory.eventually_div_right_iff
#align measure_theory.eventually_sub_right_iff MeasureTheory.eventually_sub_right_iff
@@ -517,11 +507,8 @@ variable [TopologicalGroup G]
theorem regular_inv_iff [T2Space G] : μ.inv.regular ↔ μ.regular :=
by
constructor
- · intro h
- rw [← μ.inv_inv]
- exact measure.regular.inv
- · intro h
- exact measure.regular.inv
+ · intro h; rw [← μ.inv_inv]; exact measure.regular.inv
+ · intro h; exact measure.regular.inv
#align measure_theory.regular_inv_iff MeasureTheory.regular_inv_iff
#align measure_theory.regular_neg_iff MeasureTheory.regular_neg_iff
@@ -808,9 +795,7 @@ a nontrivial finite-dimensional real vector space has no atom. -/
instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
[LocallyCompactSpace G] [(𝓝[≠] (1 : G)).ne_bot] (μ : Measure G) [μ.IsHaarMeasure] : NoAtoms μ :=
by
- suffices H : μ {(1 : G)} ≤ 0
- · constructor
- simp [le_bot_iff.1 H]
+ suffices H : μ {(1 : G)} ≤ 0; · constructor; simp [le_bot_iff.1 H]
obtain ⟨K, K_compact, K_int⟩ : ∃ K : Set G, IsCompact K ∧ (1 : G) ∈ interior K :=
by
rcases exists_compact_subset isOpen_univ (mem_univ (1 : G)) with ⟨K, hK⟩
@@ -829,8 +814,7 @@ instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpac
· simp only [tn, Finset.sum_const, nsmul_eq_mul, haar_singleton]
· intro x hx y hy xy
simp only [on_fun, xy.symm, mem_singleton_iff, not_false_iff, disjoint_singleton_right]
- · intro b hb
- exact measurable_set_singleton b
+ · intro b hb; exact measurable_set_singleton b
rw [B] at A
rwa [ENNReal.le_div_iff_mul_le _ (Or.inr μKlt), mul_comm]
right
mathlib commit https://github.com/leanprover-community/mathlib/commit/f51de8769c34652d82d1c8e5f8f18f8374782bed
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn
! This file was ported from Lean 3 source module measure_theory.group.measure
-! leanprover-community/mathlib commit 950605e4b9b4e2827681f637ba997307814a5ca9
+! leanprover-community/mathlib commit fd5edc43dc4f10b85abfe544b88f82cf13c5f844
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -13,7 +13,7 @@ import Mathbin.MeasureTheory.Measure.Regular
import Mathbin.MeasureTheory.Group.MeasurableEquiv
import Mathbin.MeasureTheory.Measure.OpenPos
import Mathbin.MeasureTheory.Group.Action
-import Mathbin.MeasureTheory.Constructions.Prod
+import Mathbin.MeasureTheory.Constructions.Prod.Basic
import Mathbin.Topology.ContinuousFunction.CocompactMap
/-!
@@ -842,29 +842,8 @@ instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpac
#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.noAtoms
#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.noAtoms
-/- The above instance applies in particular to show that an additive Haar measure on a nontrivial
-finite-dimensional real vector space has no atom. -/
-example {E : Type _} [NormedAddCommGroup E] [NormedSpace ℝ E] [Nontrivial E] [FiniteDimensional ℝ E]
- [MeasurableSpace E] [BorelSpace E] (μ : Measure E) [IsAddHaarMeasure μ] : NoAtoms μ := by
- infer_instance
-
end
-variable [NontriviallyNormedField 𝕜] [TopologicalSpace G] [TopologicalSpace H] [AddCommGroup G]
- [AddCommGroup H] [TopologicalAddGroup G] [TopologicalAddGroup H] [Module 𝕜 G] [Module 𝕜 H]
- (μ : Measure G) [IsAddHaarMeasure μ] [BorelSpace G] [BorelSpace H] [T2Space H]
-
-instance MapContinuousLinearEquiv.isAddHaarMeasure (e : G ≃L[𝕜] H) : IsAddHaarMeasure (μ.map e) :=
- e.toAddEquiv.is_add_haar_measure_map _ e.Continuous e.symm.Continuous
-#align measure_theory.measure.map_continuous_linear_equiv.is_add_haar_measure MeasureTheory.Measure.MapContinuousLinearEquiv.isAddHaarMeasure
-
-variable [CompleteSpace 𝕜] [T2Space G] [FiniteDimensional 𝕜 G] [ContinuousSMul 𝕜 G]
- [ContinuousSMul 𝕜 H]
-
-instance MapLinearEquiv.isAddHaarMeasure (e : G ≃ₗ[𝕜] H) : IsAddHaarMeasure (μ.map e) :=
- MapContinuousLinearEquiv.isAddHaarMeasure _ e.toContinuousLinearEquiv
-#align measure_theory.measure.map_linear_equiv.is_add_haar_measure MeasureTheory.Measure.MapLinearEquiv.isAddHaarMeasure
-
end Measure
end Haar
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -788,7 +788,7 @@ instance (priority := 100) IsHaarMeasure.sigmaFinite [SigmaCompactSpace G] : Sig
⟨⟨{ Set := compactCovering G
set_mem := fun n => mem_univ _
Finite := fun n => IsCompact.measure_lt_top <| isCompact_compactCovering G n
- spanning := unionᵢ_compactCovering G }⟩⟩
+ spanning := iUnion_compactCovering G }⟩⟩
#align measure_theory.measure.is_haar_measure.sigma_finite MeasureTheory.Measure.IsHaarMeasure.sigmaFinite
#align measure_theory.measure.is_add_haar_measure.sigma_finite MeasureTheory.Measure.IsAddHaarMeasure.sigmaFinite
mathlib commit https://github.com/leanprover-community/mathlib/commit/cc5dd6244981976cc9da7afc4eee5682b037a013
@@ -119,9 +119,9 @@ instance isMulRightInvariant_smul_nNReal [IsMulRightInvariant μ] (c : ℝ≥0)
#align measure_theory.is_mul_right_invariant_smul_nnreal MeasureTheory.isMulRightInvariant_smul_nNReal
#align measure_theory.is_add_right_invariant_smul_nnreal MeasureTheory.is_add_right_invariant_smul_nnreal
-section HasMeasurableMul
+section MeasurableMul
-variable [HasMeasurableMul G]
+variable [MeasurableMul G]
@[to_additive]
theorem measurePreserving_mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) :
@@ -204,7 +204,7 @@ theorem forall_measure_preimage_mul_right_iff (μ : Measure G) :
@[to_additive]
instance [IsMulLeftInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : MeasurableSpace H}
- {ν : Measure H} [HasMeasurableMul H] [IsMulLeftInvariant ν] [SigmaFinite ν] :
+ {ν : Measure H} [MeasurableMul H] [IsMulLeftInvariant ν] [SigmaFinite ν] :
IsMulLeftInvariant (μ.Prod ν) := by
constructor
rintro ⟨g, h⟩
@@ -218,7 +218,7 @@ instance [IsMulLeftInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : Mea
@[to_additive]
instance [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : MeasurableSpace H}
- {ν : Measure H} [HasMeasurableMul H] [IsMulRightInvariant ν] [SigmaFinite ν] :
+ {ν : Measure H} [MeasurableMul H] [IsMulRightInvariant ν] [SigmaFinite ν] :
IsMulRightInvariant (μ.Prod ν) := by
constructor
rintro ⟨g, h⟩
@@ -231,7 +231,7 @@ instance [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : Me
infer_instance
@[to_additive]
-theorem isMulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [HasMeasurableMul H]
+theorem isMulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [MeasurableMul H]
[IsMulLeftInvariant μ] (f : G →ₙ* H) (hf : Measurable f) (h_surj : Surjective f) :
IsMulLeftInvariant (Measure.map f μ) :=
by
@@ -246,7 +246,7 @@ theorem isMulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [HasMeas
#align measure_theory.is_mul_left_invariant_map MeasureTheory.isMulLeftInvariant_map
#align measure_theory.is_add_left_invariant_map MeasureTheory.is_add_left_invariant_map
-end HasMeasurableMul
+end MeasurableMul
end Mul
@@ -264,7 +264,7 @@ end DivInvMonoid
section Group
-variable [Group G] [HasMeasurableMul G]
+variable [Group G] [MeasurableMul G]
@[to_additive]
theorem measurePreserving_div_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
@@ -387,7 +387,7 @@ theorem map_inv_eq_self (μ : Measure G) [IsInvInvariant μ] : map Inv.inv μ =
#align measure_theory.measure.map_inv_eq_self MeasureTheory.Measure.map_inv_eq_self
#align measure_theory.measure.map_neg_eq_self MeasureTheory.Measure.map_neg_eq_self
-variable [HasMeasurableInv G]
+variable [MeasurableInv G]
@[to_additive]
theorem measurePreserving_inv (μ : Measure G) [IsInvInvariant μ] : MeasurePreserving Inv.inv μ μ :=
@@ -399,7 +399,7 @@ end Inv
section InvolutiveInv
-variable [InvolutiveInv G] [HasMeasurableInv G]
+variable [InvolutiveInv G] [MeasurableInv G]
@[simp, to_additive]
theorem inv_apply (μ : Measure G) (s : Set G) : μ.inv s = μ s⁻¹ :=
@@ -434,7 +434,7 @@ end InvolutiveInv
section DivisionMonoid
-variable [DivisionMonoid G] [HasMeasurableMul G] [HasMeasurableInv G] {μ : Measure G}
+variable [DivisionMonoid G] [MeasurableMul G] [MeasurableInv G] {μ : Measure G}
@[to_additive]
instance [IsMulLeftInvariant μ] : IsMulRightInvariant μ.inv :=
@@ -488,7 +488,7 @@ end DivisionMonoid
section Group
-variable [Group G] [HasMeasurableMul G] [HasMeasurableInv G] {μ : Measure G}
+variable [Group G] [MeasurableMul G] [MeasurableInv G] {μ : Measure G}
@[to_additive]
theorem map_div_left_ae (μ : Measure G) [IsMulLeftInvariant μ] [IsInvInvariant μ] (x : G) :
@@ -795,7 +795,7 @@ instance (priority := 100) IsHaarMeasure.sigmaFinite [SigmaCompactSpace G] : Sig
@[to_additive]
instance {G : Type _} [Group G] [TopologicalSpace G] {mG : MeasurableSpace G} {H : Type _} [Group H]
[TopologicalSpace H] {mH : MeasurableSpace H} (μ : Measure G) (ν : Measure H) [IsHaarMeasure μ]
- [IsHaarMeasure ν] [SigmaFinite μ] [SigmaFinite ν] [HasMeasurableMul G] [HasMeasurableMul H] :
+ [IsHaarMeasure ν] [SigmaFinite μ] [SigmaFinite ν] [MeasurableMul G] [MeasurableMul H] :
IsHaarMeasure (μ.Prod ν) where
/-- If the neutral element of a group is not isolated, then a Haar measure on this group has
mathlib commit https://github.com/leanprover-community/mathlib/commit/cc5dd6244981976cc9da7afc4eee5682b037a013
@@ -531,8 +531,8 @@ variable [IsMulLeftInvariant μ]
any open set. -/
@[to_additive
"If a left-invariant measure gives positive mass to a compact set, then it gives\npositive mass to any open set."]
-theorem isOpenPosMeasure_of_mul_left_invariant_of_compact (K : Set G) (hK : IsCompact K)
- (h : μ K ≠ 0) : IsOpenPosMeasure μ :=
+theorem openPosMeasure_of_mul_left_invariant_of_compact (K : Set G) (hK : IsCompact K)
+ (h : μ K ≠ 0) : OpenPosMeasure μ :=
by
refine' ⟨fun U hU hne => _⟩
contrapose! h
@@ -545,17 +545,17 @@ theorem isOpenPosMeasure_of_mul_left_invariant_of_compact (K : Set G) (hK : IsCo
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_bUnion_finset_le _ _)
_ = 0 := by simp [measure_preimage_mul, h]
-#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_mul_left_invariant_of_compact
-#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_add_left_invariant_of_compact
+#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.openPosMeasure_of_mul_left_invariant_of_compact
+#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.openPosMeasure_of_add_left_invariant_of_compact
/-- A nonzero left-invariant regular measure gives positive mass to any open set. -/
@[to_additive "A nonzero left-invariant regular measure gives positive mass to any open set."]
-theorem isOpenPosMeasure_of_mul_left_invariant_of_regular [Regular μ] (h₀ : μ ≠ 0) :
- IsOpenPosMeasure μ :=
+theorem openPosMeasure_of_mul_left_invariant_of_regular [Regular μ] (h₀ : μ ≠ 0) :
+ OpenPosMeasure μ :=
let ⟨K, hK, h2K⟩ := Regular.exists_compact_not_null.mpr h₀
- isOpenPosMeasure_of_mul_left_invariant_of_compact K hK h2K
-#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_mul_left_invariant_of_regular
-#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_add_left_invariant_of_regular
+ openPosMeasure_of_mul_left_invariant_of_compact K hK h2K
+#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.openPosMeasure_of_mul_left_invariant_of_regular
+#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.openPosMeasure_of_add_left_invariant_of_regular
@[to_additive]
theorem null_iff_of_isMulLeftInvariant [Regular μ] {s : Set G} (hs : IsOpen s) :
@@ -616,7 +616,7 @@ on open sets has infinite mass. -/
to_additive
"In a noncompact locally compact additive group, a left-invariant measure which\nis positive on open sets has infinite mass."]
theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSpace G]
- (μ : Measure G) [IsOpenPosMeasure μ] [μ.IsMulLeftInvariant] : μ univ = ∞ :=
+ (μ : Measure G) [OpenPosMeasure μ] [μ.IsMulLeftInvariant] : μ univ = ∞ :=
by
/- Consider a closed compact set `K` with nonempty interior. For any compact set `L`, one may
find `g = g (L)` such that `L` is disjoint from `g • K`. Iterating this, one finds
@@ -694,14 +694,14 @@ namespace Measure
/-- A measure on an additive group is an additive Haar measure if it is left-invariant, and gives
finite mass to compact sets and positive mass to open sets. -/
class IsAddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends FiniteMeasureOnCompacts μ, IsAddLeftInvariant μ, IsOpenPosMeasure μ : Prop
+ (μ : Measure G) extends FiniteMeasureOnCompacts μ, IsAddLeftInvariant μ, OpenPosMeasure μ : Prop
#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
/-- A measure on a group is a Haar measure if it is left-invariant, and gives finite mass to compact
sets and positive mass to open sets. -/
@[to_additive]
class IsHaarMeasure {G : Type _} [Group G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends FiniteMeasureOnCompacts μ, IsMulLeftInvariant μ, IsOpenPosMeasure μ : Prop
+ (μ : Measure G) extends FiniteMeasureOnCompacts μ, IsMulLeftInvariant μ, OpenPosMeasure μ : Prop
#align measure_theory.measure.is_haar_measure MeasureTheory.Measure.IsHaarMeasure
#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
@@ -734,7 +734,7 @@ theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ
@[to_additive MeasureTheory.Measure.IsAddHaarMeasure.smul]
theorem IsHaarMeasure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞) : IsHaarMeasure (c • μ) :=
{ lt_top_of_isCompact := fun K hK => ENNReal.mul_lt_top Ctop hK.measure_lt_top.Ne
- to_isOpenPosMeasure := isOpenPosMeasure_smul μ cpos }
+ to_openPosMeasure := openPosMeasure_smul μ cpos }
#align measure_theory.measure.is_haar_measure.smul MeasureTheory.Measure.IsHaarMeasure.smul
#align measure_theory.measure.is_add_haar_measure.smul MeasureTheory.Measure.IsAddHaarMeasure.smul
@@ -747,7 +747,7 @@ theorem isHaarMeasure_of_isCompact_nonempty_interior [TopologicalGroup G] [Borel
(h'K : (interior K).Nonempty) (h : μ K ≠ 0) (h' : μ K ≠ ∞) : IsHaarMeasure μ :=
{ lt_top_of_isCompact := fun L hL =>
measure_lt_top_of_isCompact_of_is_mul_left_invariant' h'K h' hL
- to_isOpenPosMeasure := isOpenPosMeasure_of_mul_left_invariant_of_compact K hK h }
+ to_openPosMeasure := openPosMeasure_of_mul_left_invariant_of_compact K hK h }
#align measure_theory.measure.is_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.isHaarMeasure_of_isCompact_nonempty_interior
#align measure_theory.measure.is_add_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.is_add_haar_measure_of_isCompact_nonempty_interior
@@ -764,7 +764,7 @@ theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Grou
intro K hK
rw [map_apply hf.measurable hK.measurable_set]
exact IsCompact.measure_lt_top ((⟨⟨f, hf⟩, h_prop⟩ : CocompactMap G H).isCompact_preimage hK)
- to_isOpenPosMeasure := hf.isOpenPosMeasure_map h_surj }
+ to_openPosMeasure := hf.openPosMeasure_map h_surj }
#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.isHaarMeasure_map
#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.is_add_haar_measure_map
mathlib commit https://github.com/leanprover-community/mathlib/commit/d4437c68c8d350fc9d4e95e1e174409db35e30d7
@@ -694,16 +694,14 @@ namespace Measure
/-- A measure on an additive group is an additive Haar measure if it is left-invariant, and gives
finite mass to compact sets and positive mass to open sets. -/
class IsAddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends IsFiniteMeasureOnCompacts μ, IsAddLeftInvariant μ, IsOpenPosMeasure μ :
- Prop
+ (μ : Measure G) extends FiniteMeasureOnCompacts μ, IsAddLeftInvariant μ, IsOpenPosMeasure μ : Prop
#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
/-- A measure on a group is a Haar measure if it is left-invariant, and gives finite mass to compact
sets and positive mass to open sets. -/
@[to_additive]
class IsHaarMeasure {G : Type _} [Group G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends IsFiniteMeasureOnCompacts μ, IsMulLeftInvariant μ, IsOpenPosMeasure μ :
- Prop
+ (μ : Measure G) extends FiniteMeasureOnCompacts μ, IsMulLeftInvariant μ, IsOpenPosMeasure μ : Prop
#align measure_theory.measure.is_haar_measure MeasureTheory.Measure.IsHaarMeasure
#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
@@ -714,12 +712,12 @@ to avoid an instance loop.
See Note [lower instance priority]. -/
@[to_additive
"Record that an additive Haar measure on a locally compact space is\nlocally finite. This is needed as the fact that a measure which is finite on compacts is locally\nfinite is not registered as an instance, to avoid an instance loop.\n\nSee Note [lower instance priority]"]
-instance (priority := 100) isLocallyFiniteMeasure_of_isHaarMeasure {G : Type _} [Group G]
+instance (priority := 100) locallyFiniteMeasure_of_isHaarMeasure {G : Type _} [Group G]
[MeasurableSpace G] [TopologicalSpace G] [LocallyCompactSpace G] (μ : Measure G)
- [IsHaarMeasure μ] : IsLocallyFiniteMeasure μ :=
- isLocallyFiniteMeasure_of_isFiniteMeasureOnCompacts
-#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_isHaarMeasure
-#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_is_add_haar_measure
+ [IsHaarMeasure μ] : LocallyFiniteMeasure μ :=
+ locallyFiniteMeasure_of_finiteMeasureOnCompacts
+#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.locallyFiniteMeasure_of_isHaarMeasure
+#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.locallyFiniteMeasure_of_is_add_haar_measure
section
@@ -807,9 +805,9 @@ The additive version of this instance applies in particular to show that an addi
a nontrivial finite-dimensional real vector space has no atom. -/
@[to_additive
"If the zero element of an additive group is not isolated, then an\nadditive Haar measure on this group has no atoms.\n\nThis applies in particular to show that an additive Haar measure on a nontrivial finite-dimensional\nreal vector space has no atom."]
-instance (priority := 100) IsHaarMeasure.hasNoAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
- [LocallyCompactSpace G] [(𝓝[≠] (1 : G)).ne_bot] (μ : Measure G) [μ.IsHaarMeasure] :
- HasNoAtoms μ := by
+instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
+ [LocallyCompactSpace G] [(𝓝[≠] (1 : G)).ne_bot] (μ : Measure G) [μ.IsHaarMeasure] : NoAtoms μ :=
+ by
suffices H : μ {(1 : G)} ≤ 0
· constructor
simp [le_bot_iff.1 H]
@@ -841,13 +839,13 @@ instance (priority := 100) IsHaarMeasure.hasNoAtoms [TopologicalGroup G] [BorelS
ENNReal.Tendsto.const_div ENNReal.tendsto_nat_nhds_top (Or.inr μKlt)
simp only [ENNReal.div_top] at J
exact ge_of_tendsto' J I
-#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.hasNoAtoms
-#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.hasNoAtoms
+#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.noAtoms
+#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.noAtoms
/- The above instance applies in particular to show that an additive Haar measure on a nontrivial
finite-dimensional real vector space has no atom. -/
example {E : Type _} [NormedAddCommGroup E] [NormedSpace ℝ E] [Nontrivial E] [FiniteDimensional ℝ E]
- [MeasurableSpace E] [BorelSpace E] (μ : Measure E) [IsAddHaarMeasure μ] : HasNoAtoms μ := by
+ [MeasurableSpace E] [BorelSpace E] (μ : Measure E) [IsAddHaarMeasure μ] : NoAtoms μ := by
infer_instance
end
mathlib commit https://github.com/leanprover-community/mathlib/commit/92c69b77c5a7dc0f7eeddb552508633305157caa
@@ -93,29 +93,30 @@ theorem map_mul_right_eq_self (μ : Measure G) [IsMulRightInvariant μ] (g : G)
#align measure_theory.map_add_right_eq_self MeasureTheory.map_add_right_eq_self
@[to_additive MeasureTheory.is_add_left_invariant_smul]
-instance isMulLeftInvariantSmul [IsMulLeftInvariant μ] (c : ℝ≥0∞) : IsMulLeftInvariant (c • μ) :=
+instance isMulLeftInvariant_smul [IsMulLeftInvariant μ] (c : ℝ≥0∞) : IsMulLeftInvariant (c • μ) :=
⟨fun g => by rw [measure.map_smul, map_mul_left_eq_self]⟩
-#align measure_theory.is_mul_left_invariant_smul MeasureTheory.isMulLeftInvariantSmul
+#align measure_theory.is_mul_left_invariant_smul MeasureTheory.isMulLeftInvariant_smul
#align measure_theory.is_add_left_invariant_smul MeasureTheory.is_add_left_invariant_smul
@[to_additive MeasureTheory.is_add_right_invariant_smul]
-instance isMulRightInvariantSmul [IsMulRightInvariant μ] (c : ℝ≥0∞) : IsMulRightInvariant (c • μ) :=
+instance isMulRightInvariant_smul [IsMulRightInvariant μ] (c : ℝ≥0∞) :
+ IsMulRightInvariant (c • μ) :=
⟨fun g => by rw [measure.map_smul, map_mul_right_eq_self]⟩
-#align measure_theory.is_mul_right_invariant_smul MeasureTheory.isMulRightInvariantSmul
+#align measure_theory.is_mul_right_invariant_smul MeasureTheory.isMulRightInvariant_smul
#align measure_theory.is_add_right_invariant_smul MeasureTheory.is_add_right_invariant_smul
@[to_additive MeasureTheory.is_add_left_invariant_smul_nnreal]
-instance isMulLeftInvariantSmulNnreal [IsMulLeftInvariant μ] (c : ℝ≥0) :
+instance isMulLeftInvariant_smul_nNReal [IsMulLeftInvariant μ] (c : ℝ≥0) :
IsMulLeftInvariant (c • μ) :=
- MeasureTheory.isMulLeftInvariantSmul (c : ℝ≥0∞)
-#align measure_theory.is_mul_left_invariant_smul_nnreal MeasureTheory.isMulLeftInvariantSmulNnreal
+ MeasureTheory.isMulLeftInvariant_smul (c : ℝ≥0∞)
+#align measure_theory.is_mul_left_invariant_smul_nnreal MeasureTheory.isMulLeftInvariant_smul_nNReal
#align measure_theory.is_add_left_invariant_smul_nnreal MeasureTheory.is_add_left_invariant_smul_nnreal
@[to_additive MeasureTheory.is_add_right_invariant_smul_nnreal]
-instance isMulRightInvariantSmulNnreal [IsMulRightInvariant μ] (c : ℝ≥0) :
+instance isMulRightInvariant_smul_nNReal [IsMulRightInvariant μ] (c : ℝ≥0) :
IsMulRightInvariant (c • μ) :=
- MeasureTheory.isMulRightInvariantSmul (c : ℝ≥0∞)
-#align measure_theory.is_mul_right_invariant_smul_nnreal MeasureTheory.isMulRightInvariantSmulNnreal
+ MeasureTheory.isMulRightInvariant_smul (c : ℝ≥0∞)
+#align measure_theory.is_mul_right_invariant_smul_nnreal MeasureTheory.isMulRightInvariant_smul_nNReal
#align measure_theory.is_add_right_invariant_smul_nnreal MeasureTheory.is_add_right_invariant_smul_nnreal
section HasMeasurableMul
@@ -123,47 +124,47 @@ section HasMeasurableMul
variable [HasMeasurableMul G]
@[to_additive]
-theorem measurePreservingMulLeft (μ : Measure G) [IsMulLeftInvariant μ] (g : G) :
+theorem measurePreserving_mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) :
MeasurePreserving ((· * ·) g) μ μ :=
⟨measurable_const_mul g, map_mul_left_eq_self μ g⟩
-#align measure_theory.measure_preserving_mul_left MeasureTheory.measurePreservingMulLeft
-#align measure_theory.measure_preserving_add_left MeasureTheory.measure_preserving_add_left
+#align measure_theory.measure_preserving_mul_left MeasureTheory.measurePreserving_mul_left
+#align measure_theory.measure_preserving_add_left MeasureTheory.measurePreserving_add_left
@[to_additive]
-theorem MeasurePreserving.mulLeft (μ : Measure G) [IsMulLeftInvariant μ] (g : G) {X : Type _}
+theorem MeasurePreserving.mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) {X : Type _}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
MeasurePreserving (fun x => g * f x) μ' μ :=
- (measurePreservingMulLeft μ g).comp hf
-#align measure_theory.measure_preserving.mul_left MeasureTheory.MeasurePreserving.mulLeft
+ (measurePreserving_mul_left μ g).comp hf
+#align measure_theory.measure_preserving.mul_left MeasureTheory.MeasurePreserving.mul_left
#align measure_theory.measure_preserving.add_left MeasureTheory.MeasurePreserving.add_left
@[to_additive]
-theorem measurePreservingMulRight (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
+theorem measurePreserving_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
MeasurePreserving (· * g) μ μ :=
⟨measurable_mul_const g, map_mul_right_eq_self μ g⟩
-#align measure_theory.measure_preserving_mul_right MeasureTheory.measurePreservingMulRight
-#align measure_theory.measure_preserving_add_right MeasureTheory.measure_preserving_add_right
+#align measure_theory.measure_preserving_mul_right MeasureTheory.measurePreserving_mul_right
+#align measure_theory.measure_preserving_add_right MeasureTheory.measurePreserving_add_right
@[to_additive]
-theorem MeasurePreserving.mulRight (μ : Measure G) [IsMulRightInvariant μ] (g : G) {X : Type _}
+theorem MeasurePreserving.mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) {X : Type _}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
MeasurePreserving (fun x => f x * g) μ' μ :=
- (measurePreservingMulRight μ g).comp hf
-#align measure_theory.measure_preserving.mul_right MeasureTheory.MeasurePreserving.mulRight
+ (measurePreserving_mul_right μ g).comp hf
+#align measure_theory.measure_preserving.mul_right MeasureTheory.MeasurePreserving.mul_right
#align measure_theory.measure_preserving.add_right MeasureTheory.MeasurePreserving.add_right
@[to_additive]
instance IsMulLeftInvariant.smulInvariantMeasure [IsMulLeftInvariant μ] :
SmulInvariantMeasure G G μ :=
- ⟨fun x s hs => (measurePreservingMulLeft μ x).measure_preimage hs⟩
+ ⟨fun x s hs => (measurePreserving_mul_left μ x).measure_preimage hs⟩
#align measure_theory.is_mul_left_invariant.smul_invariant_measure MeasureTheory.IsMulLeftInvariant.smulInvariantMeasure
#align measure_theory.is_mul_left_invariant.vadd_invariant_measure MeasureTheory.IsMulLeftInvariant.vadd_invariant_measure
@[to_additive]
-instance IsMulRightInvariant.toSmulInvariantMeasureOp [μ.IsMulRightInvariant] :
+instance IsMulRightInvariant.to_smulInvariantMeasure_op [μ.IsMulRightInvariant] :
SmulInvariantMeasure Gᵐᵒᵖ G μ :=
- ⟨fun x s hs => (measurePreservingMulRight μ (MulOpposite.unop x)).measure_preimage hs⟩
-#align measure_theory.is_mul_right_invariant.to_smul_invariant_measure_op MeasureTheory.IsMulRightInvariant.toSmulInvariantMeasureOp
+ ⟨fun x s hs => (measurePreserving_mul_right μ (MulOpposite.unop x)).measure_preimage hs⟩
+#align measure_theory.is_mul_right_invariant.to_smul_invariant_measure_op MeasureTheory.IsMulRightInvariant.to_smulInvariantMeasure_op
#align measure_theory.is_mul_right_invariant.to_vadd_invariant_measure_op MeasureTheory.IsMulRightInvariant.to_vadd_invariant_measure_op
@[to_additive]
@@ -230,7 +231,7 @@ instance [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type _} [Mul H] {mH : Me
infer_instance
@[to_additive]
-theorem isMulLeftInvariantMap {H : Type _} [MeasurableSpace H] [Mul H] [HasMeasurableMul H]
+theorem isMulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [HasMeasurableMul H]
[IsMulLeftInvariant μ] (f : G →ₙ* H) (hf : Measurable f) (h_surj : Surjective f) :
IsMulLeftInvariant (Measure.map f μ) :=
by
@@ -242,7 +243,7 @@ theorem isMulLeftInvariantMap {H : Type _} [MeasurableSpace H] [Mul H] [HasMeasu
congr 2
ext y
simp only [comp_app, map_mul]
-#align measure_theory.is_mul_left_invariant_map MeasureTheory.isMulLeftInvariantMap
+#align measure_theory.is_mul_left_invariant_map MeasureTheory.isMulLeftInvariant_map
#align measure_theory.is_add_left_invariant_map MeasureTheory.is_add_left_invariant_map
end HasMeasurableMul
@@ -266,10 +267,10 @@ section Group
variable [Group G] [HasMeasurableMul G]
@[to_additive]
-theorem measurePreservingDivRight (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
+theorem measurePreserving_div_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
MeasurePreserving (· / g) μ μ := by simp_rw [div_eq_mul_inv, measure_preserving_mul_right μ g⁻¹]
-#align measure_theory.measure_preserving_div_right MeasureTheory.measurePreservingDivRight
-#align measure_theory.measure_preserving_sub_right MeasureTheory.measure_preserving_sub_right
+#align measure_theory.measure_preserving_div_right MeasureTheory.measurePreserving_div_right
+#align measure_theory.measure_preserving_sub_right MeasureTheory.measurePreserving_sub_right
/-- We shorten this from `measure_preimage_mul_left`, since left invariant is the preferred option
for measures in this formalization. -/
@@ -389,10 +390,10 @@ theorem map_inv_eq_self (μ : Measure G) [IsInvInvariant μ] : map Inv.inv μ =
variable [HasMeasurableInv G]
@[to_additive]
-theorem measurePreservingInv (μ : Measure G) [IsInvInvariant μ] : MeasurePreserving Inv.inv μ μ :=
+theorem measurePreserving_inv (μ : Measure G) [IsInvInvariant μ] : MeasurePreserving Inv.inv μ μ :=
⟨measurable_inv, map_inv_eq_self μ⟩
-#align measure_theory.measure.measure_preserving_inv MeasureTheory.Measure.measurePreservingInv
-#align measure_theory.measure.measure_preserving_neg MeasureTheory.Measure.measure_preserving_neg
+#align measure_theory.measure.measure_preserving_inv MeasureTheory.Measure.measurePreserving_inv
+#align measure_theory.measure.measure_preserving_neg MeasureTheory.Measure.measurePreserving_neg
end Inv
@@ -427,7 +428,7 @@ theorem measure_preimage_inv (μ : Measure G) [IsInvInvariant μ] (A : Set G) :
@[to_additive]
instance (μ : Measure G) [SigmaFinite μ] : SigmaFinite μ.inv :=
- (MeasurableEquiv.inv G).sigmaFiniteMap ‹_›
+ (MeasurableEquiv.inv G).sigmaFinite_map ‹_›
end InvolutiveInv
@@ -454,32 +455,32 @@ instance [IsMulRightInvariant μ] : IsMulLeftInvariant μ.inv :=
map_map measurable_inv (measurable_mul_const g⁻¹), Function.comp, mul_inv_rev, inv_inv]
@[to_additive]
-theorem measurePreservingDivLeft (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ] (g : G) :
- MeasurePreserving (fun t => g / t) μ μ :=
+theorem measurePreserving_div_left (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
+ (g : G) : MeasurePreserving (fun t => g / t) μ μ :=
by
simp_rw [div_eq_mul_inv]
exact (measure_preserving_mul_left μ g).comp (measure_preserving_inv μ)
-#align measure_theory.measure.measure_preserving_div_left MeasureTheory.Measure.measurePreservingDivLeft
-#align measure_theory.measure.measure_preserving_sub_left MeasureTheory.Measure.measure_preserving_sub_left
+#align measure_theory.measure.measure_preserving_div_left MeasureTheory.Measure.measurePreserving_div_left
+#align measure_theory.measure.measure_preserving_sub_left MeasureTheory.Measure.measurePreserving_sub_left
@[to_additive]
theorem map_div_left_eq_self (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ] (g : G) :
map (fun t => g / t) μ = μ :=
- (measurePreservingDivLeft μ g).map_eq
+ (measurePreserving_div_left μ g).map_eq
#align measure_theory.measure.map_div_left_eq_self MeasureTheory.Measure.map_div_left_eq_self
#align measure_theory.measure.map_sub_left_eq_self MeasureTheory.Measure.map_sub_left_eq_self
@[to_additive]
-theorem measurePreservingMulRightInv (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
+theorem measurePreserving_mul_right_inv (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
(g : G) : MeasurePreserving (fun t => (g * t)⁻¹) μ μ :=
- (measurePreservingInv μ).comp <| measurePreservingMulLeft μ g
-#align measure_theory.measure.measure_preserving_mul_right_inv MeasureTheory.Measure.measurePreservingMulRightInv
-#align measure_theory.measure.measure_preserving_add_right_neg MeasureTheory.Measure.measure_preserving_add_right_neg
+ (measurePreserving_inv μ).comp <| measurePreserving_mul_left μ g
+#align measure_theory.measure.measure_preserving_mul_right_inv MeasureTheory.Measure.measurePreserving_mul_right_inv
+#align measure_theory.measure.measure_preserving_add_right_neg MeasureTheory.Measure.measurePreserving_add_right_neg
@[to_additive]
theorem map_mul_right_inv_eq_self (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
(g : G) : map (fun t => (g * t)⁻¹) μ = μ :=
- (measurePreservingMulRightInv μ g).map_eq
+ (measurePreserving_mul_right_inv μ g).map_eq
#align measure_theory.measure.map_mul_right_inv_eq_self MeasureTheory.Measure.map_mul_right_inv_eq_self
#align measure_theory.measure.map_add_right_neg_eq_self MeasureTheory.Measure.map_add_right_neg_eq_self
@@ -530,8 +531,9 @@ variable [IsMulLeftInvariant μ]
any open set. -/
@[to_additive
"If a left-invariant measure gives positive mass to a compact set, then it gives\npositive mass to any open set."]
-theorem isOpenPosMeasureOfMulLeftInvariantOfCompact (K : Set G) (hK : IsCompact K) (h : μ K ≠ 0) :
- IsOpenPosMeasure μ := by
+theorem isOpenPosMeasure_of_mul_left_invariant_of_compact (K : Set G) (hK : IsCompact K)
+ (h : μ K ≠ 0) : IsOpenPosMeasure μ :=
+ by
refine' ⟨fun U hU hne => _⟩
contrapose! h
rw [← nonpos_iff_eq_zero]
@@ -543,16 +545,17 @@ theorem isOpenPosMeasureOfMulLeftInvariantOfCompact (K : Set G) (hK : IsCompact
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_bUnion_finset_le _ _)
_ = 0 := by simp [measure_preimage_mul, h]
-#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.isOpenPosMeasureOfMulLeftInvariantOfCompact
-#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.is_open_pos_measure_of_add_left_invariant_of_compact
+#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_mul_left_invariant_of_compact
+#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_add_left_invariant_of_compact
/-- A nonzero left-invariant regular measure gives positive mass to any open set. -/
@[to_additive "A nonzero left-invariant regular measure gives positive mass to any open set."]
-theorem isOpenPosMeasureOfMulLeftInvariantOfRegular [Regular μ] (h₀ : μ ≠ 0) : IsOpenPosMeasure μ :=
+theorem isOpenPosMeasure_of_mul_left_invariant_of_regular [Regular μ] (h₀ : μ ≠ 0) :
+ IsOpenPosMeasure μ :=
let ⟨K, hK, h2K⟩ := Regular.exists_compact_not_null.mpr h₀
- isOpenPosMeasureOfMulLeftInvariantOfCompact K hK h2K
-#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.isOpenPosMeasureOfMulLeftInvariantOfRegular
-#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.is_open_pos_measure_of_add_left_invariant_of_regular
+ isOpenPosMeasure_of_mul_left_invariant_of_compact K hK h2K
+#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_mul_left_invariant_of_regular
+#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_add_left_invariant_of_regular
@[to_additive]
theorem null_iff_of_isMulLeftInvariant [Regular μ] {s : Set G} (hs : IsOpen s) :
@@ -594,7 +597,7 @@ theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOp
_ < ∞ := ENNReal.mul_lt_top (ENNReal.nat_ne_top _) h
#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant
-#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_is_compact_of_is_add_left_invariant
+#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_is_add_left_invariant
/-- If a left-invariant measure gives finite mass to a set with nonempty interior, then
it gives finite mass to any compact set. -/
@@ -605,7 +608,7 @@ theorem measure_lt_top_of_isCompact_of_is_mul_left_invariant' {U : Set G}
measure_lt_top_of_isCompact_of_isMulLeftInvariant (interior U) isOpen_interior hU
((measure_mono interior_subset).trans_lt (lt_top_iff_ne_top.2 h)).Ne hK
#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_is_mul_left_invariant'
-#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant' MeasureTheory.measure_lt_top_of_is_compact_of_is_add_left_invariant'
+#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_is_add_left_invariant'
/-- In a noncompact locally compact group, a left-invariant measure which is positive
on open sets has infinite mass. -/
@@ -711,12 +714,12 @@ to avoid an instance loop.
See Note [lower instance priority]. -/
@[to_additive
"Record that an additive Haar measure on a locally compact space is\nlocally finite. This is needed as the fact that a measure which is finite on compacts is locally\nfinite is not registered as an instance, to avoid an instance loop.\n\nSee Note [lower instance priority]"]
-instance (priority := 100) isLocallyFiniteMeasureOfIsHaarMeasure {G : Type _} [Group G]
+instance (priority := 100) isLocallyFiniteMeasure_of_isHaarMeasure {G : Type _} [Group G]
[MeasurableSpace G] [TopologicalSpace G] [LocallyCompactSpace G] (μ : Measure G)
[IsHaarMeasure μ] : IsLocallyFiniteMeasure μ :=
- isLocallyFiniteMeasureOfIsFiniteMeasureOnCompacts
-#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasureOfIsHaarMeasure
-#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.is_locally_finite_measure_of_is_add_haar_measure
+ isLocallyFiniteMeasure_of_isFiniteMeasureOnCompacts
+#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_isHaarMeasure
+#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_is_add_haar_measure
section
@@ -733,7 +736,7 @@ theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ
@[to_additive MeasureTheory.Measure.IsAddHaarMeasure.smul]
theorem IsHaarMeasure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞) : IsHaarMeasure (c • μ) :=
{ lt_top_of_isCompact := fun K hK => ENNReal.mul_lt_top Ctop hK.measure_lt_top.Ne
- toIsOpenPosMeasure := isOpenPosMeasureSmul μ cpos }
+ to_isOpenPosMeasure := isOpenPosMeasure_smul μ cpos }
#align measure_theory.measure.is_haar_measure.smul MeasureTheory.Measure.IsHaarMeasure.smul
#align measure_theory.measure.is_add_haar_measure.smul MeasureTheory.Measure.IsAddHaarMeasure.smul
@@ -741,41 +744,41 @@ theorem IsHaarMeasure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞)
it is a Haar measure. -/
@[to_additive
"If a left-invariant measure gives positive mass to some compact set with nonempty\ninterior, then it is an additive Haar measure."]
-theorem isHaarMeasureOfIsCompactNonemptyInterior [TopologicalGroup G] [BorelSpace G] (μ : Measure G)
- [IsMulLeftInvariant μ] (K : Set G) (hK : IsCompact K) (h'K : (interior K).Nonempty)
- (h : μ K ≠ 0) (h' : μ K ≠ ∞) : IsHaarMeasure μ :=
+theorem isHaarMeasure_of_isCompact_nonempty_interior [TopologicalGroup G] [BorelSpace G]
+ (μ : Measure G) [IsMulLeftInvariant μ] (K : Set G) (hK : IsCompact K)
+ (h'K : (interior K).Nonempty) (h : μ K ≠ 0) (h' : μ K ≠ ∞) : IsHaarMeasure μ :=
{ lt_top_of_isCompact := fun L hL =>
measure_lt_top_of_isCompact_of_is_mul_left_invariant' h'K h' hL
- toIsOpenPosMeasure := isOpenPosMeasureOfMulLeftInvariantOfCompact K hK h }
-#align measure_theory.measure.is_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.isHaarMeasureOfIsCompactNonemptyInterior
-#align measure_theory.measure.is_add_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.is_add_haar_measure_of_is_compact_nonempty_interior
+ to_isOpenPosMeasure := isOpenPosMeasure_of_mul_left_invariant_of_compact K hK h }
+#align measure_theory.measure.is_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.isHaarMeasure_of_isCompact_nonempty_interior
+#align measure_theory.measure.is_add_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.is_add_haar_measure_of_isCompact_nonempty_interior
/-- The image of a Haar measure under a continuous surjective proper group homomorphism is again
a Haar measure. See also `mul_equiv.is_haar_measure_map`. -/
@[to_additive
"The image of an additive Haar measure under a continuous surjective proper additive\ngroup homomorphism is again an additive Haar measure. See also\n`add_equiv.is_add_haar_measure_map`."]
-theorem isHaarMeasureMap [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
+theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
[TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [T2Space H] [TopologicalGroup H]
(f : G →* H) (hf : Continuous f) (h_surj : Surjective f)
(h_prop : Tendsto f (cocompact G) (cocompact H)) : IsHaarMeasure (Measure.map f μ) :=
- { toIsMulLeftInvariant := isMulLeftInvariantMap f.toMulHom hf.Measurable h_surj
+ { to_isMulLeftInvariant := isMulLeftInvariant_map f.toMulHom hf.Measurable h_surj
lt_top_of_isCompact := by
intro K hK
rw [map_apply hf.measurable hK.measurable_set]
exact IsCompact.measure_lt_top ((⟨⟨f, hf⟩, h_prop⟩ : CocompactMap G H).isCompact_preimage hK)
- toIsOpenPosMeasure := hf.isOpenPosMeasureMap h_surj }
-#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.isHaarMeasureMap
+ to_isOpenPosMeasure := hf.isOpenPosMeasure_map h_surj }
+#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.isHaarMeasure_map
#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.is_add_haar_measure_map
/-- A convenience wrapper for `measure_theory.measure.is_haar_measure_map`. -/
@[to_additive "A convenience wrapper for `measure_theory.measure.is_add_haar_measure_map`."]
-theorem MulEquiv.isHaarMeasureMap [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
+theorem MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
[TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [T2Space H] [TopologicalGroup H]
(e : G ≃* H) (he : Continuous e) (hesymm : Continuous e.symm) :
IsHaarMeasure (Measure.map e μ) :=
- isHaarMeasureMap μ (e : G →* H) he e.Surjective
+ isHaarMeasure_map μ (e : G →* H) he e.Surjective
({ e with } : G ≃ₜ H).toCocompactMap.cocompact_tendsto'
-#align mul_equiv.is_haar_measure_map MulEquiv.isHaarMeasureMap
+#align mul_equiv.is_haar_measure_map MulEquiv.isHaarMeasure_map
#align add_equiv.is_add_haar_measure_map AddEquiv.is_add_haar_measure_map
/-- A Haar measure on a σ-compact space is σ-finite.
@@ -789,7 +792,7 @@ instance (priority := 100) IsHaarMeasure.sigmaFinite [SigmaCompactSpace G] : Sig
Finite := fun n => IsCompact.measure_lt_top <| isCompact_compactCovering G n
spanning := unionᵢ_compactCovering G }⟩⟩
#align measure_theory.measure.is_haar_measure.sigma_finite MeasureTheory.Measure.IsHaarMeasure.sigmaFinite
-#align measure_theory.measure.is_add_haar_measure.sigma_finite MeasureTheory.Measure.IsAddHaarMeasure.sigma_finite
+#align measure_theory.measure.is_add_haar_measure.sigma_finite MeasureTheory.Measure.IsAddHaarMeasure.sigmaFinite
@[to_additive]
instance {G : Type _} [Group G] [TopologicalSpace G] {mG : MeasurableSpace G} {H : Type _} [Group H]
@@ -839,7 +842,7 @@ instance (priority := 100) IsHaarMeasure.hasNoAtoms [TopologicalGroup G] [BorelS
simp only [ENNReal.div_top] at J
exact ge_of_tendsto' J I
#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.hasNoAtoms
-#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.has_no_atoms
+#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.hasNoAtoms
/- The above instance applies in particular to show that an additive Haar measure on a nontrivial
finite-dimensional real vector space has no atom. -/
mathlib commit https://github.com/leanprover-community/mathlib/commit/4c586d291f189eecb9d00581aeb3dd998ac34442
@@ -540,7 +540,7 @@ theorem isOpenPosMeasureOfMulLeftInvariantOfCompact (K : Set G) (hK : IsCompact
compact_covered_by_mul_left_translates hK hne
calc
μ K ≤ μ (⋃ (g : G) (H : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
- _ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := measure_bUnion_finset_le _ _
+ _ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_bUnion_finset_le _ _)
_ = 0 := by simp [measure_preimage_mul, h]
#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.isOpenPosMeasureOfMulLeftInvariantOfCompact
@@ -589,7 +589,7 @@ theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOp
compact_covered_by_mul_left_translates hK h'U
calc
μ K ≤ μ (⋃ (g : G) (H : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
- _ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := measure_bUnion_finset_le _ _
+ _ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_bUnion_finset_le _ _)
_ = Finset.card t * μ U := by simp only [measure_preimage_mul, Finset.sum_const, nsmul_eq_mul]
_ < ∞ := ENNReal.mul_lt_top (ENNReal.nat_ne_top _) h
mathlib commit https://github.com/leanprover-community/mathlib/commit/eb0cb4511aaef0da2462207b67358a0e1fe1e2ee
@@ -33,7 +33,7 @@ We also give analogues of all these notions in the additive world.
noncomputable section
-open NNReal Ennreal Pointwise BigOperators Topology
+open NNReal ENNReal Pointwise BigOperators Topology
open Inv Set Function MeasureTheory.Measure Filter
@@ -591,7 +591,7 @@ theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOp
μ K ≤ μ (⋃ (g : G) (H : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := measure_bUnion_finset_le _ _
_ = Finset.card t * μ U := by simp only [measure_preimage_mul, Finset.sum_const, nsmul_eq_mul]
- _ < ∞ := Ennreal.mul_lt_top (Ennreal.nat_ne_top _) h
+ _ < ∞ := ENNReal.mul_lt_top (ENNReal.nat_ne_top _) h
#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant
#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_is_compact_of_is_add_left_invariant
@@ -657,9 +657,9 @@ theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSp
have N : tendsto (fun n => μ (L n)) at_top (𝓝 (∞ * μ K)) :=
by
simp_rw [M]
- apply Ennreal.Tendsto.mul_const _ (Or.inl Ennreal.top_ne_zero)
+ apply ENNReal.Tendsto.mul_const _ (Or.inl ENNReal.top_ne_zero)
exact ennreal.tendsto_nat_nhds_top.comp (tendsto_add_at_top_nat _)
- simp only [Ennreal.top_mul, K_pos.ne', if_false] at N
+ simp only [ENNReal.top_mul', K_pos.ne', if_false] at N
apply top_le_iff.1
exact le_of_tendsto' N fun n => measure_mono (subset_univ _)
#align measure_theory.measure_univ_of_is_mul_left_invariant MeasureTheory.measure_univ_of_isMulLeftInvariant
@@ -732,7 +732,7 @@ theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ
@[to_additive MeasureTheory.Measure.IsAddHaarMeasure.smul]
theorem IsHaarMeasure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞) : IsHaarMeasure (c • μ) :=
- { lt_top_of_isCompact := fun K hK => Ennreal.mul_lt_top Ctop hK.measure_lt_top.Ne
+ { lt_top_of_isCompact := fun K hK => ENNReal.mul_lt_top Ctop hK.measure_lt_top.Ne
toIsOpenPosMeasure := isOpenPosMeasureSmul μ cpos }
#align measure_theory.measure.is_haar_measure.smul MeasureTheory.Measure.IsHaarMeasure.smul
#align measure_theory.measure.is_add_haar_measure.smul MeasureTheory.Measure.IsAddHaarMeasure.smul
@@ -831,12 +831,12 @@ instance (priority := 100) IsHaarMeasure.hasNoAtoms [TopologicalGroup G] [BorelS
· intro b hb
exact measurable_set_singleton b
rw [B] at A
- rwa [Ennreal.le_div_iff_mul_le _ (Or.inr μKlt), mul_comm]
+ rwa [ENNReal.le_div_iff_mul_le _ (Or.inr μKlt), mul_comm]
right
apply (measure_pos_of_nonempty_interior μ ⟨_, K_int⟩).ne'
have J : tendsto (fun n : ℕ => μ K / n) at_top (𝓝 (μ K / ∞)) :=
- Ennreal.Tendsto.const_div Ennreal.tendsto_nat_nhds_top (Or.inr μKlt)
- simp only [Ennreal.div_top] at J
+ ENNReal.Tendsto.const_div ENNReal.tendsto_nat_nhds_top (Or.inr μKlt)
+ simp only [ENNReal.div_top] at J
exact ge_of_tendsto' J I
#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.hasNoAtoms
#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.has_no_atoms
mathlib commit https://github.com/leanprover-community/mathlib/commit/c23aca359d4be6975b2a577d5cdb9d77b82c7407
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn
! This file was ported from Lean 3 source module measure_theory.group.measure
-! leanprover-community/mathlib commit f2ce6086713c78a7f880485f7917ea547a215982
+! leanprover-community/mathlib commit 950605e4b9b4e2827681f637ba997307814a5ca9
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -249,9 +249,9 @@ end HasMeasurableMul
end Mul
-section Group
+section DivInvMonoid
-variable [Group G]
+variable [DivInvMonoid G]
@[to_additive]
theorem map_div_right_eq_self (μ : Measure G) [IsMulRightInvariant μ] (g : G) : map (· / g) μ = μ :=
@@ -259,7 +259,11 @@ theorem map_div_right_eq_self (μ : Measure G) [IsMulRightInvariant μ] (g : G)
#align measure_theory.map_div_right_eq_self MeasureTheory.map_div_right_eq_self
#align measure_theory.map_sub_right_eq_self MeasureTheory.map_sub_right_eq_self
-variable [HasMeasurableMul G]
+end DivInvMonoid
+
+section Group
+
+variable [Group G] [HasMeasurableMul G]
@[to_additive]
theorem measurePreservingDivRight (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
@@ -427,9 +431,9 @@ instance (μ : Measure G) [SigmaFinite μ] : SigmaFinite μ.inv :=
end InvolutiveInv
-section mul_inv
+section DivisionMonoid
-variable [Group G] [HasMeasurableMul G] [HasMeasurableInv G] {μ : Measure G}
+variable [DivisionMonoid G] [HasMeasurableMul G] [HasMeasurableInv G] {μ : Measure G}
@[to_additive]
instance [IsMulLeftInvariant μ] : IsMulRightInvariant μ.inv :=
@@ -479,6 +483,12 @@ theorem map_mul_right_inv_eq_self (μ : Measure G) [IsInvInvariant μ] [IsMulLef
#align measure_theory.measure.map_mul_right_inv_eq_self MeasureTheory.Measure.map_mul_right_inv_eq_self
#align measure_theory.measure.map_add_right_neg_eq_self MeasureTheory.Measure.map_add_right_neg_eq_self
+end DivisionMonoid
+
+section Group
+
+variable [Group G] [HasMeasurableMul G] [HasMeasurableInv G] {μ : Measure G}
+
@[to_additive]
theorem map_div_left_ae (μ : Measure G) [IsMulLeftInvariant μ] [IsInvInvariant μ] (x : G) :
Filter.map (fun t => x / t) μ.ae = μ.ae :=
@@ -486,22 +496,22 @@ theorem map_div_left_ae (μ : Measure G) [IsMulLeftInvariant μ] [IsInvInvariant
#align measure_theory.measure.map_div_left_ae MeasureTheory.Measure.map_div_left_ae
#align measure_theory.measure.map_sub_left_ae MeasureTheory.Measure.map_sub_left_ae
-end mul_inv
+end Group
end Measure
section TopologicalGroup
-variable [TopologicalSpace G] [BorelSpace G] {μ : Measure G}
-
-variable [Group G] [TopologicalGroup G]
+variable [TopologicalSpace G] [BorelSpace G] {μ : Measure G} [Group G]
@[to_additive]
-instance Measure.Regular.inv [T2Space G] [Regular μ] : Regular μ.inv :=
+instance Measure.Regular.inv [ContinuousInv G] [T2Space G] [Regular μ] : Regular μ.inv :=
Regular.map (Homeomorph.inv G)
#align measure_theory.measure.regular.inv MeasureTheory.Measure.Regular.inv
#align measure_theory.measure.regular.neg MeasureTheory.Measure.Regular.neg
+variable [TopologicalGroup G]
+
@[to_additive]
theorem regular_inv_iff [T2Space G] : μ.inv.regular ↔ μ.regular :=
by
@@ -657,9 +667,9 @@ theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSp
end TopologicalGroup
-section CommGroup
+section CommSemigroup
-variable [CommGroup G]
+variable [CommSemigroup G]
/-- In an abelian group every left invariant measure is also right-invariant.
We don't declare the converse as an instance, since that would loop type-class inference, and
@@ -672,7 +682,7 @@ instance (priority := 100) IsMulLeftInvariant.isMulRightInvariant {μ : Measure
#align measure_theory.is_mul_left_invariant.is_mul_right_invariant MeasureTheory.IsMulLeftInvariant.isMulRightInvariant
#align is_add_left_invariant.is_add_right_invariant IsAddLeftInvariant.is_add_right_invariant
-end CommGroup
+end CommSemigroup
section Haar
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -751,7 +751,7 @@ theorem measure_univ_of_isMulLeftInvariant [WeaklyLocallyCompactSpace G] [Noncom
have M : ∀ n, μ (L n) = (n + 1 : ℕ) * μ K := by
intro n
induction' n with n IH
- · simp only [L, one_mul, Nat.cast_one, iterate_zero, id.def, Nat.zero_eq, Nat.zero_add]
+ · simp only [L, one_mul, Nat.cast_one, iterate_zero, id, Nat.zero_eq, Nat.zero_add]
· calc
μ (L (n + 1)) = μ (L n) + μ (g (L n) • K) := by
simp_rw [L, iterate_succ']
@@ -643,7 +643,7 @@ theorem isOpenPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsComp
compact_covered_by_mul_left_translates hK hne
calc
μ K ≤ μ (⋃ (g : G) (_ : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
- _ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_biUnion_finset_le _ _)
+ _ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := measure_biUnion_finset_le _ _
_ = 0 := by simp [measure_preimage_mul, h]
#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_compact
#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_addLeftInvariant_of_compact
@@ -700,7 +700,7 @@ theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOp
compact_covered_by_mul_left_translates hK h'U
calc
μ K ≤ μ (⋃ (g : G) (_ : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
- _ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_biUnion_finset_le _ _)
+ _ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := measure_biUnion_finset_le _ _
_ = Finset.card t * μ U := by simp only [measure_preimage_mul, Finset.sum_const, nsmul_eq_mul]
_ < ∞ := ENNReal.mul_lt_top (ENNReal.natCast_ne_top _) h
#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant
@@ -702,7 +702,7 @@ theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOp
μ K ≤ μ (⋃ (g : G) (_ : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_biUnion_finset_le _ _)
_ = Finset.card t * μ U := by simp only [measure_preimage_mul, Finset.sum_const, nsmul_eq_mul]
- _ < ∞ := ENNReal.mul_lt_top (ENNReal.nat_ne_top _) h
+ _ < ∞ := ENNReal.mul_lt_top (ENNReal.natCast_ne_top _) h
#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant
#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isAddLeftInvariant
Purely automatic replacement. If this is in any way controversial; I'm happy to just close this PR.
@@ -855,7 +855,7 @@ Textbooks generally require an additional regularity assumption to ensure nice b
arbitrary locally compact groups. Use `[IsHaarMeasure μ] [Regular μ]` or
`[IsHaarMeasure μ] [InnerRegular μ]` in these situations. Note that a Haar measure in our
sense is automatically regular and inner regular on second countable locally compact groups, as
-checked just below this definition.-/
+checked just below this definition. -/
@[to_additive existing]
class IsHaarMeasure {G : Type*} [Group G] [TopologicalSpace G] [MeasurableSpace G]
(μ : Measure G) extends IsFiniteMeasureOnCompacts μ, IsMulLeftInvariant μ, IsOpenPosMeasure μ :
@@ -914,7 +914,7 @@ theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type*} [Group
#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.isAddHaarMeasure_map
/-- The image of a finite Haar measure under a continuous surjective group homomorphism is again
-a Haar measure. See also `isHaarMeasure_map`.-/
+a Haar measure. See also `isHaarMeasure_map`. -/
@[to_additive
"The image of a finite additive Haar measure under a continuous surjective additive group
homomorphism is again an additive Haar measure. See also `isAddHaarMeasure_map`."]
I removed some redundant instance arguments throughout Mathlib. To do this, I used VS Code's regex search. See https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/repeating.20instances.20from.20variable.20command I closed the previous PR for this and reopened it.
@@ -578,12 +578,12 @@ instance innerRegular_map_smul {α} [Monoid α] [MulAction α G] [ContinuousCons
/-- The image of an inner regular measure under left multiplication is again inner regular. -/
@[to_additive "The image of an inner regular measure under left addition is again inner regular."]
-instance innerRegular_map_mul_left [BorelSpace G] [TopologicalGroup G] [InnerRegular μ] (g : G) :
+instance innerRegular_map_mul_left [TopologicalGroup G] [InnerRegular μ] (g : G) :
InnerRegular (Measure.map (g * ·) μ) := InnerRegular.map_of_continuous (continuous_mul_left g)
/-- The image of an inner regular measure under right multiplication is again inner regular. -/
@[to_additive "The image of an inner regular measure under right addition is again inner regular."]
-instance innerRegular_map_mul_right [BorelSpace G] [TopologicalGroup G] [InnerRegular μ] (g : G) :
+instance innerRegular_map_mul_right [TopologicalGroup G] [InnerRegular μ] (g : G) :
InnerRegular (Measure.map (· * g) μ) := InnerRegular.map_of_continuous (continuous_mul_right g)
variable [TopologicalGroup G]
This is a very large PR, but it has been reviewed piecemeal already in PRs to the bump/v4.7.0
branch as we update to intermediate nightlies.
Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Kyle Miller <kmill31415@gmail.com> Co-authored-by: damiano <adomani@gmail.com>
@@ -740,21 +740,21 @@ theorem measure_univ_of_isMulLeftInvariant [WeaklyLocallyCompactSpace G] [Noncom
intro n
induction' n with n IH
· exact hK
- · simp_rw [iterate_succ']
+ · simp_rw [L, iterate_succ']
apply IsCompact.union IH (hK.smul (g (L n)))
have Lclosed : ∀ n, IsClosed (L n) := by
intro n
induction' n with n IH
· exact Kclosed
- · simp_rw [iterate_succ']
+ · simp_rw [L, iterate_succ']
apply IsClosed.union IH (Kclosed.smul (g (L n)))
have M : ∀ n, μ (L n) = (n + 1 : ℕ) * μ K := by
intro n
induction' n with n IH
- · simp only [one_mul, Nat.cast_one, iterate_zero, id.def, Nat.zero_eq, Nat.zero_add]
+ · simp only [L, one_mul, Nat.cast_one, iterate_zero, id.def, Nat.zero_eq, Nat.zero_add]
· calc
μ (L (n + 1)) = μ (L n) + μ (g (L n) • K) := by
- simp_rw [iterate_succ']
+ simp_rw [L, iterate_succ']
exact measure_union' (hg _ (Lcompact _)) (Lclosed _).measurableSet
_ = (n + 1 + 1 : ℕ) * μ K := by
simp only [IH, measure_smul, add_mul, Nat.cast_add, Nat.cast_one, one_mul]
The image of an inner regular measure under left/right multiplication is again inner regular.
@@ -568,6 +568,24 @@ instance Measure.Regular.inv [ContinuousInv G] [Regular μ] : Regular μ.inv :=
instance Measure.InnerRegular.inv [ContinuousInv G] [InnerRegular μ] : InnerRegular μ.inv :=
InnerRegular.map (Homeomorph.inv G)
+/-- The image of an inner regular measure under map of a left action is again inner regular. -/
+@[to_additive
+ "The image of a inner regular measure under map of a left additive action is again
+ inner regular"]
+instance innerRegular_map_smul {α} [Monoid α] [MulAction α G] [ContinuousConstSMul α G]
+ [InnerRegular μ] (a : α) : InnerRegular (Measure.map (a • · : G → G) μ) :=
+ InnerRegular.map_of_continuous (continuous_const_smul a)
+
+/-- The image of an inner regular measure under left multiplication is again inner regular. -/
+@[to_additive "The image of an inner regular measure under left addition is again inner regular."]
+instance innerRegular_map_mul_left [BorelSpace G] [TopologicalGroup G] [InnerRegular μ] (g : G) :
+ InnerRegular (Measure.map (g * ·) μ) := InnerRegular.map_of_continuous (continuous_mul_left g)
+
+/-- The image of an inner regular measure under right multiplication is again inner regular. -/
+@[to_additive "The image of an inner regular measure under right addition is again inner regular."]
+instance innerRegular_map_mul_right [BorelSpace G] [TopologicalGroup G] [InnerRegular μ] (g : G) :
+ InnerRegular (Measure.map (· * g) μ) := InnerRegular.map_of_continuous (continuous_mul_right g)
+
variable [TopologicalGroup G]
@[to_additive]
Data.Set.Basic
from scripts/noshake.json
.example
s only,
move these example
s to a new test file.Order.Filter.Basic
dependency on Control.Traversable.Instances
,
as the relevant parts were moved to Order.Filter.ListTraverse
.lake exe shake --fix
.@@ -849,15 +849,6 @@ class IsHaarMeasure {G : Type*} [Group G] [TopologicalSpace G] [MeasurableSpace
variable [Group G] [TopologicalSpace G] (μ : Measure G) [IsHaarMeasure μ]
-/-! Check that typeclass inference knows that a Haar measure on a locally compact second countable
-topological group is automatically regular and inner regular. -/
-
-example [TopologicalGroup G] [LocallyCompactSpace G] [SecondCountableTopology G] [BorelSpace G] :
- Regular μ := by infer_instance
-
-example [TopologicalGroup G] [LocallyCompactSpace G] [SecondCountableTopology G] [BorelSpace G] :
- InnerRegular μ := by infer_instance
-
@[to_additive (attr := simp)]
theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ {(1 : G)} := by
convert measure_preimage_mul μ g⁻¹ _
exists_nhds_measure_smul_diff_lt
(#10093)
∀ᶠ g in 𝓝 1, _
instead of ∃ V ∈ 𝓝 1, ∀ g ∈ V, _
.Filter.Tendsto
.@@ -583,28 +583,30 @@ theorem innerRegular_inv_iff : μ.inv.InnerRegular ↔ μ.InnerRegular :=
/-- Continuity of the measure of translates of a compact set: Given a compact set `k` in a
topological group, for `g` close enough to the origin, `μ (g • k \ k)` is arbitrarily small. -/
@[to_additive]
-lemma exists_nhds_measure_smul_diff_lt [LocallyCompactSpace G]
+lemma eventually_nhds_one_measure_smul_diff_lt [LocallyCompactSpace G]
[IsFiniteMeasureOnCompacts μ] [InnerRegularCompactLTTop μ] {k : Set G}
(hk : IsCompact k) (h'k : IsClosed k) {ε : ℝ≥0∞} (hε : ε ≠ 0) :
- ∃ V ∈ 𝓝 (1 : G), ∀ g ∈ V, μ (g • k \ k) < ε := by
- obtain ⟨δ, δpos, δε⟩ : ∃ δ, 0 < δ ∧ δ < ε := DenselyOrdered.dense 0 ε hε.bot_lt
- obtain ⟨U, hUk, hU, hμUk⟩ : ∃ (U : Set G), k ⊆ U ∧ IsOpen U ∧ μ U < μ k + δ :=
- hk.exists_isOpen_lt_add δpos.ne'
+ ∀ᶠ g in 𝓝 (1 : G), μ (g • k \ k) < ε := by
+ obtain ⟨U, hUk, hU, hμUk⟩ : ∃ (U : Set G), k ⊆ U ∧ IsOpen U ∧ μ U < μ k + ε :=
+ hk.exists_isOpen_lt_add hε
obtain ⟨V, hV1, hVkU⟩ : ∃ V ∈ 𝓝 (1 : G), V * k ⊆ U := compact_open_separated_mul_left hk hU hUk
- refine ⟨V, hV1, fun g hg ↦ ?_⟩
+ filter_upwards [hV1] with g hg
calc
- μ (g • k \ k)
- _ ≤ μ (U \ k) := by
- refine measure_mono (diff_subset_diff_left ?_)
- exact (smul_set_subset_smul hg).trans hVkU
- _ = μ U - μ k := by
- rw [measure_diff _ h'k.measurableSet hk.measure_lt_top.ne]
- calc k = (1 : G) • k := by simp
- _ ⊆ V • k := smul_set_subset_smul (mem_of_mem_nhds hV1)
- _ ⊆ U := hVkU
- _ ≤ (μ k + δ ) - μ k := by gcongr
- _ = δ := ENNReal.add_sub_cancel_left hk.measure_lt_top.ne
- _ < ε := δε
+ μ (g • k \ k) ≤ μ (U \ k) := by
+ refine measure_mono (diff_subset_diff_left ?_)
+ exact (smul_set_subset_smul hg).trans hVkU
+ _ < ε := measure_diff_lt_of_lt_add h'k.measurableSet hUk hk.measure_lt_top.ne hμUk
+
+/-- Continuity of the measure of translates of a compact set:
+Given a closed compact set `k` in a topological group,
+the measure of `g • k \ k` tends to zero as `g` tends to `1`. -/
+@[to_additive]
+lemma tendsto_measure_smul_diff_isCompact_isClosed [LocallyCompactSpace G]
+ [IsFiniteMeasureOnCompacts μ] [InnerRegularCompactLTTop μ] {k : Set G}
+ (hk : IsCompact k) (h'k : IsClosed k) :
+ Tendsto (fun g : G ↦ μ (g • k \ k)) (𝓝 1) (𝓝 0) :=
+ ENNReal.nhds_zero_basis.tendsto_right_iff.mpr <| fun _ h ↦
+ eventually_nhds_one_measure_smul_diff_lt hk h'k h.ne'
variable [IsMulLeftInvariant μ]
R1Space
, a.k.a. preregular space.T2OrLocallyCompactRegularSpace
.T2OrLocallyCompactRegularSpace
to R1Space
.[T2OrLocallyCompactRegularSpace _]
assumption
if the space is known to be regular for other reason
(e.g., because it's a topological group).Specializes.not_disjoint
:
if x ⤳ y
, then 𝓝 x
and 𝓝 y
aren't disjoint;specializes_iff_not_disjoint
, Specializes.inseparable
,
disjoint_nhds_nhds_iff_not_inseparable
,
r1Space_iff_inseparable_or_disjoint_nhds
: basic API about R1Space
s;Inducing.r1Space
, R1Space.induced
, R1Space.sInf
, R1Space.iInf
,
R1Space.inf
, instances for Subtype _
, X × Y
, and ∀ i, X i
:
basic instances for R1Space
;IsCompact.mem_closure_iff_exists_inseparable
,
IsCompact.closure_eq_biUnion_inseparable
:
characterizations of the closure of a compact set in a preregular space;Inseparable.mem_measurableSet_iff
: topologically inseparable points
can't be separated by a Borel measurable set;IsCompact.closure_subset_measurableSet
, IsCompact.measure_closure
:
in a preregular space, a measurable superset of a compact set
includes its closure as well;
as a corollary, closure K
has the same measure as K
.exists_mem_nhds_isCompact_mapsTo_of_isCompact_mem_nhds
:
an auxiliary lemma extracted from a LocallyCompactPair
instance;IsCompact.isCompact_isClosed_basis_nhds
:
if x
admits a compact neighborhood,
then it admits a basis of compact closed neighborhoods;
in particular, a weakly locally compact preregular space
is a locally compact regular space;isCompact_isClosed_basis_nhds
: a version of the previous theorem
for weakly locally compact spaces;exists_mem_nhds_isCompact_isClosed
: in a locally compact regular space,
each point admits a compact closed neighborhood.Some theorems about topological groups are true for any (pre)regular space, so we deprecate the special cases.
exists_isCompact_isClosed_subset_isCompact_nhds_one
:
use new IsCompact.isCompact_isClosed_basis_nhds
instead;instLocallyCompactSpaceOfWeaklyOfGroup
,
instLocallyCompactSpaceOfWeaklyOfAddGroup
:
are now implied by WeaklyLocallyCompactSpace.locallyCompactSpace
;local_isCompact_isClosed_nhds_of_group
,
local_isCompact_isClosed_nhds_of_addGroup
:
use isCompact_isClosed_basis_nhds
instead;exists_isCompact_isClosed_nhds_one
, exists_isCompact_isClosed_nhds_zero
:
use exists_mem_nhds_isCompact_isClosed
instead.For each renamed theorem, the old theorem is redefined as a deprecated alias.
isOpen_setOf_disjoint_nhds_nhds
: moved to Constructions
;isCompact_closure_of_subset_compact
-> IsCompact.closure_of_subset
;IsCompact.measure_eq_infi_isOpen
-> IsCompact.measure_eq_iInf_isOpen
;exists_compact_superset_iff
-> exists_isCompact_superset_iff
;separatedNhds_of_isCompact_isCompact_isClosed
-> SeparatedNhds.of_isCompact_isCompact_isClosed
;separatedNhds_of_isCompact_isCompact
-> SeparatedNhds.of_isCompact_isCompact
;separatedNhds_of_finset_finset
-> SeparatedNhds.of_finset_finset
;point_disjoint_finset_opens_of_t2
-> SeparatedNhds.of_singleton_finset
;separatedNhds_of_isCompact_isClosed
-> SeparatedNhds.of_isCompact_isClosed
;exists_open_superset_and_isCompact_closure
-> exists_isOpen_superset_and_isCompact_closure
;exists_open_with_compact_closure
-> exists_isOpen_mem_isCompact_closure
;@@ -709,9 +709,9 @@ theorem measure_univ_of_isMulLeftInvariant [WeaklyLocallyCompactSpace G] [Noncom
find `g = g (L)` such that `L` is disjoint from `g • K`. Iterating this, one finds
infinitely many translates of `K` which are disjoint from each other. As they all have the
same positive mass, it follows that the space has infinite measure. -/
- obtain ⟨K, hK, Kclosed, K1⟩ : ∃ K : Set G, IsCompact K ∧ IsClosed K ∧ K ∈ 𝓝 1 :=
- exists_isCompact_isClosed_nhds_one G
- have K_pos : 0 < μ K := measure_pos_of_nonempty_interior _ ⟨_, mem_interior_iff_mem_nhds.2 K1⟩
+ obtain ⟨K, K1, hK, Kclosed⟩ : ∃ K ∈ 𝓝 (1 : G), IsCompact K ∧ IsClosed K :=
+ exists_mem_nhds_isCompact_isClosed 1
+ have K_pos : 0 < μ K := measure_pos_of_mem_nhds μ K1
have A : ∀ L : Set G, IsCompact L → ∃ g : G, Disjoint L (g • K) := fun L hL =>
exists_disjoint_smul_of_isCompact hL hK
choose! g hg using A
@@ -760,11 +760,10 @@ lemma _root_.MeasurableSet.mul_closure_one_eq {s : Set G} (hs : MeasurableSet s)
simp only [iUnion_smul, h''f]
/-- If a compact set is included in a measurable set, then so is its closure. -/
-@[to_additive]
+@[to_additive (attr := deprecated IsCompact.closure_subset_measurableSet)] -- Since 28 Jan 2024
lemma _root_.IsCompact.closure_subset_of_measurableSet_of_group {k s : Set G}
- (hk : IsCompact k) (hs : MeasurableSet s) (h : k ⊆ s) : closure k ⊆ s := by
- rw [← hk.mul_closure_one_eq_closure, ← hs.mul_closure_one_eq]
- exact mul_subset_mul_right h
+ (hk : IsCompact k) (hs : MeasurableSet s) (h : k ⊆ s) : closure k ⊆ s :=
+ hk.closure_subset_measurableSet hs h
@[to_additive (attr := simp)]
lemma measure_mul_closure_one (s : Set G) (μ : Measure G) :
@@ -777,20 +776,19 @@ lemma measure_mul_closure_one (s : Set G) (μ : Measure G) :
rw [← t_meas.mul_closure_one_eq]
exact smul_subset_smul_right kt
-@[to_additive]
+@[to_additive (attr := deprecated IsCompact.measure_closure)] -- Since 28 Jan 2024
lemma _root_.IsCompact.measure_closure_eq_of_group {k : Set G} (hk : IsCompact k) (μ : Measure G) :
- μ (closure k) = μ k := by
- rw [← hk.mul_closure_one_eq_closure, measure_mul_closure_one]
+ μ (closure k) = μ k :=
+ hk.measure_closure μ
@[to_additive]
-lemma innerRegularWRT_isCompact_isClosed_measure_ne_top_of_group [LocallyCompactSpace G]
- [h : InnerRegularCompactLTTop μ] :
+lemma innerRegularWRT_isCompact_isClosed_measure_ne_top_of_group [h : InnerRegularCompactLTTop μ] :
InnerRegularWRT μ (fun s ↦ IsCompact s ∧ IsClosed s) (fun s ↦ MeasurableSet s ∧ μ s ≠ ∞) := by
intro s ⟨s_meas, μs⟩ r hr
rcases h.innerRegular ⟨s_meas, μs⟩ r hr with ⟨K, Ks, K_comp, hK⟩
refine ⟨closure K, ?_, ⟨K_comp.closure, isClosed_closure⟩, ?_⟩
- · exact IsCompact.closure_subset_of_measurableSet_of_group K_comp s_meas Ks
- · rwa [K_comp.measure_closure_eq_of_group]
+ · exact IsCompact.closure_subset_measurableSet K_comp s_meas Ks
+ · rwa [K_comp.measure_closure]
end TopologicalGroup
Given a measure in a locally compact group, and a compact set k
, then for g
close enough to the identity, the set g • k \ k
has arbitrarily small measure. A slightly weaker version of this fact is used implicitly in our current proof of Steinhaus theorem that E - E
is a neighborhood of the identity if E
has positive measure. Since I will need this lemma later on, I extract it from the proof of Steinhaus theorem in this PR.
@@ -580,6 +580,32 @@ theorem regular_inv_iff : μ.inv.Regular ↔ μ.Regular :=
theorem innerRegular_inv_iff : μ.inv.InnerRegular ↔ μ.InnerRegular :=
InnerRegular.map_iff (Homeomorph.inv G)
+/-- Continuity of the measure of translates of a compact set: Given a compact set `k` in a
+topological group, for `g` close enough to the origin, `μ (g • k \ k)` is arbitrarily small. -/
+@[to_additive]
+lemma exists_nhds_measure_smul_diff_lt [LocallyCompactSpace G]
+ [IsFiniteMeasureOnCompacts μ] [InnerRegularCompactLTTop μ] {k : Set G}
+ (hk : IsCompact k) (h'k : IsClosed k) {ε : ℝ≥0∞} (hε : ε ≠ 0) :
+ ∃ V ∈ 𝓝 (1 : G), ∀ g ∈ V, μ (g • k \ k) < ε := by
+ obtain ⟨δ, δpos, δε⟩ : ∃ δ, 0 < δ ∧ δ < ε := DenselyOrdered.dense 0 ε hε.bot_lt
+ obtain ⟨U, hUk, hU, hμUk⟩ : ∃ (U : Set G), k ⊆ U ∧ IsOpen U ∧ μ U < μ k + δ :=
+ hk.exists_isOpen_lt_add δpos.ne'
+ obtain ⟨V, hV1, hVkU⟩ : ∃ V ∈ 𝓝 (1 : G), V * k ⊆ U := compact_open_separated_mul_left hk hU hUk
+ refine ⟨V, hV1, fun g hg ↦ ?_⟩
+ calc
+ μ (g • k \ k)
+ _ ≤ μ (U \ k) := by
+ refine measure_mono (diff_subset_diff_left ?_)
+ exact (smul_set_subset_smul hg).trans hVkU
+ _ = μ U - μ k := by
+ rw [measure_diff _ h'k.measurableSet hk.measure_lt_top.ne]
+ calc k = (1 : G) • k := by simp
+ _ ⊆ V • k := smul_set_subset_smul (mem_of_mem_nhds hV1)
+ _ ⊆ U := hVkU
+ _ ≤ (μ k + δ ) - μ k := by gcongr
+ _ = δ := ENNReal.add_sub_cancel_left hk.measure_lt_top.ne
+ _ < ε := δε
+
variable [IsMulLeftInvariant μ]
/-- If a left-invariant measure gives positive mass to a compact set, then it gives positive mass to
@@ -756,6 +782,16 @@ lemma _root_.IsCompact.measure_closure_eq_of_group {k : Set G} (hk : IsCompact k
μ (closure k) = μ k := by
rw [← hk.mul_closure_one_eq_closure, measure_mul_closure_one]
+@[to_additive]
+lemma innerRegularWRT_isCompact_isClosed_measure_ne_top_of_group [LocallyCompactSpace G]
+ [h : InnerRegularCompactLTTop μ] :
+ InnerRegularWRT μ (fun s ↦ IsCompact s ∧ IsClosed s) (fun s ↦ MeasurableSet s ∧ μ s ≠ ∞) := by
+ intro s ⟨s_meas, μs⟩ r hr
+ rcases h.innerRegular ⟨s_meas, μs⟩ r hr with ⟨K, Ks, K_comp, hK⟩
+ refine ⟨closure K, ?_, ⟨K_comp.closure, isClosed_closure⟩, ?_⟩
+ · exact IsCompact.closure_subset_of_measurableSet_of_group K_comp s_meas Ks
+ · rwa [K_comp.measure_closure_eq_of_group]
+
end TopologicalGroup
section CommSemigroup
@@ -256,7 +256,7 @@ theorem isMulLeftInvariant_map_smul
{α} [SMul α G] [SMulCommClass α G G] [MeasurableSpace α] [MeasurableSMul α G]
[IsMulLeftInvariant μ] (a : α) :
IsMulLeftInvariant (map (a • · : G → G) μ) :=
- (forall_measure_preimage_mul_iff _).1 <| fun x _ hs =>
+ (forall_measure_preimage_mul_iff _).1 fun x _ hs =>
(smulInvariantMeasure_map_smul μ a).measure_preimage_smul x hs
/-- The image of a right invariant measure under a left action is right invariant, assuming that
@@ -267,7 +267,7 @@ theorem isMulRightInvariant_map_smul
{α} [SMul α G] [SMulCommClass α Gᵐᵒᵖ G] [MeasurableSpace α] [MeasurableSMul α G]
[IsMulRightInvariant μ] (a : α) :
IsMulRightInvariant (map (a • · : G → G) μ) :=
- (forall_measure_preimage_mul_right_iff _).1 <| fun x _ hs =>
+ (forall_measure_preimage_mul_right_iff _).1 fun x _ hs =>
(smulInvariantMeasure_map_smul μ a).measure_preimage_smul (MulOpposite.op x) hs
/-- The image of a left invariant measure under right multiplication is left invariant. -/
@@ -202,30 +202,26 @@ theorem forall_measure_preimage_mul_right_iff (μ : Measure G) :
#align measure_theory.forall_measure_preimage_add_right_iff MeasureTheory.forall_measure_preimage_add_right_iff
@[to_additive]
-instance Measure.prod.instIsMulLeftInvariant [IsMulLeftInvariant μ] [SigmaFinite μ] {H : Type*}
+instance Measure.prod.instIsMulLeftInvariant [IsMulLeftInvariant μ] [SFinite μ] {H : Type*}
[Mul H] {mH : MeasurableSpace H} {ν : Measure H} [MeasurableMul H] [IsMulLeftInvariant ν]
- [SigmaFinite ν] : IsMulLeftInvariant (μ.prod ν) := by
+ [SFinite ν] : IsMulLeftInvariant (μ.prod ν) := by
constructor
rintro ⟨g, h⟩
change map (Prod.map (g * ·) (h * ·)) (μ.prod ν) = μ.prod ν
rw [← map_prod_map _ _ (measurable_const_mul g) (measurable_const_mul h),
map_mul_left_eq_self μ g, map_mul_left_eq_self ν h]
- · rw [map_mul_left_eq_self μ g]; infer_instance
- · rw [map_mul_left_eq_self ν h]; infer_instance
#align measure_theory.measure.prod.measure.is_mul_left_invariant MeasureTheory.Measure.prod.instIsMulLeftInvariant
#align measure_theory.measure.prod.measure.is_add_left_invariant MeasureTheory.Measure.prod.instIsAddLeftInvariant
@[to_additive]
-instance Measure.prod.instIsMulRightInvariant [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type*}
+instance Measure.prod.instIsMulRightInvariant [IsMulRightInvariant μ] [SFinite μ] {H : Type*}
[Mul H] {mH : MeasurableSpace H} {ν : Measure H} [MeasurableMul H] [IsMulRightInvariant ν]
- [SigmaFinite ν] : IsMulRightInvariant (μ.prod ν) := by
+ [SFinite ν] : IsMulRightInvariant (μ.prod ν) := by
constructor
rintro ⟨g, h⟩
change map (Prod.map (· * g) (· * h)) (μ.prod ν) = μ.prod ν
rw [← map_prod_map _ _ (measurable_mul_const g) (measurable_mul_const h),
map_mul_right_eq_self μ g, map_mul_right_eq_self ν h]
- · rw [map_mul_right_eq_self μ g]; infer_instance
- · rw [map_mul_right_eq_self ν h]; infer_instance
#align measure_theory.measure.prod.measure.is_mul_right_invariant MeasureTheory.Measure.prod.instIsMulRightInvariant
#align measure_theory.measure.prod.measure.is_add_right_invariant MeasureTheory.Measure.prod.instIsMulRightInvariant
@@ -435,6 +431,10 @@ theorem measurePreserving_inv (μ : Measure G) [IsInvInvariant μ] : MeasurePres
#align measure_theory.measure.measure_preserving_inv MeasureTheory.Measure.measurePreserving_inv
#align measure_theory.measure.measure_preserving_neg MeasureTheory.Measure.measurePreserving_neg
+@[to_additive]
+instance inv.instSFinite (μ : Measure G) [SFinite μ] : SFinite μ.inv := by
+ rw [Measure.inv]; infer_instance
+
end Inv
section InvolutiveInv
@@ -954,7 +954,7 @@ instance (priority := 100) IsHaarMeasure.sigmaFinite [SigmaCompactSpace G] : Sig
@[to_additive]
instance prod.instIsHaarMeasure {G : Type*} [Group G] [TopologicalSpace G] {_ : MeasurableSpace G}
{H : Type*} [Group H] [TopologicalSpace H] {_ : MeasurableSpace H} (μ : Measure G)
- (ν : Measure H) [IsHaarMeasure μ] [IsHaarMeasure ν] [SigmaFinite μ] [SigmaFinite ν]
+ (ν : Measure H) [IsHaarMeasure μ] [IsHaarMeasure ν] [SFinite μ] [SFinite ν]
[MeasurableMul G] [MeasurableMul H] : IsHaarMeasure (μ.prod ν) where
#align measure_theory.measure.prod.is_haar_measure MeasureTheory.Measure.prod.instIsHaarMeasure
#align measure_theory.measure.prod.is_add_haar_measure MeasureTheory.Measure.prod.instIsAddHaarMeasure
We prove that two regular Haar measures in a locally compact group coincide up to scalar multiplication, and the same thing for inner regular Haar measures. This is implemented in a new file MeasureTheory.Measure.Haar.Unique
. A few results that used to be in the MeasureTheory.Measure.Haar.Basic
are moved to this file (and extended) so several imports have to be changed.
@@ -548,6 +548,16 @@ section TopologicalGroup
variable [TopologicalSpace G] [BorelSpace G] {μ : Measure G} [Group G]
+@[to_additive]
+instance Measure.IsFiniteMeasureOnCompacts.inv [ContinuousInv G] [IsFiniteMeasureOnCompacts μ] :
+ IsFiniteMeasureOnCompacts μ.inv :=
+ IsFiniteMeasureOnCompacts.map μ (Homeomorph.inv G)
+
+@[to_additive]
+instance Measure.IsOpenPosMeasure.inv [ContinuousInv G] [IsOpenPosMeasure μ] :
+ IsOpenPosMeasure μ.inv :=
+ (Homeomorph.inv G).continuous.isOpenPosMeasure_map (Homeomorph.inv G).surjective
+
@[to_additive]
instance Measure.Regular.inv [ContinuousInv G] [Regular μ] : Regular μ.inv :=
Regular.map (Homeomorph.inv G)
@@ -561,10 +571,8 @@ instance Measure.InnerRegular.inv [ContinuousInv G] [InnerRegular μ] : InnerReg
variable [TopologicalGroup G]
@[to_additive]
-theorem regular_inv_iff : μ.inv.Regular ↔ μ.Regular := by
- constructor
- · intro h; rw [← μ.inv_inv]; exact Measure.Regular.inv
- · intro h; exact Measure.Regular.inv
+theorem regular_inv_iff : μ.inv.Regular ↔ μ.Regular :=
+ Regular.map_iff (Homeomorph.inv G)
#align measure_theory.regular_inv_iff MeasureTheory.regular_inv_iff
#align measure_theory.regular_neg_iff MeasureTheory.regular_neg_iff
This is the supremum of
along with some minor fixes from failures on nightly-testing as Mathlib master
is merged into it.
Note that some PRs for changes that are already compatible with the current toolchain and will be necessary have already been split out: #8380.
I am hopeful that in future we will be able to progressively merge adaptation PRs into a bump/v4.X.0
branch, so we never end up with a "big merge" like this. However one of these adaptation PRs (#8056) predates my new scheme for combined CI, and it wasn't possible to keep that PR viable in the meantime.
In particular this includes adjustments for the Lean PRs
We can get rid of all the
local macro_rules | `($x ^ $y) => `(HPow.hPow $x $y) -- Porting note: See issue [lean4#2220](https://github.com/leanprover/lean4/pull/2220)
macros across Mathlib (and in any projects that want to write natural number powers of reals).
Changes the default behaviour of simp
to (config := {decide := false})
. This makes simp
(and consequentially norm_num
) less powerful, but also more consistent, and less likely to blow up in long failures. This requires a variety of changes: changing some previously by simp
or norm_num
to decide
or rfl
, or adding (config := {decide := true})
.
This changed the behaviour of simp
so that simp [f]
will only unfold "fully applied" occurrences of f
. The old behaviour can be recovered with simp (config := { unfoldPartialApp := true })
. We may in future add a syntax for this, e.g. simp [!f]
; please provide feedback! In the meantime, we have made the following changes:
(config := { unfoldPartialApp := true })
in some places, to recover the old behaviour@[eqns]
to manually adjust the equation lemmas for a particular definition, recovering the old behaviour just for that definition. See #8371, where we do this for Function.comp
and Function.flip
.This change in Lean may require further changes down the line (e.g. adding the !f
syntax, and/or upstreaming the special treatment for Function.comp
and Function.flip
, and/or removing this special treatment). Please keep an open and skeptical mind about these changes!
Co-authored-by: leanprover-community-mathlib4-bot <leanprover-community-mathlib4-bot@users.noreply.github.com> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Eric Wieser <wieser.eric@gmail.com> Co-authored-by: Mauricio Collares <mauricio@collares.org>
@@ -548,16 +548,6 @@ section TopologicalGroup
variable [TopologicalSpace G] [BorelSpace G] {μ : Measure G} [Group G]
-@[to_additive]
-instance Measure.IsFiniteMeasureOnCompacts.inv [ContinuousInv G] [IsFiniteMeasureOnCompacts μ] :
- IsFiniteMeasureOnCompacts μ.inv :=
- IsFiniteMeasureOnCompacts.map μ (Homeomorph.inv G)
-
-@[to_additive]
-instance Measure.IsOpenPosMeasure.inv [ContinuousInv G] [IsOpenPosMeasure μ] :
- IsOpenPosMeasure μ.inv :=
- (Homeomorph.inv G).continuous.isOpenPosMeasure_map (Homeomorph.inv G).surjective
-
@[to_additive]
instance Measure.Regular.inv [ContinuousInv G] [Regular μ] : Regular μ.inv :=
Regular.map (Homeomorph.inv G)
@@ -571,8 +561,10 @@ instance Measure.InnerRegular.inv [ContinuousInv G] [InnerRegular μ] : InnerReg
variable [TopologicalGroup G]
@[to_additive]
-theorem regular_inv_iff : μ.inv.Regular ↔ μ.Regular :=
- Regular.map_iff (Homeomorph.inv G)
+theorem regular_inv_iff : μ.inv.Regular ↔ μ.Regular := by
+ constructor
+ · intro h; rw [← μ.inv_inv]; exact Measure.Regular.inv
+ · intro h; exact Measure.Regular.inv
#align measure_theory.regular_inv_iff MeasureTheory.regular_inv_iff
#align measure_theory.regular_neg_iff MeasureTheory.regular_neg_iff
@@ -412,6 +412,9 @@ section Inv
variable [Inv G]
+@[to_additive]
+theorem inv_def (μ : Measure G) : μ.inv = Measure.map inv μ := rfl
+
@[to_additive (attr := simp)]
theorem inv_eq_self (μ : Measure G) [IsInvInvariant μ] : μ.inv = μ :=
IsInvInvariant.inv_eq_self
@@ -546,21 +549,37 @@ section TopologicalGroup
variable [TopologicalSpace G] [BorelSpace G] {μ : Measure G} [Group G]
@[to_additive]
-instance Measure.Regular.inv [ContinuousInv G] [T2Space G] [Regular μ] : Regular μ.inv :=
+instance Measure.IsFiniteMeasureOnCompacts.inv [ContinuousInv G] [IsFiniteMeasureOnCompacts μ] :
+ IsFiniteMeasureOnCompacts μ.inv :=
+ IsFiniteMeasureOnCompacts.map μ (Homeomorph.inv G)
+
+@[to_additive]
+instance Measure.IsOpenPosMeasure.inv [ContinuousInv G] [IsOpenPosMeasure μ] :
+ IsOpenPosMeasure μ.inv :=
+ (Homeomorph.inv G).continuous.isOpenPosMeasure_map (Homeomorph.inv G).surjective
+
+@[to_additive]
+instance Measure.Regular.inv [ContinuousInv G] [Regular μ] : Regular μ.inv :=
Regular.map (Homeomorph.inv G)
#align measure_theory.measure.regular.inv MeasureTheory.Measure.Regular.inv
#align measure_theory.measure.regular.neg MeasureTheory.Measure.Regular.neg
+@[to_additive]
+instance Measure.InnerRegular.inv [ContinuousInv G] [InnerRegular μ] : InnerRegular μ.inv :=
+ InnerRegular.map (Homeomorph.inv G)
+
variable [TopologicalGroup G]
@[to_additive]
-theorem regular_inv_iff [T2Space G] : μ.inv.Regular ↔ μ.Regular := by
- constructor
- · intro h; rw [← μ.inv_inv]; exact Measure.Regular.inv
- · intro h; exact Measure.Regular.inv
+theorem regular_inv_iff : μ.inv.Regular ↔ μ.Regular :=
+ Regular.map_iff (Homeomorph.inv G)
#align measure_theory.regular_inv_iff MeasureTheory.regular_inv_iff
#align measure_theory.regular_neg_iff MeasureTheory.regular_neg_iff
+@[to_additive]
+theorem innerRegular_inv_iff : μ.inv.InnerRegular ↔ μ.InnerRegular :=
+ InnerRegular.map_iff (Homeomorph.inv G)
+
variable [IsMulLeftInvariant μ]
/-- If a left-invariant measure gives positive mass to a compact set, then it gives positive mass to
@@ -585,19 +604,27 @@ theorem isOpenPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsComp
/-- A nonzero left-invariant regular measure gives positive mass to any open set. -/
@[to_additive "A nonzero left-invariant regular measure gives positive mass to any open set."]
-theorem isOpenPosMeasure_of_mulLeftInvariant_of_regular [Regular μ] (h₀ : μ ≠ 0) :
+instance (priority := 80) isOpenPosMeasure_of_mulLeftInvariant_of_regular [Regular μ] [NeZero μ] :
IsOpenPosMeasure μ :=
- let ⟨K, hK, h2K⟩ := Regular.exists_compact_not_null.mpr h₀
+ let ⟨K, hK, h2K⟩ := Regular.exists_compact_not_null.mpr (NeZero.ne μ)
isOpenPosMeasure_of_mulLeftInvariant_of_compact K hK h2K
#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_regular
#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_addLeftInvariant_of_regular
+/-- A nonzero left-invariant inner regular measure gives positive mass to any open set. -/
+@[to_additive "A nonzero left-invariant inner regular measure gives positive mass to any open set."]
+instance (priority := 80) isOpenPosMeasure_of_mulLeftInvariant_of_innerRegular
+ [InnerRegular μ] [NeZero μ] :
+ IsOpenPosMeasure μ :=
+ let ⟨K, hK, h2K⟩ := InnerRegular.exists_compact_not_null.mpr (NeZero.ne μ)
+ isOpenPosMeasure_of_mulLeftInvariant_of_compact K hK h2K
+
@[to_additive]
theorem null_iff_of_isMulLeftInvariant [Regular μ] {s : Set G} (hs : IsOpen s) :
μ s = 0 ↔ s = ∅ ∨ μ = 0 := by
- by_cases h3μ : μ = 0; · simp [h3μ]
- · haveI := isOpenPosMeasure_of_mulLeftInvariant_of_regular h3μ
- simp only [h3μ, or_false_iff, hs.measure_eq_zero_iff μ]
+ rcases eq_zero_or_neZero μ with rfl|hμ
+ · simp
+ · simp only [or_false_iff, hs.measure_eq_zero_iff μ, NeZero.ne μ]
#align measure_theory.null_iff_of_is_mul_left_invariant MeasureTheory.null_iff_of_isMulLeftInvariant
#align measure_theory.null_iff_of_is_add_left_invariant MeasureTheory.null_iff_of_isAddLeftInvariant
@@ -695,6 +722,40 @@ theorem measure_univ_of_isMulLeftInvariant [WeaklyLocallyCompactSpace G] [Noncom
#align measure_theory.measure_univ_of_is_mul_left_invariant MeasureTheory.measure_univ_of_isMulLeftInvariant
#align measure_theory.measure_univ_of_is_add_left_invariant MeasureTheory.measure_univ_of_isAddLeftInvariant
+@[to_additive]
+lemma _root_.MeasurableSet.mul_closure_one_eq {s : Set G} (hs : MeasurableSet s) :
+ s * (closure {1} : Set G) = s := by
+ apply MeasurableSet.induction_on_open (C := fun t ↦ t • (closure {1} : Set G) = t) ?_ ?_ ?_ hs
+ · intro U hU
+ exact hU.mul_closure_one_eq
+ · rintro t - ht
+ exact compl_mul_closure_one_eq_iff.2 ht
+ · rintro f - - h''f
+ simp only [iUnion_smul, h''f]
+
+/-- If a compact set is included in a measurable set, then so is its closure. -/
+@[to_additive]
+lemma _root_.IsCompact.closure_subset_of_measurableSet_of_group {k s : Set G}
+ (hk : IsCompact k) (hs : MeasurableSet s) (h : k ⊆ s) : closure k ⊆ s := by
+ rw [← hk.mul_closure_one_eq_closure, ← hs.mul_closure_one_eq]
+ exact mul_subset_mul_right h
+
+@[to_additive (attr := simp)]
+lemma measure_mul_closure_one (s : Set G) (μ : Measure G) :
+ μ (s * (closure {1} : Set G)) = μ s := by
+ apply le_antisymm ?_ (measure_mono (subset_mul_closure_one s))
+ conv_rhs => rw [measure_eq_iInf]
+ simp only [le_iInf_iff]
+ intro t kt t_meas
+ apply measure_mono
+ rw [← t_meas.mul_closure_one_eq]
+ exact smul_subset_smul_right kt
+
+@[to_additive]
+lemma _root_.IsCompact.measure_closure_eq_of_group {k : Set G} (hk : IsCompact k) (μ : Measure G) :
+ μ (closure k) = μ k := by
+ rw [← hk.mul_closure_one_eq_closure, measure_mul_closure_one]
+
end TopologicalGroup
section CommSemigroup
@@ -720,42 +781,46 @@ section Haar
namespace Measure
-/-- A measure on an additive group is an additive Haar measure if it is left-invariant, and gives
-finite mass to compact sets and positive mass to open sets. -/
+/-- A measure on an additive group is an additive Haar measure if it is left-invariant, and
+gives finite mass to compact sets and positive mass to open sets.
+
+Textbooks generally require an additional regularity assumption to ensure nice behavior on
+arbitrary locally compact groups. Use `[IsAddHaarMeasure μ] [Regular μ]` or
+`[IsAddHaarMeasure μ] [InnerRegular μ]` in these situations. Note that a Haar measure in our
+sense is automatically regular and inner regular on second countable locally compact groups, as
+checked just below this definition. -/
class IsAddHaarMeasure {G : Type*} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
(μ : Measure G) extends IsFiniteMeasureOnCompacts μ, IsAddLeftInvariant μ, IsOpenPosMeasure μ :
Prop
#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
-/-- A measure on a group is a Haar measure if it is left-invariant, and gives finite mass to compact
-sets and positive mass to open sets. -/
+/-- A measure on a group is a Haar measure if it is left-invariant, and gives finite mass to
+compact sets and positive mass to open sets.
+
+Textbooks generally require an additional regularity assumption to ensure nice behavior on
+arbitrary locally compact groups. Use `[IsHaarMeasure μ] [Regular μ]` or
+`[IsHaarMeasure μ] [InnerRegular μ]` in these situations. Note that a Haar measure in our
+sense is automatically regular and inner regular on second countable locally compact groups, as
+checked just below this definition.-/
@[to_additive existing]
class IsHaarMeasure {G : Type*} [Group G] [TopologicalSpace G] [MeasurableSpace G]
(μ : Measure G) extends IsFiniteMeasureOnCompacts μ, IsMulLeftInvariant μ, IsOpenPosMeasure μ :
Prop
#align measure_theory.measure.is_haar_measure MeasureTheory.Measure.IsHaarMeasure
-/-- Record that a Haar measure on a locally compact space is locally finite. This is needed as the
-fact that a measure which is finite on compacts is locally finite is not registered as an instance,
-to avoid an instance loop.
+#noalign measure_theory.measure.is_locally_finite_measure_of_is_haar_measure
+#noalign measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure
-See Note [lower instance priority]. -/
-@[to_additive
-"Record that an additive Haar measure on a locally compact space is locally finite. This is needed
-as the fact that a measure which is finite on compacts is locally finite is not registered as an
-instance, to avoid an instance loop.
+variable [Group G] [TopologicalSpace G] (μ : Measure G) [IsHaarMeasure μ]
-See Note [lower instance priority]"]
-instance (priority := 100) isLocallyFiniteMeasure_of_isHaarMeasure {G : Type*} [Group G]
- [MeasurableSpace G] [TopologicalSpace G] [WeaklyLocallyCompactSpace G] (μ : Measure G)
- [IsHaarMeasure μ] : IsLocallyFiniteMeasure μ :=
- isLocallyFiniteMeasure_of_isFiniteMeasureOnCompacts
-#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_isHaarMeasure
-#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_isAddHaarMeasure
+/-! Check that typeclass inference knows that a Haar measure on a locally compact second countable
+topological group is automatically regular and inner regular. -/
-section
+example [TopologicalGroup G] [LocallyCompactSpace G] [SecondCountableTopology G] [BorelSpace G] :
+ Regular μ := by infer_instance
-variable [Group G] [TopologicalSpace G] (μ : Measure G) [IsHaarMeasure μ]
+example [TopologicalGroup G] [LocallyCompactSpace G] [SecondCountableTopology G] [BorelSpace G] :
+ InnerRegular μ := by infer_instance
@[to_additive (attr := simp)]
theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ {(1 : G)} := by
@@ -803,15 +868,31 @@ theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type*} [Group
#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.isHaarMeasure_map
#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.isAddHaarMeasure_map
+/-- The image of a finite Haar measure under a continuous surjective group homomorphism is again
+a Haar measure. See also `isHaarMeasure_map`.-/
+@[to_additive
+"The image of a finite additive Haar measure under a continuous surjective additive group
+homomorphism is again an additive Haar measure. See also `isAddHaarMeasure_map`."]
+theorem isHaarMeasure_map_of_isFiniteMeasure
+ [BorelSpace G] [TopologicalGroup G] {H : Type*} [Group H]
+ [TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [TopologicalGroup H] [IsFiniteMeasure μ]
+ (f : G →* H) (hf : Continuous f) (h_surj : Surjective f) :
+ IsHaarMeasure (Measure.map f μ) :=
+ { toIsMulLeftInvariant := isMulLeftInvariant_map f.toMulHom hf.measurable h_surj
+ lt_top_of_isCompact := fun _K hK ↦ hK.measure_lt_top
+ toIsOpenPosMeasure := hf.isOpenPosMeasure_map h_surj }
+
/-- The image of a Haar measure under map of a left action is again a Haar measure. -/
@[to_additive
"The image of a Haar measure under map of a left additive action is again a Haar measure"]
-instance isHaarMeasure_map_smul {α} [BorelSpace G] [TopologicalGroup G] [T2Space G]
+instance isHaarMeasure_map_smul {α} [BorelSpace G] [TopologicalGroup G]
[Group α] [MulAction α G] [SMulCommClass α G G] [MeasurableSpace α] [MeasurableSMul α G]
[ContinuousConstSMul α G] (a : α) : IsHaarMeasure (Measure.map (a • · : G → G) μ) where
toIsMulLeftInvariant := isMulLeftInvariant_map_smul _
lt_top_of_isCompact K hK := by
- rw [map_apply (measurable_const_smul _) hK.measurableSet]
+ let F := (Homeomorph.smul a (α := G)).toMeasurableEquiv
+ change map F μ K < ∞
+ rw [F.map_apply K]
exact IsCompact.measure_lt_top <| (Homeomorph.isCompact_preimage (Homeomorph.smul a)).2 hK
toIsOpenPosMeasure :=
(continuous_const_smul a).isOpenPosMeasure_map (MulAction.surjective a)
@@ -819,18 +900,27 @@ instance isHaarMeasure_map_smul {α} [BorelSpace G] [TopologicalGroup G] [T2Spac
/-- The image of a Haar measure under right multiplication is again a Haar measure. -/
@[to_additive isHaarMeasure_map_add_right
"The image of a Haar measure under right addition is again a Haar measure."]
-instance isHaarMeasure_map_mul_right [BorelSpace G] [TopologicalGroup G] [T2Space G] (g : G) :
+instance isHaarMeasure_map_mul_right [BorelSpace G] [TopologicalGroup G] (g : G) :
IsHaarMeasure (Measure.map (· * g) μ) :=
isHaarMeasure_map_smul μ (MulOpposite.op g)
/-- A convenience wrapper for `MeasureTheory.Measure.isHaarMeasure_map`. -/
@[to_additive "A convenience wrapper for `MeasureTheory.Measure.isAddHaarMeasure_map`."]
nonrec theorem _root_.MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type*}
- [Group H] [TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [T2Space H]
+ [Group H] [TopologicalSpace H] [MeasurableSpace H] [BorelSpace H]
[TopologicalGroup H] (e : G ≃* H) (he : Continuous e) (hesymm : Continuous e.symm) :
IsHaarMeasure (Measure.map e μ) :=
- isHaarMeasure_map μ (e : G →* H) he e.surjective
- ({ e with } : G ≃ₜ H).toCocompactMap.cocompact_tendsto'
+ { toIsMulLeftInvariant := isMulLeftInvariant_map e.toMulHom he.measurable e.surjective
+ lt_top_of_isCompact := by
+ intro K hK
+ let F : G ≃ₜ H := {
+ e.toEquiv with
+ continuous_toFun := he
+ continuous_invFun := hesymm }
+ change map F.toMeasurableEquiv μ K < ∞
+ rw [F.toMeasurableEquiv.map_apply K]
+ exact (F.isCompact_preimage.mpr hK).measure_lt_top
+ toIsOpenPosMeasure := he.isOpenPosMeasure_map e.surjective }
#align mul_equiv.is_haar_measure_map MulEquiv.isHaarMeasure_map
#align add_equiv.is_add_haar_measure_map AddEquiv.isAddHaarMeasure_map
@@ -838,7 +928,7 @@ nonrec theorem _root_.MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGrou
theorem _root_.ContinuousLinearEquiv.isAddHaarMeasure_map
{E F R S : Type*} [Semiring R] [Semiring S]
[AddCommGroup E] [Module R E] [AddCommGroup F] [Module S F]
- [TopologicalSpace E] [TopologicalAddGroup E] [TopologicalSpace F] [T2Space F]
+ [TopologicalSpace E] [TopologicalAddGroup E] [TopologicalSpace F]
[TopologicalAddGroup F]
{σ : R →+* S} {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ]
[MeasurableSpace E] [BorelSpace E] [MeasurableSpace F] [BorelSpace F]
@@ -872,14 +962,14 @@ instance prod.instIsHaarMeasure {G : Type*} [Group G] [TopologicalSpace G] {_ :
/-- If the neutral element of a group is not isolated, then a Haar measure on this group has
no atoms.
-The additive version of this instance applies in particular to show that an additive Haar measure on
-a nontrivial finite-dimensional real vector space has no atom. -/
+The additive version of this instance applies in particular to show that an additive Haar
+measure on a nontrivial finite-dimensional real vector space has no atom. -/
@[to_additive
"If the zero element of an additive group is not isolated, then an additive Haar measure on this
group has no atoms.
-This applies in particular to show that an additive Haar measure on a nontrivial finite-dimensional
-real vector space has no atom."]
+This applies in particular to show that an additive Haar measure on a nontrivial
+finite-dimensional real vector space has no atom."]
instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
[WeaklyLocallyCompactSpace G] [(𝓝[≠] (1 : G)).NeBot] (μ : Measure G) [μ.IsHaarMeasure] :
NoAtoms μ := by
@@ -893,8 +983,6 @@ instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpac
#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.noAtoms
#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.noAtoms
-end
-
end Measure
end Haar
Hom
and file name (#8095)
I believe the file defining a type of morphisms belongs alongside the file defining the structure this morphism works on. So I would like to reorganize the files in the Mathlib.Algebra.Hom
folder so that e.g. Mathlib.Algebra.Hom.Ring
becomes Mathlib.Algebra.Ring.Hom
and Mathlib.Algebra.Hom.NonUnitalAlg
becomes Mathlib.Algebra.Algebra.NonUnitalHom
.
While fixing the imports I went ahead and sorted them for good luck.
The full list of changes is: renamed: Mathlib/Algebra/Hom/NonUnitalAlg.lean -> Mathlib/Algebra/Algebra/NonUnitalHom.lean renamed: Mathlib/Algebra/Hom/Aut.lean -> Mathlib/Algebra/Group/Aut.lean renamed: Mathlib/Algebra/Hom/Commute.lean -> Mathlib/Algebra/Group/Commute/Hom.lean renamed: Mathlib/Algebra/Hom/Embedding.lean -> Mathlib/Algebra/Group/Embedding.lean renamed: Mathlib/Algebra/Hom/Equiv/Basic.lean -> Mathlib/Algebra/Group/Equiv/Basic.lean renamed: Mathlib/Algebra/Hom/Equiv/TypeTags.lean -> Mathlib/Algebra/Group/Equiv/TypeTags.lean renamed: Mathlib/Algebra/Hom/Equiv/Units/Basic.lean -> Mathlib/Algebra/Group/Units/Equiv.lean renamed: Mathlib/Algebra/Hom/Equiv/Units/GroupWithZero.lean -> Mathlib/Algebra/GroupWithZero/Units/Equiv.lean renamed: Mathlib/Algebra/Hom/Freiman.lean -> Mathlib/Algebra/Group/Freiman.lean renamed: Mathlib/Algebra/Hom/Group/Basic.lean -> Mathlib/Algebra/Group/Hom/Basic.lean renamed: Mathlib/Algebra/Hom/Group/Defs.lean -> Mathlib/Algebra/Group/Hom/Defs.lean renamed: Mathlib/Algebra/Hom/GroupAction.lean -> Mathlib/GroupTheory/GroupAction/Hom.lean renamed: Mathlib/Algebra/Hom/GroupInstances.lean -> Mathlib/Algebra/Group/Hom/Instances.lean renamed: Mathlib/Algebra/Hom/Iterate.lean -> Mathlib/Algebra/GroupPower/IterateHom.lean renamed: Mathlib/Algebra/Hom/Centroid.lean -> Mathlib/Algebra/Ring/CentroidHom.lean renamed: Mathlib/Algebra/Hom/Ring/Basic.lean -> Mathlib/Algebra/Ring/Hom/Basic.lean renamed: Mathlib/Algebra/Hom/Ring/Defs.lean -> Mathlib/Algebra/Ring/Hom/Defs.lean renamed: Mathlib/Algebra/Hom/Units.lean -> Mathlib/Algebra/Group/Units/Hom.lean
Zulip thread: https://leanprover.zulipchat.com/#narrow/stream/287929-mathlib4/topic/Reorganizing.20.60Mathlib.2EAlgebra.2EHom.60
@@ -3,13 +3,13 @@ Copyright (c) 2020 Floris van Doorn. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn
-/
-import Mathlib.Algebra.Hom.GroupAction
import Mathlib.Dynamics.Ergodic.MeasurePreserving
-import Mathlib.MeasureTheory.Measure.Regular
+import Mathlib.GroupTheory.GroupAction.Hom
+import Mathlib.MeasureTheory.Constructions.Prod.Basic
+import Mathlib.MeasureTheory.Group.Action
import Mathlib.MeasureTheory.Group.MeasurableEquiv
import Mathlib.MeasureTheory.Measure.OpenPos
-import Mathlib.MeasureTheory.Group.Action
-import Mathlib.MeasureTheory.Constructions.Prod.Basic
+import Mathlib.MeasureTheory.Measure.Regular
import Mathlib.Topology.ContinuousFunction.CocompactMap
import Mathlib.Topology.Homeomorph
@@ -834,6 +834,18 @@ nonrec theorem _root_.MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGrou
#align mul_equiv.is_haar_measure_map MulEquiv.isHaarMeasure_map
#align add_equiv.is_add_haar_measure_map AddEquiv.isAddHaarMeasure_map
+/-- A convenience wrapper for MeasureTheory.Measure.isAddHaarMeasure_map`. -/
+theorem _root_.ContinuousLinearEquiv.isAddHaarMeasure_map
+ {E F R S : Type*} [Semiring R] [Semiring S]
+ [AddCommGroup E] [Module R E] [AddCommGroup F] [Module S F]
+ [TopologicalSpace E] [TopologicalAddGroup E] [TopologicalSpace F] [T2Space F]
+ [TopologicalAddGroup F]
+ {σ : R →+* S} {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ]
+ [MeasurableSpace E] [BorelSpace E] [MeasurableSpace F] [BorelSpace F]
+ (L : E ≃SL[σ] F) (μ : Measure E) [IsAddHaarMeasure μ] :
+ IsAddHaarMeasure (μ.map L) :=
+ AddEquiv.isAddHaarMeasure_map _ (L : E ≃+ F) L.continuous L.symm.continuous
+
/-- A Haar measure on a σ-compact space is σ-finite.
See Note [lower instance priority] -/
@@ -3,6 +3,7 @@ Copyright (c) 2020 Floris van Doorn. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn
-/
+import Mathlib.Algebra.Hom.GroupAction
import Mathlib.Dynamics.Ergodic.MeasurePreserving
import Mathlib.MeasureTheory.Measure.Regular
import Mathlib.MeasureTheory.Group.MeasurableEquiv
@@ -10,6 +11,7 @@ import Mathlib.MeasureTheory.Measure.OpenPos
import Mathlib.MeasureTheory.Group.Action
import Mathlib.MeasureTheory.Constructions.Prod.Basic
import Mathlib.Topology.ContinuousFunction.CocompactMap
+import Mathlib.Topology.Homeomorph
#align_import measure_theory.group.measure from "leanprover-community/mathlib"@"fd5edc43dc4f10b85abfe544b88f82cf13c5f844"
@@ -246,6 +248,48 @@ end MeasurableMul
end Mul
+section Semigroup
+
+variable [Semigroup G] [MeasurableMul G] {μ : Measure G}
+
+/-- The image of a left invariant measure under a left action is left invariant, assuming that
+the action preserves multiplication. -/
+@[to_additive "The image of a left invariant measure under a left additive action is left invariant,
+assuming that the action preserves addition."]
+theorem isMulLeftInvariant_map_smul
+ {α} [SMul α G] [SMulCommClass α G G] [MeasurableSpace α] [MeasurableSMul α G]
+ [IsMulLeftInvariant μ] (a : α) :
+ IsMulLeftInvariant (map (a • · : G → G) μ) :=
+ (forall_measure_preimage_mul_iff _).1 <| fun x _ hs =>
+ (smulInvariantMeasure_map_smul μ a).measure_preimage_smul x hs
+
+/-- The image of a right invariant measure under a left action is right invariant, assuming that
+the action preserves multiplication. -/
+@[to_additive "The image of a right invariant measure under a left additive action is right
+ invariant, assuming that the action preserves addition."]
+theorem isMulRightInvariant_map_smul
+ {α} [SMul α G] [SMulCommClass α Gᵐᵒᵖ G] [MeasurableSpace α] [MeasurableSMul α G]
+ [IsMulRightInvariant μ] (a : α) :
+ IsMulRightInvariant (map (a • · : G → G) μ) :=
+ (forall_measure_preimage_mul_right_iff _).1 <| fun x _ hs =>
+ (smulInvariantMeasure_map_smul μ a).measure_preimage_smul (MulOpposite.op x) hs
+
+/-- The image of a left invariant measure under right multiplication is left invariant. -/
+@[to_additive isMulLeftInvariant_map_add_right
+"The image of a left invariant measure under right addition is left invariant."]
+instance isMulLeftInvariant_map_mul_right [IsMulLeftInvariant μ] (g : G) :
+ IsMulLeftInvariant (map (· * g) μ) :=
+ isMulLeftInvariant_map_smul (MulOpposite.op g)
+
+/-- The image of a right invariant measure under left multiplication is right invariant. -/
+@[to_additive isMulRightInvariant_map_add_left
+"The image of a right invariant measure under left addition is right invariant."]
+instance isMulRightInvariant_map_mul_left [IsMulRightInvariant μ] (g : G) :
+ IsMulRightInvariant (map (g * ·) μ) :=
+ isMulRightInvariant_map_smul g
+
+end Semigroup
+
section DivInvMonoid
variable [DivInvMonoid G]
@@ -759,6 +803,26 @@ theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type*} [Group
#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.isHaarMeasure_map
#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.isAddHaarMeasure_map
+/-- The image of a Haar measure under map of a left action is again a Haar measure. -/
+@[to_additive
+ "The image of a Haar measure under map of a left additive action is again a Haar measure"]
+instance isHaarMeasure_map_smul {α} [BorelSpace G] [TopologicalGroup G] [T2Space G]
+ [Group α] [MulAction α G] [SMulCommClass α G G] [MeasurableSpace α] [MeasurableSMul α G]
+ [ContinuousConstSMul α G] (a : α) : IsHaarMeasure (Measure.map (a • · : G → G) μ) where
+ toIsMulLeftInvariant := isMulLeftInvariant_map_smul _
+ lt_top_of_isCompact K hK := by
+ rw [map_apply (measurable_const_smul _) hK.measurableSet]
+ exact IsCompact.measure_lt_top <| (Homeomorph.isCompact_preimage (Homeomorph.smul a)).2 hK
+ toIsOpenPosMeasure :=
+ (continuous_const_smul a).isOpenPosMeasure_map (MulAction.surjective a)
+
+/-- The image of a Haar measure under right multiplication is again a Haar measure. -/
+@[to_additive isHaarMeasure_map_add_right
+ "The image of a Haar measure under right addition is again a Haar measure."]
+instance isHaarMeasure_map_mul_right [BorelSpace G] [TopologicalGroup G] [T2Space G] (g : G) :
+ IsHaarMeasure (Measure.map (· * g) μ) :=
+ isHaarMeasure_map_smul μ (MulOpposite.op g)
+
/-- A convenience wrapper for `MeasureTheory.Measure.isHaarMeasure_map`. -/
@[to_additive "A convenience wrapper for `MeasureTheory.Measure.isAddHaarMeasure_map`."]
nonrec theorem _root_.MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type*}
@@ -606,7 +606,7 @@ on open sets has infinite mass. -/
@[to_additive (attr := simp)
"In a noncompact locally compact additive group, a left-invariant measure which is positive on open
sets has infinite mass."]
-theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSpace G]
+theorem measure_univ_of_isMulLeftInvariant [WeaklyLocallyCompactSpace G] [NoncompactSpace G]
(μ : Measure G) [IsOpenPosMeasure μ] [μ.IsMulLeftInvariant] : μ univ = ∞ := by
/- Consider a closed compact set `K` with nonempty interior. For any compact set `L`, one may
find `g = g (L)` such that `L` is disjoint from `g • K`. Iterating this, one finds
@@ -703,7 +703,7 @@ instance, to avoid an instance loop.
See Note [lower instance priority]"]
instance (priority := 100) isLocallyFiniteMeasure_of_isHaarMeasure {G : Type*} [Group G]
- [MeasurableSpace G] [TopologicalSpace G] [LocallyCompactSpace G] (μ : Measure G)
+ [MeasurableSpace G] [TopologicalSpace G] [WeaklyLocallyCompactSpace G] (μ : Measure G)
[IsHaarMeasure μ] : IsLocallyFiniteMeasure μ :=
isLocallyFiniteMeasure_of_isFiniteMeasureOnCompacts
#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_isHaarMeasure
@@ -805,7 +805,7 @@ group has no atoms.
This applies in particular to show that an additive Haar measure on a nontrivial finite-dimensional
real vector space has no atom."]
instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
- [LocallyCompactSpace G] [(𝓝[≠] (1 : G)).NeBot] (μ : Measure G) [μ.IsHaarMeasure] :
+ [WeaklyLocallyCompactSpace G] [(𝓝[≠] (1 : G)).NeBot] (μ : Measure G) [μ.IsHaarMeasure] :
NoAtoms μ := by
cases eq_or_ne (μ 1) 0 with
| inl h => constructor; simpa
@@ -612,11 +612,9 @@ theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSp
find `g = g (L)` such that `L` is disjoint from `g • K`. Iterating this, one finds
infinitely many translates of `K` which are disjoint from each other. As they all have the
same positive mass, it follows that the space has infinite measure. -/
- obtain ⟨K, hK, Kclosed, Kint⟩ : ∃ K : Set G, IsCompact K ∧ IsClosed K ∧ (1 : G) ∈ interior K := by
- rcases local_isCompact_isClosed_nhds_of_group (isOpen_univ.mem_nhds (mem_univ (1 : G))) with
- ⟨K, hK⟩
- exact ⟨K, hK.1, hK.2.1, hK.2.2.2⟩
- have K_pos : 0 < μ K := measure_pos_of_nonempty_interior _ ⟨_, Kint⟩
+ obtain ⟨K, hK, Kclosed, K1⟩ : ∃ K : Set G, IsCompact K ∧ IsClosed K ∧ K ∈ 𝓝 1 :=
+ exists_isCompact_isClosed_nhds_one G
+ have K_pos : 0 < μ K := measure_pos_of_nonempty_interior _ ⟨_, mem_interior_iff_mem_nhds.2 K1⟩
have A : ∀ L : Set G, IsCompact L → ∃ g : G, Disjoint L (g • K) := fun L hL =>
exists_disjoint_smul_of_isCompact hL hK
choose! g hg using A
@@ -809,32 +807,13 @@ real vector space has no atom."]
instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
[LocallyCompactSpace G] [(𝓝[≠] (1 : G)).NeBot] (μ : Measure G) [μ.IsHaarMeasure] :
NoAtoms μ := by
- suffices H : μ {(1 : G)} ≤ 0; · constructor; simp [le_bot_iff.1 H]
- obtain ⟨K, K_compact, K_int⟩ : ∃ K : Set G, IsCompact K ∧ (1 : G) ∈ interior K := by
- rcases exists_compact_subset isOpen_univ (mem_univ (1 : G)) with ⟨K, hK⟩
- exact ⟨K, hK.1, hK.2.1⟩
- have K_inf : Set.Infinite K := infinite_of_mem_nhds (1 : G) (mem_interior_iff_mem_nhds.1 K_int)
- have μKlt : μ K ≠ ∞ := K_compact.measure_lt_top.ne
- have I : ∀ n : ℕ, μ {(1 : G)} ≤ μ K / n := by
- intro n
- obtain ⟨t, tK, tn⟩ : ∃ t : Finset G, ↑t ⊆ K ∧ t.card = n := K_inf.exists_subset_card_eq n
- have A : μ t ≤ μ K := measure_mono tK
- have B : μ t = n * μ {(1 : G)} := by
- rw [← biUnion_of_singleton (t : Set G)]
- change μ (⋃ x ∈ t, {x}) = n * μ {1}
- rw [@measure_biUnion_finset G G _ μ t fun i => {i}]
- · simp only [tn, Finset.sum_const, nsmul_eq_mul, haar_singleton]
- · intro x _ y _ xy
- simp only [onFun, xy.symm, mem_singleton_iff, not_false_iff, disjoint_singleton_right]
- · intro b _; exact measurableSet_singleton b
- rw [B] at A
- rwa [ENNReal.le_div_iff_mul_le _ (Or.inr μKlt), mul_comm]
- right
- apply (measure_pos_of_nonempty_interior μ ⟨_, K_int⟩).ne'
- have J : Tendsto (fun n : ℕ => μ K / n) atTop (𝓝 (μ K / ∞)) :=
- ENNReal.Tendsto.const_div ENNReal.tendsto_nat_nhds_top (Or.inr μKlt)
- simp only [ENNReal.div_top] at J
- exact ge_of_tendsto' J I
+ cases eq_or_ne (μ 1) 0 with
+ | inl h => constructor; simpa
+ | inr h =>
+ obtain ⟨K, K_compact, K_nhds⟩ : ∃ K : Set G, IsCompact K ∧ K ∈ 𝓝 1 := exists_compact_mem_nhds 1
+ have K_inf : Set.Infinite K := infinite_of_mem_nhds (1 : G) K_nhds
+ exact absurd (K_inf.meas_eq_top ⟨_, h, fun x _ ↦ (haar_singleton _ _).ge⟩)
+ K_compact.measure_lt_top.ne
#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.noAtoms
#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.noAtoms
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -34,7 +34,7 @@ open scoped NNReal ENNReal Pointwise BigOperators Topology
open Inv Set Function MeasureTheory.Measure Filter
-variable {𝕜 G H : Type _} [MeasurableSpace G] [MeasurableSpace H]
+variable {𝕜 G H : Type*} [MeasurableSpace G] [MeasurableSpace H]
namespace MeasureTheory
@@ -130,7 +130,7 @@ theorem measurePreserving_mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g :
#align measure_theory.measure_preserving_add_left MeasureTheory.measurePreserving_add_left
@[to_additive]
-theorem MeasurePreserving.mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) {X : Type _}
+theorem MeasurePreserving.mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) {X : Type*}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
MeasurePreserving (fun x => g * f x) μ' μ :=
(measurePreserving_mul_left μ g).comp hf
@@ -145,7 +145,7 @@ theorem measurePreserving_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g
#align measure_theory.measure_preserving_add_right MeasureTheory.measurePreserving_add_right
@[to_additive]
-theorem MeasurePreserving.mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) {X : Type _}
+theorem MeasurePreserving.mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) {X : Type*}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
MeasurePreserving (fun x => f x * g) μ' μ :=
(measurePreserving_mul_right μ g).comp hf
@@ -167,7 +167,7 @@ instance IsMulRightInvariant.toSMulInvariantMeasure_op [μ.IsMulRightInvariant]
#align measure_theory.is_mul_right_invariant.to_vadd_invariant_measure_op MeasureTheory.IsMulRightInvariant.toVAddInvariantMeasure_op
@[to_additive]
-instance Subgroup.smulInvariantMeasure {G α : Type _} [Group G] [MulAction G α] [MeasurableSpace α]
+instance Subgroup.smulInvariantMeasure {G α : Type*} [Group G] [MulAction G α] [MeasurableSpace α]
{μ : Measure α} [SMulInvariantMeasure G α μ] (H : Subgroup G) : SMulInvariantMeasure H α μ :=
⟨fun y s hs => by convert SMulInvariantMeasure.measure_preimage_smul (μ := μ) (y : G) hs⟩
#align measure_theory.subgroup.smul_invariant_measure MeasureTheory.Subgroup.smulInvariantMeasure
@@ -200,7 +200,7 @@ theorem forall_measure_preimage_mul_right_iff (μ : Measure G) :
#align measure_theory.forall_measure_preimage_add_right_iff MeasureTheory.forall_measure_preimage_add_right_iff
@[to_additive]
-instance Measure.prod.instIsMulLeftInvariant [IsMulLeftInvariant μ] [SigmaFinite μ] {H : Type _}
+instance Measure.prod.instIsMulLeftInvariant [IsMulLeftInvariant μ] [SigmaFinite μ] {H : Type*}
[Mul H] {mH : MeasurableSpace H} {ν : Measure H} [MeasurableMul H] [IsMulLeftInvariant ν]
[SigmaFinite ν] : IsMulLeftInvariant (μ.prod ν) := by
constructor
@@ -214,7 +214,7 @@ instance Measure.prod.instIsMulLeftInvariant [IsMulLeftInvariant μ] [SigmaFinit
#align measure_theory.measure.prod.measure.is_add_left_invariant MeasureTheory.Measure.prod.instIsAddLeftInvariant
@[to_additive]
-instance Measure.prod.instIsMulRightInvariant [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type _}
+instance Measure.prod.instIsMulRightInvariant [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type*}
[Mul H] {mH : MeasurableSpace H} {ν : Measure H} [MeasurableMul H] [IsMulRightInvariant ν]
[SigmaFinite ν] : IsMulRightInvariant (μ.prod ν) := by
constructor
@@ -228,7 +228,7 @@ instance Measure.prod.instIsMulRightInvariant [IsMulRightInvariant μ] [SigmaFin
#align measure_theory.measure.prod.measure.is_add_right_invariant MeasureTheory.Measure.prod.instIsMulRightInvariant
@[to_additive]
-theorem isMulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [MeasurableMul H]
+theorem isMulLeftInvariant_map {H : Type*} [MeasurableSpace H] [Mul H] [MeasurableMul H]
[IsMulLeftInvariant μ] (f : G →ₙ* H) (hf : Measurable f) (h_surj : Surjective f) :
IsMulLeftInvariant (Measure.map f μ) := by
refine' ⟨fun h => _⟩
@@ -680,7 +680,7 @@ namespace Measure
/-- A measure on an additive group is an additive Haar measure if it is left-invariant, and gives
finite mass to compact sets and positive mass to open sets. -/
-class IsAddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
+class IsAddHaarMeasure {G : Type*} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
(μ : Measure G) extends IsFiniteMeasureOnCompacts μ, IsAddLeftInvariant μ, IsOpenPosMeasure μ :
Prop
#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
@@ -688,7 +688,7 @@ class IsAddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [Measurabl
/-- A measure on a group is a Haar measure if it is left-invariant, and gives finite mass to compact
sets and positive mass to open sets. -/
@[to_additive existing]
-class IsHaarMeasure {G : Type _} [Group G] [TopologicalSpace G] [MeasurableSpace G]
+class IsHaarMeasure {G : Type*} [Group G] [TopologicalSpace G] [MeasurableSpace G]
(μ : Measure G) extends IsFiniteMeasureOnCompacts μ, IsMulLeftInvariant μ, IsOpenPosMeasure μ :
Prop
#align measure_theory.measure.is_haar_measure MeasureTheory.Measure.IsHaarMeasure
@@ -704,7 +704,7 @@ as the fact that a measure which is finite on compacts is locally finite is not
instance, to avoid an instance loop.
See Note [lower instance priority]"]
-instance (priority := 100) isLocallyFiniteMeasure_of_isHaarMeasure {G : Type _} [Group G]
+instance (priority := 100) isLocallyFiniteMeasure_of_isHaarMeasure {G : Type*} [Group G]
[MeasurableSpace G] [TopologicalSpace G] [LocallyCompactSpace G] (μ : Measure G)
[IsHaarMeasure μ] : IsLocallyFiniteMeasure μ :=
isLocallyFiniteMeasure_of_isFiniteMeasureOnCompacts
@@ -748,7 +748,7 @@ a Haar measure. See also `MulEquiv.isHaarMeasure_map`. -/
@[to_additive
"The image of an additive Haar measure under a continuous surjective proper additive group
homomorphism is again an additive Haar measure. See also `AddEquiv.isAddHaarMeasure_map`."]
-theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
+theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type*} [Group H]
[TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [T2Space H] [TopologicalGroup H]
(f : G →* H) (hf : Continuous f) (h_surj : Surjective f)
(h_prop : Tendsto f (cocompact G) (cocompact H)) : IsHaarMeasure (Measure.map f μ) :=
@@ -763,7 +763,7 @@ theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Grou
/-- A convenience wrapper for `MeasureTheory.Measure.isHaarMeasure_map`. -/
@[to_additive "A convenience wrapper for `MeasureTheory.Measure.isAddHaarMeasure_map`."]
-nonrec theorem _root_.MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _}
+nonrec theorem _root_.MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type*}
[Group H] [TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [T2Space H]
[TopologicalGroup H] (e : G ≃* H) (he : Continuous e) (hesymm : Continuous e.symm) :
IsHaarMeasure (Measure.map e μ) :=
@@ -788,8 +788,8 @@ instance (priority := 100) IsHaarMeasure.sigmaFinite [SigmaCompactSpace G] : Sig
#align measure_theory.measure.is_add_haar_measure.sigma_finite MeasureTheory.Measure.IsAddHaarMeasure.sigmaFinite
@[to_additive]
-instance prod.instIsHaarMeasure {G : Type _} [Group G] [TopologicalSpace G] {_ : MeasurableSpace G}
- {H : Type _} [Group H] [TopologicalSpace H] {_ : MeasurableSpace H} (μ : Measure G)
+instance prod.instIsHaarMeasure {G : Type*} [Group G] [TopologicalSpace G] {_ : MeasurableSpace G}
+ {H : Type*} [Group H] [TopologicalSpace H] {_ : MeasurableSpace H} (μ : Measure G)
(ν : Measure H) [IsHaarMeasure μ] [IsHaarMeasure ν] [SigmaFinite μ] [SigmaFinite ν]
[MeasurableMul G] [MeasurableMul H] : IsHaarMeasure (μ.prod ν) where
#align measure_theory.measure.prod.is_haar_measure MeasureTheory.Measure.prod.instIsHaarMeasure
@@ -2,11 +2,6 @@
Copyright (c) 2020 Floris van Doorn. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Floris van Doorn
-
-! This file was ported from Lean 3 source module measure_theory.group.measure
-! leanprover-community/mathlib commit fd5edc43dc4f10b85abfe544b88f82cf13c5f844
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Dynamics.Ergodic.MeasurePreserving
import Mathlib.MeasureTheory.Measure.Regular
@@ -16,6 +11,8 @@ import Mathlib.MeasureTheory.Group.Action
import Mathlib.MeasureTheory.Constructions.Prod.Basic
import Mathlib.Topology.ContinuousFunction.CocompactMap
+#align_import measure_theory.group.measure from "leanprover-community/mathlib"@"fd5edc43dc4f10b85abfe544b88f82cf13c5f844"
+
/-!
# Measures on Groups
@@ -623,7 +623,7 @@ theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSp
have A : ∀ L : Set G, IsCompact L → ∃ g : G, Disjoint L (g • K) := fun L hL =>
exists_disjoint_smul_of_isCompact hL hK
choose! g hg using A
- set L : ℕ → Set G := fun n => ((fun T => T ∪ g T • K)^[n]) K
+ set L : ℕ → Set G := fun n => (fun T => T ∪ g T • K)^[n] K
have Lcompact : ∀ n, IsCompact (L n) := by
intro n
induction' n with n IH
@@ -533,10 +533,10 @@ theorem isOpenPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsComp
contrapose! h
rw [← nonpos_iff_eq_zero]
rw [← hU.interior_eq] at hne
- obtain ⟨t, hKt⟩ : ∃ t : Finset G, K ⊆ ⋃ (g : G) (_H : g ∈ t), (fun h : G => g * h) ⁻¹' U :=
+ obtain ⟨t, hKt⟩ : ∃ t : Finset G, K ⊆ ⋃ (g : G) (_ : g ∈ t), (fun h : G => g * h) ⁻¹' U :=
compact_covered_by_mul_left_translates hK hne
calc
- μ K ≤ μ (⋃ (g : G) (_H : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
+ μ K ≤ μ (⋃ (g : G) (_ : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_biUnion_finset_le _ _)
_ = 0 := by simp [measure_preimage_mul, h]
#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_compact
@@ -582,10 +582,10 @@ any compact set."]
theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOpen U)
(h'U : U.Nonempty) (h : μ U ≠ ∞) {K : Set G} (hK : IsCompact K) : μ K < ∞ := by
rw [← hU.interior_eq] at h'U
- obtain ⟨t, hKt⟩ : ∃ t : Finset G, K ⊆ ⋃ (g : G) (_H : g ∈ t), (fun h : G => g * h) ⁻¹' U :=
+ obtain ⟨t, hKt⟩ : ∃ t : Finset G, K ⊆ ⋃ (g : G) (_ : g ∈ t), (fun h : G => g * h) ⁻¹' U :=
compact_covered_by_mul_left_translates hK h'U
calc
- μ K ≤ μ (⋃ (g : G) (_H : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
+ μ K ≤ μ (⋃ (g : G) (_ : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_biUnion_finset_le _ _)
_ = Finset.card t * μ U := by simp only [measure_preimage_mul, Finset.sum_const, nsmul_eq_mul]
_ < ∞ := ENNReal.mul_lt_top (ENNReal.nat_ne_top _) h
Is
of Foo
which is ported from is_foo
(#4639)
I have misported is_foo
to Foo
because I misunderstood the rule for IsLawfulFoo
.
This PR recover Is
of Foo
which is ported from is_foo
.
This PR also renames some misported theorems.
@@ -24,7 +24,7 @@ We develop some properties of measures on (topological) groups
* We define properties on measures: measures that are left or right invariant w.r.t. multiplication.
* We define the measure `μ.inv : A ↦ μ(A⁻¹)` and show that it is right invariant iff
`μ` is left invariant.
-* We define a class `HaarMeasure μ`, requiring that the measure `μ` is left-invariant, finite
+* We define a class `IsHaarMeasure μ`, requiring that the measure `μ` is left-invariant, finite
on compact sets, and positive on open sets.
We also give analogues of all these notions in the additive world.
@@ -45,33 +45,33 @@ namespace Measure
/-- A measure `μ` on a measurable additive group is left invariant
if the measure of left translations of a set are equal to the measure of the set itself. -/
-class AddLeftInvariant [Add G] (μ : Measure G) : Prop where
+class IsAddLeftInvariant [Add G] (μ : Measure G) : Prop where
map_add_left_eq_self : ∀ g : G, map (g + ·) μ = μ
-#align measure_theory.measure.is_add_left_invariant MeasureTheory.Measure.AddLeftInvariant
-#align measure_theory.measure.is_add_left_invariant.map_add_left_eq_self MeasureTheory.Measure.AddLeftInvariant.map_add_left_eq_self
+#align measure_theory.measure.is_add_left_invariant MeasureTheory.Measure.IsAddLeftInvariant
+#align measure_theory.measure.is_add_left_invariant.map_add_left_eq_self MeasureTheory.Measure.IsAddLeftInvariant.map_add_left_eq_self
/-- A measure `μ` on a measurable group is left invariant
if the measure of left translations of a set are equal to the measure of the set itself. -/
@[to_additive existing]
-class MulLeftInvariant [Mul G] (μ : Measure G) : Prop where
+class IsMulLeftInvariant [Mul G] (μ : Measure G) : Prop where
map_mul_left_eq_self : ∀ g : G, map (g * ·) μ = μ
-#align measure_theory.measure.is_mul_left_invariant MeasureTheory.Measure.MulLeftInvariant
-#align measure_theory.measure.is_mul_left_invariant.map_mul_left_eq_self MeasureTheory.Measure.MulLeftInvariant.map_mul_left_eq_self
+#align measure_theory.measure.is_mul_left_invariant MeasureTheory.Measure.IsMulLeftInvariant
+#align measure_theory.measure.is_mul_left_invariant.map_mul_left_eq_self MeasureTheory.Measure.IsMulLeftInvariant.map_mul_left_eq_self
/-- A measure `μ` on a measurable additive group is right invariant
if the measure of right translations of a set are equal to the measure of the set itself. -/
-class AddRightInvariant [Add G] (μ : Measure G) : Prop where
+class IsAddRightInvariant [Add G] (μ : Measure G) : Prop where
map_add_right_eq_self : ∀ g : G, map (· + g) μ = μ
-#align measure_theory.measure.is_add_right_invariant MeasureTheory.Measure.AddRightInvariant
-#align measure_theory.measure.is_add_right_invariant.map_add_right_eq_self MeasureTheory.Measure.AddRightInvariant.map_add_right_eq_self
+#align measure_theory.measure.is_add_right_invariant MeasureTheory.Measure.IsAddRightInvariant
+#align measure_theory.measure.is_add_right_invariant.map_add_right_eq_self MeasureTheory.Measure.IsAddRightInvariant.map_add_right_eq_self
/-- A measure `μ` on a measurable group is right invariant
if the measure of right translations of a set are equal to the measure of the set itself. -/
@[to_additive existing]
-class MulRightInvariant [Mul G] (μ : Measure G) : Prop where
+class IsMulRightInvariant [Mul G] (μ : Measure G) : Prop where
map_mul_right_eq_self : ∀ g : G, map (· * g) μ = μ
-#align measure_theory.measure.is_mul_right_invariant MeasureTheory.Measure.MulRightInvariant
-#align measure_theory.measure.is_mul_right_invariant.map_mul_right_eq_self MeasureTheory.Measure.MulRightInvariant.map_mul_right_eq_self
+#align measure_theory.measure.is_mul_right_invariant MeasureTheory.Measure.IsMulRightInvariant
+#align measure_theory.measure.is_mul_right_invariant.map_mul_right_eq_self MeasureTheory.Measure.IsMulRightInvariant.map_mul_right_eq_self
end Measure
@@ -82,58 +82,58 @@ section Mul
variable [Mul G] {μ : Measure G}
@[to_additive]
-theorem map_mul_left_eq_self (μ : Measure G) [MulLeftInvariant μ] (g : G) :
+theorem map_mul_left_eq_self (μ : Measure G) [IsMulLeftInvariant μ] (g : G) :
map (g * ·) μ = μ :=
- MulLeftInvariant.map_mul_left_eq_self g
+ IsMulLeftInvariant.map_mul_left_eq_self g
#align measure_theory.map_mul_left_eq_self MeasureTheory.map_mul_left_eq_self
#align measure_theory.map_add_left_eq_self MeasureTheory.map_add_left_eq_self
@[to_additive]
-theorem map_mul_right_eq_self (μ : Measure G) [MulRightInvariant μ] (g : G) : map (· * g) μ = μ :=
- MulRightInvariant.map_mul_right_eq_self g
+theorem map_mul_right_eq_self (μ : Measure G) [IsMulRightInvariant μ] (g : G) : map (· * g) μ = μ :=
+ IsMulRightInvariant.map_mul_right_eq_self g
#align measure_theory.map_mul_right_eq_self MeasureTheory.map_mul_right_eq_self
#align measure_theory.map_add_right_eq_self MeasureTheory.map_add_right_eq_self
-@[to_additive MeasureTheory.addLeftInvariant_smul]
-instance mulLeftInvariant_smul [MulLeftInvariant μ] (c : ℝ≥0∞) : MulLeftInvariant (c • μ) :=
+@[to_additive MeasureTheory.isAddLeftInvariant_smul]
+instance isMulLeftInvariant_smul [IsMulLeftInvariant μ] (c : ℝ≥0∞) : IsMulLeftInvariant (c • μ) :=
⟨fun g => by rw [Measure.map_smul, map_mul_left_eq_self]⟩
-#align measure_theory.is_mul_left_invariant_smul MeasureTheory.mulLeftInvariant_smul
-#align measure_theory.is_add_left_invariant_smul MeasureTheory.addLeftInvariant_smul
+#align measure_theory.is_mul_left_invariant_smul MeasureTheory.isMulLeftInvariant_smul
+#align measure_theory.is_add_left_invariant_smul MeasureTheory.isAddLeftInvariant_smul
-@[to_additive MeasureTheory.addRightInvariant_smul]
-instance mulRightInvariant_smul [MulRightInvariant μ] (c : ℝ≥0∞) :
- MulRightInvariant (c • μ) :=
+@[to_additive MeasureTheory.isAddRightInvariant_smul]
+instance isMulRightInvariant_smul [IsMulRightInvariant μ] (c : ℝ≥0∞) :
+ IsMulRightInvariant (c • μ) :=
⟨fun g => by rw [Measure.map_smul, map_mul_right_eq_self]⟩
-#align measure_theory.is_mul_right_invariant_smul MeasureTheory.mulRightInvariant_smul
-#align measure_theory.is_add_right_invariant_smul MeasureTheory.addRightInvariant_smul
-
-@[to_additive MeasureTheory.addLeftInvariant_smul_nnreal]
-instance mulLeftInvariant_smul_nnreal [MulLeftInvariant μ] (c : ℝ≥0) :
- MulLeftInvariant (c • μ) :=
- MeasureTheory.mulLeftInvariant_smul (c : ℝ≥0∞)
-#align measure_theory.is_mul_left_invariant_smul_nnreal MeasureTheory.mulLeftInvariant_smul_nnreal
-#align measure_theory.is_add_left_invariant_smul_nnreal MeasureTheory.addLeftInvariant_smul_nnreal
-
-@[to_additive MeasureTheory.addRightInvariant_smul_nnreal]
-instance mulRightInvariant_smul_nnreal [MulRightInvariant μ] (c : ℝ≥0) :
- MulRightInvariant (c • μ) :=
- MeasureTheory.mulRightInvariant_smul (c : ℝ≥0∞)
-#align measure_theory.is_mul_right_invariant_smul_nnreal MeasureTheory.mulRightInvariant_smul_nnreal
-#align measure_theory.is_add_right_invariant_smul_nnreal MeasureTheory.addRightInvariant_smul_nnreal
+#align measure_theory.is_mul_right_invariant_smul MeasureTheory.isMulRightInvariant_smul
+#align measure_theory.is_add_right_invariant_smul MeasureTheory.isAddRightInvariant_smul
+
+@[to_additive MeasureTheory.isAddLeftInvariant_smul_nnreal]
+instance isMulLeftInvariant_smul_nnreal [IsMulLeftInvariant μ] (c : ℝ≥0) :
+ IsMulLeftInvariant (c • μ) :=
+ MeasureTheory.isMulLeftInvariant_smul (c : ℝ≥0∞)
+#align measure_theory.is_mul_left_invariant_smul_nnreal MeasureTheory.isMulLeftInvariant_smul_nnreal
+#align measure_theory.is_add_left_invariant_smul_nnreal MeasureTheory.isAddLeftInvariant_smul_nnreal
+
+@[to_additive MeasureTheory.isAddRightInvariant_smul_nnreal]
+instance isMulRightInvariant_smul_nnreal [IsMulRightInvariant μ] (c : ℝ≥0) :
+ IsMulRightInvariant (c • μ) :=
+ MeasureTheory.isMulRightInvariant_smul (c : ℝ≥0∞)
+#align measure_theory.is_mul_right_invariant_smul_nnreal MeasureTheory.isMulRightInvariant_smul_nnreal
+#align measure_theory.is_add_right_invariant_smul_nnreal MeasureTheory.isAddRightInvariant_smul_nnreal
section MeasurableMul
variable [MeasurableMul G]
@[to_additive]
-theorem measurePreserving_mul_left (μ : Measure G) [MulLeftInvariant μ] (g : G) :
+theorem measurePreserving_mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) :
MeasurePreserving (g * ·) μ μ :=
⟨measurable_const_mul g, map_mul_left_eq_self μ g⟩
#align measure_theory.measure_preserving_mul_left MeasureTheory.measurePreserving_mul_left
#align measure_theory.measure_preserving_add_left MeasureTheory.measurePreserving_add_left
@[to_additive]
-theorem MeasurePreserving.mul_left (μ : Measure G) [MulLeftInvariant μ] (g : G) {X : Type _}
+theorem MeasurePreserving.mul_left (μ : Measure G) [IsMulLeftInvariant μ] (g : G) {X : Type _}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
MeasurePreserving (fun x => g * f x) μ' μ :=
(measurePreserving_mul_left μ g).comp hf
@@ -141,14 +141,14 @@ theorem MeasurePreserving.mul_left (μ : Measure G) [MulLeftInvariant μ] (g : G
#align measure_theory.measure_preserving.add_left MeasureTheory.MeasurePreserving.add_left
@[to_additive]
-theorem measurePreserving_mul_right (μ : Measure G) [MulRightInvariant μ] (g : G) :
+theorem measurePreserving_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
MeasurePreserving (· * g) μ μ :=
⟨measurable_mul_const g, map_mul_right_eq_self μ g⟩
#align measure_theory.measure_preserving_mul_right MeasureTheory.measurePreserving_mul_right
#align measure_theory.measure_preserving_add_right MeasureTheory.measurePreserving_add_right
@[to_additive]
-theorem MeasurePreserving.mul_right (μ : Measure G) [MulRightInvariant μ] (g : G) {X : Type _}
+theorem MeasurePreserving.mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) {X : Type _}
[MeasurableSpace X] {μ' : Measure X} {f : X → G} (hf : MeasurePreserving f μ' μ) :
MeasurePreserving (fun x => f x * g) μ' μ :=
(measurePreserving_mul_right μ g).comp hf
@@ -156,18 +156,18 @@ theorem MeasurePreserving.mul_right (μ : Measure G) [MulRightInvariant μ] (g :
#align measure_theory.measure_preserving.add_right MeasureTheory.MeasurePreserving.add_right
@[to_additive]
-instance MulLeftInvariant.smulInvariantMeasure [MulLeftInvariant μ] :
+instance IsMulLeftInvariant.smulInvariantMeasure [IsMulLeftInvariant μ] :
SMulInvariantMeasure G G μ :=
⟨fun x _s hs => (measurePreserving_mul_left μ x).measure_preimage hs⟩
-#align measure_theory.is_mul_left_invariant.smul_invariant_measure MeasureTheory.MulLeftInvariant.smulInvariantMeasure
-#align measure_theory.is_mul_left_invariant.vadd_invariant_measure MeasureTheory.MulLeftInvariant.vaddInvariantMeasure
+#align measure_theory.is_mul_left_invariant.smul_invariant_measure MeasureTheory.IsMulLeftInvariant.smulInvariantMeasure
+#align measure_theory.is_mul_left_invariant.vadd_invariant_measure MeasureTheory.IsMulLeftInvariant.vaddInvariantMeasure
@[to_additive]
-instance MulRightInvariant.toSMulInvariantMeasure_op [μ.MulRightInvariant] :
+instance IsMulRightInvariant.toSMulInvariantMeasure_op [μ.IsMulRightInvariant] :
SMulInvariantMeasure Gᵐᵒᵖ G μ :=
⟨fun x _s hs => (measurePreserving_mul_right μ (MulOpposite.unop x)).measure_preimage hs⟩
-#align measure_theory.is_mul_right_invariant.to_smul_invariant_measure_op MeasureTheory.MulRightInvariant.toSMulInvariantMeasure_op
-#align measure_theory.is_mul_right_invariant.to_vadd_invariant_measure_op MeasureTheory.MulRightInvariant.toVAddInvariantMeasure_op
+#align measure_theory.is_mul_right_invariant.to_smul_invariant_measure_op MeasureTheory.IsMulRightInvariant.toSMulInvariantMeasure_op
+#align measure_theory.is_mul_right_invariant.to_vadd_invariant_measure_op MeasureTheory.IsMulRightInvariant.toVAddInvariantMeasure_op
@[to_additive]
instance Subgroup.smulInvariantMeasure {G α : Type _} [Group G] [MulAction G α] [MeasurableSpace α]
@@ -180,7 +180,7 @@ instance Subgroup.smulInvariantMeasure {G α : Type _} [Group G] [MulAction G α
@[to_additive " An alternative way to prove that `μ` is left invariant under addition. "]
theorem forall_measure_preimage_mul_iff (μ : Measure G) :
(∀ (g : G) (A : Set G), MeasurableSet A → μ ((fun h => g * h) ⁻¹' A) = μ A) ↔
- MulLeftInvariant μ := by
+ IsMulLeftInvariant μ := by
trans ∀ g, map (g * ·) μ = μ
· simp_rw [Measure.ext_iff]
refine' forall_congr' fun g => forall_congr' fun A => forall_congr' fun hA => _
@@ -193,7 +193,7 @@ theorem forall_measure_preimage_mul_iff (μ : Measure G) :
@[to_additive " An alternative way to prove that `μ` is right invariant under addition. "]
theorem forall_measure_preimage_mul_right_iff (μ : Measure G) :
(∀ (g : G) (A : Set G), MeasurableSet A → μ ((fun h => h * g) ⁻¹' A) = μ A) ↔
- MulRightInvariant μ := by
+ IsMulRightInvariant μ := by
trans ∀ g, map (· * g) μ = μ
· simp_rw [Measure.ext_iff]
refine' forall_congr' fun g => forall_congr' fun A => forall_congr' fun hA => _
@@ -203,9 +203,9 @@ theorem forall_measure_preimage_mul_right_iff (μ : Measure G) :
#align measure_theory.forall_measure_preimage_add_right_iff MeasureTheory.forall_measure_preimage_add_right_iff
@[to_additive]
-instance Measure.prod.instMulLeftInvariant [MulLeftInvariant μ] [SigmaFinite μ] {H : Type _}
- [Mul H] {mH : MeasurableSpace H} {ν : Measure H} [MeasurableMul H] [MulLeftInvariant ν]
- [SigmaFinite ν] : MulLeftInvariant (μ.prod ν) := by
+instance Measure.prod.instIsMulLeftInvariant [IsMulLeftInvariant μ] [SigmaFinite μ] {H : Type _}
+ [Mul H] {mH : MeasurableSpace H} {ν : Measure H} [MeasurableMul H] [IsMulLeftInvariant ν]
+ [SigmaFinite ν] : IsMulLeftInvariant (μ.prod ν) := by
constructor
rintro ⟨g, h⟩
change map (Prod.map (g * ·) (h * ·)) (μ.prod ν) = μ.prod ν
@@ -213,13 +213,13 @@ instance Measure.prod.instMulLeftInvariant [MulLeftInvariant μ] [SigmaFinite μ
map_mul_left_eq_self μ g, map_mul_left_eq_self ν h]
· rw [map_mul_left_eq_self μ g]; infer_instance
· rw [map_mul_left_eq_self ν h]; infer_instance
-#align measure_theory.measure.prod.measure.is_mul_left_invariant MeasureTheory.Measure.prod.instMulLeftInvariant
-#align measure_theory.measure.prod.measure.is_add_left_invariant MeasureTheory.Measure.prod.instAddLeftInvariant
+#align measure_theory.measure.prod.measure.is_mul_left_invariant MeasureTheory.Measure.prod.instIsMulLeftInvariant
+#align measure_theory.measure.prod.measure.is_add_left_invariant MeasureTheory.Measure.prod.instIsAddLeftInvariant
@[to_additive]
-instance Measure.prod.instMulRightInvariant [MulRightInvariant μ] [SigmaFinite μ] {H : Type _}
- [Mul H] {mH : MeasurableSpace H} {ν : Measure H} [MeasurableMul H] [MulRightInvariant ν]
- [SigmaFinite ν] : MulRightInvariant (μ.prod ν) := by
+instance Measure.prod.instIsMulRightInvariant [IsMulRightInvariant μ] [SigmaFinite μ] {H : Type _}
+ [Mul H] {mH : MeasurableSpace H} {ν : Measure H} [MeasurableMul H] [IsMulRightInvariant ν]
+ [SigmaFinite ν] : IsMulRightInvariant (μ.prod ν) := by
constructor
rintro ⟨g, h⟩
change map (Prod.map (· * g) (· * h)) (μ.prod ν) = μ.prod ν
@@ -227,13 +227,13 @@ instance Measure.prod.instMulRightInvariant [MulRightInvariant μ] [SigmaFinite
map_mul_right_eq_self μ g, map_mul_right_eq_self ν h]
· rw [map_mul_right_eq_self μ g]; infer_instance
· rw [map_mul_right_eq_self ν h]; infer_instance
-#align measure_theory.measure.prod.measure.is_mul_right_invariant MeasureTheory.Measure.prod.instMulRightInvariant
-#align measure_theory.measure.prod.measure.is_add_right_invariant MeasureTheory.Measure.prod.instMulRightInvariant
+#align measure_theory.measure.prod.measure.is_mul_right_invariant MeasureTheory.Measure.prod.instIsMulRightInvariant
+#align measure_theory.measure.prod.measure.is_add_right_invariant MeasureTheory.Measure.prod.instIsMulRightInvariant
@[to_additive]
-theorem mulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [MeasurableMul H]
- [MulLeftInvariant μ] (f : G →ₙ* H) (hf : Measurable f) (h_surj : Surjective f) :
- MulLeftInvariant (Measure.map f μ) := by
+theorem isMulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [MeasurableMul H]
+ [IsMulLeftInvariant μ] (f : G →ₙ* H) (hf : Measurable f) (h_surj : Surjective f) :
+ IsMulLeftInvariant (Measure.map f μ) := by
refine' ⟨fun h => _⟩
rw [map_map (measurable_const_mul _) hf]
obtain ⟨g, rfl⟩ := h_surj h
@@ -242,8 +242,8 @@ theorem mulLeftInvariant_map {H : Type _} [MeasurableSpace H] [Mul H] [Measurabl
congr 2
ext y
simp only [comp_apply, map_mul]
-#align measure_theory.is_mul_left_invariant_map MeasureTheory.mulLeftInvariant_map
-#align measure_theory.is_add_left_invariant_map MeasureTheory.addLeftInvariant_map
+#align measure_theory.is_mul_left_invariant_map MeasureTheory.isMulLeftInvariant_map
+#align measure_theory.is_add_left_invariant_map MeasureTheory.isAddLeftInvariant_map
end MeasurableMul
@@ -254,7 +254,7 @@ section DivInvMonoid
variable [DivInvMonoid G]
@[to_additive]
-theorem map_div_right_eq_self (μ : Measure G) [MulRightInvariant μ] (g : G) : map (· / g) μ = μ :=
+theorem map_div_right_eq_self (μ : Measure G) [IsMulRightInvariant μ] (g : G) : map (· / g) μ = μ :=
by simp_rw [div_eq_mul_inv, map_mul_right_eq_self μ g⁻¹]
#align measure_theory.map_div_right_eq_self MeasureTheory.map_div_right_eq_self
#align measure_theory.map_sub_right_eq_self MeasureTheory.map_sub_right_eq_self
@@ -266,7 +266,7 @@ section Group
variable [Group G] [MeasurableMul G]
@[to_additive]
-theorem measurePreserving_div_right (μ : Measure G) [MulRightInvariant μ] (g : G) :
+theorem measurePreserving_div_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) :
MeasurePreserving (· / g) μ μ := by simp_rw [div_eq_mul_inv, measurePreserving_mul_right μ g⁻¹]
#align measure_theory.measure_preserving_div_right MeasureTheory.measurePreserving_div_right
#align measure_theory.measure_preserving_sub_right MeasureTheory.measurePreserving_sub_right
@@ -276,7 +276,7 @@ theorem measurePreserving_div_right (μ : Measure G) [MulRightInvariant μ] (g :
@[to_additive (attr := simp)
"We shorten this from `measure_preimage_add_left`, since left invariant is the preferred option for
measures in this formalization."]
-theorem measure_preimage_mul (μ : Measure G) [MulLeftInvariant μ] (g : G) (A : Set G) :
+theorem measure_preimage_mul (μ : Measure G) [IsMulLeftInvariant μ] (g : G) (A : Set G) :
μ ((fun h => g * h) ⁻¹' A) = μ A :=
calc
μ ((fun h => g * h) ⁻¹' A) = map (fun h => g * h) μ A :=
@@ -286,7 +286,7 @@ theorem measure_preimage_mul (μ : Measure G) [MulLeftInvariant μ] (g : G) (A :
#align measure_theory.measure_preimage_add MeasureTheory.measure_preimage_add
@[to_additive (attr := simp)]
-theorem measure_preimage_mul_right (μ : Measure G) [MulRightInvariant μ] (g : G) (A : Set G) :
+theorem measure_preimage_mul_right (μ : Measure G) [IsMulRightInvariant μ] (g : G) (A : Set G) :
μ ((fun h => h * g) ⁻¹' A) = μ A :=
calc
μ ((fun h => h * g) ⁻¹' A) = map (fun h => h * g) μ A :=
@@ -296,42 +296,42 @@ theorem measure_preimage_mul_right (μ : Measure G) [MulRightInvariant μ] (g :
#align measure_theory.measure_preimage_add_right MeasureTheory.measure_preimage_add_right
@[to_additive]
-theorem map_mul_left_ae (μ : Measure G) [MulLeftInvariant μ] (x : G) :
+theorem map_mul_left_ae (μ : Measure G) [IsMulLeftInvariant μ] (x : G) :
Filter.map (fun h => x * h) μ.ae = μ.ae :=
((MeasurableEquiv.mulLeft x).map_ae μ).trans <| congr_arg ae <| map_mul_left_eq_self μ x
#align measure_theory.map_mul_left_ae MeasureTheory.map_mul_left_ae
#align measure_theory.map_add_left_ae MeasureTheory.map_add_left_ae
@[to_additive]
-theorem map_mul_right_ae (μ : Measure G) [MulRightInvariant μ] (x : G) :
+theorem map_mul_right_ae (μ : Measure G) [IsMulRightInvariant μ] (x : G) :
Filter.map (fun h => h * x) μ.ae = μ.ae :=
((MeasurableEquiv.mulRight x).map_ae μ).trans <| congr_arg ae <| map_mul_right_eq_self μ x
#align measure_theory.map_mul_right_ae MeasureTheory.map_mul_right_ae
#align measure_theory.map_add_right_ae MeasureTheory.map_add_right_ae
@[to_additive]
-theorem map_div_right_ae (μ : Measure G) [MulRightInvariant μ] (x : G) :
+theorem map_div_right_ae (μ : Measure G) [IsMulRightInvariant μ] (x : G) :
Filter.map (fun t => t / x) μ.ae = μ.ae :=
((MeasurableEquiv.divRight x).map_ae μ).trans <| congr_arg ae <| map_div_right_eq_self μ x
#align measure_theory.map_div_right_ae MeasureTheory.map_div_right_ae
#align measure_theory.map_sub_right_ae MeasureTheory.map_sub_right_ae
@[to_additive]
-theorem eventually_mul_left_iff (μ : Measure G) [MulLeftInvariant μ] (t : G) {p : G → Prop} :
+theorem eventually_mul_left_iff (μ : Measure G) [IsMulLeftInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (t * x)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_mul_left_ae μ t]; rfl
#align measure_theory.eventually_mul_left_iff MeasureTheory.eventually_mul_left_iff
#align measure_theory.eventually_add_left_iff MeasureTheory.eventually_add_left_iff
@[to_additive]
-theorem eventually_mul_right_iff (μ : Measure G) [MulRightInvariant μ] (t : G) {p : G → Prop} :
+theorem eventually_mul_right_iff (μ : Measure G) [IsMulRightInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (x * t)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_mul_right_ae μ t]; rfl
#align measure_theory.eventually_mul_right_iff MeasureTheory.eventually_mul_right_iff
#align measure_theory.eventually_add_right_iff MeasureTheory.eventually_add_right_iff
@[to_additive]
-theorem eventually_div_right_iff (μ : Measure G) [MulRightInvariant μ] (t : G) {p : G → Prop} :
+theorem eventually_div_right_iff (μ : Measure G) [IsMulRightInvariant μ] (t : G) {p : G → Prop} :
(∀ᵐ x ∂μ, p (x / t)) ↔ ∀ᵐ x ∂μ, p x := by
conv_rhs => rw [Filter.Eventually, ← map_div_right_ae μ t]; rfl
#align measure_theory.eventually_div_right_iff MeasureTheory.eventually_div_right_iff
@@ -354,39 +354,39 @@ protected noncomputable def inv [Inv G] (μ : Measure G) : Measure G :=
/-- A measure is invariant under negation if `- μ = μ`. Equivalently, this means that for all
measurable `A` we have `μ (- A) = μ A`, where `- A` is the pointwise negation of `A`. -/
-class NegInvariant [Neg G] (μ : Measure G) : Prop where
+class IsNegInvariant [Neg G] (μ : Measure G) : Prop where
neg_eq_self : μ.neg = μ
-#align measure_theory.measure.is_neg_invariant MeasureTheory.Measure.NegInvariant
-#align measure_theory.measure.is_neg_invariant.neg_eq_self MeasureTheory.Measure.NegInvariant.neg_eq_self
+#align measure_theory.measure.is_neg_invariant MeasureTheory.Measure.IsNegInvariant
+#align measure_theory.measure.is_neg_invariant.neg_eq_self MeasureTheory.Measure.IsNegInvariant.neg_eq_self
/-- A measure is invariant under inversion if `μ⁻¹ = μ`. Equivalently, this means that for all
measurable `A` we have `μ (A⁻¹) = μ A`, where `A⁻¹` is the pointwise inverse of `A`. -/
@[to_additive existing]
-class InvInvariant [Inv G] (μ : Measure G) : Prop where
+class IsInvInvariant [Inv G] (μ : Measure G) : Prop where
inv_eq_self : μ.inv = μ
-#align measure_theory.measure.is_inv_invariant MeasureTheory.Measure.InvInvariant
-#align measure_theory.measure.is_inv_invariant.inv_eq_self MeasureTheory.Measure.InvInvariant.inv_eq_self
+#align measure_theory.measure.is_inv_invariant MeasureTheory.Measure.IsInvInvariant
+#align measure_theory.measure.is_inv_invariant.inv_eq_self MeasureTheory.Measure.IsInvInvariant.inv_eq_self
section Inv
variable [Inv G]
@[to_additive (attr := simp)]
-theorem inv_eq_self (μ : Measure G) [InvInvariant μ] : μ.inv = μ :=
- InvInvariant.inv_eq_self
+theorem inv_eq_self (μ : Measure G) [IsInvInvariant μ] : μ.inv = μ :=
+ IsInvInvariant.inv_eq_self
#align measure_theory.measure.inv_eq_self MeasureTheory.Measure.inv_eq_self
#align measure_theory.measure.neg_eq_self MeasureTheory.Measure.neg_eq_self
@[to_additive (attr := simp)]
-theorem map_inv_eq_self (μ : Measure G) [InvInvariant μ] : map Inv.inv μ = μ :=
- InvInvariant.inv_eq_self
+theorem map_inv_eq_self (μ : Measure G) [IsInvInvariant μ] : map Inv.inv μ = μ :=
+ IsInvInvariant.inv_eq_self
#align measure_theory.measure.map_inv_eq_self MeasureTheory.Measure.map_inv_eq_self
#align measure_theory.measure.map_neg_eq_self MeasureTheory.Measure.map_neg_eq_self
variable [MeasurableInv G]
@[to_additive]
-theorem measurePreserving_inv (μ : Measure G) [InvInvariant μ] : MeasurePreserving Inv.inv μ μ :=
+theorem measurePreserving_inv (μ : Measure G) [IsInvInvariant μ] : MeasurePreserving Inv.inv μ μ :=
⟨measurable_inv, map_inv_eq_self μ⟩
#align measure_theory.measure.measure_preserving_inv MeasureTheory.Measure.measurePreserving_inv
#align measure_theory.measure.measure_preserving_neg MeasureTheory.Measure.measurePreserving_neg
@@ -410,13 +410,13 @@ protected theorem inv_inv (μ : Measure G) : μ.inv.inv = μ :=
#align measure_theory.measure.neg_neg MeasureTheory.Measure.neg_neg
@[to_additive (attr := simp)]
-theorem measure_inv (μ : Measure G) [InvInvariant μ] (A : Set G) : μ A⁻¹ = μ A := by
+theorem measure_inv (μ : Measure G) [IsInvInvariant μ] (A : Set G) : μ A⁻¹ = μ A := by
rw [← inv_apply, inv_eq_self]
#align measure_theory.measure.measure_inv MeasureTheory.Measure.measure_inv
#align measure_theory.measure.measure_neg MeasureTheory.Measure.measure_neg
@[to_additive]
-theorem measure_preimage_inv (μ : Measure G) [InvInvariant μ] (A : Set G) :
+theorem measure_preimage_inv (μ : Measure G) [IsInvInvariant μ] (A : Set G) :
μ (Inv.inv ⁻¹' A) = μ A :=
μ.measure_inv A
#align measure_theory.measure.measure_preimage_inv MeasureTheory.Measure.measure_preimage_inv
@@ -435,27 +435,27 @@ section DivisionMonoid
variable [DivisionMonoid G] [MeasurableMul G] [MeasurableInv G] {μ : Measure G}
@[to_additive]
-instance inv.instMulRightInvariant [MulLeftInvariant μ] : MulRightInvariant μ.inv := by
+instance inv.instIsMulRightInvariant [IsMulLeftInvariant μ] : IsMulRightInvariant μ.inv := by
constructor
intro g
conv_rhs => rw [← map_mul_left_eq_self μ g⁻¹]
simp_rw [Measure.inv, map_map (measurable_mul_const g) measurable_inv,
map_map measurable_inv (measurable_const_mul g⁻¹), Function.comp, mul_inv_rev, inv_inv]
-#align measure_theory.measure.inv.is_mul_right_invariant MeasureTheory.Measure.inv.instMulRightInvariant
-#align measure_theory.measure.neg.is_mul_right_invariant MeasureTheory.Measure.neg.instAddRightInvariant
+#align measure_theory.measure.inv.is_mul_right_invariant MeasureTheory.Measure.inv.instIsMulRightInvariant
+#align measure_theory.measure.neg.is_mul_right_invariant MeasureTheory.Measure.neg.instIsAddRightInvariant
@[to_additive]
-instance inv.instMulLeftInvariant [MulRightInvariant μ] : MulLeftInvariant μ.inv := by
+instance inv.instIsMulLeftInvariant [IsMulRightInvariant μ] : IsMulLeftInvariant μ.inv := by
constructor
intro g
conv_rhs => rw [← map_mul_right_eq_self μ g⁻¹]
simp_rw [Measure.inv, map_map (measurable_const_mul g) measurable_inv,
map_map measurable_inv (measurable_mul_const g⁻¹), Function.comp, mul_inv_rev, inv_inv]
-#align measure_theory.measure.inv.is_mul_left_invariant MeasureTheory.Measure.inv.instMulLeftInvariant
-#align measure_theory.measure.neg.is_mul_left_invariant MeasureTheory.Measure.neg.instAddLeftInvariant
+#align measure_theory.measure.inv.is_mul_left_invariant MeasureTheory.Measure.inv.instIsMulLeftInvariant
+#align measure_theory.measure.neg.is_mul_left_invariant MeasureTheory.Measure.neg.instIsAddLeftInvariant
@[to_additive]
-theorem measurePreserving_div_left (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ]
+theorem measurePreserving_div_left (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
(g : G) : MeasurePreserving (fun t => g / t) μ μ := by
simp_rw [div_eq_mul_inv]
exact (measurePreserving_mul_left μ g).comp (measurePreserving_inv μ)
@@ -463,21 +463,21 @@ theorem measurePreserving_div_left (μ : Measure G) [InvInvariant μ] [MulLeftIn
#align measure_theory.measure.measure_preserving_sub_left MeasureTheory.Measure.measurePreserving_sub_left
@[to_additive]
-theorem map_div_left_eq_self (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ] (g : G) :
+theorem map_div_left_eq_self (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ] (g : G) :
map (fun t => g / t) μ = μ :=
(measurePreserving_div_left μ g).map_eq
#align measure_theory.measure.map_div_left_eq_self MeasureTheory.Measure.map_div_left_eq_self
#align measure_theory.measure.map_sub_left_eq_self MeasureTheory.Measure.map_sub_left_eq_self
@[to_additive]
-theorem measurePreserving_mul_right_inv (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ]
+theorem measurePreserving_mul_right_inv (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
(g : G) : MeasurePreserving (fun t => (g * t)⁻¹) μ μ :=
(measurePreserving_inv μ).comp <| measurePreserving_mul_left μ g
#align measure_theory.measure.measure_preserving_mul_right_inv MeasureTheory.Measure.measurePreserving_mul_right_inv
#align measure_theory.measure.measure_preserving_add_right_neg MeasureTheory.Measure.measurePreserving_add_right_neg
@[to_additive]
-theorem map_mul_right_inv_eq_self (μ : Measure G) [InvInvariant μ] [MulLeftInvariant μ]
+theorem map_mul_right_inv_eq_self (μ : Measure G) [IsInvInvariant μ] [IsMulLeftInvariant μ]
(g : G) : map (fun t => (g * t)⁻¹) μ = μ :=
(measurePreserving_mul_right_inv μ g).map_eq
#align measure_theory.measure.map_mul_right_inv_eq_self MeasureTheory.Measure.map_mul_right_inv_eq_self
@@ -490,7 +490,7 @@ section Group
variable [Group G] [MeasurableMul G] [MeasurableInv G] {μ : Measure G}
@[to_additive]
-theorem map_div_left_ae (μ : Measure G) [MulLeftInvariant μ] [InvInvariant μ] (x : G) :
+theorem map_div_left_ae (μ : Measure G) [IsMulLeftInvariant μ] [IsInvInvariant μ] (x : G) :
Filter.map (fun t => x / t) μ.ae = μ.ae :=
((MeasurableEquiv.divLeft x).map_ae μ).trans <| congr_arg ae <| map_div_left_eq_self μ x
#align measure_theory.measure.map_div_left_ae MeasureTheory.Measure.map_div_left_ae
@@ -520,15 +520,15 @@ theorem regular_inv_iff [T2Space G] : μ.inv.Regular ↔ μ.Regular := by
#align measure_theory.regular_inv_iff MeasureTheory.regular_inv_iff
#align measure_theory.regular_neg_iff MeasureTheory.regular_neg_iff
-variable [MulLeftInvariant μ]
+variable [IsMulLeftInvariant μ]
/-- If a left-invariant measure gives positive mass to a compact set, then it gives positive mass to
any open set. -/
@[to_additive
"If a left-invariant measure gives positive mass to a compact set, then it gives positive mass to
any open set."]
-theorem openPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsCompact K)
- (h : μ K ≠ 0) : OpenPosMeasure μ := by
+theorem isOpenPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsCompact K)
+ (h : μ K ≠ 0) : IsOpenPosMeasure μ := by
refine' ⟨fun U hU hne => _⟩
contrapose! h
rw [← nonpos_iff_eq_zero]
@@ -539,47 +539,47 @@ theorem openPosMeasure_of_mulLeftInvariant_of_compact (K : Set G) (hK : IsCompac
μ K ≤ μ (⋃ (g : G) (_H : g ∈ t), (fun h : G => g * h) ⁻¹' U) := measure_mono hKt
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_biUnion_finset_le _ _)
_ = 0 := by simp [measure_preimage_mul, h]
-#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.openPosMeasure_of_mulLeftInvariant_of_compact
-#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.openPosMeasure_of_addLeftInvariant_of_compact
+#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_compact
+#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_compact MeasureTheory.isOpenPosMeasure_of_addLeftInvariant_of_compact
/-- A nonzero left-invariant regular measure gives positive mass to any open set. -/
@[to_additive "A nonzero left-invariant regular measure gives positive mass to any open set."]
-theorem openPosMeasure_of_mulLeftInvariant_of_regular [Regular μ] (h₀ : μ ≠ 0) :
- OpenPosMeasure μ :=
+theorem isOpenPosMeasure_of_mulLeftInvariant_of_regular [Regular μ] (h₀ : μ ≠ 0) :
+ IsOpenPosMeasure μ :=
let ⟨K, hK, h2K⟩ := Regular.exists_compact_not_null.mpr h₀
- openPosMeasure_of_mulLeftInvariant_of_compact K hK h2K
-#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.openPosMeasure_of_mulLeftInvariant_of_regular
-#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.openPosMeasure_of_addLeftInvariant_of_regular
+ isOpenPosMeasure_of_mulLeftInvariant_of_compact K hK h2K
+#align measure_theory.is_open_pos_measure_of_mul_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_mulLeftInvariant_of_regular
+#align measure_theory.is_open_pos_measure_of_add_left_invariant_of_regular MeasureTheory.isOpenPosMeasure_of_addLeftInvariant_of_regular
@[to_additive]
-theorem null_iff_of_mulLeftInvariant [Regular μ] {s : Set G} (hs : IsOpen s) :
+theorem null_iff_of_isMulLeftInvariant [Regular μ] {s : Set G} (hs : IsOpen s) :
μ s = 0 ↔ s = ∅ ∨ μ = 0 := by
by_cases h3μ : μ = 0; · simp [h3μ]
- · haveI := openPosMeasure_of_mulLeftInvariant_of_regular h3μ
+ · haveI := isOpenPosMeasure_of_mulLeftInvariant_of_regular h3μ
simp only [h3μ, or_false_iff, hs.measure_eq_zero_iff μ]
-#align measure_theory.null_iff_of_is_mul_left_invariant MeasureTheory.null_iff_of_mulLeftInvariant
-#align measure_theory.null_iff_of_is_add_left_invariant MeasureTheory.null_iff_of_addLeftInvariant
+#align measure_theory.null_iff_of_is_mul_left_invariant MeasureTheory.null_iff_of_isMulLeftInvariant
+#align measure_theory.null_iff_of_is_add_left_invariant MeasureTheory.null_iff_of_isAddLeftInvariant
@[to_additive]
-theorem measure_ne_zero_iff_nonempty_of_mulLeftInvariant [Regular μ] (hμ : μ ≠ 0) {s : Set G}
+theorem measure_ne_zero_iff_nonempty_of_isMulLeftInvariant [Regular μ] (hμ : μ ≠ 0) {s : Set G}
(hs : IsOpen s) : μ s ≠ 0 ↔ s.Nonempty := by
- simpa [null_iff_of_mulLeftInvariant (μ := μ) hs, hμ] using nonempty_iff_ne_empty.symm
-#align measure_theory.measure_ne_zero_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_mulLeftInvariant
-#align measure_theory.measure_ne_zero_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_addLeftInvariant
+ simpa [null_iff_of_isMulLeftInvariant (μ := μ) hs, hμ] using nonempty_iff_ne_empty.symm
+#align measure_theory.measure_ne_zero_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_isMulLeftInvariant
+#align measure_theory.measure_ne_zero_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_ne_zero_iff_nonempty_of_isAddLeftInvariant
@[to_additive]
-theorem measure_pos_iff_nonempty_of_mulLeftInvariant [Regular μ] (h3μ : μ ≠ 0) {s : Set G}
+theorem measure_pos_iff_nonempty_of_isMulLeftInvariant [Regular μ] (h3μ : μ ≠ 0) {s : Set G}
(hs : IsOpen s) : 0 < μ s ↔ s.Nonempty :=
- pos_iff_ne_zero.trans <| measure_ne_zero_iff_nonempty_of_mulLeftInvariant h3μ hs
-#align measure_theory.measure_pos_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_mulLeftInvariant
-#align measure_theory.measure_pos_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_addLeftInvariant
+ pos_iff_ne_zero.trans <| measure_ne_zero_iff_nonempty_of_isMulLeftInvariant h3μ hs
+#align measure_theory.measure_pos_iff_nonempty_of_is_mul_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_isMulLeftInvariant
+#align measure_theory.measure_pos_iff_nonempty_of_is_add_left_invariant MeasureTheory.measure_pos_iff_nonempty_of_isAddLeftInvariant
/-- If a left-invariant measure gives finite mass to a nonempty open set, then it gives finite mass
to any compact set. -/
@[to_additive
"If a left-invariant measure gives finite mass to a nonempty open set, then it gives finite mass to
any compact set."]
-theorem measure_lt_top_of_isCompact_of_mulLeftInvariant (U : Set G) (hU : IsOpen U)
+theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant (U : Set G) (hU : IsOpen U)
(h'U : U.Nonempty) (h : μ U ≠ ∞) {K : Set G} (hK : IsCompact K) : μ K < ∞ := by
rw [← hU.interior_eq] at h'U
obtain ⟨t, hKt⟩ : ∃ t : Finset G, K ⊆ ⋃ (g : G) (_H : g ∈ t), (fun h : G => g * h) ⁻¹' U :=
@@ -589,28 +589,28 @@ theorem measure_lt_top_of_isCompact_of_mulLeftInvariant (U : Set G) (hU : IsOpen
_ ≤ ∑ g in t, μ ((fun h : G => g * h) ⁻¹' U) := (measure_biUnion_finset_le _ _)
_ = Finset.card t * μ U := by simp only [measure_preimage_mul, Finset.sum_const, nsmul_eq_mul]
_ < ∞ := ENNReal.mul_lt_top (ENNReal.nat_ne_top _) h
-#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_mulLeftInvariant
-#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_addLeftInvariant
+#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant
+#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant MeasureTheory.measure_lt_top_of_isCompact_of_isAddLeftInvariant
/-- If a left-invariant measure gives finite mass to a set with nonempty interior, then
it gives finite mass to any compact set. -/
@[to_additive
"If a left-invariant measure gives finite mass to a set with nonempty interior, then it gives finite
mass to any compact set."]
-theorem measure_lt_top_of_isCompact_of_mulLeftInvariant' {U : Set G}
+theorem measure_lt_top_of_isCompact_of_isMulLeftInvariant' {U : Set G}
(hU : (interior U).Nonempty) (h : μ U ≠ ∞) {K : Set G} (hK : IsCompact K) : μ K < ∞ :=
- measure_lt_top_of_isCompact_of_mulLeftInvariant (interior U) isOpen_interior hU
+ measure_lt_top_of_isCompact_of_isMulLeftInvariant (interior U) isOpen_interior hU
((measure_mono interior_subset).trans_lt (lt_top_iff_ne_top.2 h)).ne hK
-#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_mulLeftInvariant'
-#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_addLeftInvariant'
+#align measure_theory.measure_lt_top_of_is_compact_of_is_mul_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_isMulLeftInvariant'
+#align measure_theory.measure_lt_top_of_is_compact_of_is_add_left_invariant' MeasureTheory.measure_lt_top_of_isCompact_of_isAddLeftInvariant'
/-- In a noncompact locally compact group, a left-invariant measure which is positive
on open sets has infinite mass. -/
@[to_additive (attr := simp)
"In a noncompact locally compact additive group, a left-invariant measure which is positive on open
sets has infinite mass."]
-theorem measure_univ_of_mulLeftInvariant [LocallyCompactSpace G] [NoncompactSpace G]
- (μ : Measure G) [OpenPosMeasure μ] [μ.MulLeftInvariant] : μ univ = ∞ := by
+theorem measure_univ_of_isMulLeftInvariant [LocallyCompactSpace G] [NoncompactSpace G]
+ (μ : Measure G) [IsOpenPosMeasure μ] [μ.IsMulLeftInvariant] : μ univ = ∞ := by
/- Consider a closed compact set `K` with nonempty interior. For any compact set `L`, one may
find `g = g (L)` such that `L` is disjoint from `g • K`. Iterating this, one finds
infinitely many translates of `K` which are disjoint from each other. As they all have the
@@ -653,8 +653,8 @@ theorem measure_univ_of_mulLeftInvariant [LocallyCompactSpace G] [NoncompactSpac
simp only [ENNReal.top_mul', K_pos.ne', if_false] at N
apply top_le_iff.1
exact le_of_tendsto' N fun n => measure_mono (subset_univ _)
-#align measure_theory.measure_univ_of_is_mul_left_invariant MeasureTheory.measure_univ_of_mulLeftInvariant
-#align measure_theory.measure_univ_of_is_add_left_invariant MeasureTheory.measure_univ_of_addLeftInvariant
+#align measure_theory.measure_univ_of_is_mul_left_invariant MeasureTheory.measure_univ_of_isMulLeftInvariant
+#align measure_theory.measure_univ_of_is_add_left_invariant MeasureTheory.measure_univ_of_isAddLeftInvariant
end TopologicalGroup
@@ -664,16 +664,16 @@ variable [CommSemigroup G]
/-- In an abelian group every left invariant measure is also right-invariant.
We don't declare the converse as an instance, since that would loop type-class inference, and
- we use `MulLeftInvariant` as the default hypothesis in abelian groups. -/
-@[to_additive AddLeftInvariant.addRightInvariant
+ we use `IsMulLeftInvariant` as the default hypothesis in abelian groups. -/
+@[to_additive IsAddLeftInvariant.isAddRightInvariant
"In an abelian additive group every left invariant measure is also right-invariant. We don't declare
the converse as an instance, since that would loop type-class inference, and we use
-`AddLeftInvariant` as the default hypothesis in abelian groups."]
-instance (priority := 100) MulLeftInvariant.mulRightInvariant {μ : Measure G}
- [MulLeftInvariant μ] : MulRightInvariant μ :=
+`IsAddLeftInvariant` as the default hypothesis in abelian groups."]
+instance (priority := 100) IsMulLeftInvariant.isMulRightInvariant {μ : Measure G}
+ [IsMulLeftInvariant μ] : IsMulRightInvariant μ :=
⟨fun g => by simp_rw [mul_comm, map_mul_left_eq_self]⟩
-#align measure_theory.is_mul_left_invariant.is_mul_right_invariant MeasureTheory.MulLeftInvariant.mulRightInvariant
-#align is_add_left_invariant.is_add_right_invariant MeasureTheory.AddLeftInvariant.addRightInvariant
+#align measure_theory.is_mul_left_invariant.is_mul_right_invariant MeasureTheory.IsMulLeftInvariant.isMulRightInvariant
+#align is_add_left_invariant.is_add_right_invariant MeasureTheory.IsAddLeftInvariant.isAddRightInvariant
end CommSemigroup
@@ -683,16 +683,18 @@ namespace Measure
/-- A measure on an additive group is an additive Haar measure if it is left-invariant, and gives
finite mass to compact sets and positive mass to open sets. -/
-class AddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends FiniteMeasureOnCompacts μ, AddLeftInvariant μ, OpenPosMeasure μ : Prop
-#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.AddHaarMeasure
+class IsAddHaarMeasure {G : Type _} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
+ (μ : Measure G) extends IsFiniteMeasureOnCompacts μ, IsAddLeftInvariant μ, IsOpenPosMeasure μ :
+ Prop
+#align measure_theory.measure.is_add_haar_measure MeasureTheory.Measure.IsAddHaarMeasure
/-- A measure on a group is a Haar measure if it is left-invariant, and gives finite mass to compact
sets and positive mass to open sets. -/
@[to_additive existing]
-class HaarMeasure {G : Type _} [Group G] [TopologicalSpace G] [MeasurableSpace G]
- (μ : Measure G) extends FiniteMeasureOnCompacts μ, MulLeftInvariant μ, OpenPosMeasure μ : Prop
-#align measure_theory.measure.is_haar_measure MeasureTheory.Measure.HaarMeasure
+class IsHaarMeasure {G : Type _} [Group G] [TopologicalSpace G] [MeasurableSpace G]
+ (μ : Measure G) extends IsFiniteMeasureOnCompacts μ, IsMulLeftInvariant μ, IsOpenPosMeasure μ :
+ Prop
+#align measure_theory.measure.is_haar_measure MeasureTheory.Measure.IsHaarMeasure
/-- Record that a Haar measure on a locally compact space is locally finite. This is needed as the
fact that a measure which is finite on compacts is locally finite is not registered as an instance,
@@ -705,16 +707,16 @@ as the fact that a measure which is finite on compacts is locally finite is not
instance, to avoid an instance loop.
See Note [lower instance priority]"]
-instance (priority := 100) locallyFiniteMeasure_of_haarMeasure {G : Type _} [Group G]
+instance (priority := 100) isLocallyFiniteMeasure_of_isHaarMeasure {G : Type _} [Group G]
[MeasurableSpace G] [TopologicalSpace G] [LocallyCompactSpace G] (μ : Measure G)
- [HaarMeasure μ] : LocallyFiniteMeasure μ :=
- locallyFiniteMeasure_of_finiteMeasureOnCompacts
-#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.locallyFiniteMeasure_of_haarMeasure
-#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.locallyFiniteMeasure_of_addHaarMeasure
+ [IsHaarMeasure μ] : IsLocallyFiniteMeasure μ :=
+ isLocallyFiniteMeasure_of_isFiniteMeasureOnCompacts
+#align measure_theory.measure.is_locally_finite_measure_of_is_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_isHaarMeasure
+#align measure_theory.measure.is_locally_finite_measure_of_is_add_haar_measure MeasureTheory.Measure.isLocallyFiniteMeasure_of_isAddHaarMeasure
section
-variable [Group G] [TopologicalSpace G] (μ : Measure G) [HaarMeasure μ]
+variable [Group G] [TopologicalSpace G] (μ : Measure G) [IsHaarMeasure μ]
@[to_additive (attr := simp)]
theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ {(1 : G)} := by
@@ -723,55 +725,55 @@ theorem haar_singleton [TopologicalGroup G] [BorelSpace G] (g : G) : μ {g} = μ
#align measure_theory.measure.haar_singleton MeasureTheory.Measure.haar_singleton
#align measure_theory.measure.add_haar_singleton MeasureTheory.Measure.addHaar_singleton
-@[to_additive AddHaarMeasure.smul]
-theorem HaarMeasure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞) : HaarMeasure (c • μ) :=
+@[to_additive IsAddHaarMeasure.smul]
+theorem IsHaarMeasure.smul {c : ℝ≥0∞} (cpos : c ≠ 0) (ctop : c ≠ ∞) : IsHaarMeasure (c • μ) :=
{ lt_top_of_isCompact := fun _K hK => ENNReal.mul_lt_top ctop hK.measure_lt_top.ne
- toOpenPosMeasure := openPosMeasure_smul μ cpos }
-#align measure_theory.measure.is_haar_measure.smul MeasureTheory.Measure.HaarMeasure.smul
-#align measure_theory.measure.is_add_haar_measure.smul MeasureTheory.Measure.AddHaarMeasure.smul
+ toIsOpenPosMeasure := isOpenPosMeasure_smul μ cpos }
+#align measure_theory.measure.is_haar_measure.smul MeasureTheory.Measure.IsHaarMeasure.smul
+#align measure_theory.measure.is_add_haar_measure.smul MeasureTheory.Measure.IsAddHaarMeasure.smul
/-- If a left-invariant measure gives positive mass to some compact set with nonempty interior, then
it is a Haar measure. -/
@[to_additive
"If a left-invariant measure gives positive mass to some compact set with nonempty interior, then
it is an additive Haar measure."]
-theorem haarMeasure_of_isCompact_nonempty_interior [TopologicalGroup G] [BorelSpace G]
- (μ : Measure G) [MulLeftInvariant μ] (K : Set G) (hK : IsCompact K)
- (h'K : (interior K).Nonempty) (h : μ K ≠ 0) (h' : μ K ≠ ∞) : HaarMeasure μ :=
+theorem isHaarMeasure_of_isCompact_nonempty_interior [TopologicalGroup G] [BorelSpace G]
+ (μ : Measure G) [IsMulLeftInvariant μ] (K : Set G) (hK : IsCompact K)
+ (h'K : (interior K).Nonempty) (h : μ K ≠ 0) (h' : μ K ≠ ∞) : IsHaarMeasure μ :=
{ lt_top_of_isCompact := fun _L hL =>
- measure_lt_top_of_isCompact_of_mulLeftInvariant' h'K h' hL
- toOpenPosMeasure := openPosMeasure_of_mulLeftInvariant_of_compact K hK h }
-#align measure_theory.measure.is_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.haarMeasure_of_isCompact_nonempty_interior
-#align measure_theory.measure.is_add_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.addHaarMeasure_of_isCompact_nonempty_interior
+ measure_lt_top_of_isCompact_of_isMulLeftInvariant' h'K h' hL
+ toIsOpenPosMeasure := isOpenPosMeasure_of_mulLeftInvariant_of_compact K hK h }
+#align measure_theory.measure.is_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.isHaarMeasure_of_isCompact_nonempty_interior
+#align measure_theory.measure.is_add_haar_measure_of_is_compact_nonempty_interior MeasureTheory.Measure.isAddHaarMeasure_of_isCompact_nonempty_interior
/-- The image of a Haar measure under a continuous surjective proper group homomorphism is again
-a Haar measure. See also `MulEquiv.haarMeasure_map`. -/
+a Haar measure. See also `MulEquiv.isHaarMeasure_map`. -/
@[to_additive
"The image of an additive Haar measure under a continuous surjective proper additive group
-homomorphism is again an additive Haar measure. See also `AddEquiv.addHaarMeasure_map`."]
-theorem haarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
+homomorphism is again an additive Haar measure. See also `AddEquiv.isAddHaarMeasure_map`."]
+theorem isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _} [Group H]
[TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [T2Space H] [TopologicalGroup H]
(f : G →* H) (hf : Continuous f) (h_surj : Surjective f)
- (h_prop : Tendsto f (cocompact G) (cocompact H)) : HaarMeasure (Measure.map f μ) :=
- { toMulLeftInvariant := mulLeftInvariant_map f.toMulHom hf.measurable h_surj
+ (h_prop : Tendsto f (cocompact G) (cocompact H)) : IsHaarMeasure (Measure.map f μ) :=
+ { toIsMulLeftInvariant := isMulLeftInvariant_map f.toMulHom hf.measurable h_surj
lt_top_of_isCompact := by
intro K hK
rw [map_apply hf.measurable hK.measurableSet]
exact IsCompact.measure_lt_top ((⟨⟨f, hf⟩, h_prop⟩ : CocompactMap G H).isCompact_preimage hK)
- toOpenPosMeasure := hf.openPosMeasure_map h_surj }
-#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.haarMeasure_map
-#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.addHaarMeasure_map
+ toIsOpenPosMeasure := hf.isOpenPosMeasure_map h_surj }
+#align measure_theory.measure.is_haar_measure_map MeasureTheory.Measure.isHaarMeasure_map
+#align measure_theory.measure.is_add_haar_measure_map MeasureTheory.Measure.isAddHaarMeasure_map
-/-- A convenience wrapper for `MeasureTheory.Measure.haarMeasure_map`. -/
-@[to_additive "A convenience wrapper for `MeasureTheory.Measure.addHaarMeasure_map`."]
-nonrec theorem _root_.MulEquiv.haarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _}
+/-- A convenience wrapper for `MeasureTheory.Measure.isHaarMeasure_map`. -/
+@[to_additive "A convenience wrapper for `MeasureTheory.Measure.isAddHaarMeasure_map`."]
+nonrec theorem _root_.MulEquiv.isHaarMeasure_map [BorelSpace G] [TopologicalGroup G] {H : Type _}
[Group H] [TopologicalSpace H] [MeasurableSpace H] [BorelSpace H] [T2Space H]
[TopologicalGroup H] (e : G ≃* H) (he : Continuous e) (hesymm : Continuous e.symm) :
- HaarMeasure (Measure.map e μ) :=
- haarMeasure_map μ (e : G →* H) he e.surjective
+ IsHaarMeasure (Measure.map e μ) :=
+ isHaarMeasure_map μ (e : G →* H) he e.surjective
({ e with } : G ≃ₜ H).toCocompactMap.cocompact_tendsto'
-#align mul_equiv.is_haar_measure_map MulEquiv.haarMeasure_map
-#align add_equiv.is_add_haar_measure_map AddEquiv.addHaarMeasure_map
+#align mul_equiv.is_haar_measure_map MulEquiv.isHaarMeasure_map
+#align add_equiv.is_add_haar_measure_map AddEquiv.isAddHaarMeasure_map
/-- A Haar measure on a σ-compact space is σ-finite.
@@ -780,21 +782,21 @@ See Note [lower instance priority] -/
"A Haar measure on a σ-compact space is σ-finite.
See Note [lower instance priority]"]
-instance (priority := 100) HaarMeasure.sigmaFinite [SigmaCompactSpace G] : SigmaFinite μ :=
+instance (priority := 100) IsHaarMeasure.sigmaFinite [SigmaCompactSpace G] : SigmaFinite μ :=
⟨⟨{ set := compactCovering G
set_mem := fun _ => mem_univ _
finite := fun n => IsCompact.measure_lt_top <| isCompact_compactCovering G n
spanning := iUnion_compactCovering G }⟩⟩
-#align measure_theory.measure.is_haar_measure.sigma_finite MeasureTheory.Measure.HaarMeasure.sigmaFinite
-#align measure_theory.measure.is_add_haar_measure.sigma_finite MeasureTheory.Measure.AddHaarMeasure.sigmaFinite
+#align measure_theory.measure.is_haar_measure.sigma_finite MeasureTheory.Measure.IsHaarMeasure.sigmaFinite
+#align measure_theory.measure.is_add_haar_measure.sigma_finite MeasureTheory.Measure.IsAddHaarMeasure.sigmaFinite
@[to_additive]
-instance prod.instHaarMeasure {G : Type _} [Group G] [TopologicalSpace G] {_ : MeasurableSpace G}
+instance prod.instIsHaarMeasure {G : Type _} [Group G] [TopologicalSpace G] {_ : MeasurableSpace G}
{H : Type _} [Group H] [TopologicalSpace H] {_ : MeasurableSpace H} (μ : Measure G)
- (ν : Measure H) [HaarMeasure μ] [HaarMeasure ν] [SigmaFinite μ] [SigmaFinite ν]
- [MeasurableMul G] [MeasurableMul H] : HaarMeasure (μ.prod ν) where
-#align measure_theory.measure.prod.is_haar_measure MeasureTheory.Measure.prod.instHaarMeasure
-#align measure_theory.measure.prod.is_add_haar_measure MeasureTheory.Measure.prod.instAddHaarMeasure
+ (ν : Measure H) [IsHaarMeasure μ] [IsHaarMeasure ν] [SigmaFinite μ] [SigmaFinite ν]
+ [MeasurableMul G] [MeasurableMul H] : IsHaarMeasure (μ.prod ν) where
+#align measure_theory.measure.prod.is_haar_measure MeasureTheory.Measure.prod.instIsHaarMeasure
+#align measure_theory.measure.prod.is_add_haar_measure MeasureTheory.Measure.prod.instIsAddHaarMeasure
/-- If the neutral element of a group is not isolated, then a Haar measure on this group has
no atoms.
@@ -807,8 +809,8 @@ group has no atoms.
This applies in particular to show that an additive Haar measure on a nontrivial finite-dimensional
real vector space has no atom."]
-instance (priority := 100) HaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
- [LocallyCompactSpace G] [(𝓝[≠] (1 : G)).NeBot] (μ : Measure G) [μ.HaarMeasure] :
+instance (priority := 100) IsHaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace G] [T1Space G]
+ [LocallyCompactSpace G] [(𝓝[≠] (1 : G)).NeBot] (μ : Measure G) [μ.IsHaarMeasure] :
NoAtoms μ := by
suffices H : μ {(1 : G)} ≤ 0; · constructor; simp [le_bot_iff.1 H]
obtain ⟨K, K_compact, K_int⟩ : ∃ K : Set G, IsCompact K ∧ (1 : G) ∈ interior K := by
@@ -836,8 +838,8 @@ instance (priority := 100) HaarMeasure.noAtoms [TopologicalGroup G] [BorelSpace
ENNReal.Tendsto.const_div ENNReal.tendsto_nat_nhds_top (Or.inr μKlt)
simp only [ENNReal.div_top] at J
exact ge_of_tendsto' J I
-#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.HaarMeasure.noAtoms
-#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.AddHaarMeasure.noAtoms
+#align measure_theory.measure.is_haar_measure.has_no_atoms MeasureTheory.Measure.IsHaarMeasure.noAtoms
+#align measure_theory.measure.is_add_haar_measure.has_no_atoms MeasureTheory.Measure.IsAddHaarMeasure.noAtoms
end
@@ -343,7 +343,7 @@ namespace Measure
-- Porting note: Even in `noncomputable section`, a definition with `to_additive` require
-- `noncomputable` to generate an additive definition.
--- TODO Fix this.
+-- Please refer to leanprover/lean4#2077.
/-- The measure `A ↦ μ (A⁻¹)`, where `A⁻¹` is the pointwise inverse of `A`. -/
@[to_additive "The measure `A ↦ μ (- A)`, where `- A` is the pointwise negation of `A`."]
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file