Fermat's Last Theorem Blueprint

10. Miniproject: Haar Characters🔗

10.1. Goal🔗

The goal of this miniproject is to develop the theory, that is, the basic API, of Haar characters. Haar character is a name I've made up to describe a certain character of the units of a locally compact topological ring. The main result we need here is that if B is a finite-dimensional algebra over a number field K, then B^\times is in the kernel of the Haar character of B\otimes_K\A_K, where \A_K is the ring of adeles of K. Most if not all of this should probably be in mathlib.

KMB would like to heartily thank Sebastien Gouezel for the help he gave during the preparation of this material.

10.2. Initial definitions🔗

10.2.1. Scaling Haar Measure On A Group🔗

Let A be a locally compact topological additive abelian group. There's then a regular additive Haar measure \mu on A, unique up to a positive scalar factor. If φ : (A, +) ≃ (A, +) is a homeomorphism and an additive automorphism of A, then we can push forward μ along φ to get a second measure φ_* μ on A, with the property that (φ_* μ)(X) = μ(φ^{-1} X) for any Borel subset X of A.

Definition10.1
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Lemma 10.2
Loading preview
Hover a group entry to preview it.
L∃∀N

If A is a locally compact topological additive abelian group, if \mu is a regular Haar measure on A, and if \phi:A\to A is an additive homeomorphism, then we let d_A(\phi) denote the unique positive real number such that \mu(X)=d_A(\phi)(\phi_*\mu)(X) for any Borel set X.

Lean code for Definition10.11 definition
  • defdefined in Mathlib/MeasureTheory/Measure/Haar/MulEquivHaarChar.lean
    complete
    def MeasureTheory.addEquivAddHaarChar.{u_1}MeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1] (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      NNRealNNReal : TypeNonnegative real numbers, denoted as `ℝ≥0` within the NNReal namespace 
    def MeasureTheory.addEquivAddHaarChar.{u_1}MeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1] (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      NNRealNNReal : TypeNonnegative real numbers, denoted as `ℝ≥0` within the NNReal namespace 
    If `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 

Now φ_* μ is a translation-invariant and regular measure, and hence also a Haar measure on A. It must thus differ from μ by a positive scalar factor, which we call d_A(φ).

There is a choice of normalization here between d_A(\phi) and d_A(\phi)^{-1}, so let us be more precise.

To give an example, if φ is multiplication by 2 on the real numbers, if X = [0,1], and if μ is Lebesgue measure on the Borel subsets of \R, we have that φ_* μ(X) = μ(φ^{-1}(X)) = μ([0,1/2]) = 1/2, so 1 = d_A(\phi)/2, meaning that d_A(\phi) = 2. Similarly if φ is multiplication by -2 and X = [0,1] then φ^{-1}(X) = [-1/2,0], which again has measure 1/2, so d_A(\phi) is 2 again.

Strictly speaking our definition of d_A(φ) depends on the choice of regular Haar measure \mu. Note that mathlib offers a fixed Borel regular Haar measure MeasureTheory.Measure.haar on any locally compact topological group, and the actual definition of d_A in the code uses this definition. Note also that the code defines everything for multiplicative groups and uses @[to_additive] to deduce the corresponding results for additive groups.

Lemma10.2
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀N
Used by 2
Hover a use site to preview it.

Uses Definition 10.1. d_A(\phi) is independent of choice of regular Haar measure.

Lean code for Lemma10.21 theorem
  • theoremdefined in Mathlib/MeasureTheory/Measure/Haar/MulEquivHaarChar.lean
    complete
    theorem MeasureTheory.addEquivAddHaarChar_eq.{u_1}MeasureTheory.addEquivAddHaarChar_eq.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G) [μ.IsAddHaarMeasure]
      [μ.Regular] (φ : G ≃ₜ+ G) :
      MeasureTheory.addEquivAddHaarChar φ = μ.addHaarScalarFactor (MeasureTheory.Measure.map (⇑φ) μ) {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1) [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        μMeasureTheory.Measure G.addHaarScalarFactorMeasureTheory.Measure.addHaarScalarFactor.{u_1} {G : Type u_1} [TopologicalSpace G] [AddGroup G]
      [IsTopologicalAddGroup G] [MeasurableSpace G] [BorelSpace G] (μ' μ : MeasureTheory.Measure G) [μ.IsAddHaarMeasure]
      [MeasureTheory.IsFiniteMeasureOnCompacts μ'] [μ'.IsAddLeftInvariant] : NNRealGiven two left-invariant measures which are finite on compacts,
    `addHaarScalarFactor μ' μ` is a scalar such that `∫ f dμ' = (addHaarScalarFactor μ' μ) ∫ f dμ` for
    any compactly supported continuous function `f`.
    
    Note that there is a dissymmetry in the assumptions between `μ'` and `μ`: the measure `μ'` needs
    only be finite on compact sets, while `μ` has to be finite on compact sets and positive on open
    sets, i.e., an additive Haar measure, to exclude for instance the case where `μ = 0`, where the
    definition doesn't make sense.  (MeasureTheory.Measure.mapMeasureTheory.Measure.map.{u_4, u_5} {α : Type u_4} {β : Type u_5} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure α) : MeasureTheory.Measure βThe pushforward of a measure. It is defined to be `0` if `f` is not an almost everywhere
    measurable function.  (⇑φG ≃ₜ+ G) μMeasureTheory.Measure G)
    theorem MeasureTheory.addEquivAddHaarChar_eq.{u_1}MeasureTheory.addEquivAddHaarChar_eq.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G) [μ.IsAddHaarMeasure]
      [μ.Regular] (φ : G ≃ₜ+ G) :
      MeasureTheory.addEquivAddHaarChar φ = μ.addHaarScalarFactor (MeasureTheory.Measure.map (⇑φ) μ)
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1)
      [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        μMeasureTheory.Measure G.addHaarScalarFactorMeasureTheory.Measure.addHaarScalarFactor.{u_1} {G : Type u_1} [TopologicalSpace G] [AddGroup G]
      [IsTopologicalAddGroup G] [MeasurableSpace G] [BorelSpace G] (μ' μ : MeasureTheory.Measure G) [μ.IsAddHaarMeasure]
      [MeasureTheory.IsFiniteMeasureOnCompacts μ'] [μ'.IsAddLeftInvariant] : NNRealGiven two left-invariant measures which are finite on compacts,
    `addHaarScalarFactor μ' μ` is a scalar such that `∫ f dμ' = (addHaarScalarFactor μ' μ) ∫ f dμ` for
    any compactly supported continuous function `f`.
    
    Note that there is a dissymmetry in the assumptions between `μ'` and `μ`: the measure `μ'` needs
    only be finite on compact sets, while `μ` has to be finite on compact sets and positive on open
    sets, i.e., an additive Haar measure, to exclude for instance the case where `μ = 0`, where the
    definition doesn't make sense. 
          (MeasureTheory.Measure.mapMeasureTheory.Measure.map.{u_4, u_5} {α : Type u_4} {β : Type u_5} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure α) : MeasureTheory.Measure βThe pushforward of a measure. It is defined to be `0` if `f` is not an almost everywhere
    measurable function.  (⇑φG ≃ₜ+ G) μMeasureTheory.Measure G)
Proof

If μ' is a second choice then μ' = λ μ for some positive real λ, and the λs on each side of μ'(X) = d_A(\phi)(\phi_* μ')(X) cancel.

Lemma10.3
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀N

Uses Lemma 10.2. If μ is any regular Haar measure on A then d_A(\phi)(\phi_*\mu) = \mu.

Lean code for Lemma10.31 theorem
  • theoremdefined in Mathlib/MeasureTheory/Measure/Haar/MulEquivHaarChar.lean
    complete
    theorem MeasureTheory.addEquivAddHaarChar_smul_map.{u_1}MeasureTheory.addEquivAddHaarChar_smul_map.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G) [μ.IsAddHaarMeasure]
      [μ.Regular] (φ : G ≃ₜ+ G) : MeasureTheory.addEquivAddHaarChar φ • MeasureTheory.Measure.map (⇑φ) μ = μ {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1) [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`.
          MeasureTheory.Measure.mapMeasureTheory.Measure.map.{u_4, u_5} {α : Type u_4} {β : Type u_5} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure α) : MeasureTheory.Measure βThe pushforward of a measure. It is defined to be `0` if `f` is not an almost everywhere
    measurable function.  (⇑φG ≃ₜ+ G) μMeasureTheory.Measure G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        μMeasureTheory.Measure G
    theorem MeasureTheory.addEquivAddHaarChar_smul_map.{u_1}MeasureTheory.addEquivAddHaarChar_smul_map.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G) [μ.IsAddHaarMeasure]
      [μ.Regular] (φ : G ≃ₜ+ G) : MeasureTheory.addEquivAddHaarChar φ • MeasureTheory.Measure.map (⇑φ) μ = μ
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1)
      [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`.
          MeasureTheory.Measure.mapMeasureTheory.Measure.map.{u_4, u_5} {α : Type u_4} {β : Type u_5} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure α) : MeasureTheory.Measure βThe pushforward of a measure. It is defined to be `0` if `f` is not an almost everywhere
    measurable function.  (⇑φG ≃ₜ+ G) μMeasureTheory.Measure G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        μMeasureTheory.Measure G
Proof

This is a restatement of the previous result.

Corollary10.4
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

Uses Lemma 10.3. If μ is any regular Haar measure on A then d_A(φ)μ = \phi^*μ.

Lean code for Corollary10.41 theorem
  • theoremdefined in Mathlib/MeasureTheory/Measure/Haar/MulEquivHaarChar.lean
    complete
    theorem MeasureTheory.addEquivAddHaarChar_smul_eq_comap.{u_1}MeasureTheory.addEquivAddHaarChar_smul_eq_comap.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G]
      [MeasurableSpace G] [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G)
      [μ.IsAddHaarMeasure] [μ.Regular] (φ : G ≃ₜ+ G) :
      MeasureTheory.addEquivAddHaarChar φ • μ = MeasureTheory.Measure.comap (⇑φ) μ {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1) [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`. μMeasureTheory.Measure G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.Measure.comapMeasureTheory.Measure.comap.{u_1, u_2} {α : Type u_1} {β : Type u_2} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure β) : MeasureTheory.Measure αPullback of a `Measure`. If `f` sends each measurable set to a null-measurable set,
    then for each measurable set `s` we have `comap f μ s = μ (f '' s)`.
    
    Note that if `f` is not injective, this definition assigns `Set.univ` measure zero.  (⇑φG ≃ₜ+ G) μMeasureTheory.Measure G
    theorem MeasureTheory.addEquivAddHaarChar_smul_eq_comap.{u_1}MeasureTheory.addEquivAddHaarChar_smul_eq_comap.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G]
      [MeasurableSpace G] [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G)
      [μ.IsAddHaarMeasure] [μ.Regular] (φ : G ≃ₜ+ G) :
      MeasureTheory.addEquivAddHaarChar φ • μ = MeasureTheory.Measure.comap (⇑φ) μ
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1)
      [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`.
          μMeasureTheory.Measure G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.Measure.comapMeasureTheory.Measure.comap.{u_1, u_2} {α : Type u_1} {β : Type u_2} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure β) : MeasureTheory.Measure αPullback of a `Measure`. If `f` sends each measurable set to a null-measurable set,
    then for each measurable set `s` we have `comap f μ s = μ (f '' s)`.
    
    Note that if `f` is not injective, this definition assigns `Set.univ` measure zero.  (⇑φG ≃ₜ+ G) μMeasureTheory.Measure G
Proof

This follows from the pushforward formula Lemma 10.3 applied to the regular Haar measure \phi^* \mu and the fact that \phi_*\phi^*\mu = \mu.

Lemma10.5
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

Uses Definition 10.1. d_A(id)=1.

Lean code for Lemma10.51 theorem
  • theoremdefined in Mathlib/MeasureTheory/Measure/Haar/MulEquivHaarChar.lean
    complete
    theorem MeasureTheory.addEquivAddHaarChar_refl.{u_1}MeasureTheory.addEquivAddHaarChar_refl.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] :
      MeasureTheory.addEquivAddHaarChar (ContinuousAddEquiv.refl G) = 1 {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1] :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  (ContinuousAddEquiv.reflContinuousAddEquiv.refl.{u_1} (M : Type u_1) [TopologicalSpace M] [Add M] : M ≃ₜ+ MThe identity map is a continuous additive isomorphism.  GType u_1) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1
    theorem MeasureTheory.addEquivAddHaarChar_refl.{u_1}MeasureTheory.addEquivAddHaarChar_refl.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] :
      MeasureTheory.addEquivAddHaarChar (ContinuousAddEquiv.refl G) = 1
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1] :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (ContinuousAddEquiv.reflContinuousAddEquiv.refl.{u_1} (M : Type u_1) [TopologicalSpace M] [Add M] : M ≃ₜ+ MThe identity map is a continuous additive isomorphism.  GType u_1) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        1
Proof

Uses Lemma 10.2. Clear.

Lemma10.6
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀N
Used by 2
Hover a use site to preview it.

Uses Definition 10.1. If X is a Borel set, then μ(X) = d_A(φ) μ(φ⁻¹(X)).

Lean code for Lemma10.61 theorem
  • theoremdefined in Mathlib/MeasureTheory/Measure/Haar/MulEquivHaarChar.lean
    complete
    theorem MeasureTheory.addEquivAddHaarChar_smul_preimage.{u_1}MeasureTheory.addEquivAddHaarChar_smul_preimage.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G]
      [MeasurableSpace G] [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G)
      [μ.IsAddHaarMeasure] [μ.Regular] {X : Set G} (φ : G ≃ₜ+ G) : MeasureTheory.addEquivAddHaarChar φ • μ (⇑φ ⁻¹' X) = μ X {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1) [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      {XSet G : SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     GType u_1} (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`. μMeasureTheory.Measure G (Set.preimage.{u, v} {α : Type u} {β : Type v} (f : α → β) (s : Set β) : Set αThe preimage of `s : Set β` by `f : α → β`, written `f ⁻¹' s`,
    is the set of `x : α` such that `f x ∈ s`. φG ≃ₜ+ G ⁻¹'Set.preimage.{u, v} {α : Type u} {β : Type v} (f : α → β) (s : Set β) : Set αThe preimage of `s : Set β` by `f : α → β`, written `f ⁻¹' s`,
    is the set of `x : α` such that `f x ∈ s`.  XSet G)Set.preimage.{u, v} {α : Type u} {β : Type v} (f : α → β) (s : Set β) : Set αThe preimage of `s : Set β` by `f : α → β`, written `f ⁻¹' s`,
    is the set of `x : α` such that `f x ∈ s`.  =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. μMeasureTheory.Measure G XSet G
    theorem MeasureTheory.addEquivAddHaarChar_smul_preimage.{u_1}MeasureTheory.addEquivAddHaarChar_smul_preimage.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G]
      [MeasurableSpace G] [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G)
      [μ.IsAddHaarMeasure] [μ.Regular] {X : Set G} (φ : G ≃ₜ+ G) : MeasureTheory.addEquivAddHaarChar φ • μ (⇑φ ⁻¹' X) = μ X
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1)
      [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      {XSet G : SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     GType u_1} (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`.
          μMeasureTheory.Measure G (Set.preimage.{u, v} {α : Type u} {β : Type v} (f : α → β) (s : Set β) : Set αThe preimage of `s : Set β` by `f : α → β`, written `f ⁻¹' s`,
    is the set of `x : α` such that `f x ∈ s`. φG ≃ₜ+ G ⁻¹'Set.preimage.{u, v} {α : Type u} {β : Type v} (f : α → β) (s : Set β) : Set αThe preimage of `s : Set β` by `f : α → β`, written `f ⁻¹' s`,
    is the set of `x : α` such that `f x ∈ s`.  XSet G)Set.preimage.{u, v} {α : Type u} {β : Type v} (f : α → β) (s : Set β) : Set αThe preimage of `s : Set β` by `f : α → β`, written `f ⁻¹' s`,
    is the set of `x : α` such that `f x ∈ s`.  =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        μMeasureTheory.Measure G XSet G
Proof

Uses Lemma 10.3. This follows immediately from lemma MeasureTheory.addEquivAddHaarChar_smul_map and the definition of the pushforward of a measure.

Lemma10.7
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

Uses Definition 10.1. If f : A → ℝ is a Borel measurable function then d_A(φ) ∫ f(x) d(φ_* μ)(x) = ∫ f(x) dμ(x).

Lean code for Lemma10.71 theorem
  • theoremdefined in Mathlib/MeasureTheory/Measure/Haar/MulEquivHaarChar.lean
    complete
    theorem MeasureTheory.addEquivAddHaarChar_smul_integral_map.{u_1}MeasureTheory.addEquivAddHaarChar_smul_integral_map.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G]
      [MeasurableSpace G] [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G)
      [μ.IsAddHaarMeasure] [μ.Regular] {f : G → ℝ} (φ : G ≃ₜ+ G) :
      MeasureTheory.addEquivAddHaarChar φ • ∫ (a : G), f a ∂MeasureTheory.Measure.map (⇑φ) μ = ∫ (a : G), f a ∂μ {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1) [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      {fG → ℝ : GType u_1  Real : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational
    numbers. } (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`.
          MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (aG : GType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  fG → ℝ aG MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral MeasureTheory.Measure.mapMeasureTheory.Measure.map.{u_4, u_5} {α : Type u_4} {β : Type u_5} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure α) : MeasureTheory.Measure βThe pushforward of a measure. It is defined to be `0` if `f` is not an almost everywhere
    measurable function.  (⇑φG ≃ₜ+ G) μMeasureTheory.Measure G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (aG : GType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  fG → ℝ aG MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral μMeasureTheory.Measure G
    theorem MeasureTheory.addEquivAddHaarChar_smul_integral_map.{u_1}MeasureTheory.addEquivAddHaarChar_smul_integral_map.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G]
      [MeasurableSpace G] [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G)
      [μ.IsAddHaarMeasure] [μ.Regular] {f : G → ℝ} (φ : G ≃ₜ+ G) :
      MeasureTheory.addEquivAddHaarChar φ • ∫ (a : G), f a ∂MeasureTheory.Measure.map (⇑φ) μ = ∫ (a : G), f a ∂μ
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1)
      [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      {fG → ℝ : GType u_1  Real : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational
    numbers. } (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`.
          MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (aG : GType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral 
            fG → ℝ
              aG MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral MeasureTheory.Measure.mapMeasureTheory.Measure.map.{u_4, u_5} {α : Type u_4} {β : Type u_5} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure α) : MeasureTheory.Measure βThe pushforward of a measure. It is defined to be `0` if `f` is not an almost everywhere
    measurable function. 
              (⇑φG ≃ₜ+ G) μMeasureTheory.Measure G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (aG : GType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  fG → ℝ aG MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral μMeasureTheory.Measure G
Proof

Uses Lemma 10.3. This also follows immediately from lemma.

We also have the following variant:

Lemma10.8
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

Uses Corollary 10.4. If f : A → ℝ is a Borel measurable function then d_A(φ) ∫ f(x) dμ(x) = ∫ f(x) d(φ^*μ)(x).

Lean code for Lemma10.81 theorem
  • theoremdefined in Mathlib/MeasureTheory/Measure/Haar/MulEquivHaarChar.lean
    complete
    theorem MeasureTheory.integral_comap_eq_addEquivAddHaarChar_smul.{u_1}MeasureTheory.integral_comap_eq_addEquivAddHaarChar_smul.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G]
      [MeasurableSpace G] [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G)
      [μ.IsAddHaarMeasure] [μ.Regular] {f : G → ℝ} (φ : G ≃ₜ+ G) :
      ∫ (a : G), f a ∂MeasureTheory.Measure.comap (⇑φ) μ = MeasureTheory.addEquivAddHaarChar φ • ∫ (a : G), f a ∂μ
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1) [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      {fG → ℝ : GType u_1  Real : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational
    numbers. } (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (aG : GType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  fG → ℝ aG MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral MeasureTheory.Measure.comapMeasureTheory.Measure.comap.{u_1, u_2} {α : Type u_1} {β : Type u_2} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure β) : MeasureTheory.Measure αPullback of a `Measure`. If `f` sends each measurable set to a null-measurable set,
    then for each measurable set `s` we have `comap f μ s = μ (f '' s)`.
    
    Note that if `f` is not injective, this definition assigns `Set.univ` measure zero.  (⇑φG ≃ₜ+ G) μMeasureTheory.Measure G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`. MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (aG : GType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  fG → ℝ aG MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral μMeasureTheory.Measure G
    theorem MeasureTheory.integral_comap_eq_addEquivAddHaarChar_smul.{u_1}MeasureTheory.integral_comap_eq_addEquivAddHaarChar_smul.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G]
      [MeasurableSpace G] [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (μ : MeasureTheory.Measure G)
      [μ.IsAddHaarMeasure] [μ.Regular] {f : G → ℝ} (φ : G ≃ₜ+ G) :
      ∫ (a : G), f a ∂MeasureTheory.Measure.comap (⇑φ) μ = MeasureTheory.addEquivAddHaarChar φ • ∫ (a : G), f a ∂μ
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      (μMeasureTheory.Measure G : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     GType u_1)
      [μMeasureTheory.Measure G.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure G.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      {fG → ℝ : GType u_1  Real : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational
    numbers. } (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (aG : GType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral 
          fG → ℝ
            aG MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral MeasureTheory.Measure.comapMeasureTheory.Measure.comap.{u_1, u_2} {α : Type u_1} {β : Type u_2} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure β) : MeasureTheory.Measure αPullback of a `Measure`. If `f` sends each measurable set to a null-measurable set,
    then for each measurable set `s` we have `comap f μ s = μ (f '' s)`.
    
    Note that if `f` is not injective, this definition assigns `Set.univ` measure zero. 
            (⇑φG ≃ₜ+ G) μMeasureTheory.Measure G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`.
          MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (aG : GType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  fG → ℝ aG MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral μMeasureTheory.Measure G
Proof

This is immediate from corollary Corollary 10.4.

Lemma10.9
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

Uses Definition 10.1. d_A(\phi\circ\psi)=d_A(\phi)d_A(\psi).

Lean code for Lemma10.91 theorem
  • theoremdefined in Mathlib/MeasureTheory/Measure/Haar/MulEquivHaarChar.lean
    complete
    theorem MeasureTheory.addEquivAddHaarChar_trans.{u_1}MeasureTheory.addEquivAddHaarChar_trans.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] {φ ψ : G ≃ₜ+ G} :
      MeasureTheory.addEquivAddHaarChar (ψ.trans φ) =
        MeasureTheory.addEquivAddHaarChar ψ * MeasureTheory.addEquivAddHaarChar φ {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1] {φG ≃ₜ+ G ψG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1} :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  (ψG ≃ₜ+ G.transContinuousAddEquiv.trans.{u_1, u_2, u_3} {M : Type u_1} {N : Type u_2} [TopologicalSpace M] [TopologicalSpace N] [Add M]
      [Add N] {L : Type u_3} [Add L] [TopologicalSpace L] (cme1 : M ≃ₜ+ N) (cme2 : N ≃ₜ+ L) : M ≃ₜ+ LThe composition of two ContinuousAddEquiv.  φG ≃ₜ+ G) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  ψG ≃ₜ+ G *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G
    theorem MeasureTheory.addEquivAddHaarChar_trans.{u_1}MeasureTheory.addEquivAddHaarChar_trans.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] {φ ψ : G ≃ₜ+ G} :
      MeasureTheory.addEquivAddHaarChar (ψ.trans φ) =
        MeasureTheory.addEquivAddHaarChar ψ * MeasureTheory.addEquivAddHaarChar φ
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      {φG ≃ₜ+ G ψG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1} :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (ψG ≃ₜ+ G.transContinuousAddEquiv.trans.{u_1, u_2, u_3} {M : Type u_1} {N : Type u_2} [TopologicalSpace M] [TopologicalSpace N] [Add M]
      [Add N] {L : Type u_3} [Add L] [TopologicalSpace L] (cme1 : M ≃ₜ+ N) (cme2 : N ≃ₜ+ L) : M ≃ₜ+ LThe composition of two ContinuousAddEquiv.  φG ≃ₜ+ G) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  ψG ≃ₜ+ G *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G
Proof

Uses Lemma 10.6.

Here's one way: it suffices to prove that d_A(\phi\circ\psi)(\phi\circ\psi)_*\mu = d_A(\phi)d_A(\psi)(\phi\circ\psi)_*\mu (because there exists a compact set with positive finite measure), and using lemma Lemma 10.3 and the fact that (\phi\circ\psi)_*\mu = \phi_*(\psi_*\mu), one can simplify both sides to μ.

10.3. Examples🔗

Lemma10.10
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

If R=\R then \delta_R(u)=|u|.

Lean code for Lemma10.101 theorem
  • complete
    theorem MeasureTheory.ringHaarChar_realMeasureTheory.ringHaarChar_real (x : ℝˣ) : MeasureTheory.ringHaarChar x = ‖↑x‖₊The distributive Haar character of the action of `ℝˣ` on `ℝ` is the usual norm.
    
    This means that `volume (x • s) = ‖x‖ * volume s` for all `x : ℝ` and `s : Set ℝ`.
    See `Real.volume_real_smul`.  (xℝˣ : Real : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational
    numbers. ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     xℝˣ =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. NNNorm.nnnorm.{u_8} {E : Type u_8} [self : NNNorm E] : E → NNRealthe `ℝ≥0`-valued norm function. xℝˣ‖₊NNNorm.nnnorm.{u_8} {E : Type u_8} [self : NNNorm E] : E → NNRealthe `ℝ≥0`-valued norm function. 
    theorem MeasureTheory.ringHaarChar_realMeasureTheory.ringHaarChar_real (x : ℝˣ) : MeasureTheory.ringHaarChar x = ‖↑x‖₊The distributive Haar character of the action of `ℝˣ` on `ℝ` is the usual norm.
    
    This means that `volume (x • s) = ‖x‖ * volume s` for all `x : ℝ` and `s : Set ℝ`.
    See `Real.volume_real_smul`.  (xℝˣ : Real : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational
    numbers. ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     xℝˣ =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. NNNorm.nnnorm.{u_8} {E : Type u_8} [self : NNNorm E] : E → NNRealthe `ℝ≥0`-valued norm function. xℝˣ‖₊NNNorm.nnnorm.{u_8} {E : Type u_8} [self : NNNorm E] : E → NNRealthe `ℝ≥0`-valued norm function. 
    The distributive Haar character of the action of `ℝˣ` on `ℝ` is the usual norm.
    
    This means that `volume (x • s) = ‖x‖ * volume s` for all `x : ℝ` and `s : Set ℝ`.
    See `Real.volume_real_smul`. 
Proof

Uses Lemma 10.14. Take \mu to be Lebesgue measure and X = [0,1]. We have δ(u) = \mu(uX). If u > 0 then u[0,1] = [0,u], which has measure u = |u|, and if u < 0 then u[0,1] = [u,0], which has measure -u = |u|.

Lemma10.11
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

If R=\bbC then \delta_R(u)=|u|^2.

Lean code for Lemma10.111 theorem
  • complete
    theorem MeasureTheory.ringHaarChar_complexMeasureTheory.ringHaarChar_complex (z : ℂˣ) : MeasureTheory.ringHaarChar z = ‖↑z‖₊ ^ 2The distributive Haar character of the action of `ℂˣ` on `ℂ` is the usual norm squared.
    
    This means that `volume (z • s) = ‖z‖ ^ 2 * volume s` for all `z : ℂ` and `s : Set ℂ`.
    See `Complex.volume_complex_smul`.  (zℂˣ : Complex : TypeComplex numbers consist of two `Real`s: a real part `re` and an imaginary part `im`. ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     zℂˣ =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. NNNorm.nnnorm.{u_8} {E : Type u_8} [self : NNNorm E] : E → NNRealthe `ℝ≥0`-valued norm function. zℂˣ‖₊NNNorm.nnnorm.{u_8} {E : Type u_8} [self : NNNorm E] : E → NNRealthe `ℝ≥0`-valued norm function.  ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `^` in identifiers is `pow`. 2
    theorem MeasureTheory.ringHaarChar_complexMeasureTheory.ringHaarChar_complex (z : ℂˣ) : MeasureTheory.ringHaarChar z = ‖↑z‖₊ ^ 2The distributive Haar character of the action of `ℂˣ` on `ℂ` is the usual norm squared.
    
    This means that `volume (z • s) = ‖z‖ ^ 2 * volume s` for all `z : ℂ` and `s : Set ℂ`.
    See `Complex.volume_complex_smul`. 
      (zℂˣ : Complex : TypeComplex numbers consist of two `Real`s: a real part `re` and an imaginary part `im`. ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     zℂˣ =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. NNNorm.nnnorm.{u_8} {E : Type u_8} [self : NNNorm E] : E → NNRealthe `ℝ≥0`-valued norm function. zℂˣ‖₊NNNorm.nnnorm.{u_8} {E : Type u_8} [self : NNNorm E] : E → NNRealthe `ℝ≥0`-valued norm function.  ^HPow.hPow.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HPow α β γ] : α → β → γ`a ^ b` computes `a` to the power of `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `^` in identifiers is `pow`. 2
    The distributive Haar character of the action of `ℂˣ` on `ℂ` is the usual norm squared.
    
    This means that `volume (z • s) = ‖z‖ ^ 2 * volume s` for all `z : ℂ` and `s : Set ℂ`.
    See `Complex.volume_complex_smul`. 
Proof

Uses Lemma 10.14. Multiplication by a positive real r sends a unit square to a square of area r^2 = |r|^2. Multiplication by e^{i\theta} is a rotation and thus does not change area. The general case follows.

10.3.1. Scaling Haar Measure On A Ring🔗

Now let R be a locally compact topological ring. The Haar character of R, or more precisely the left Haar character of R, is a group homomorphism R^\times \to \R^\times defined in the following way. If u ∈ R^\times then left multiplication by u, namely the map \ell_u : (R,+) → (R,+) defined by \ell_u(r) = ur, is a homeomorphism and an additive automorphism of (R,+), so the preceding theory applies to \ell_u.

Definition10.12
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀N

Uses Definition 10.1, Lemma 10.5, and Lemma 10.9. We define δ_R(u), or just δ(u) when the ring R is clear, to be d_R(ℓ_u).

Lean code for Definition10.121 definition
  • complete
    def MeasureTheory.ringHaarChar.{u_1}MeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     {RType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  RType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  RType u_1] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  RType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  RType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  RType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  RType u_1] : RType u_1ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`.  →ₜ*ContinuousMonoidHom.{u_2, u_3} (A : Type u_2) (B : Type u_3) [Monoid A] [Monoid B] [TopologicalSpace A]
      [TopologicalSpace B] : Type (max u_2 u_3)The type of continuous monoid homomorphisms from `A` to `B`.
    
    When possible, instead of parametrizing results over `(f : ContinuousMonoidHom A B)`,
    you should parametrize
    over `(F : Type*) [FunLike F A B] [ContinuousMapClass F A B] [MonoidHomClass F A B] (f : F)`.
    
    When you extend this structure,
    make sure to extend `ContinuousMapClass` and/or `MonoidHomClass`, if needed.  NNRealNNReal : TypeNonnegative real numbers, denoted as `ℝ≥0` within the NNReal namespace 
    def MeasureTheory.ringHaarChar.{u_1}MeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
      {RType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  RType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  RType u_1]
      [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  RType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  RType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  RType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  RType u_1] :
      RType u_1ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`.  →ₜ*ContinuousMonoidHom.{u_2, u_3} (A : Type u_2) (B : Type u_3) [Monoid A] [Monoid B] [TopologicalSpace A]
      [TopologicalSpace B] : Type (max u_2 u_3)The type of continuous monoid homomorphisms from `A` to `B`.
    
    When possible, instead of parametrizing results over `(f : ContinuousMonoidHom A B)`,
    you should parametrize
    over `(F : Type*) [FunLike F A B] [ContinuousMapClass F A B] [MonoidHomClass F A B] (f : F)`.
    
    When you extend this structure,
    make sure to extend `ContinuousMapClass` and/or `MonoidHomClass`, if needed.  NNRealNNReal : TypeNonnegative real numbers, denoted as `ℝ≥0` within the NNReal namespace 
    `ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
Lemma10.13
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

Uses Definition 10.12. If f:R\to\R is a Borel measurable function and u\in R^\times then \delta_R(u)\int f(ux)d\mu(x)=\int f(x)d\mu(x).

Lean code for Lemma10.131 theorem
  • complete
    theorem MeasureTheory.ringHaarChar_mul_integral.{u_1}MeasureTheory.ringHaarChar_mul_integral.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] (μ : MeasureTheory.Measure R) [μ.IsAddHaarMeasure]
      [μ.Regular] {f : R → ℝ} (hf : Measurable f) (u : Rˣ) :
      ↑(MeasureTheory.ringHaarChar u) * ∫ (r : R), f (↑u * r) ∂μ = ∫ (a : R), f a ∂μ {RType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  RType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  RType u_1] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  RType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  RType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  RType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  RType u_1] (μMeasureTheory.Measure R : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     RType u_1)
      [μMeasureTheory.Measure R.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure R.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ] {fR → ℝ : RType u_1  Real : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational
    numbers. } (hfMeasurable f : MeasurableMeasurable.{u_1, u_2} {α : Type u_1} {β : Type u_2} [MeasurableSpace α] [MeasurableSpace β] (f : α → β) : PropA function `f` between measurable spaces is measurable if the preimage of every
    measurable set is measurable.  fR → ℝ)
      (u : RType u_1ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      (MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (rR : RType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  fR → ℝ (HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.u *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. rR)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral μMeasureTheory.Measure R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (aR : RType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  fR → ℝ aR MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral μMeasureTheory.Measure R
    theorem MeasureTheory.ringHaarChar_mul_integral.{u_1}MeasureTheory.ringHaarChar_mul_integral.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] (μ : MeasureTheory.Measure R) [μ.IsAddHaarMeasure]
      [μ.Regular] {f : R → ℝ} (hf : Measurable f) (u : Rˣ) :
      ↑(MeasureTheory.ringHaarChar u) * ∫ (r : R), f (↑u * r) ∂μ = ∫ (a : R), f a ∂μ
      {RType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  RType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  RType u_1]
      [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  RType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  RType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  RType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  RType u_1]
      (μMeasureTheory.Measure R : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     RType u_1)
      [μMeasureTheory.Measure R.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure R.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      {fR → ℝ : RType u_1  Real : TypeThe type `ℝ` of real numbers constructed as equivalence classes of Cauchy sequences of rational
    numbers. } (hfMeasurable f : MeasurableMeasurable.{u_1, u_2} {α : Type u_1} {β : Type u_2} [MeasurableSpace α] [MeasurableSpace β] (f : α → β) : PropA function `f` between measurable spaces is measurable if the preimage of every
    measurable set is measurable.  fR → ℝ)
      (u : RType u_1ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      (MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (rR : RType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  fR → ℝ (HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.u *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. rR)HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral μMeasureTheory.Measure R =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  (aR : RType u_1),MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral  fR → ℝ aR MeasureTheory.integral.{u_6, u_7} {α : Type u_6} {G : Type u_7} [NormedAddCommGroup G] [NormedSpace ℝ G]
      {x✝ : MeasurableSpace α} (μ : MeasureTheory.Measure α) (f : α → G) : GThe Bochner integral μMeasureTheory.Measure R
Proof

Uses Lemma 10.7. A short calculation using lemma.

Lemma10.14
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀N
Used by 2
Hover a use site to preview it.
Preview
Lemma 10.10
Loading preview
Hover a use site to preview it.

Uses Definition 10.12 and Lemma 10.6. If X is a Borel subset of R and r ∈ R^\times, then μ(rX) = δ_R(r) μ(X).

Lean code for Lemma10.141 theorem
  • complete
    theorem MeasureTheory.ringHaarChar_mul_volume.{u_1}MeasureTheory.ringHaarChar_mul_volume.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] (μ : MeasureTheory.Measure R) [μ.IsAddHaarMeasure]
      [μ.Regular] {X : Set R} (u : Rˣ) : μ (u • X) = ↑(MeasureTheory.ringHaarChar u) * μ X {RType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  RType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  RType u_1] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  RType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  RType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  RType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  RType u_1] (μMeasureTheory.Measure R : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     RType u_1)
      [μMeasureTheory.Measure R.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure R.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ] {XSet R : SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     RType u_1} (u : RType u_1ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      μMeasureTheory.Measure R (HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`.u HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`. XSet R)HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`. =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. (MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. μMeasureTheory.Measure R XSet R
    theorem MeasureTheory.ringHaarChar_mul_volume.{u_1}MeasureTheory.ringHaarChar_mul_volume.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] (μ : MeasureTheory.Measure R) [μ.IsAddHaarMeasure]
      [μ.Regular] {X : Set R} (u : Rˣ) : μ (u • X) = ↑(MeasureTheory.ringHaarChar u) * μ X
      {RType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  RType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  RType u_1]
      [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  RType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  RType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  RType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  RType u_1]
      (μMeasureTheory.Measure R : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     RType u_1)
      [μMeasureTheory.Measure R.IsAddHaarMeasureMeasureTheory.Measure.IsAddHaarMeasure.{u_3} {G : Type u_3} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] [μMeasureTheory.Measure R.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ]
      {XSet R : SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     RType u_1} (u : RType u_1ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      μMeasureTheory.Measure R (HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`.u HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`. XSet R)HSMul.hSMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HSMul α β γ] : α → β → γ`a • b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent, but it is intended to be used for left actions. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `•` in identifiers is `smul`. =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        (MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u) *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. μMeasureTheory.Measure R XSet R
Proof

Uses Lemma 10.6. Immediate from lemma.

Corollary10.15
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

Uses Definition 10.12. The function δ_R : R^\times → ℝ_{>0} is continuous.

Lean code for Corollary10.151 theorem
  • complete
    theorem MeasureTheory.ringHaarChar_continuous.{u_1}MeasureTheory.ringHaarChar_continuous.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] :
      Continuous fun u ↦ MeasureTheory.addEquivAddHaarChar (ContinuousAddEquiv.mulLeft u) {RType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  RType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  RType u_1] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  RType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  RType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  RType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  RType u_1] :
      ContinuousContinuous.{u, v} {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] (f : X → Y) : PropA function between topological spaces is continuous if the preimage
    of every open set is open. Registered as a structure to make sure it is not unfolded by Lean.  fun u 
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  (ContinuousAddEquiv.mulLeftContinuousAddEquiv.mulLeft.{u_1} {R : Type u_1} [TopologicalSpace R] [Semiring R] [IsTopologicalSemiring R] (r : Rˣ) :
      R ≃ₜ+ RThe additive homeomorphism from a topological ring to itself,
    induced by left multiplication by a unit.  u)
    theorem MeasureTheory.ringHaarChar_continuous.{u_1}MeasureTheory.ringHaarChar_continuous.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] :
      Continuous fun u ↦ MeasureTheory.addEquivAddHaarChar (ContinuousAddEquiv.mulLeft u)
      {RType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  RType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  RType u_1]
      [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  RType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  RType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  RType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  RType u_1] :
      ContinuousContinuous.{u, v} {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] (f : X → Y) : PropA function between topological spaces is continuous if the preimage
    of every open set is open. Registered as a structure to make sure it is not unfolded by Lean.  fun u 
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (ContinuousAddEquiv.mulLeftContinuousAddEquiv.mulLeft.{u_1} {R : Type u_1} [TopologicalSpace R] [Semiring R] [IsTopologicalSemiring R] (r : Rˣ) :
      R ≃ₜ+ RThe additive homeomorphism from a topological ring to itself,
    induced by left multiplication by a unit.  u)
Proof

Uses Lemma 10.13. Fix a Haar measure \mu on R and a continuous real-valued function f on R with compact support and such that \int f(x) d\mu(x)\not=0. Then r \mapsto \int f(rx) d\mu(x) is a continuous function from R\to\R, because a continuous function with compact support is uniformly continuous, and thus gives a continuous function R^\times\to\R. Thus the function u\mapsto(\int f(ux)d\mu(x))/(\int f(x)d\mu(x)) is a continuous function from R^\times to \R taking values in \R_{>0}. Hence \delta_R^{-1} is continuous from lemma, and thus \delta_R is too.

If R=\Q_p then \delta_R(u)=|u|_p, the usual p-adic norm.

Normalize Haar measure so that μ(\Z_p)=1. If u is a p-adic unit then u\Z_p=\Z_p so multiplication by u does not change Haar measure. If however u = p then u\Z_p has index p in \Z_p, and because μ(i+p\Z_p)=μ(p\Z_p) we have that μ(\Z_p)=pμ(p\Z_p) and thus δ(p)=p^{-1}. These elements generate \Q_p^\times, and two characters which agree on generators of a group must agree on the group.

If R is a finite extension of \Q_p then \delta_R(u) is the norm on R normalised in the following way: \delta_R(\varpi)=q^{-1}, where \varpi is a uniformiser and q is the size of the (finite) residue field.

10.4. Algebras🔗

Say F is a locally compact topological ring, for example \R, \bbC, \Q_p, or the adeles of a number field, V is a finite free F-module, and φ : V → V is an invertible F-linear map. Then V with its module topology (which is the product topology if one picks a basis) is a locally compact topological abelian group, and φ is additive. One can check that linearity implies continuity, this is IsModuleTopology.continuous_of_linearMap in mathlib, so in fact φ is a homeomorphism and our theory applies. The following lemma gives a formula for the scale factor d_V(φ).

Lemma10.17
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀N

Uses Definition 10.12. Assume that there's an F-basis for V such that \phi is a product of elementary and diagonal matrices, note that this is automatic if F is a field and mathlib has this. Then d_V(\phi)=\delta_F(\det(\phi)), where \det(\phi)\in F is the determinant of \phi as an F-linear map.

Lean code for Lemma10.172 theorems
  • theorem MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det.{u_2, u_3}MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det.{u_2, u_3} {F : Type u_2} [MeasurableSpace F] [TopologicalSpace F]
      [BorelSpace F] [LocallyCompactSpace F] [Field F] [IsTopologicalRing F] {V : Type u_3} [AddCommGroup V]
      [TopologicalSpace V] [MeasurableSpace V] [BorelSpace V] [Module F V] [FiniteDimensional F V] [IsModuleTopology F V]
      [IsTopologicalAddGroup V] [LocallyCompactSpace V] [SecondCountableTopology F] (ρ : V ≃L[F] V) :
      MeasureTheory.addEquivAddHaarChar ρ.toContinuousAddEquiv =
        MeasureTheory.ringHaarChar (LinearEquiv.det ρ.toLinearEquiv)Haar measure scaling for invertible linear maps on a finite-dimensional vector space
    over a field F assuming `[SecondCountableTopology F]`. 
      {FType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  FType u_2] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  FType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  FType u_2]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  FType u_2] [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  FType u_2] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  FType u_2] {VType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.  VType u_3] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  VType u_3] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  VType u_3]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  VType u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring.  FType u_2 VType u_3] [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  FType u_2 VType u_3]
      [IsModuleTopologyIsModuleTopology.{u_1, u_2} (R : Type u_1) [TopologicalSpace R] (A : Type u_2) [Add A] [SMul R A]
      [τA : TopologicalSpace A] : PropA class asserting that the topology on a module over a topological ring `R` is
    the module topology. See `moduleTopology` for more discussion of the module topology.  FType u_2 VType u_3] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  VType u_3]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  VType u_3] [SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  FType u_2] (ρV ≃L[F] V : VType u_3 ≃L[ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`. FType u_2]ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`.  VType u_3) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  ρV ≃L[F] V.toContinuousAddEquivContinuousLinearEquiv.toContinuousAddEquiv.{u_1, u_4, u_8} {R₁ : Type u_1} [Semiring R₁] {M₁ : Type u_4}
      [TopologicalSpace M₁] [AddCommMonoid M₁] [Module R₁ M₁] {M : Type u_8} [TopologicalSpace M] [AddCommMonoid M]
      [Module R₁ M] (e : M₁ ≃L[R₁] M) : M₁ ≃ₜ+ MA continuous linear equivalence seen as a `ContinuousAddEquiv`.  =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     (LinearEquiv.detLinearEquiv.det.{u_1, u_2} {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] : (M ≃ₗ[R] M) →* RˣOn a `LinearEquiv`, the domain of `LinearMap.det` can be promoted to `Rˣ`.  ρV ≃L[F] V.toLinearEquivContinuousLinearEquiv.toLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S]
      {σ : R →+* S} {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] {M : Type u_3} [TopologicalSpace M]
      [AddCommMonoid M] {M₂ : Type u_4} [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂]
      (self : M ≃SL[σ] M₂) : M ≃ₛₗ[σ] M₂)
    theorem MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det.{u_2,
        u_3}MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det.{u_2, u_3} {F : Type u_2} [MeasurableSpace F] [TopologicalSpace F]
      [BorelSpace F] [LocallyCompactSpace F] [Field F] [IsTopologicalRing F] {V : Type u_3} [AddCommGroup V]
      [TopologicalSpace V] [MeasurableSpace V] [BorelSpace V] [Module F V] [FiniteDimensional F V] [IsModuleTopology F V]
      [IsTopologicalAddGroup V] [LocallyCompactSpace V] [SecondCountableTopology F] (ρ : V ≃L[F] V) :
      MeasureTheory.addEquivAddHaarChar ρ.toContinuousAddEquiv =
        MeasureTheory.ringHaarChar (LinearEquiv.det ρ.toLinearEquiv)Haar measure scaling for invertible linear maps on a finite-dimensional vector space
    over a field F assuming `[SecondCountableTopology F]`. 
      {FType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  FType u_2]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  FType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  FType u_2]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  FType u_2] [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  FType u_2]
      [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  FType u_2] {VType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.  VType u_3] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  VType u_3]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  VType u_3] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  VType u_3]
      [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring.  FType u_2 VType u_3] [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  FType u_2 VType u_3]
      [IsModuleTopologyIsModuleTopology.{u_1, u_2} (R : Type u_1) [TopologicalSpace R] (A : Type u_2) [Add A] [SMul R A]
      [τA : TopologicalSpace A] : PropA class asserting that the topology on a module over a topological ring `R` is
    the module topology. See `moduleTopology` for more discussion of the module topology.  FType u_2 VType u_3]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  VType u_3]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  VType u_3]
      [SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  FType u_2]
      (ρV ≃L[F] V : VType u_3 ≃L[ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`. FType u_2]ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`.  VType u_3) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          ρV ≃L[F] V.toContinuousAddEquivContinuousLinearEquiv.toContinuousAddEquiv.{u_1, u_4, u_8} {R₁ : Type u_1} [Semiring R₁] {M₁ : Type u_4}
      [TopologicalSpace M₁] [AddCommMonoid M₁] [Module R₁ M₁] {M : Type u_8} [TopologicalSpace M] [AddCommMonoid M]
      [Module R₁ M] (e : M₁ ≃L[R₁] M) : M₁ ≃ₜ+ MA continuous linear equivalence seen as a `ContinuousAddEquiv`.  =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
          (LinearEquiv.detLinearEquiv.det.{u_1, u_2} {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] : (M ≃ₗ[R] M) →* RˣOn a `LinearEquiv`, the domain of `LinearMap.det` can be promoted to `Rˣ`.  ρV ≃L[F] V.toLinearEquivContinuousLinearEquiv.toLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S]
      {σ : R →+* S} {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] {M : Type u_3} [TopologicalSpace M]
      [AddCommMonoid M] {M₂ : Type u_4} [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂]
      (self : M ≃SL[σ] M₂) : M ≃ₛₗ[σ] M₂)
    Haar measure scaling for invertible linear maps on a finite-dimensional vector space
    over a field F assuming `[SecondCountableTopology F]`. 
  • theorem MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det_of_existsListTransvecEtc.{u_2,
        u_3}MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det_of_existsListTransvecEtc.{u_2, u_3} {F : Type u_2}
      [MeasurableSpace F] [TopologicalSpace F] [BorelSpace F] [LocallyCompactSpace F] [CommRing F] [IsTopologicalRing F]
      {V : Type u_3} [AddCommGroup V] [TopologicalSpace V] [MeasurableSpace V] [BorelSpace V] [Module F V]
      [IsModuleTopology F V] [IsTopologicalAddGroup V] [LocallyCompactSpace V] [SecondCountableTopology F] (ρ : V ≃L[F] V)
      (n : ℕ) (b : Module.Basis (Fin n) F V)
      (hρ : Matrix.Pivot.ExistsListTransvecMulDiagonalMulListTransvec ((LinearMap.toMatrix b b) ↑ρ.toLinearEquiv)) :
      MeasureTheory.addEquivAddHaarChar ρ.toContinuousAddEquiv =
        MeasureTheory.ringHaarChar (LinearEquiv.det ρ.toLinearEquiv)Haar measure scaling for invertible linear maps on a finite-dimensional vector space
    over a field F assuming `[SecondCountableTopology F]`. 
      {FType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  FType u_2] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  FType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  FType u_2]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  FType u_2] [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  FType u_2] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  FType u_2]
      {VType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.  VType u_3] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  VType u_3]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  VType u_3] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  VType u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring.  FType u_2 VType u_3] [IsModuleTopologyIsModuleTopology.{u_1, u_2} (R : Type u_1) [TopologicalSpace R] (A : Type u_2) [Add A] [SMul R A]
      [τA : TopologicalSpace A] : PropA class asserting that the topology on a module over a topological ring `R` is
    the module topology. See `moduleTopology` for more discussion of the module topology.  FType u_2 VType u_3]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  VType u_3] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  VType u_3]
      [SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  FType u_2] (ρV ≃L[F] V : VType u_3 ≃L[ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`. FType u_2]ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`.  VType u_3) (n : Nat : TypeThe natural numbers, starting at zero.
    
    This type is special-cased by both the kernel and the compiler, and overridden with an efficient
    implementation. Both use a fast arbitrary-precision arithmetic library (usually
    [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.
    )
      (bModule.Basis (Fin n) F V : Module.BasisModule.Basis.{u_1, u_3, u_6} (ι : Type u_1) (R : Type u_3) (M : Type u_6) [Semiring R] [AddCommMonoid M] [Module R M] :
      Type (max (max u_1 u_3) u_6)A `Basis ι R M` for a module `M` is the type of `ι`-indexed `R`-bases of `M`.
    
    The basis vectors are available as `DFunLike.coe (b : Basis ι R M) : ι → M`.
    To turn a linear independent family of vectors spanning `M` into a basis, use `Basis.mk`.
    They are internally represented as linear equivs `M ≃ₗ[R] (ι →₀ R)`,
    available as `Basis.repr`.
     (FinFin (n : ℕ) : TypeNatural numbers less than some upper bound.
    
    In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the
    canonical type with `n` elements.
     n) FType u_2 VType u_3)
      (Matrix.Pivot.ExistsListTransvecMulDiagonalMulListTransvec ((LinearMap.toMatrix b b) ↑ρ.toLinearEquiv) :
        Matrix.Pivot.ExistsListTransvecMulDiagonalMulListTransvecMatrix.Pivot.ExistsListTransvecMulDiagonalMulListTransvec.{u_1, u_2} {n : Type u_1} {R : Type u_2} [CommRing R]
      [Fintype n] [DecidableEq n] (M : Matrix n n R) : PropThe claim that a matrix is a product of transvections, a diagonal matrix, and more
    transvections. Always true if the base ring is a field. 
          ((LinearMap.toMatrixLinearMap.toMatrix.{u_1, u_3, u_4, u_5, u_6} {R : Type u_1} [CommSemiring R] {m : Type u_3} {n : Type u_4} [Fintype n]
      [Finite m] [DecidableEq n] {M₁ : Type u_5} {M₂ : Type u_6} [AddCommMonoid M₁] [AddCommMonoid M₂] [Module R M₁]
      [Module R M₂] (v₁ : Module.Basis n R M₁) (v₂ : Module.Basis m R M₂) : (M₁ →ₗ[R] M₂) ≃ₗ[R] Matrix m n RGiven bases of two modules `M₁` and `M₂` over a commutative ring `R`, we get a linear
    equivalence between linear maps `M₁ →ₗ M₂` and matrices over `R` indexed by the bases.  bModule.Basis (Fin n) F V bModule.Basis (Fin n) F V) ρV ≃L[F] V.toLinearEquivContinuousLinearEquiv.toLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S]
      {σ : R →+* S} {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] {M : Type u_3} [TopologicalSpace M]
      [AddCommMonoid M] {M₂ : Type u_4} [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂]
      (self : M ≃SL[σ] M₂) : M ≃ₛₗ[σ] M₂)) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  ρV ≃L[F] V.toContinuousAddEquivContinuousLinearEquiv.toContinuousAddEquiv.{u_1, u_4, u_8} {R₁ : Type u_1} [Semiring R₁] {M₁ : Type u_4}
      [TopologicalSpace M₁] [AddCommMonoid M₁] [Module R₁ M₁] {M : Type u_8} [TopologicalSpace M] [AddCommMonoid M]
      [Module R₁ M] (e : M₁ ≃L[R₁] M) : M₁ ≃ₜ+ MA continuous linear equivalence seen as a `ContinuousAddEquiv`.  =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     (LinearEquiv.detLinearEquiv.det.{u_1, u_2} {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] : (M ≃ₗ[R] M) →* RˣOn a `LinearEquiv`, the domain of `LinearMap.det` can be promoted to `Rˣ`.  ρV ≃L[F] V.toLinearEquivContinuousLinearEquiv.toLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S]
      {σ : R →+* S} {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] {M : Type u_3} [TopologicalSpace M]
      [AddCommMonoid M] {M₂ : Type u_4} [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂]
      (self : M ≃SL[σ] M₂) : M ≃ₛₗ[σ] M₂)
    theorem MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det_of_existsListTransvecEtc.{u_2,
        u_3}MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det_of_existsListTransvecEtc.{u_2, u_3} {F : Type u_2}
      [MeasurableSpace F] [TopologicalSpace F] [BorelSpace F] [LocallyCompactSpace F] [CommRing F] [IsTopologicalRing F]
      {V : Type u_3} [AddCommGroup V] [TopologicalSpace V] [MeasurableSpace V] [BorelSpace V] [Module F V]
      [IsModuleTopology F V] [IsTopologicalAddGroup V] [LocallyCompactSpace V] [SecondCountableTopology F] (ρ : V ≃L[F] V)
      (n : ℕ) (b : Module.Basis (Fin n) F V)
      (hρ : Matrix.Pivot.ExistsListTransvecMulDiagonalMulListTransvec ((LinearMap.toMatrix b b) ↑ρ.toLinearEquiv)) :
      MeasureTheory.addEquivAddHaarChar ρ.toContinuousAddEquiv =
        MeasureTheory.ringHaarChar (LinearEquiv.det ρ.toLinearEquiv)Haar measure scaling for invertible linear maps on a finite-dimensional vector space
    over a field F assuming `[SecondCountableTopology F]`. 
      {FType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  FType u_2]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  FType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  FType u_2]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  FType u_2] [CommRingCommRing.{u} (α : Type u) : Type uA commutative ring is a ring with commutative multiplication.  FType u_2]
      [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  FType u_2] {VType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.  VType u_3] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  VType u_3]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  VType u_3] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  VType u_3]
      [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring.  FType u_2 VType u_3] [IsModuleTopologyIsModuleTopology.{u_1, u_2} (R : Type u_1) [TopologicalSpace R] (A : Type u_2) [Add A] [SMul R A]
      [τA : TopologicalSpace A] : PropA class asserting that the topology on a module over a topological ring `R` is
    the module topology. See `moduleTopology` for more discussion of the module topology.  FType u_2 VType u_3]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  VType u_3]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  VType u_3]
      [SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  FType u_2]
      (ρV ≃L[F] V : VType u_3 ≃L[ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`. FType u_2]ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`.  VType u_3) (n : Nat : TypeThe natural numbers, starting at zero.
    
    This type is special-cased by both the kernel and the compiler, and overridden with an efficient
    implementation. Both use a fast arbitrary-precision arithmetic library (usually
    [GMP](https://gmplib.org/)); at runtime, `Nat` values that are sufficiently small are unboxed.
    )
      (bModule.Basis (Fin n) F V : Module.BasisModule.Basis.{u_1, u_3, u_6} (ι : Type u_1) (R : Type u_3) (M : Type u_6) [Semiring R] [AddCommMonoid M] [Module R M] :
      Type (max (max u_1 u_3) u_6)A `Basis ι R M` for a module `M` is the type of `ι`-indexed `R`-bases of `M`.
    
    The basis vectors are available as `DFunLike.coe (b : Basis ι R M) : ι → M`.
    To turn a linear independent family of vectors spanning `M` into a basis, use `Basis.mk`.
    They are internally represented as linear equivs `M ≃ₗ[R] (ι →₀ R)`,
    available as `Basis.repr`.
     (FinFin (n : ℕ) : TypeNatural numbers less than some upper bound.
    
    In particular, a `Fin n` is a natural number `i` with the constraint that `i < n`. It is the
    canonical type with `n` elements.
     n) FType u_2 VType u_3)
      (Matrix.Pivot.ExistsListTransvecMulDiagonalMulListTransvec ((LinearMap.toMatrix b b) ↑ρ.toLinearEquiv) :
        Matrix.Pivot.ExistsListTransvecMulDiagonalMulListTransvecMatrix.Pivot.ExistsListTransvecMulDiagonalMulListTransvec.{u_1, u_2} {n : Type u_1} {R : Type u_2} [CommRing R]
      [Fintype n] [DecidableEq n] (M : Matrix n n R) : PropThe claim that a matrix is a product of transvections, a diagonal matrix, and more
    transvections. Always true if the base ring is a field. 
          ((LinearMap.toMatrixLinearMap.toMatrix.{u_1, u_3, u_4, u_5, u_6} {R : Type u_1} [CommSemiring R] {m : Type u_3} {n : Type u_4} [Fintype n]
      [Finite m] [DecidableEq n] {M₁ : Type u_5} {M₂ : Type u_6} [AddCommMonoid M₁] [AddCommMonoid M₂] [Module R M₁]
      [Module R M₂] (v₁ : Module.Basis n R M₁) (v₂ : Module.Basis m R M₂) : (M₁ →ₗ[R] M₂) ≃ₗ[R] Matrix m n RGiven bases of two modules `M₁` and `M₂` over a commutative ring `R`, we get a linear
    equivalence between linear maps `M₁ →ₗ M₂` and matrices over `R` indexed by the bases.  bModule.Basis (Fin n) F V bModule.Basis (Fin n) F V)
            ρV ≃L[F] V.toLinearEquivContinuousLinearEquiv.toLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S]
      {σ : R →+* S} {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] {M : Type u_3} [TopologicalSpace M]
      [AddCommMonoid M] {M₂ : Type u_4} [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂]
      (self : M ≃SL[σ] M₂) : M ≃ₛₗ[σ] M₂)) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          ρV ≃L[F] V.toContinuousAddEquivContinuousLinearEquiv.toContinuousAddEquiv.{u_1, u_4, u_8} {R₁ : Type u_1} [Semiring R₁] {M₁ : Type u_4}
      [TopologicalSpace M₁] [AddCommMonoid M₁] [Module R₁ M₁] {M : Type u_8} [TopologicalSpace M] [AddCommMonoid M]
      [Module R₁ M] (e : M₁ ≃L[R₁] M) : M₁ ≃ₜ+ MA continuous linear equivalence seen as a `ContinuousAddEquiv`.  =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
          (LinearEquiv.detLinearEquiv.det.{u_1, u_2} {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] : (M ≃ₗ[R] M) →* RˣOn a `LinearEquiv`, the domain of `LinearMap.det` can be promoted to `Rˣ`.  ρV ≃L[F] V.toLinearEquivContinuousLinearEquiv.toLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S]
      {σ : R →+* S} {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] {M : Type u_3} [TopologicalSpace M]
      [AddCommMonoid M] {M₂ : Type u_4} [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂]
      (self : M ≃SL[σ] M₂) : M ≃ₛₗ[σ] M₂)
    Haar measure scaling for invertible linear maps on a finite-dimensional vector space
    over a field F assuming `[SecondCountableTopology F]`. 
Proof

Uses Definition 10.1. The proof is a generalization of Real.map_matrix_volume_pi_eq_smul_volume_pi, which crucially uses the induction principle Matrix.diagonal_transvection_induction_of_det_ne_zero. One checks it explicitly for diagonal matrices and for matrices which are the identity except that one off-diagonal entry is non-zero.

Note: we assume that F is second countable, but it shouldn't be necessary.

Now say F is a locally compact topological field, and that R is a possibly noncommutative F-algebra. Recall that this means that F lies in the center of R, unless R = 0. Assume that R is finite-dimensional as an F-vector space. Then if we give R the F-module topology, which is just the product topology if we pick a basis, it is known that R becomes a topological ring. Now say u ∈ R^\times, and recall that \ell_u : R → R is left multiplication by u. Then \ell_u is easily checked to be an F-linear homeomorphism.

Corollary10.18
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

If u\in R^\times then \delta_R(u)=\delta_F(\det(\ell_u)).

Lean code for Corollary10.181 theorem
  • theorem MeasureTheory.algebra_ringHaarChar_eq_ringHaarChar_det.{u_1, u_2}MeasureTheory.algebra_ringHaarChar_eq_ringHaarChar_det.{u_1, u_2} (F : Type u_1) [Field F] [MeasurableSpace F]
      [TopologicalSpace F] [BorelSpace F] [IsTopologicalRing F] [LocallyCompactSpace F] {A : Type u_2} [Ring A]
      [TopologicalSpace A] [Algebra F A] [FiniteDimensional F A] [IsModuleTopology F A] [IsTopologicalRing A]
      [LocallyCompactSpace A] [MeasurableSpace A] [BorelSpace A] [SecondCountableTopology F] (u : Aˣ) :
      MeasureTheory.ringHaarChar u = MeasureTheory.ringHaarChar (LinearEquiv.det (LinearEquiv.mulLeft F u))
      (FType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  FType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  FType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  FType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  FType u_1] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  FType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  FType u_1]
      {AType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  AType u_2] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  AType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     FType u_1 AType u_2]
      [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  FType u_1 AType u_2] [IsModuleTopologyIsModuleTopology.{u_1, u_2} (R : Type u_1) [TopologicalSpace R] (A : Type u_2) [Add A] [SMul R A]
      [τA : TopologicalSpace A] : PropA class asserting that the topology on a module over a topological ring `R` is
    the module topology. See `moduleTopology` for more discussion of the module topology.  FType u_1 AType u_2] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  AType u_2]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  AType u_2] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  AType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  AType u_2]
      [SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  FType u_1] (u : AType u_2ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
          (LinearEquiv.detLinearEquiv.det.{u_1, u_2} {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] : (M ≃ₗ[R] M) →* RˣOn a `LinearEquiv`, the domain of `LinearMap.det` can be promoted to `Rˣ`.  (LinearEquiv.mulLeftLinearEquiv.mulLeft.{u_5, u_6} (F : Type u_5) [CommSemiring F] {A : Type u_6} [Ring A] [Algebra F A] (u : Aˣ) :
      A ≃ₗ[F] AThe F-linear equivalence on an F-algebra induced by left multiplication
    by a unit
     FType u_1 u))
    theorem MeasureTheory.algebra_ringHaarChar_eq_ringHaarChar_det.{u_1,
        u_2}MeasureTheory.algebra_ringHaarChar_eq_ringHaarChar_det.{u_1, u_2} (F : Type u_1) [Field F] [MeasurableSpace F]
      [TopologicalSpace F] [BorelSpace F] [IsTopologicalRing F] [LocallyCompactSpace F] {A : Type u_2} [Ring A]
      [TopologicalSpace A] [Algebra F A] [FiniteDimensional F A] [IsModuleTopology F A] [IsTopologicalRing A]
      [LocallyCompactSpace A] [MeasurableSpace A] [BorelSpace A] [SecondCountableTopology F] (u : Aˣ) :
      MeasureTheory.ringHaarChar u = MeasureTheory.ringHaarChar (LinearEquiv.det (LinearEquiv.mulLeft F u))
      (FType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  FType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  FType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  FType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  FType u_1] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  FType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  FType u_1] {AType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  AType u_2] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  AType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     FType u_1 AType u_2] [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  FType u_1 AType u_2]
      [IsModuleTopologyIsModuleTopology.{u_1, u_2} (R : Type u_1) [TopologicalSpace R] (A : Type u_2) [Add A] [SMul R A]
      [τA : TopologicalSpace A] : PropA class asserting that the topology on a module over a topological ring `R` is
    the module topology. See `moduleTopology` for more discussion of the module topology.  FType u_1 AType u_2]
      [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  AType u_2]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  AType u_2]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  AType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  AType u_2]
      [SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  FType u_1] (u : AType u_2ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
          (LinearEquiv.detLinearEquiv.det.{u_1, u_2} {R : Type u_1} [CommRing R] {M : Type u_2} [AddCommGroup M] [Module R M] : (M ≃ₗ[R] M) →* RˣOn a `LinearEquiv`, the domain of `LinearMap.det` can be promoted to `Rˣ`. 
            (LinearEquiv.mulLeftLinearEquiv.mulLeft.{u_5, u_6} (F : Type u_5) [CommSemiring F] {A : Type u_6} [Ring A] [Algebra F A] (u : Aˣ) :
      A ≃ₗ[F] AThe F-linear equivalence on an F-algebra induced by left multiplication
    by a unit
     FType u_1 u))
Proof

Uses Lemma 10.17. Follows immediately from the preceding lemma.

10.5. Left and right multiplication🔗

If R is a locally compact topological ring, and if multiplication on R is not commutative, then left and right multiplication by an element of R can scale Haar measure in different ways. For example if R is the upper-triangular 2 \times 2 matrices with real entries, then left multiplication by \begin{pmatrix}a&0\\0&1\end{pmatrix} sends \begin{pmatrix}x&y\\0&z\end{pmatrix} to \begin{pmatrix}ax&ay\\0&z\end{pmatrix} and thus scales R's additive Haar measure by |a|^2, but right multiplication by \begin{pmatrix}a&0\\0&1\end{pmatrix} sends \begin{pmatrix}x&y\\0&z\end{pmatrix} to \begin{pmatrix}ax&y\\0&z\end{pmatrix} and thus scales R's additive Haar measure by a factor of |a|.

What's going on here is that if we regard left and right multiplication as \R-linear maps from R to R, then their associated matrices with respect to the obvious basis are diag(a,a,1) and diag(a,1,1), which have different determinants.

However, if k is now any field and if B is a finite-dimensional central simple algebra over k, for example a quaternion algebra, the case we'll care about later, and if u\in B^\times then x\mapsto ux and x\mapsto xu are both k-linear endomorphisms of B, and I claim that they have the same determinant.

Lemma10.19
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

Say B is a finite-dimensional central simple algebra over a field k, and u ∈ B^\times. Let \ell_u : B → B be the k-linear map sending x to ux, and let r_u : B → B be the k-linear map sending x to xu. Then det(\ell_u)=det(r_u).

Lean code for Lemma10.191 theorem
  • complete
    theorem IsSimpleRing.mulLeft_det_eq_mulRight_det.{u_1, u_2}IsSimpleRing.mulLeft_det_eq_mulRight_det.{u_1, u_2} (k : Type u_1) [Field k] {D : Type u_2} [Ring D] [Algebra k D]
      [Algebra.IsCentral k D] [IsSimpleRing D] [FiniteDimensional k D] (d : D) :
      LinearMap.det (LinearMap.mulLeft k d) = LinearMap.det (LinearMap.mulRight k d) (kType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. )
      [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  kType u_1] {DType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  DType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     kType u_1 DType u_2]
      [Algebra.IsCentralAlgebra.IsCentral.{u, v} (K : Type u) [CommSemiring K] (D : Type v) [Semiring D] [Algebra K D] : PropFor a commutative ring `K` and a `K`-algebra `D`, we say that `D` is a central algebra over `K` if
    the center of `D` is the image of `K` in `D`.
     kType u_1 DType u_2] [IsSimpleRingIsSimpleRing.{u_1} (R : Type u_1) [NonUnitalNonAssocRing R] : PropA ring `R` is **simple** if it has only two two-sided ideals, namely `⊥` and `⊤`.
     DType u_2] [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  kType u_1 DType u_2]
      (dD : DType u_2) :
      LinearMap.detLinearMap.det.{u_7, u_8} {M : Type u_7} [AddCommGroup M] {A : Type u_8} [CommRing A] [Module A M] : (M →ₗ[A] M) →* AThe determinant of an endomorphism independent of basis.
    
    If there is no finite basis on `M`, the result is `1` instead.
     (LinearMap.mulLeftLinearMap.mulLeft.{u_14, u_15} (R : Type u_14) {A : Type u_15} [Semiring R] [NonUnitalNonAssocSemiring A] [Module R A]
      [SMulCommClass R A A] (a : A) : A →ₗ[R] AThe multiplication on the left in an algebra is a linear map.
    
    Note that this only assumes `SMulCommClass R A A`, so that it also works for `R := Aᵐᵒᵖ`.
    
    When `A` is unital and associative, this is the same as `DistribSMul.toLinearMap R A a`  kType u_1 dD) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        LinearMap.detLinearMap.det.{u_7, u_8} {M : Type u_7} [AddCommGroup M] {A : Type u_8} [CommRing A] [Module A M] : (M →ₗ[A] M) →* AThe determinant of an endomorphism independent of basis.
    
    If there is no finite basis on `M`, the result is `1` instead.
     (LinearMap.mulRightLinearMap.mulRight.{u_14, u_15} (R : Type u_14) {A : Type u_15} [Semiring R] [NonUnitalNonAssocSemiring A] [Module R A]
      [IsScalarTower R A A] (b : A) : A →ₗ[R] AThe multiplication on the right in an algebra is a linear map.
    
    Note that this only assumes `IsScalarTower R A A`, so that it also works for `R := A`.
    
    When `A` is unital and associative, this is the same as
    `DistribSMul.toLinearMap R A (MulOpposite.op b)`.  kType u_1 dD)
    theorem IsSimpleRing.mulLeft_det_eq_mulRight_det.{u_1,
        u_2}IsSimpleRing.mulLeft_det_eq_mulRight_det.{u_1, u_2} (k : Type u_1) [Field k] {D : Type u_2} [Ring D] [Algebra k D]
      [Algebra.IsCentral k D] [IsSimpleRing D] [FiniteDimensional k D] (d : D) :
      LinearMap.det (LinearMap.mulLeft k d) = LinearMap.det (LinearMap.mulRight k d)
      (kType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  kType u_1] {DType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  DType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     kType u_1 DType u_2]
      [Algebra.IsCentralAlgebra.IsCentral.{u, v} (K : Type u) [CommSemiring K] (D : Type v) [Semiring D] [Algebra K D] : PropFor a commutative ring `K` and a `K`-algebra `D`, we say that `D` is a central algebra over `K` if
    the center of `D` is the image of `K` in `D`.
     kType u_1 DType u_2] [IsSimpleRingIsSimpleRing.{u_1} (R : Type u_1) [NonUnitalNonAssocRing R] : PropA ring `R` is **simple** if it has only two two-sided ideals, namely `⊥` and `⊤`.
     DType u_2]
      [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  kType u_1 DType u_2] (dD : DType u_2) :
      LinearMap.detLinearMap.det.{u_7, u_8} {M : Type u_7} [AddCommGroup M] {A : Type u_8} [CommRing A] [Module A M] : (M →ₗ[A] M) →* AThe determinant of an endomorphism independent of basis.
    
    If there is no finite basis on `M`, the result is `1` instead.
     (LinearMap.mulLeftLinearMap.mulLeft.{u_14, u_15} (R : Type u_14) {A : Type u_15} [Semiring R] [NonUnitalNonAssocSemiring A] [Module R A]
      [SMulCommClass R A A] (a : A) : A →ₗ[R] AThe multiplication on the left in an algebra is a linear map.
    
    Note that this only assumes `SMulCommClass R A A`, so that it also works for `R := Aᵐᵒᵖ`.
    
    When `A` is unital and associative, this is the same as `DistribSMul.toLinearMap R A a`  kType u_1 dD) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        LinearMap.detLinearMap.det.{u_7, u_8} {M : Type u_7} [AddCommGroup M] {A : Type u_8} [CommRing A] [Module A M] : (M →ₗ[A] M) →* AThe determinant of an endomorphism independent of basis.
    
    If there is no finite basis on `M`, the result is `1` instead.
     (LinearMap.mulRightLinearMap.mulRight.{u_14, u_15} (R : Type u_14) {A : Type u_15} [Semiring R] [NonUnitalNonAssocSemiring A] [Module R A]
      [IsScalarTower R A A] (b : A) : A →ₗ[R] AThe multiplication on the right in an algebra is a linear map.
    
    Note that this only assumes `IsScalarTower R A A`, so that it also works for `R := A`.
    
    When `A` is unital and associative, this is the same as
    `DistribSMul.toLinearMap R A (MulOpposite.op b)`.  kType u_1 dD)
Proof

Determinants are unchanged by base extension, so without loss of generality k is algebraically closed. Then B is a matrix algebra, say M_n(k). Now u can be thought of as a matrix with intrinsic determinant d, and B as a left B-module becomes a direct sum of n copies of the standard n-dimensional representation V of B. Thus det(\ell_u)=d^n. Similarly det(r_u)=d^n, so they are equal.

Corollary10.20
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

If B is a central simple algebra over a locally compact field F, and if u\in B^\times, then d_B(r_u)=\delta_B(u), recalling that the latter is defined to mean d_B(\ell_u).

Lean code for Corollary10.201 theorem
  • theorem IsSimpleRing.ringHaarChar_eq_addEquivAddHaarChar_mulRight.{u_1, u_2}IsSimpleRing.ringHaarChar_eq_addEquivAddHaarChar_mulRight.{u_1, u_2} {F : Type u_1} [Field F] [MeasurableSpace F]
      [TopologicalSpace F] [BorelSpace F] [IsTopologicalRing F] [LocallyCompactSpace F] {D : Type u_2} [Ring D]
      [TopologicalSpace D] [Algebra F D] [FiniteDimensional F D] [IsSimpleRing D] [IsModuleTopology F D]
      [Algebra.IsCentral F D] [IsTopologicalRing D] [LocallyCompactSpace D] [MeasurableSpace D] [BorelSpace D]
      [SecondCountableTopology F] (u : Dˣ) :
      MeasureTheory.ringHaarChar u = MeasureTheory.addEquivAddHaarChar (ContinuousAddEquiv.mulRight u)
      {FType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  FType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  FType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  FType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  FType u_1] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  FType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  FType u_1]
      {DType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  DType u_2] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  DType u_2] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     FType u_1 DType u_2]
      [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  FType u_1 DType u_2] [IsSimpleRingIsSimpleRing.{u_1} (R : Type u_1) [NonUnitalNonAssocRing R] : PropA ring `R` is **simple** if it has only two two-sided ideals, namely `⊥` and `⊤`.
     DType u_2] [IsModuleTopologyIsModuleTopology.{u_1, u_2} (R : Type u_1) [TopologicalSpace R] (A : Type u_2) [Add A] [SMul R A]
      [τA : TopologicalSpace A] : PropA class asserting that the topology on a module over a topological ring `R` is
    the module topology. See `moduleTopology` for more discussion of the module topology.  FType u_1 DType u_2]
      [Algebra.IsCentralAlgebra.IsCentral.{u, v} (K : Type u) [CommSemiring K] (D : Type v) [Semiring D] [Algebra K D] : PropFor a commutative ring `K` and a `K`-algebra `D`, we say that `D` is a central algebra over `K` if
    the center of `D` is the image of `K` in `D`.
     FType u_1 DType u_2] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  DType u_2] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  DType u_2]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  DType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  DType u_2] [SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  FType u_1]
      (u : DType u_2ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  (ContinuousAddEquiv.mulRightContinuousAddEquiv.mulRight.{u_1} {R : Type u_1} [TopologicalSpace R] [Semiring R] [IsTopologicalSemiring R] (r : Rˣ) :
      R ≃ₜ+ RThe additive homeomorphism from a topological ring to itself,
    induced by right multiplication by a unit.  u)
    theorem IsSimpleRing.ringHaarChar_eq_addEquivAddHaarChar_mulRight.{u_1,
        u_2}IsSimpleRing.ringHaarChar_eq_addEquivAddHaarChar_mulRight.{u_1, u_2} {F : Type u_1} [Field F] [MeasurableSpace F]
      [TopologicalSpace F] [BorelSpace F] [IsTopologicalRing F] [LocallyCompactSpace F] {D : Type u_2} [Ring D]
      [TopologicalSpace D] [Algebra F D] [FiniteDimensional F D] [IsSimpleRing D] [IsModuleTopology F D]
      [Algebra.IsCentral F D] [IsTopologicalRing D] [LocallyCompactSpace D] [MeasurableSpace D] [BorelSpace D]
      [SecondCountableTopology F] (u : Dˣ) :
      MeasureTheory.ringHaarChar u = MeasureTheory.addEquivAddHaarChar (ContinuousAddEquiv.mulRight u)
      {FType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  FType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  FType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  FType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  FType u_1] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  FType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  FType u_1] {DType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  DType u_2] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  DType u_2]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     FType u_1 DType u_2] [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  FType u_1 DType u_2]
      [IsSimpleRingIsSimpleRing.{u_1} (R : Type u_1) [NonUnitalNonAssocRing R] : PropA ring `R` is **simple** if it has only two two-sided ideals, namely `⊥` and `⊤`.
     DType u_2] [IsModuleTopologyIsModuleTopology.{u_1, u_2} (R : Type u_1) [TopologicalSpace R] (A : Type u_2) [Add A] [SMul R A]
      [τA : TopologicalSpace A] : PropA class asserting that the topology on a module over a topological ring `R` is
    the module topology. See `moduleTopology` for more discussion of the module topology.  FType u_1 DType u_2]
      [Algebra.IsCentralAlgebra.IsCentral.{u, v} (K : Type u) [CommSemiring K] (D : Type v) [Semiring D] [Algebra K D] : PropFor a commutative ring `K` and a `K`-algebra `D`, we say that `D` is a central algebra over `K` if
    the center of `D` is the image of `K` in `D`.
     FType u_1 DType u_2]
      [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  DType u_2]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  DType u_2]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  DType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  DType u_2]
      [SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  FType u_1] (u : DType u_2ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (ContinuousAddEquiv.mulRightContinuousAddEquiv.mulRight.{u_1} {R : Type u_1} [TopologicalSpace R] [Semiring R] [IsTopologicalSemiring R] (r : Rˣ) :
      R ≃ₜ+ RThe additive homeomorphism from a topological ring to itself,
    induced by right multiplication by a unit.  u)
Proof

Uses Lemma 10.19 and Lemma 10.17. If \ell_u and r_u denote left and right multiplication by u on B, then we have seen in lemma MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det that d_B(r_u)=\delta_F(\det(r_u)). Lemma IsSimpleRing.mulLeft_det_eq_mulRight_det tells us that this is \delta_F(\det(\ell_u)), and this is \delta_B(u) again by corollary MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det.

10.6. Finite products🔗

Here are two facts which we will need about products.

Lemma10.21
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀N

If (A,+) and (B,+) are locally compact topological abelian groups, and if \phi:A\to A and \psi:B\to B are additive homeomorphisms, then \phi\times\psi:A\times B\to A\times B is an additive homeomorphism, this is obvious, and d_{A\times B}(\phi\times\psi)=d_A(\phi)d_B(\psi).

Lean code for Lemma10.211 theorem
  • complete
    theorem MeasureTheory.addEquivAddHaarChar_prodCongr.{u_1, u_2}MeasureTheory.addEquivAddHaarChar_prodCongr.{u_1, u_2} {G : Type u_1} [AddGroup G] [TopologicalSpace G]
      [IsTopologicalAddGroup G] [LocallyCompactSpace G] {H : Type u_2} [AddGroup H] [TopologicalSpace H]
      [IsTopologicalAddGroup H] [LocallyCompactSpace H] [MeasurableSpace G] [BorelSpace G] [MeasurableSpace H]
      [BorelSpace H] [SecondCountableTopologyEither G H] (φ : G ≃ₜ+ G) (ψ : H ≃ₜ+ H) :
      MeasureTheory.addEquivAddHaarChar (φ.sumCongr ψ) =
        MeasureTheory.addEquivAddHaarChar φ * MeasureTheory.addEquivAddHaarChar ψ {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1] {HType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     HType u_2]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  HType u_2] [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  HType u_2] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  HType u_2]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  HType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  HType u_2]
      [SecondCountableTopologyEitherSecondCountableTopologyEither.{u_6, u_7} (α : Type u_6) (β : Type u_7) [TopologicalSpace α] [TopologicalSpace β] : PropThe typeclass `SecondCountableTopologyEither α β` registers the fact that at least one of
    the two spaces has second countable topology. This is the right assumption to ensure that continuous
    maps from `α` to `β` are strongly measurable.  GType u_1 HType u_2] (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) (ψH ≃ₜ+ H : HType u_2 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  HType u_2) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  (φG ≃ₜ+ G.sumCongrContinuousAddEquiv.sumCongr.{u_1, u_2, u_3, u_4} {A : Type u_1} {B : Type u_2} {C : Type u_3} {D : Type u_4}
      [AddGroup A] [AddGroup B] [AddGroup C] [AddGroup D] [TopologicalSpace A] [TopologicalSpace B] [TopologicalSpace C]
      [TopologicalSpace D] (φ : A ≃ₜ+ B) (ψ : C ≃ₜ+ D) : A × C ≃ₜ+ B × DThe product of two addition-preserving homeomorphisms is
    an addition-preserving homeomorphism.  ψH ≃ₜ+ H) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  ψH ≃ₜ+ H
    theorem MeasureTheory.addEquivAddHaarChar_prodCongr.{u_1,
        u_2}MeasureTheory.addEquivAddHaarChar_prodCongr.{u_1, u_2} {G : Type u_1} [AddGroup G] [TopologicalSpace G]
      [IsTopologicalAddGroup G] [LocallyCompactSpace G] {H : Type u_2} [AddGroup H] [TopologicalSpace H]
      [IsTopologicalAddGroup H] [LocallyCompactSpace H] [MeasurableSpace G] [BorelSpace G] [MeasurableSpace H]
      [BorelSpace H] [SecondCountableTopologyEither G H] (φ : G ≃ₜ+ G) (ψ : H ≃ₜ+ H) :
      MeasureTheory.addEquivAddHaarChar (φ.sumCongr ψ) =
        MeasureTheory.addEquivAddHaarChar φ * MeasureTheory.addEquivAddHaarChar ψ
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1] {HType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     HType u_2] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  HType u_2]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  HType u_2]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  HType u_2]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  HType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  HType u_2]
      [SecondCountableTopologyEitherSecondCountableTopologyEither.{u_6, u_7} (α : Type u_6) (β : Type u_7) [TopologicalSpace α] [TopologicalSpace β] : PropThe typeclass `SecondCountableTopologyEither α β` registers the fact that at least one of
    the two spaces has second countable topology. This is the right assumption to ensure that continuous
    maps from `α` to `β` are strongly measurable.  GType u_1 HType u_2]
      (φG ≃ₜ+ G : GType u_1 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) (ψH ≃ₜ+ H : HType u_2 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  HType u_2) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (φG ≃ₜ+ G.sumCongrContinuousAddEquiv.sumCongr.{u_1, u_2, u_3, u_4} {A : Type u_1} {B : Type u_2} {C : Type u_3} {D : Type u_4}
      [AddGroup A] [AddGroup B] [AddGroup C] [AddGroup D] [TopologicalSpace A] [TopologicalSpace B] [TopologicalSpace C]
      [TopologicalSpace D] (φ : A ≃ₜ+ B) (ψ : C ≃ₜ+ D) : A × C ≃ₜ+ B × DThe product of two addition-preserving homeomorphisms is
    an addition-preserving homeomorphism.  ψH ≃ₜ+ H) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  φG ≃ₜ+ G *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  ψH ≃ₜ+ H
Proof

We only need this result in the case where both A and B are second-countable, in which case Prod.borelSpace can be used to show that Haar measure on A × B is the product of Haar measures on A and B, and in this case the result follows easily. Without this assumption, the product of these measures may not even be a Borel measure and one has to be more careful. The proof in this case is explained by Gou"ezel. Here is the idea. Let \rho be a Haar measure on A\times B. Fix sets X\subseteq A and Y\subseteq B which are compact with nonempty interior. We can now pull back \rho to a measure \nu on the Borel sigma-algebra of A defined as \nu(s)=\rho(s\times Y), and this is easily checked to be a Haar measure on A. Then \delta_{A\times B}(a,0)\nu(X)= \delta_{A\times B}(a,0)\rho(X\times Y)=\rho((a,0)(X\times Y))= \rho(aX\times Y)=\nu(aX)=\delta_A(a)\nu(X). So \delta_{A\times B}(a,0)=\delta_A(a). Similarly \delta_{A\times B}(0,b)=\delta_B(b), and because \delta_{A\times B} is a group homomorphism we're home.

Lemma10.22
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀N
Used by 2
Hover a use site to preview it.

Uses Lemma 10.21. If A_i are a finite collection of locally compact topological abelian groups, with \phi_i : A_i → A_i additive homeomorphisms, then d_{\prod_i A_i}(\prod_i\phi_i)=\prod_i d_{A_i}(\phi_i).

Lean code for Lemma10.221 theorem
  • complete
    theorem MeasureTheory.addEquivAddHaarChar_piCongrRight.{u_1, u_2}MeasureTheory.addEquivAddHaarChar_piCongrRight.{u_1, u_2} {ι : Type u_1} {H : ι → Type u_2} [(i : ι) → AddGroup (H i)]
      [(i : ι) → TopologicalSpace (H i)] [∀ (i : ι), IsTopologicalAddGroup (H i)] [∀ (i : ι), LocallyCompactSpace (H i)]
      [(i : ι) → MeasurableSpace (H i)] [∀ (i : ι), BorelSpace (H i)] [∀ (i : ι), SecondCountableTopology (H i)] [Fintype ι]
      (ψ : (i : ι) → H i ≃ₜ+ H i) :
      MeasureTheory.addEquivAddHaarChar (ContinuousAddEquiv.piCongrRight ψ) = ∏ i, MeasureTheory.addEquivAddHaarChar (ψ i) {ιType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      {Hι → Type u_2 : ιType u_1  Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [(iι : ιType u_1)  AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     (Hι → Type u_2 iι)]
      [(iι : ιType u_1)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Hι → Type u_2 iι)]
      [ (iι : ιType u_1), IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  (Hι → Type u_2 iι)]
      [ (iι : ιType u_1), LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  (Hι → Type u_2 iι)]
      [(iι : ιType u_1)  MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  (Hι → Type u_2 iι)] [ (iι : ιType u_1), BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  (Hι → Type u_2 iι)]
      [ (iι : ιType u_1), SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  (Hι → Type u_2 iι)] [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only
    finitely many distinct elements of type `α`. The evidence of this
    is a finset `elems` (a list up to permutation without duplicates),
    together with a proof that everything of type `α` is in the list.  ιType u_1]
      (ψ(i : ι) → H i ≃ₜ+ H i : (iι : ιType u_1)  Hι → Type u_2 iι ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  Hι → Type u_2 iι) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (ContinuousAddEquiv.piCongrRightContinuousAddEquiv.piCongrRight.{u_1, u_2, u_3} {ι : Type u_1} {G : ι → Type u_2} {H : ι → Type u_3}
      [(i : ι) → AddGroup (G i)] [(i : ι) → TopologicalSpace (G i)] [(i : ι) → AddGroup (H i)]
      [(i : ι) → TopologicalSpace (H i)] (ψ : (i : ι) → G i ≃ₜ+ H i) : ((i : ι) → G i) ≃ₜ+ ((i : ι) → H i)An arbitrary product of addition-preserving homeomorphisms
    is an addition-preserving homeomorphism.  ψ(i : ι) → H i ≃ₜ+ H i) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
         iι, MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  (ψ(i : ι) → H i ≃ₜ+ H i iι)
    theorem MeasureTheory.addEquivAddHaarChar_piCongrRight.{u_1,
        u_2}MeasureTheory.addEquivAddHaarChar_piCongrRight.{u_1, u_2} {ι : Type u_1} {H : ι → Type u_2} [(i : ι) → AddGroup (H i)]
      [(i : ι) → TopologicalSpace (H i)] [∀ (i : ι), IsTopologicalAddGroup (H i)] [∀ (i : ι), LocallyCompactSpace (H i)]
      [(i : ι) → MeasurableSpace (H i)] [∀ (i : ι), BorelSpace (H i)] [∀ (i : ι), SecondCountableTopology (H i)] [Fintype ι]
      (ψ : (i : ι) → H i ≃ₜ+ H i) :
      MeasureTheory.addEquivAddHaarChar (ContinuousAddEquiv.piCongrRight ψ) = ∏ i, MeasureTheory.addEquivAddHaarChar (ψ i)
      {ιType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {Hι → Type u_2 : ιType u_1  Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [(iι : ιType u_1)  AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     (Hι → Type u_2 iι)]
      [(iι : ιType u_1)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Hι → Type u_2 iι)]
      [ (iι : ιType u_1), IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  (Hι → Type u_2 iι)]
      [ (iι : ιType u_1), LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  (Hι → Type u_2 iι)]
      [(iι : ιType u_1)  MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  (Hι → Type u_2 iι)]
      [ (iι : ιType u_1), BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  (Hι → Type u_2 iι)]
      [ (iι : ιType u_1),
          SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  (Hι → Type u_2 iι)]
      [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only
    finitely many distinct elements of type `α`. The evidence of this
    is a finset `elems` (a list up to permutation without duplicates),
    together with a proof that everything of type `α` is in the list.  ιType u_1]
      (ψ(i : ι) → H i ≃ₜ+ H i : (iι : ιType u_1)  Hι → Type u_2 iι ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  Hι → Type u_2 iι) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (ContinuousAddEquiv.piCongrRightContinuousAddEquiv.piCongrRight.{u_1, u_2, u_3} {ι : Type u_1} {G : ι → Type u_2} {H : ι → Type u_3}
      [(i : ι) → AddGroup (G i)] [(i : ι) → TopologicalSpace (G i)] [(i : ι) → AddGroup (H i)]
      [(i : ι) → TopologicalSpace (H i)] (ψ : (i : ι) → G i ≃ₜ+ H i) : ((i : ι) → G i) ≃ₜ+ ((i : ι) → H i)An arbitrary product of addition-preserving homeomorphisms
    is an addition-preserving homeomorphism. 
            ψ(i : ι) → H i ≃ₜ+ H i) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
         iι,
          MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
            (ψ(i : ι) → H i ≃ₜ+ H i iι)
Proof

Induction on the size of the finite set, using the previous lemma.

Lemma10.23
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

Uses Lemma 10.21. If R and S are locally compact topological rings, then \delta_{R\times S}(r,s)=\delta_R(r)\times\delta_S(s).

Lean code for Lemma10.231 theorem
  • complete
    theorem MeasureTheory.ringHaarChar_prod.{u_1, u_2}MeasureTheory.ringHaarChar_prod.{u_1, u_2} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] {S : Type u_2} [Ring S] [TopologicalSpace S]
      [IsTopologicalRing S] [LocallyCompactSpace S] [MeasurableSpace S] [BorelSpace S] (u : Rˣ) (v : Sˣ)
      [SecondCountableTopologyEither R S] :
      MeasureTheory.ringHaarChar (MulEquiv.prodUnits.symm (u, v)) =
        MeasureTheory.ringHaarChar u * MeasureTheory.ringHaarChar v {RType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  RType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  RType u_1] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  RType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  RType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  RType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  RType u_1] {SType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  SType u_2]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  SType u_2] [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  SType u_2] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  SType u_2]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  SType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  SType u_2] (u : RType u_1ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) (v : SType u_2ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. )
      [SecondCountableTopologyEitherSecondCountableTopologyEither.{u_6, u_7} (α : Type u_6) (β : Type u_7) [TopologicalSpace α] [TopologicalSpace β] : PropThe typeclass `SecondCountableTopologyEither α β` registers the fact that at least one of
    the two spaces has second countable topology. This is the right assumption to ensure that continuous
    maps from `α` to `β` are strongly measurable.  RType u_1 SType u_2] :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     (MulEquiv.prodUnitsMulEquiv.prodUnits.{u_3, u_4} {M : Type u_3} {N : Type u_4} [Monoid M] [Monoid N] : (M × N)ˣ ≃* Mˣ × NˣThe monoid equivalence between units of a product of two monoids, and the product of the
    units of each monoid. .symmMulEquiv.symm.{u_9, u_10} {M : Type u_9} {N : Type u_10} [Mul M] [Mul N] (h : M ≃* N) : N ≃* MThe inverse of an isomorphism is an isomorphism.  (Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `(a, b)` in identifiers is `mk`.u,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `(a, b)` in identifiers is `mk`. v)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `(a, b)` in identifiers is `mk`.) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`. MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     v
    theorem MeasureTheory.ringHaarChar_prod.{u_1, u_2}MeasureTheory.ringHaarChar_prod.{u_1, u_2} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] {S : Type u_2} [Ring S] [TopologicalSpace S]
      [IsTopologicalRing S] [LocallyCompactSpace S] [MeasurableSpace S] [BorelSpace S] (u : Rˣ) (v : Sˣ)
      [SecondCountableTopologyEither R S] :
      MeasureTheory.ringHaarChar (MulEquiv.prodUnits.symm (u, v)) =
        MeasureTheory.ringHaarChar u * MeasureTheory.ringHaarChar v
      {RType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  RType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  RType u_1]
      [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  RType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  RType u_1]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  RType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  RType u_1]
      {SType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  SType u_2]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  SType u_2]
      [IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  SType u_2]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  SType u_2]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  SType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  SType u_2]
      (u : RType u_1ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) (v : SType u_2ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. )
      [SecondCountableTopologyEitherSecondCountableTopologyEither.{u_6, u_7} (α : Type u_6) (β : Type u_7) [TopologicalSpace α] [TopologicalSpace β] : PropThe typeclass `SecondCountableTopologyEither α β` registers the fact that at least one of
    the two spaces has second countable topology. This is the right assumption to ensure that continuous
    maps from `α` to `β` are strongly measurable.  RType u_1 SType u_2] :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
          (MulEquiv.prodUnitsMulEquiv.prodUnits.{u_3, u_4} {M : Type u_3} {N : Type u_4} [Monoid M] [Monoid N] : (M × N)ˣ ≃* Mˣ × NˣThe monoid equivalence between units of a product of two monoids, and the product of the
    units of each monoid. .symmMulEquiv.symm.{u_9, u_10} {M : Type u_9} {N : Type u_10} [Mul M] [Mul N] (h : M ≃* N) : N ≃* MThe inverse of an isomorphism is an isomorphism.  (Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `(a, b)` in identifiers is `mk`.u,Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `(a, b)` in identifiers is `mk`. v)Prod.mk.{u, v} {α : Type u} {β : Type v} (fst : α) (snd : β) : α × βConstructs a pair. This is usually written `(x, y)` instead of `Prod.mk x y`.
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `(a, b)` in identifiers is `mk`.) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     v
Proof

Follows immediately from lemma Lemma 10.21.

Lemma10.24
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

Uses Lemma 10.22. If R_i are a finite collection of locally compact topological rings, and u_i\in R_i^\times, then \delta_{\prod_i R_i}((u_i)_i)=\prod_i\delta_{R_i}(u_i).

Lean code for Lemma10.241 theorem
  • complete
    theorem MeasureTheory.ringHaarChar_pi.{u_2, u_3}MeasureTheory.ringHaarChar_pi.{u_2, u_3} {ι : Type u_2} {A : ι → Type u_3} [(i : ι) → Ring (A i)]
      [(i : ι) → TopologicalSpace (A i)] [∀ (i : ι), IsTopologicalRing (A i)] [∀ (i : ι), LocallyCompactSpace (A i)]
      [(i : ι) → MeasurableSpace (A i)] [∀ (i : ι), BorelSpace (A i)] [Fintype ι] [∀ (i : ι), SecondCountableTopology (A i)]
      (u : (i : ι) → (A i)ˣ) : MeasureTheory.ringHaarChar (MulEquiv.piUnits.symm u) = ∏ i, MeasureTheory.ringHaarChar (u i) {ιType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      {Aι → Type u_3 : ιType u_2  Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [(iι : ιType u_2)  RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  (Aι → Type u_3 iι)]
      [(iι : ιType u_2)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Aι → Type u_3 iι)]
      [ (iι : ιType u_2), IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  (Aι → Type u_3 iι)]
      [ (iι : ιType u_2), LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  (Aι → Type u_3 iι)]
      [(iι : ιType u_2)  MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  (Aι → Type u_3 iι)] [ (iι : ιType u_2), BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  (Aι → Type u_3 iι)]
      [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only
    finitely many distinct elements of type `α`. The evidence of this
    is a finset `elems` (a list up to permutation without duplicates),
    together with a proof that everything of type `α` is in the list.  ιType u_2] [ (iι : ιType u_2), SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  (Aι → Type u_3 iι)]
      (u(i : ι) → (A i)ˣ : (iι : ιType u_2)  (Aι → Type u_3 iι)ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     (MulEquiv.piUnitsMulEquiv.piUnits.{u_1, u_2} {ι : Type u_1} {M : ι → Type u_2} [(i : ι) → Monoid (M i)] :
      ((i : ι) → M i)ˣ ≃* ((i : ι) → (M i)ˣ)The monoid equivalence between units of a product,
    and the product of the units of each monoid. .symmMulEquiv.symm.{u_9, u_10} {M : Type u_9} {N : Type u_10} [Mul M] [Mul N] (h : M ≃* N) : N ≃* MThe inverse of an isomorphism is an isomorphism.  u(i : ι) → (A i)ˣ) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
         iι, MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     (u(i : ι) → (A i)ˣ iι)
    theorem MeasureTheory.ringHaarChar_pi.{u_2, u_3}MeasureTheory.ringHaarChar_pi.{u_2, u_3} {ι : Type u_2} {A : ι → Type u_3} [(i : ι) → Ring (A i)]
      [(i : ι) → TopologicalSpace (A i)] [∀ (i : ι), IsTopologicalRing (A i)] [∀ (i : ι), LocallyCompactSpace (A i)]
      [(i : ι) → MeasurableSpace (A i)] [∀ (i : ι), BorelSpace (A i)] [Fintype ι] [∀ (i : ι), SecondCountableTopology (A i)]
      (u : (i : ι) → (A i)ˣ) : MeasureTheory.ringHaarChar (MulEquiv.piUnits.symm u) = ∏ i, MeasureTheory.ringHaarChar (u i)
      {ιType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {Aι → Type u_3 : ιType u_2  Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [(iι : ιType u_2)  RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  (Aι → Type u_3 iι)]
      [(iι : ιType u_2)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Aι → Type u_3 iι)]
      [ (iι : ιType u_2), IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  (Aι → Type u_3 iι)]
      [ (iι : ιType u_2), LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  (Aι → Type u_3 iι)]
      [(iι : ιType u_2)  MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  (Aι → Type u_3 iι)]
      [ (iι : ιType u_2), BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  (Aι → Type u_3 iι)]
      [FintypeFintype.{u_4} (α : Type u_4) : Type u_4`Fintype α` means that `α` is finite, i.e. there are only
    finitely many distinct elements of type `α`. The evidence of this
    is a finset `elems` (a list up to permutation without duplicates),
    together with a proof that everything of type `α` is in the list.  ιType u_2]
      [ (iι : ιType u_2),
          SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  (Aι → Type u_3 iι)]
      (u(i : ι) → (A i)ˣ : (iι : ιType u_2)  (Aι → Type u_3 iι)ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
          (MulEquiv.piUnitsMulEquiv.piUnits.{u_1, u_2} {ι : Type u_1} {M : ι → Type u_2} [(i : ι) → Monoid (M i)] :
      ((i : ι) → M i)ˣ ≃* ((i : ι) → (M i)ˣ)The monoid equivalence between units of a product,
    and the product of the units of each monoid. .symmMulEquiv.symm.{u_9, u_10} {M : Type u_9} {N : Type u_10} [Mul M] [Mul N] (h : M ≃* N) : N ≃* MThe inverse of an isomorphism is an isomorphism.  u(i : ι) → (A i)ˣ) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
         iι, MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     (u(i : ι) → (A i)ˣ iι)
Proof

Follows immediately from lemma Lemma 10.22.

10.7. Some measure-theoretic preliminaries🔗

Lemma10.25
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

Let A and B be locally compact topological groups, and let f : A → B be both a group homomorphism and an open embedding. The pullback along f of a Haar measure on B is a Haar measure on A.

Lean code for Lemma10.251 theorem
  • theorem Topology.IsOpenEmbedding.isHaarMeasure_comap.{u_1, u_2}Topology.IsOpenEmbedding.isHaarMeasure_comap.{u_1, u_2} {G : Type u_1} {H : Type u_2} [Group G] [TopologicalSpace G]
      [MeasurableSpace G] [MeasurableMul G] [BorelSpace G] [Group H] [TopologicalSpace H] [MeasurableSpace H]
      [MeasurableMul H] [BorelSpace H] {φ : G →* H} (hφ : Topology.IsOpenEmbedding ⇑φ) (μ : MeasureTheory.Measure H)
      [μ.IsHaarMeasure] : (MeasureTheory.Measure.comap (⇑φ) μ).IsHaarMeasure {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      {HType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`.
    
    There is also a division operation `/` such that `a / b = a * b⁻¹`,
    with a default so that `a / b = a * b⁻¹` holds by definition.
    
    Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure
    on a type with the minimum proof obligations.
     GType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [MeasurableMulMeasurableMul.{u_2} (M : Type u_2) [MeasurableSpace M] [Mul M] : PropWe say that a type has `MeasurableMul` if `(c * ·)` and `(· * c)` are measurable functions.
    For a typeclass assuming measurability of `uncurry (*)` see `MeasurableMul₂`.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`.
    
    There is also a division operation `/` such that `a / b = a * b⁻¹`,
    with a default so that `a / b = a * b⁻¹` holds by definition.
    
    Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure
    on a type with the minimum proof obligations.
     HType u_2] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  HType u_2]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  HType u_2] [MeasurableMulMeasurableMul.{u_2} (M : Type u_2) [MeasurableSpace M] [Mul M] : PropWe say that a type has `MeasurableMul` if `(c * ·)` and `(· * c)` are measurable functions.
    For a typeclass assuming measurability of `uncurry (*)` see `MeasurableMul₂`.  HType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  HType u_2] {φG →* H : GType u_1 →*MonoidHom.{u_10, u_11} (M : Type u_10) (N : Type u_11) [MulOne M] [MulOne N] : Type (max u_10 u_11)`M →* N` is the type of functions `M → N` that preserve the `MulOne` structure.
    `MonoidHom` is used for both monoid and group homomorphisms.
    
    When possible, instead of parametrizing results over `(f : M →* N)`,
    you should parametrize over `(F : Type*) [MonoidHomClass F M N] (f : F)`.
    
    When you extend this structure, make sure to extend `MonoidHomClass`.
     HType u_2}
      (Topology.IsOpenEmbedding ⇑φ : Topology.IsOpenEmbeddingTopology.IsOpenEmbedding.{u_1, u_2} {X : Type u_1} {Y : Type u_2} [tX : TopologicalSpace X] [tY : TopologicalSpace Y]
      (f : X → Y) : PropAn open embedding is an embedding with open range.  φG →* H) (μMeasureTheory.Measure H : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     HType u_2)
      [μMeasureTheory.Measure H.IsHaarMeasureMeasureTheory.Measure.IsHaarMeasure.{u_3} {G : Type u_3} [Group G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] : (MeasureTheory.Measure.comapMeasureTheory.Measure.comap.{u_1, u_2} {α : Type u_1} {β : Type u_2} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure β) : MeasureTheory.Measure αPullback of a `Measure`. If `f` sends each measurable set to a null-measurable set,
    then for each measurable set `s` we have `comap f μ s = μ (f '' s)`.
    
    Note that if `f` is not injective, this definition assigns `Set.univ` measure zero.  (⇑φG →* H) μMeasureTheory.Measure H).IsHaarMeasureMeasureTheory.Measure.IsHaarMeasure.{u_3} {G : Type u_3} [Group G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. 
    theorem Topology.IsOpenEmbedding.isHaarMeasure_comap.{u_1,
        u_2}Topology.IsOpenEmbedding.isHaarMeasure_comap.{u_1, u_2} {G : Type u_1} {H : Type u_2} [Group G] [TopologicalSpace G]
      [MeasurableSpace G] [MeasurableMul G] [BorelSpace G] [Group H] [TopologicalSpace H] [MeasurableSpace H]
      [MeasurableMul H] [BorelSpace H] {φ : G →* H} (hφ : Topology.IsOpenEmbedding ⇑φ) (μ : MeasureTheory.Measure H)
      [μ.IsHaarMeasure] : (MeasureTheory.Measure.comap (⇑φ) μ).IsHaarMeasure
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {HType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`.
    
    There is also a division operation `/` such that `a / b = a * b⁻¹`,
    with a default so that `a / b = a * b⁻¹` holds by definition.
    
    Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure
    on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [MeasurableMulMeasurableMul.{u_2} (M : Type u_2) [MeasurableSpace M] [Mul M] : PropWe say that a type has `MeasurableMul` if `(c * ·)` and `(· * c)` are measurable functions.
    For a typeclass assuming measurability of `uncurry (*)` see `MeasurableMul₂`.  GType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1]
      [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`.
    
    There is also a division operation `/` such that `a / b = a * b⁻¹`,
    with a default so that `a / b = a * b⁻¹` holds by definition.
    
    Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure
    on a type with the minimum proof obligations.
     HType u_2] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  HType u_2]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  HType u_2] [MeasurableMulMeasurableMul.{u_2} (M : Type u_2) [MeasurableSpace M] [Mul M] : PropWe say that a type has `MeasurableMul` if `(c * ·)` and `(· * c)` are measurable functions.
    For a typeclass assuming measurability of `uncurry (*)` see `MeasurableMul₂`.  HType u_2]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  HType u_2] {φG →* H : GType u_1 →*MonoidHom.{u_10, u_11} (M : Type u_10) (N : Type u_11) [MulOne M] [MulOne N] : Type (max u_10 u_11)`M →* N` is the type of functions `M → N` that preserve the `MulOne` structure.
    `MonoidHom` is used for both monoid and group homomorphisms.
    
    When possible, instead of parametrizing results over `(f : M →* N)`,
    you should parametrize over `(F : Type*) [MonoidHomClass F M N] (f : F)`.
    
    When you extend this structure, make sure to extend `MonoidHomClass`.
     HType u_2}
      (Topology.IsOpenEmbedding ⇑φ : Topology.IsOpenEmbeddingTopology.IsOpenEmbedding.{u_1, u_2} {X : Type u_1} {Y : Type u_2} [tX : TopologicalSpace X] [tY : TopologicalSpace Y]
      (f : X → Y) : PropAn open embedding is an embedding with open range.  φG →* H)
      (μMeasureTheory.Measure H : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     HType u_2)
      [μMeasureTheory.Measure H.IsHaarMeasureMeasureTheory.Measure.IsHaarMeasure.{u_3} {G : Type u_3} [Group G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. ] :
      (MeasureTheory.Measure.comapMeasureTheory.Measure.comap.{u_1, u_2} {α : Type u_1} {β : Type u_2} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure β) : MeasureTheory.Measure αPullback of a `Measure`. If `f` sends each measurable set to a null-measurable set,
    then for each measurable set `s` we have `comap f μ s = μ (f '' s)`.
    
    Note that if `f` is not injective, this definition assigns `Set.univ` measure zero.  (⇑φG →* H)
          μMeasureTheory.Measure H).IsHaarMeasureMeasureTheory.Measure.IsHaarMeasure.{u_3} {G : Type u_3} [Group G] [TopologicalSpace G] [MeasurableSpace G]
      (μ : MeasureTheory.Measure G) : PropA 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. 
Proof

Translation-invariance is easy, compact sets are finite because continuous image of compact is compact, open sets are bounded because image of open is open.

Lemma10.26
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

The pullback of a regular Borel measure along an open embedding is a regular Borel measure.

Lean code for Lemma10.261 theorem
  • theorem Topology.IsOpenEmbedding.regular_comap.{u_1, u_2}Topology.IsOpenEmbedding.regular_comap.{u_1, u_2} {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [MeasurableSpace X]
      [BorelSpace X] [TopologicalSpace Y] [MeasurableSpace Y] [BorelSpace Y] (φ : X → Y) (hφ : Topology.IsOpenEmbedding φ)
      (μ : MeasureTheory.Measure Y) [μ.Regular] : (MeasureTheory.Measure.comap φ μ).Regular {XType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      {YType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  XType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  XType u_1] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  XType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  YType u_2] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  YType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  YType u_2] (φX → Y : XType u_1  YType u_2)
      (Topology.IsOpenEmbedding φ : Topology.IsOpenEmbeddingTopology.IsOpenEmbedding.{u_1, u_2} {X : Type u_1} {Y : Type u_2} [tX : TopologicalSpace X] [tY : TopologicalSpace Y]
      (f : X → Y) : PropAn open embedding is an embedding with open range.  φX → Y) (μMeasureTheory.Measure Y : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     YType u_2)
      [μMeasureTheory.Measure Y.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ] : (MeasureTheory.Measure.comapMeasureTheory.Measure.comap.{u_1, u_2} {α : Type u_1} {β : Type u_2} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure β) : MeasureTheory.Measure αPullback of a `Measure`. If `f` sends each measurable set to a null-measurable set,
    then for each measurable set `s` we have `comap f μ s = μ (f '' s)`.
    
    Note that if `f` is not injective, this definition assigns `Set.univ` measure zero.  φX → Y μMeasureTheory.Measure Y).RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. 
    theorem Topology.IsOpenEmbedding.regular_comap.{u_1,
        u_2}Topology.IsOpenEmbedding.regular_comap.{u_1, u_2} {X : Type u_1} {Y : Type u_2} [TopologicalSpace X] [MeasurableSpace X]
      [BorelSpace X] [TopologicalSpace Y] [MeasurableSpace Y] [BorelSpace Y] (φ : X → Y) (hφ : Topology.IsOpenEmbedding φ)
      (μ : MeasureTheory.Measure Y) [μ.Regular] : (MeasureTheory.Measure.comap φ μ).Regular
      {XType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {YType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  XType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  XType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  XType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  YType u_2]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  YType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  YType u_2]
      (φX → Y : XType u_1  YType u_2)
      (Topology.IsOpenEmbedding φ : Topology.IsOpenEmbeddingTopology.IsOpenEmbedding.{u_1, u_2} {X : Type u_1} {Y : Type u_2} [tX : TopologicalSpace X] [tY : TopologicalSpace Y]
      (f : X → Y) : PropAn open embedding is an embedding with open range.  φX → Y)
      (μMeasureTheory.Measure Y : MeasureTheory.MeasureMeasureTheory.Measure.{u_6} (α : Type u_6) [MeasurableSpace α] : Type u_6A measure is defined to be an outer measure that is countably additive on
    measurable sets, with the additional assumption that the outer measure is the canonical
    extension of the restricted measure.
    
    The measure of a set `s`, denoted `μ s`, is an extended nonnegative real. The real-valued version
    is written `μ.real s`.
     YType u_2)
      [μMeasureTheory.Measure Y.RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. ] :
      (MeasureTheory.Measure.comapMeasureTheory.Measure.comap.{u_1, u_2} {α : Type u_1} {β : Type u_2} [MeasurableSpace α] [MeasurableSpace β] (f : α → β)
      (μ : MeasureTheory.Measure β) : MeasureTheory.Measure αPullback of a `Measure`. If `f` sends each measurable set to a null-measurable set,
    then for each measurable set `s` we have `comap f μ s = μ (f '' s)`.
    
    Note that if `f` is not injective, this definition assigns `Set.univ` measure zero.  φX → Y
          μMeasureTheory.Measure Y).RegularMeasureTheory.Measure.Regular.{u_1} {α : Type u_1} [MeasurableSpace α] [TopologicalSpace α]
      (μ : MeasureTheory.Measure α) : PropA measure `μ` is regular if
    - it is finite on all compact sets;
    - it is outer regular: `μ(A) = inf {μ(U) | A ⊆ U open}` for `A` measurable;
    - it is inner regular for open sets, using compact sets:
      `μ(U) = sup {μ(K) | K ⊆ U compact}` for `U` open. 
Proof

Again this is because the image of compact is compact and the image of open is open, so all the properties of being a regular measure are easily checked.

Lemma10.27
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

Say A is a compact topological additive group and φ : A → A is an additive isomorphism. Then d_A(φ)=1.

Lean code for Lemma10.271 theorem
  • theoremdefined in Mathlib/MeasureTheory/Measure/Haar/MulEquivHaarChar.lean
    complete
    theorem MeasureTheory.mulEquivHaarChar_eq_one_of_compactSpace.{u_1}MeasureTheory.mulEquivHaarChar_eq_one_of_compactSpace.{u_1} {G : Type u_1} [Group G] [TopologicalSpace G]
      [MeasurableSpace G] [BorelSpace G] [IsTopologicalGroup G] [LocallyCompactSpace G] [CompactSpace G] (φ : G ≃ₜ* G) :
      MeasureTheory.mulEquivHaarChar φ = 1
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`.
    
    There is also a division operation `/` such that `a / b = a * b⁻¹`,
    with a default so that `a / b = a * b⁻¹` holds by definition.
    
    Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure
    on a type with the minimum proof obligations.
     GType u_1] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalGroupIsTopologicalGroup.{u_4} (G : Type u_4) [TopologicalSpace G] [Group G] : PropA topological group is a group in which the multiplication and inversion operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformGroup` using
    `IsTopologicalGroup.rightUniformSpace` and `isUniformGroup_of_commGroup`.  GType u_1] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1]
      [CompactSpaceCompactSpace.{u_1} (X : Type u_1) [TopologicalSpace X] : PropType class for compact spaces. Separation is sometimes included in the definition, especially
    in the French literature, but we do not include it here.  GType u_1] (φG ≃ₜ* G : GType u_1 ≃ₜ*ContinuousMulEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Mul G] [Mul H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) : MeasureTheory.mulEquivHaarCharMeasureTheory.mulEquivHaarChar.{u_1} {G : Type u_1} [Group G] [TopologicalSpace G] [MeasurableSpace G] [BorelSpace G]
      [IsTopologicalGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ* G) : NNRealIf `φ : G ≃ₜ* G` then `mulEquivHaarChar φ` is the positive real factor by which
    `φ` scales Haar measures on `G`.  φG ≃ₜ* G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1
    theorem MeasureTheory.mulEquivHaarChar_eq_one_of_compactSpace.{u_1}MeasureTheory.mulEquivHaarChar_eq_one_of_compactSpace.{u_1} {G : Type u_1} [Group G] [TopologicalSpace G]
      [MeasurableSpace G] [BorelSpace G] [IsTopologicalGroup G] [LocallyCompactSpace G] [CompactSpace G] (φ : G ≃ₜ* G) :
      MeasureTheory.mulEquivHaarChar φ = 1
      {GType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [GroupGroup.{u} (G : Type u) : Type uA `Group` is a `Monoid` with an operation `⁻¹` satisfying `a⁻¹ * a = 1`.
    
    There is also a division operation `/` such that `a / b = a * b⁻¹`,
    with a default so that `a / b = a * b⁻¹` holds by definition.
    
    Use `Group.ofLeftAxioms` or `Group.ofRightAxioms` to define a group structure
    on a type with the minimum proof obligations.
     GType u_1]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  GType u_1] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  GType u_1]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  GType u_1] [IsTopologicalGroupIsTopologicalGroup.{u_4} (G : Type u_4) [TopologicalSpace G] [Group G] : PropA topological group is a group in which the multiplication and inversion operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformGroup` using
    `IsTopologicalGroup.rightUniformSpace` and `isUniformGroup_of_commGroup`.  GType u_1]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  GType u_1] [CompactSpaceCompactSpace.{u_1} (X : Type u_1) [TopologicalSpace X] : PropType class for compact spaces. Separation is sometimes included in the definition, especially
    in the French literature, but we do not include it here.  GType u_1]
      (φG ≃ₜ* G : GType u_1 ≃ₜ*ContinuousMulEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Mul G] [Mul H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between groups.
    Note that both the map and its inverse have to be continuous.  GType u_1) :
      MeasureTheory.mulEquivHaarCharMeasureTheory.mulEquivHaarChar.{u_1} {G : Type u_1} [Group G] [TopologicalSpace G] [MeasurableSpace G] [BorelSpace G]
      [IsTopologicalGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ* G) : NNRealIf `φ : G ≃ₜ* G` then `mulEquivHaarChar φ` is the positive real factor by which
    `φ` scales Haar measures on `G`.  φG ≃ₜ* G =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. 1
Proof

Uses [??]. We have d_A(\phi)\mu(A)=\mu(A), and \mu(A) is positive and finite because A is open and compact, using Lemma 10.6.

Lemma10.28
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

If f : A → B is a group homomorphism and open embedding between locally compact topological additive groups and if α : A → A and β : B → B are additive homeomorphisms such that the square commutes (i.e., f ∘ α = β ∘ f), then d_A(α) = d_B(β).

Lean code for Lemma10.281 theorem
  • complete
    theorem MeasureTheory.addEquivAddHaarChar_eq_addEquivAddHaarChar_of_isOpenEmbedding.{u_2,
        u_3}MeasureTheory.addEquivAddHaarChar_eq_addEquivAddHaarChar_of_isOpenEmbedding.{u_2, u_3} {X : Type u_2} {Y : Type u_3}
      [TopologicalSpace X] [AddGroup X] [IsTopologicalAddGroup X] [LocallyCompactSpace X] [MeasurableSpace X] [BorelSpace X]
      [TopologicalSpace Y] [AddGroup Y] [IsTopologicalAddGroup Y] [LocallyCompactSpace Y] [MeasurableSpace Y] [BorelSpace Y]
      {f : X →+ Y} (hf : Topology.IsOpenEmbedding ⇑f) (α : X ≃ₜ+ X) (β : Y ≃ₜ+ Y) (hComm : ∀ (x : X), f (α x) = β (f x)) :
      MeasureTheory.addEquivAddHaarChar α = MeasureTheory.addEquivAddHaarChar β
      {XType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {YType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  XType u_2] [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     XType u_2]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  XType u_2] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  XType u_2] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  XType u_2]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  XType u_2] [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  YType u_3] [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     YType u_3]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  YType u_3] [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  YType u_3] [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  YType u_3]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  YType u_3] {fX →+ Y : XType u_2 →+AddMonoidHom.{u_10, u_11} (M : Type u_10) (N : Type u_11) [AddZero M] [AddZero N] : Type (max u_10 u_11)`M →+ N` is the type of functions `M → N` that preserve the `AddZero` structure.
    
    `AddMonoidHom` is also used for group homomorphisms.
    
    When possible, instead of parametrizing results over `(f : M →+ N)`,
    you should parametrize over `(F : Type*) [AddMonoidHomClass F M N] (f : F)`.
    
    When you extend this structure, make sure to extend `AddMonoidHomClass`.
     YType u_3} (hfTopology.IsOpenEmbedding ⇑f : Topology.IsOpenEmbeddingTopology.IsOpenEmbedding.{u_1, u_2} {X : Type u_1} {Y : Type u_2} [tX : TopologicalSpace X] [tY : TopologicalSpace Y]
      (f : X → Y) : PropAn open embedding is an embedding with open range.  fX →+ Y)
      (αX ≃ₜ+ X : XType u_2 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  XType u_2) (βY ≃ₜ+ Y : YType u_3 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  YType u_3) (hComm∀ (x : X), f (α x) = β (f x) :  (xX : XType u_2), fX →+ Y (αX ≃ₜ+ X xX) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. βY ≃ₜ+ Y (fX →+ Y xX)) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  αX ≃ₜ+ X =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  βY ≃ₜ+ Y
    theorem MeasureTheory.addEquivAddHaarChar_eq_addEquivAddHaarChar_of_isOpenEmbedding.{u_2,
        u_3}MeasureTheory.addEquivAddHaarChar_eq_addEquivAddHaarChar_of_isOpenEmbedding.{u_2, u_3} {X : Type u_2} {Y : Type u_3}
      [TopologicalSpace X] [AddGroup X] [IsTopologicalAddGroup X] [LocallyCompactSpace X] [MeasurableSpace X] [BorelSpace X]
      [TopologicalSpace Y] [AddGroup Y] [IsTopologicalAddGroup Y] [LocallyCompactSpace Y] [MeasurableSpace Y] [BorelSpace Y]
      {f : X →+ Y} (hf : Topology.IsOpenEmbedding ⇑f) (α : X ≃ₜ+ X) (β : Y ≃ₜ+ Y) (hComm : ∀ (x : X), f (α x) = β (f x)) :
      MeasureTheory.addEquivAddHaarChar α = MeasureTheory.addEquivAddHaarChar β
      {XType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {YType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  XType u_2] [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     XType u_2]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  XType u_2]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  XType u_2]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  XType u_2] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  XType u_2]
      [TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  YType u_3] [AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     YType u_3]
      [IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  YType u_3]
      [LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  YType u_3]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  YType u_3] [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  YType u_3]
      {fX →+ Y : XType u_2 →+AddMonoidHom.{u_10, u_11} (M : Type u_10) (N : Type u_11) [AddZero M] [AddZero N] : Type (max u_10 u_11)`M →+ N` is the type of functions `M → N` that preserve the `AddZero` structure.
    
    `AddMonoidHom` is also used for group homomorphisms.
    
    When possible, instead of parametrizing results over `(f : M →+ N)`,
    you should parametrize over `(F : Type*) [AddMonoidHomClass F M N] (f : F)`.
    
    When you extend this structure, make sure to extend `AddMonoidHomClass`.
     YType u_3}
      (hfTopology.IsOpenEmbedding ⇑f : Topology.IsOpenEmbeddingTopology.IsOpenEmbedding.{u_1, u_2} {X : Type u_1} {Y : Type u_2} [tX : TopologicalSpace X] [tY : TopologicalSpace Y]
      (f : X → Y) : PropAn open embedding is an embedding with open range.  fX →+ Y)
      (αX ≃ₜ+ X : XType u_2 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  XType u_2) (βY ≃ₜ+ Y : YType u_3 ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  YType u_3)
      (hComm∀ (x : X), f (α x) = β (f x) :  (xX : XType u_2), fX →+ Y (αX ≃ₜ+ X xX) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`. βY ≃ₜ+ Y (fX →+ Y xX)) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  αX ≃ₜ+ X =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  βY ≃ₜ+ Y
Proof

Uses Lemma 10.25, Lemma 10.26, and Lemma 10.8. Choose a regular Haar measure μ_B on B. The pullback μ_A := f^* μ_B is also a regular Haar measure by the first two lemmas just cited. Now fix a continuous compactly-supported function g on A with 0<\int g(a)d\mu(a)<\infty. Then d_A(\alpha)\int g(a)d\mu_A(a)=\int g(a)d(\alpha^*\mu_A)(a) by lemma. This equals \int g(a)d(\alpha^* f^*\mu_B)(a) by definition, which is \int g(a)d(f^*\beta^*\mu_B)(a) because pullback of pullback is pullback. This equals d_B(\beta)\int g(a)d(f^*\mu_B)(a) by corollary Corollary 10.4, which is d_B(\beta)\int g(a)d\mu_A(a) by definition, and so d_A(\alpha)=d_B(\beta) as required.

10.8. Restricted products🔗

Now say A = \prod'_i A_i is the restricted product of a collection of types A_i with respect to the subsets C_i. Recall that this is the subset of ∏_i A_i consisting of those elements whose ith coordinate lies in C_i for all but finitely many i. Say B = \prod'_i B_i is the restricted product of types B_i over the same index set, with respect to subsets D_i. Say φ_i : A_i → B_i are functions with the property that φ_i(C_i) ⊆ D_i for all but finitely many i. It is easily checked that the φ_i induce a function φ := \prod'_i φ_i : A → B. It is also easily checked that if all the A_i and B_i are groups or rings or R-modules, the C_i and D_i are subgroups or subrings or submodules, and the φ_i are group or ring or module homomorphisms, then φ is a group or ring or module homomorphism. However topological facts lie a little deeper.

Lemma10.29
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

If the A_i and B_i are topological spaces and the φ_i are continuous functions, then the restricted product φ = \prod'_i φ_i is a continuous function.

Lean code for Lemma10.291 theorem
  • theorem Continuous.restrictedProduct_congrRight.{u_1, u_2, u_3}Continuous.restrictedProduct_congrRight.{u_1, u_2, u_3} {ι : Type u_1} {ℱ : Filter ι} {G : ι → Type u_2}
      {H : ι → Type u_3} {C : (i : ι) → Set (G i)} {D : (i : ι) → Set (H i)} [(i : ι) → TopologicalSpace (G i)]
      [(i : ι) → TopologicalSpace (H i)] {φ : (i : ι) → G i → H i} (hφ : ∀ᶠ (i : ι) in ℱ, Set.MapsTo (φ i) (C i) (D i))
      (hφcont : ∀ (i : ι), Continuous (φ i)) : Continuous (RestrictedProduct.map φ hφ) {ιType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      {Filter ι : FilterFilter.{u_1} (α : Type u_1) : Type u_1A filter `F` on a type `α` is a collection of sets of `α` which contains the whole `α`,
    is upwards-closed, and is stable under intersection. We do not forbid this collection to be
    all sets of `α`.  ιType u_1} {Gι → Type u_2 : ιType u_1  Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {Hι → Type u_3 : ιType u_1  Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      {C(i : ι) → Set (G i) : (iι : ιType u_1)  SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     (Gι → Type u_2 iι)} {D(i : ι) → Set (H i) : (iι : ιType u_1)  SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     (Hι → Type u_3 iι)}
      [(iι : ιType u_1)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Gι → Type u_2 iι)] [(iι : ιType u_1)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Hι → Type u_3 iι)]
      {φ(i : ι) → G i → H i : (iι : ιType u_1)  Gι → Type u_2 iι  Hι → Type u_3 iι}
      (∀ᶠ (i : ι) in ℱ, Set.MapsTo (φ i) (C i) (D i) : ∀ᶠFilter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`.  (iι : ιType u_1) inFilter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`.  Filter ι,Filter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`.  Set.MapsToSet.MapsTo.{u, v} {α : Type u} {β : Type v} (f : α → β) (s : Set α) (t : Set β) : Prop`MapsTo f s t` means that the image of `s` is contained in `t`.  (φ(i : ι) → G i → H i iι) (C(i : ι) → Set (G i) iι) (D(i : ι) → Set (H i) iι))
      (hφcont∀ (i : ι), Continuous (φ i) :  (iι : ιType u_1), ContinuousContinuous.{u, v} {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] (f : X → Y) : PropA function between topological spaces is continuous if the preimage
    of every open set is open. Registered as a structure to make sure it is not unfolded by Lean.  (φ(i : ι) → G i → H i iι)) :
      ContinuousContinuous.{u, v} {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] (f : X → Y) : PropA function between topological spaces is continuous if the preimage
    of every open set is open. Registered as a structure to make sure it is not unfolded by Lean.  (RestrictedProduct.mapRestrictedProduct.map.{u_1, u_9, u_10} {ι : Type u_1} {𝓕 : Filter ι} {G : ι → Type u_9} {H : ι → Type u_10}
      {C : (i : ι) → Set (G i)} {D : (i : ι) → Set (H i)} (φ : (i : ι) → G i → H i)
      (hφ : ∀ᶠ (i : ι) in 𝓕, Set.MapsTo (φ i) (C i) (D i)) (x : RestrictedProduct (fun i ↦ G i) (fun i ↦ C i) 𝓕) :
      RestrictedProduct (fun i ↦ H i) (fun i ↦ D i) 𝓕The maps between restricted products over a fixed index type,
    given maps on the factors.  φ(i : ι) → G i → H i ∀ᶠ (i : ι) in ℱ, Set.MapsTo (φ i) (C i) (D i))
    theorem Continuous.restrictedProduct_congrRight.{u_1,
        u_2, u_3}Continuous.restrictedProduct_congrRight.{u_1, u_2, u_3} {ι : Type u_1} {ℱ : Filter ι} {G : ι → Type u_2}
      {H : ι → Type u_3} {C : (i : ι) → Set (G i)} {D : (i : ι) → Set (H i)} [(i : ι) → TopologicalSpace (G i)]
      [(i : ι) → TopologicalSpace (H i)] {φ : (i : ι) → G i → H i} (hφ : ∀ᶠ (i : ι) in ℱ, Set.MapsTo (φ i) (C i) (D i))
      (hφcont : ∀ (i : ι), Continuous (φ i)) : Continuous (RestrictedProduct.map φ hφ)
      {ιType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {Filter ι : FilterFilter.{u_1} (α : Type u_1) : Type u_1A filter `F` on a type `α` is a collection of sets of `α` which contains the whole `α`,
    is upwards-closed, and is stable under intersection. We do not forbid this collection to be
    all sets of `α`.  ιType u_1}
      {Gι → Type u_2 : ιType u_1  Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {Hι → Type u_3 : ιType u_1  Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      {C(i : ι) → Set (G i) : (iι : ιType u_1)  SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     (Gι → Type u_2 iι)}
      {D(i : ι) → Set (H i) : (iι : ιType u_1)  SetSet.{u} (α : Type u) : Type uA set is a collection of elements of some type `α`.
    
    Although `Set` is defined as `α → Prop`, this is an implementation detail which should not be
    relied on. Instead, `setOf` and membership of a set (`∈`) should be used to convert between sets
    and predicates.
     (Hι → Type u_3 iι)}
      [(iι : ιType u_1)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Gι → Type u_2 iι)]
      [(iι : ιType u_1)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Hι → Type u_3 iι)]
      {φ(i : ι) → G i → H i : (iι : ιType u_1)  Gι → Type u_2 iι  Hι → Type u_3 iι}
      (∀ᶠ (i : ι) in ℱ, Set.MapsTo (φ i) (C i) (D i) :
        ∀ᶠFilter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`.  (iι : ιType u_1) inFilter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`.  Filter ι,Filter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`. 
          Set.MapsToSet.MapsTo.{u, v} {α : Type u} {β : Type v} (f : α → β) (s : Set α) (t : Set β) : Prop`MapsTo f s t` means that the image of `s` is contained in `t`.  (φ(i : ι) → G i → H i iι) (C(i : ι) → Set (G i) iι) (D(i : ι) → Set (H i) iι))
      (hφcont∀ (i : ι), Continuous (φ i) :  (iι : ιType u_1), ContinuousContinuous.{u, v} {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] (f : X → Y) : PropA function between topological spaces is continuous if the preimage
    of every open set is open. Registered as a structure to make sure it is not unfolded by Lean.  (φ(i : ι) → G i → H i iι)) :
      ContinuousContinuous.{u, v} {X : Type u} {Y : Type v} [TopologicalSpace X] [TopologicalSpace Y] (f : X → Y) : PropA function between topological spaces is continuous if the preimage
    of every open set is open. Registered as a structure to make sure it is not unfolded by Lean.  (RestrictedProduct.mapRestrictedProduct.map.{u_1, u_9, u_10} {ι : Type u_1} {𝓕 : Filter ι} {G : ι → Type u_9} {H : ι → Type u_10}
      {C : (i : ι) → Set (G i)} {D : (i : ι) → Set (H i)} (φ : (i : ι) → G i → H i)
      (hφ : ∀ᶠ (i : ι) in 𝓕, Set.MapsTo (φ i) (C i) (D i)) (x : RestrictedProduct (fun i ↦ G i) (fun i ↦ C i) 𝓕) :
      RestrictedProduct (fun i ↦ H i) (fun i ↦ D i) 𝓕The maps between restricted products over a fixed index type,
    given maps on the factors.  φ(i : ι) → G i → H i ∀ᶠ (i : ι) in ℱ, Set.MapsTo (φ i) (C i) (D i))
Proof

We use the universal property RestrictedProduct.continuous_dom of the topology in mathlib to reduce to the claim that for all finite S, the induced map A_S:=\prod_{i\in S}A_i\times\prod_{i\notin S}C_i\to B is continuous. Because the inclusion A_S\to A_T is continuous for S\subseteq T, we are reduced to checking this claim for S sufficiently large that it contains all of the i for which \phi(C_i)\not=D_i. For such S, this map factors as A_S\to B_S\to B, and B_S\to B is continuous, so it suffices to prove that A_S\to B_S is continuous, but this is just a product of continuous maps.

We now focus on the case that B_i = A_i are locally compact groups, D_i = C_i are compact open subgroups, and φ_i : A_i → A_i are group isomorphisms and homeomorphisms sending C_i onto C_i for all but finitely many i. Then the restricted product A := \prod' A_i of the A_i with respect to the C_i is also a locally compact topological group, and the restricted product φ = \prod' φ_i of the φ_i is a group isomorphism and homeomorphism, so we can ask how d_A(φ) compares to the d_{A_i}(φ_i). First note that d_{A_i}(φ_i) = 1 for all the i such that φ_i(C_i) = C_i, as d_{A_i}(φ_i) can be computed as μ(φ_i(C_i))/μ(C_i) and μ(C_i) is guaranteed to have positive finite measure as it is open and compact. Hence the product \prod_i d_{A_i}(φ_i) is a finite product, in the sense that all but finitely many terms are 1. The following theorem shows that the value of this product is d(φ).

Theorem10.30
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀N

With A, A_i, C_i, \phi_i, \phi defined as above, we have \delta_A(\phi)=\prod_i\delta_{A_i}(\phi_i).

Lean code for Theorem10.301 theorem
  • complete
    theorem MeasureTheory.addEquivAddHaarChar_restrictedProductCongrRight.{u_1, u_2}MeasureTheory.addEquivAddHaarChar_restrictedProductCongrRight.{u_1, u_2} {ι : Type u_1} {G : ι → Type u_2}
      [(i : ι) → AddGroup (G i)] [(i : ι) → TopologicalSpace (G i)] [∀ (i : ι), IsTopologicalAddGroup (G i)]
      {C : (i : ι) → AddSubgroup (G i)} [hCopen : Fact (∀ (i : ι), IsOpen ↑(C i))]
      [hCcompact : ∀ (i : ι), CompactSpace ↥(C i)] [(i : ι) → MeasurableSpace (G i)] [∀ (i : ι), BorelSpace (G i)]
      [∀ (i : ι), LocallyCompactSpace (G i)] [∀ (i : ι), SecondCountableTopology (G i)]
      [∀ (i : ι), WeaklyLocallyCompactSpace (G i)] [Countable ι] (φ : (i : ι) → G i ≃ₜ+ G i)
      (hφ : ∀ᶠ (i : ι) in Filter.cofinite, Set.BijOn ⇑(φ i) ↑(C i) ↑(C i)) :
      MeasureTheory.addEquivAddHaarChar (ContinuousAddEquiv.restrictedProductCongrRight φ hφ) =
        ∏ᶠ (i : ι), MeasureTheory.addEquivAddHaarChar (φ i)
      {ιType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {Gι → Type u_2 : ιType u_1  Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [(iι : ιType u_1)  AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     (Gι → Type u_2 iι)]
      [(iι : ιType u_1)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Gι → Type u_2 iι)]
      [ (iι : ιType u_1), IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  (Gι → Type u_2 iι)]
      {C(i : ι) → AddSubgroup (G i) : (iι : ιType u_1)  AddSubgroupAddSubgroup.{u_3} (G : Type u_3) [AddGroup G] : Type u_3An additive subgroup of an additive group `G` is a subset containing 0, closed
    under addition and additive inverse.  (Gι → Type u_2 iι)}
      [hCopenFact (∀ (i : ι), IsOpen ↑(C i)) : FactFact (p : Prop) : PropWrapper for adding elementary propositions to the type class systems.
    Warning: this can easily be abused. See the rest of this docstring for details.
    
    Certain propositions should not be treated as a class globally,
    but sometimes it is very convenient to be able to use the type class system
    in specific circumstances.
    
    For example, `ZMod p` is a field if and only if `p` is a prime number.
    In order to be able to find this field instance automatically by type class search,
    we have to turn `p.Prime` into an instance implicit assumption.
    
    On the other hand, making `Nat.Prime` a class would require a major refactoring of the library,
    and it is questionable whether making `Nat.Prime` a class is desirable at all.
    The compromise is to add the assumption `[Fact p.Prime]` to `ZMod.instField`.
    
    In particular, this class is not intended for turning the type class system
    into an automated theorem prover for first-order logic.  (∀ (iι : ιType u_1), IsOpenIsOpen.{u} {X : Type u} [TopologicalSpace X] : Set X → Prop`IsOpen s` means that `s` is open in the ambient topological space on `X`  (C(i : ι) → AddSubgroup (G i) iι))]
      [hCcompact∀ (i : ι), CompactSpace ↥(C i) :  (iι : ιType u_1), CompactSpaceCompactSpace.{u_1} (X : Type u_1) [TopologicalSpace X] : PropType class for compact spaces. Separation is sometimes included in the definition, especially
    in the French literature, but we do not include it here.  (C(i : ι) → AddSubgroup (G i) iι)]
      [(iι : ιType u_1)  MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  (Gι → Type u_2 iι)] [ (iι : ιType u_1), BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  (Gι → Type u_2 iι)]
      [ (iι : ιType u_1), LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  (Gι → Type u_2 iι)]
      [ (iι : ιType u_1), SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  (Gι → Type u_2 iι)]
      [ (iι : ιType u_1), WeaklyLocallyCompactSpaceWeaklyLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropWe say that a topological space is a *weakly locally compact space*,
    if each point of this space admits a compact neighborhood.  (Gι → Type u_2 iι)] [CountableCountable.{u} (α : Sort u) : PropA type `α` is countable if there exists an injective map `α → ℕ`.  ιType u_1]
      (φ(i : ι) → G i ≃ₜ+ G i : (iι : ιType u_1)  Gι → Type u_2 iι ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  Gι → Type u_2 iι)
      (∀ᶠ (i : ι) in Filter.cofinite, Set.BijOn ⇑(φ i) ↑(C i) ↑(C i) : ∀ᶠFilter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`.  (iι : ιType u_1) inFilter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`.  Filter.cofiniteFilter.cofinite.{u_2} {α : Type u_2} : Filter αThe cofinite filter is the filter of subsets whose complements are finite. ,Filter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`.  Set.BijOnSet.BijOn.{u, v} {α : Type u} {β : Type v} (f : α → β) (s : Set α) (t : Set β) : Prop`f` is bijective from `s` to `t` if `f` is injective on `s` and `f '' s = t`.  (φ(i : ι) → G i ≃ₜ+ G i iι) (C(i : ι) → AddSubgroup (G i) iι) (C(i : ι) → AddSubgroup (G i) iι)) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (ContinuousAddEquiv.restrictedProductCongrRightContinuousAddEquiv.restrictedProductCongrRight.{u_1, u_2, u_3, u_4, u_5} {ι : Type u_1} {ℱ : Filter ι}
      {G : ι → Type u_2} {H : ι → Type u_3} {S : ι → Type u_4} {T : ι → Type u_5} [(i : ι) → SetLike (S i) (G i)]
      [(i : ι) → SetLike (T i) (H i)] {A : (i : ι) → S i} {B : (i : ι) → T i} [(i : ι) → AddMonoid (G i)]
      [∀ (i : ι), AddSubmonoidClass (S i) (G i)] [(i : ι) → AddMonoid (H i)] [∀ (i : ι), AddSubmonoidClass (T i) (H i)]
      [(i : ι) → TopologicalSpace (G i)] [(i : ι) → TopologicalSpace (H i)] (φ : (i : ι) → G i ≃ₜ+ H i)
      (hφ : ∀ᶠ (i : ι) in ℱ, Set.BijOn ⇑(φ i) ↑(A i) ↑(B i)) :
      RestrictedProduct (fun i ↦ G i) (fun i ↦ ↑(A i)) ℱ ≃ₜ+ RestrictedProduct (fun i ↦ H i) (fun i ↦ ↑(B i)) ℱThe `ContinuousAddEquiv` (that is, additive group isomorphism and homeomorphism)
    between restricted products built from `ContinuousAddEquiv`s on the factors.  φ(i : ι) → G i ≃ₜ+ G i ∀ᶠ (i : ι) in Filter.cofinite, Set.BijOn ⇑(φ i) ↑(C i) ↑(C i)) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        ∏ᶠfinprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise.  (iι : ιType u_1),finprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise.  MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`.  (φ(i : ι) → G i ≃ₜ+ G i iι)
    theorem MeasureTheory.addEquivAddHaarChar_restrictedProductCongrRight.{u_1,
        u_2}MeasureTheory.addEquivAddHaarChar_restrictedProductCongrRight.{u_1, u_2} {ι : Type u_1} {G : ι → Type u_2}
      [(i : ι) → AddGroup (G i)] [(i : ι) → TopologicalSpace (G i)] [∀ (i : ι), IsTopologicalAddGroup (G i)]
      {C : (i : ι) → AddSubgroup (G i)} [hCopen : Fact (∀ (i : ι), IsOpen ↑(C i))]
      [hCcompact : ∀ (i : ι), CompactSpace ↥(C i)] [(i : ι) → MeasurableSpace (G i)] [∀ (i : ι), BorelSpace (G i)]
      [∀ (i : ι), LocallyCompactSpace (G i)] [∀ (i : ι), SecondCountableTopology (G i)]
      [∀ (i : ι), WeaklyLocallyCompactSpace (G i)] [Countable ι] (φ : (i : ι) → G i ≃ₜ+ G i)
      (hφ : ∀ᶠ (i : ι) in Filter.cofinite, Set.BijOn ⇑(φ i) ↑(C i) ↑(C i)) :
      MeasureTheory.addEquivAddHaarChar (ContinuousAddEquiv.restrictedProductCongrRight φ hφ) =
        ∏ᶠ (i : ι), MeasureTheory.addEquivAddHaarChar (φ i)
      {ιType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {Gι → Type u_2 : ιType u_1  Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [(iι : ιType u_1)  AddGroupAddGroup.{u} (A : Type u) : Type uAn `AddGroup` is an `AddMonoid` with a unary `-` satisfying `-a + a = 0`.
    
    There is also a binary operation `-` such that `a - b = a + -b`,
    with a default so that `a - b = a + -b` holds by definition.
    
    Use `AddGroup.ofLeftAxioms` or `AddGroup.ofRightAxioms` to define an
    additive group structure on a type with the minimum proof obligations.
     (Gι → Type u_2 iι)]
      [(iι : ιType u_1)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Gι → Type u_2 iι)]
      [ (iι : ιType u_1), IsTopologicalAddGroupIsTopologicalAddGroup.{u} (G : Type u) [TopologicalSpace G] [AddGroup G] : PropA topological (additive) group is a group in which the addition and negation operations are
    continuous.
    
    When you declare an instance that does not already have a `UniformSpace` instance,
    you should also provide an instance of `UniformSpace` and `IsUniformAddGroup` using
    `IsTopologicalAddGroup.rightUniformSpace` and `isUniformAddGroup_of_addCommGroup`.  (Gι → Type u_2 iι)]
      {C(i : ι) → AddSubgroup (G i) : (iι : ιType u_1)  AddSubgroupAddSubgroup.{u_3} (G : Type u_3) [AddGroup G] : Type u_3An additive subgroup of an additive group `G` is a subset containing 0, closed
    under addition and additive inverse.  (Gι → Type u_2 iι)}
      [hCopenFact (∀ (i : ι), IsOpen ↑(C i)) :
        FactFact (p : Prop) : PropWrapper for adding elementary propositions to the type class systems.
    Warning: this can easily be abused. See the rest of this docstring for details.
    
    Certain propositions should not be treated as a class globally,
    but sometimes it is very convenient to be able to use the type class system
    in specific circumstances.
    
    For example, `ZMod p` is a field if and only if `p` is a prime number.
    In order to be able to find this field instance automatically by type class search,
    we have to turn `p.Prime` into an instance implicit assumption.
    
    On the other hand, making `Nat.Prime` a class would require a major refactoring of the library,
    and it is questionable whether making `Nat.Prime` a class is desirable at all.
    The compromise is to add the assumption `[Fact p.Prime]` to `ZMod.instField`.
    
    In particular, this class is not intended for turning the type class system
    into an automated theorem prover for first-order logic.  (∀ (iι : ιType u_1), IsOpenIsOpen.{u} {X : Type u} [TopologicalSpace X] : Set X → Prop`IsOpen s` means that `s` is open in the ambient topological space on `X`  (C(i : ι) → AddSubgroup (G i) iι))]
      [hCcompact∀ (i : ι), CompactSpace ↥(C i) :
         (iι : ιType u_1), CompactSpaceCompactSpace.{u_1} (X : Type u_1) [TopologicalSpace X] : PropType class for compact spaces. Separation is sometimes included in the definition, especially
    in the French literature, but we do not include it here.  (C(i : ι) → AddSubgroup (G i) iι)]
      [(iι : ιType u_1)  MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  (Gι → Type u_2 iι)]
      [ (iι : ιType u_1), BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  (Gι → Type u_2 iι)]
      [ (iι : ιType u_1), LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  (Gι → Type u_2 iι)]
      [ (iι : ιType u_1),
          SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  (Gι → Type u_2 iι)]
      [ (iι : ιType u_1),
          WeaklyLocallyCompactSpaceWeaklyLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropWe say that a topological space is a *weakly locally compact space*,
    if each point of this space admits a compact neighborhood.  (Gι → Type u_2 iι)]
      [CountableCountable.{u} (α : Sort u) : PropA type `α` is countable if there exists an injective map `α → ℕ`.  ιType u_1]
      (φ(i : ι) → G i ≃ₜ+ G i : (iι : ιType u_1)  Gι → Type u_2 iι ≃ₜ+ContinuousAddEquiv.{u, v} (G : Type u) [TopologicalSpace G] (H : Type v) [TopologicalSpace H] [Add G] [Add H] :
      Type (max u v)The structure of two-sided continuous isomorphisms between additive groups.
    Note that both the map and its inverse have to be continuous.  Gι → Type u_2 iι)
      (∀ᶠ (i : ι) in Filter.cofinite, Set.BijOn ⇑(φ i) ↑(C i) ↑(C i) :
        ∀ᶠFilter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`.  (iι : ιType u_1) inFilter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`.  Filter.cofiniteFilter.cofinite.{u_2} {α : Type u_2} : Filter αThe cofinite filter is the filter of subsets whose complements are finite. ,Filter.Eventually.{u_1} {α : Type u_1} (p : α → Prop) (f : Filter α) : Prop`f.Eventually p` or `∀ᶠ x in f, p x` mean that `{x | p x} ∈ f`. E.g., `∀ᶠ x in atTop, p x`
    means that `p` holds true for sufficiently large `x`. 
          Set.BijOnSet.BijOn.{u, v} {α : Type u} {β : Type v} (f : α → β) (s : Set α) (t : Set β) : Prop`f` is bijective from `s` to `t` if `f` is injective on `s` and `f '' s = t`.  (φ(i : ι) → G i ≃ₜ+ G i iι) (C(i : ι) → AddSubgroup (G i) iι) (C(i : ι) → AddSubgroup (G i) iι)) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (ContinuousAddEquiv.restrictedProductCongrRightContinuousAddEquiv.restrictedProductCongrRight.{u_1, u_2, u_3, u_4, u_5} {ι : Type u_1} {ℱ : Filter ι}
      {G : ι → Type u_2} {H : ι → Type u_3} {S : ι → Type u_4} {T : ι → Type u_5} [(i : ι) → SetLike (S i) (G i)]
      [(i : ι) → SetLike (T i) (H i)] {A : (i : ι) → S i} {B : (i : ι) → T i} [(i : ι) → AddMonoid (G i)]
      [∀ (i : ι), AddSubmonoidClass (S i) (G i)] [(i : ι) → AddMonoid (H i)] [∀ (i : ι), AddSubmonoidClass (T i) (H i)]
      [(i : ι) → TopologicalSpace (G i)] [(i : ι) → TopologicalSpace (H i)] (φ : (i : ι) → G i ≃ₜ+ H i)
      (hφ : ∀ᶠ (i : ι) in ℱ, Set.BijOn ⇑(φ i) ↑(A i) ↑(B i)) :
      RestrictedProduct (fun i ↦ G i) (fun i ↦ ↑(A i)) ℱ ≃ₜ+ RestrictedProduct (fun i ↦ H i) (fun i ↦ ↑(B i)) ℱThe `ContinuousAddEquiv` (that is, additive group isomorphism and homeomorphism)
    between restricted products built from `ContinuousAddEquiv`s on the factors. 
            φ(i : ι) → G i ≃ₜ+ G i ∀ᶠ (i : ι) in Filter.cofinite, Set.BijOn ⇑(φ i) ↑(C i) ↑(C i)) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        ∏ᶠfinprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise.  (iι : ιType u_1),finprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise. 
          MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
            (φ(i : ι) → G i ≃ₜ+ G i iι)

In the Lean file we make the additional assumption that the index set over which we're taking the product is countable, and that the A_i are second countable. This is because in this proof we make use of an infinite product \prod_{i\notin S} C_i of topological spaces equipped with Haar measure, so each topological space gets equipped with the Borel sigma algebra. mathlib then gives the product a canonical product sigma algebra which, in the case where the index set is uncountable, may not be the Borel sigma algebra. However we also want to use Haar measure on the product, so we need the canonical sigma algebra on this product to be the Borel sigma algebra. Rather than taking the trouble to locally turn off this product sigma algebra construction in FLT, we simply restrict to a countable index set and add second countability assumptions, because then the product is a Borel sigma algebra and this is all we need in our applications to adeles.

Proof

Uses Lemma 10.28, Lemma 10.27, Lemma 10.22, Lemma 10.29, and Lemma 10.21. Assume φ_i(C_i)=C_i for all i\not\in S, a finite set, and work in the open subgroup U:=\prod_{i\in S}A_i\times\prod_{i\not\in S}C_i. Then φ induces an automorphism \phi_S of this open subgroup U of A, and in particular lemma tells us that \delta(\phi)=\delta_U(\phi_S). Next note that \phi_S:U\to U can be written as a product of the automorphisms \prod_{i\not\in S}\phi_i|_{C_i} of \prod_{i\not\in S}C_i and \prod_{i\in S}\phi_i of \prod_{i\in S}A_i, so by lemma we have \delta(\phi)=\delta(\prod_{i\not\in S}\phi_i|_{C_i})\times\delta(\prod_{i\in S}\phi_i). Because \prod_{i\not\in S}C_i is a compact group we must have \delta(\phi_{i\not\in S}\phi_i|_{C_i})=1 by lemma. Finally \delta(\prod_{i\in S}\phi_i)=\prod_{i\in S}\delta(\phi_i) by lemma and we are home.

Corollary10.31
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

If u=(u_i)_i\in R^\times, then \delta_R(u)=\prod_i\delta_{R_i}(u_i).

Lean code for Corollary10.311 theorem
  • complete
    theorem MeasureTheory.ringHaarChar_restrictedProduct.{u_2, u_3}MeasureTheory.ringHaarChar_restrictedProduct.{u_2, u_3} {ι : Type u_2} {A : ι → Type u_3} [(i : ι) → Ring (A i)]
      [(i : ι) → TopologicalSpace (A i)] [∀ (i : ι), IsTopologicalRing (A i)] [∀ (i : ι), LocallyCompactSpace (A i)]
      [(i : ι) → MeasurableSpace (A i)] [∀ (i : ι), BorelSpace (A i)] {C : (i : ι) → Subring (A i)}
      [hCopen : Fact (∀ (i : ι), IsOpen ↑(C i))] [hCcompact : ∀ (i : ι), CompactSpace ↥(C i)]
      [∀ (i : ι), SecondCountableTopology (A i)] [Countable ι]
      (u : (RestrictedProduct (fun i ↦ A i) (fun i ↦ ↑(C i)) Filter.cofinite)ˣ) :
      MeasureTheory.ringHaarChar u = ∏ᶠ (i : ι), MeasureTheory.ringHaarChar ((MulEquiv.restrictedProductUnits u) i) {ιType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      {Aι → Type u_3 : ιType u_2  Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } [(iι : ιType u_2)  RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  (Aι → Type u_3 iι)]
      [(iι : ιType u_2)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Aι → Type u_3 iι)]
      [ (iι : ιType u_2), IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  (Aι → Type u_3 iι)]
      [ (iι : ιType u_2), LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  (Aι → Type u_3 iι)]
      [(iι : ιType u_2)  MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  (Aι → Type u_3 iι)] [ (iι : ιType u_2), BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  (Aι → Type u_3 iι)]
      {C(i : ι) → Subring (A i) : (iι : ιType u_2)  SubringSubring.{u} (R : Type u) [NonAssocRing R] : Type u`Subring R` is the type of subrings of `R`. A subring of `R` is a subset `s` that is a
    multiplicative submonoid and an additive subgroup. Note in particular that it shares the
    same 0 and 1 as R.  (Aι → Type u_3 iι)}
      [hCopenFact (∀ (i : ι), IsOpen ↑(C i)) : FactFact (p : Prop) : PropWrapper for adding elementary propositions to the type class systems.
    Warning: this can easily be abused. See the rest of this docstring for details.
    
    Certain propositions should not be treated as a class globally,
    but sometimes it is very convenient to be able to use the type class system
    in specific circumstances.
    
    For example, `ZMod p` is a field if and only if `p` is a prime number.
    In order to be able to find this field instance automatically by type class search,
    we have to turn `p.Prime` into an instance implicit assumption.
    
    On the other hand, making `Nat.Prime` a class would require a major refactoring of the library,
    and it is questionable whether making `Nat.Prime` a class is desirable at all.
    The compromise is to add the assumption `[Fact p.Prime]` to `ZMod.instField`.
    
    In particular, this class is not intended for turning the type class system
    into an automated theorem prover for first-order logic.  (∀ (iι : ιType u_2), IsOpenIsOpen.{u} {X : Type u} [TopologicalSpace X] : Set X → Prop`IsOpen s` means that `s` is open in the ambient topological space on `X`  (C(i : ι) → Subring (A i) iι))]
      [hCcompact∀ (i : ι), CompactSpace ↥(C i) :  (iι : ιType u_2), CompactSpaceCompactSpace.{u_1} (X : Type u_1) [TopologicalSpace X] : PropType class for compact spaces. Separation is sometimes included in the definition, especially
    in the French literature, but we do not include it here.  (C(i : ι) → Subring (A i) iι)]
      [ (iι : ιType u_2), SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  (Aι → Type u_3 iι)] [CountableCountable.{u} (α : Sort u) : PropA type `α` is countable if there exists an injective map `α → ℕ`.  ιType u_2]
      (u(RestrictedProduct (fun i ↦ A i) (fun i ↦ ↑(C i)) Filter.cofinite)ˣ :
        (RestrictedProductRestrictedProduct.{u_1, u_2} {ι : Type u_1} (R : ι → Type u_2) (A : (i : ι) → Set (R i)) (𝓕 : Filter ι) :
      Type (max u_1 u_2)The **restricted product** of a family `R : ι → Type*` of types, relative to subsets
    `A : (i : ι) → Set (R i)` and the filter `𝓕 : Filter ι`, is the set of all `x : Π i, R i`
    such that the set `{j | x j ∈ A j}` belongs to `𝓕`. We denote it by `Πʳ i, [R i, A i]_[𝓕]`.
    
    The most common use case is with `𝓕 = cofinite`, in which case the restricted product is the set
    of all `x : Π i, R i` such that `x j ∈ A j` for all but finitely many `j`. We denote it simply
    by `Πʳ i, [R i, A i]`.
    
    Similarly, if `S` is a principal filter, the restricted product `Πʳ i, [R i, A i]_[𝓟 s]`
    is the set of all `x : Π i, R i` such that `∀ j ∈ S, x j ∈ A j`.  (fun iι  Aι → Type u_3 iι) (fun iι  (C(i : ι) → Subring (A i) iι))
            Filter.cofiniteFilter.cofinite.{u_2} {α : Type u_2} : Filter αThe cofinite filter is the filter of subsets whose complements are finite. )ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u(RestrictedProduct (fun i ↦ A i) (fun i ↦ ↑(C i)) Filter.cofinite)ˣ =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        ∏ᶠfinprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise.  (iι : ιType u_2),finprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise. 
          MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     ((MulEquiv.restrictedProductUnitsMulEquiv.restrictedProductUnits.{u_6, u_7, u_8} {ι : Type u_6} {ℱ : Filter ι} {M : ι → Type u_7}
      [(i : ι) → Monoid (M i)] {S : ι → Type u_8} [(i : ι) → SetLike (S i) (M i)] [∀ (i : ι), SubmonoidClass (S i) (M i)]
      {A : (i : ι) → S i} :
      (RestrictedProduct (fun i ↦ M i) (fun i ↦ ↑(A i)) ℱ)ˣ ≃*
        RestrictedProduct (fun i ↦ (M i)ˣ) (fun i ↦ ↑(Submonoid.ofClass (A i)).units) ℱThe isomorphism between the units of a restricted product of monoids,
    and the restricted product of the units of the monoids.  u(RestrictedProduct (fun i ↦ A i) (fun i ↦ ↑(C i)) Filter.cofinite)ˣ) iι)
    theorem MeasureTheory.ringHaarChar_restrictedProduct.{u_2,
        u_3}MeasureTheory.ringHaarChar_restrictedProduct.{u_2, u_3} {ι : Type u_2} {A : ι → Type u_3} [(i : ι) → Ring (A i)]
      [(i : ι) → TopologicalSpace (A i)] [∀ (i : ι), IsTopologicalRing (A i)] [∀ (i : ι), LocallyCompactSpace (A i)]
      [(i : ι) → MeasurableSpace (A i)] [∀ (i : ι), BorelSpace (A i)] {C : (i : ι) → Subring (A i)}
      [hCopen : Fact (∀ (i : ι), IsOpen ↑(C i))] [hCcompact : ∀ (i : ι), CompactSpace ↥(C i)]
      [∀ (i : ι), SecondCountableTopology (A i)] [Countable ι]
      (u : (RestrictedProduct (fun i ↦ A i) (fun i ↦ ↑(C i)) Filter.cofinite)ˣ) :
      MeasureTheory.ringHaarChar u = ∏ᶠ (i : ι), MeasureTheory.ringHaarChar ((MulEquiv.restrictedProductUnits u) i)
      {ιType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. } {Aι → Type u_3 : ιType u_2  Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. }
      [(iι : ιType u_2)  RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  (Aι → Type u_3 iι)]
      [(iι : ιType u_2)  TopologicalSpaceTopologicalSpace.{u} (X : Type u) : Type uA topology on `X`.  (Aι → Type u_3 iι)]
      [ (iι : ιType u_2), IsTopologicalRingIsTopologicalRing.{u_1} (R : Type u_1) [TopologicalSpace R] [NonUnitalNonAssocRing R] : PropA topological ring is a ring `R` where addition, multiplication and negation are continuous.
    
    If `R` is a (unital) ring, then continuity of negation can be derived from continuity of
    multiplication as it is multiplication with `-1`. (See `IsTopologicalSemiring.continuousNeg_of_mul`
    and `IsTopologicalSemiring.toIsTopologicalRing`)  (Aι → Type u_3 iι)]
      [ (iι : ιType u_2), LocallyCompactSpaceLocallyCompactSpace.{u_3} (X : Type u_3) [TopologicalSpace X] : PropThere are various definitions of "locally compact space" in the literature,
    which agree for Hausdorff spaces but not in general.
    This one is the precise condition on X needed
    for the evaluation map `C(X, Y) × X → Y` to be continuous for all `Y`
    when `C(X, Y)` is given the compact-open topology.
    
    See also `WeaklyLocallyCompactSpace`, a typeclass that only assumes
    that each point has a compact neighborhood.  (Aι → Type u_3 iι)]
      [(iι : ιType u_2)  MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra.  (Aι → Type u_3 iι)]
      [ (iι : ιType u_2), BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets.  (Aι → Type u_3 iι)]
      {C(i : ι) → Subring (A i) : (iι : ιType u_2)  SubringSubring.{u} (R : Type u) [NonAssocRing R] : Type u`Subring R` is the type of subrings of `R`. A subring of `R` is a subset `s` that is a
    multiplicative submonoid and an additive subgroup. Note in particular that it shares the
    same 0 and 1 as R.  (Aι → Type u_3 iι)}
      [hCopenFact (∀ (i : ι), IsOpen ↑(C i)) :
        FactFact (p : Prop) : PropWrapper for adding elementary propositions to the type class systems.
    Warning: this can easily be abused. See the rest of this docstring for details.
    
    Certain propositions should not be treated as a class globally,
    but sometimes it is very convenient to be able to use the type class system
    in specific circumstances.
    
    For example, `ZMod p` is a field if and only if `p` is a prime number.
    In order to be able to find this field instance automatically by type class search,
    we have to turn `p.Prime` into an instance implicit assumption.
    
    On the other hand, making `Nat.Prime` a class would require a major refactoring of the library,
    and it is questionable whether making `Nat.Prime` a class is desirable at all.
    The compromise is to add the assumption `[Fact p.Prime]` to `ZMod.instField`.
    
    In particular, this class is not intended for turning the type class system
    into an automated theorem prover for first-order logic.  (∀ (iι : ιType u_2), IsOpenIsOpen.{u} {X : Type u} [TopologicalSpace X] : Set X → Prop`IsOpen s` means that `s` is open in the ambient topological space on `X`  (C(i : ι) → Subring (A i) iι))]
      [hCcompact∀ (i : ι), CompactSpace ↥(C i) :
         (iι : ιType u_2), CompactSpaceCompactSpace.{u_1} (X : Type u_1) [TopologicalSpace X] : PropType class for compact spaces. Separation is sometimes included in the definition, especially
    in the French literature, but we do not include it here.  (C(i : ι) → Subring (A i) iι)]
      [ (iι : ιType u_2),
          SecondCountableTopologySecondCountableTopology.{u} (α : Type u) [t : TopologicalSpace α] : PropA second-countable space is one with a countable basis.  (Aι → Type u_3 iι)]
      [CountableCountable.{u} (α : Sort u) : PropA type `α` is countable if there exists an injective map `α → ℕ`.  ιType u_2]
      (u(RestrictedProduct (fun i ↦ A i) (fun i ↦ ↑(C i)) Filter.cofinite)ˣ :
        (RestrictedProductRestrictedProduct.{u_1, u_2} {ι : Type u_1} (R : ι → Type u_2) (A : (i : ι) → Set (R i)) (𝓕 : Filter ι) :
      Type (max u_1 u_2)The **restricted product** of a family `R : ι → Type*` of types, relative to subsets
    `A : (i : ι) → Set (R i)` and the filter `𝓕 : Filter ι`, is the set of all `x : Π i, R i`
    such that the set `{j | x j ∈ A j}` belongs to `𝓕`. We denote it by `Πʳ i, [R i, A i]_[𝓕]`.
    
    The most common use case is with `𝓕 = cofinite`, in which case the restricted product is the set
    of all `x : Π i, R i` such that `x j ∈ A j` for all but finitely many `j`. We denote it simply
    by `Πʳ i, [R i, A i]`.
    
    Similarly, if `S` is a principal filter, the restricted product `Πʳ i, [R i, A i]_[𝓟 s]`
    is the set of all `x : Π i, R i` such that `∀ j ∈ S, x j ∈ A j`.  (fun iι  Aι → Type u_3 iι)
            (fun iι  (C(i : ι) → Subring (A i) iι))
            Filter.cofiniteFilter.cofinite.{u_2} {α : Type u_2} : Filter αThe cofinite filter is the filter of subsets whose complements are finite. )ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     u(RestrictedProduct (fun i ↦ A i) (fun i ↦ ↑(C i)) Filter.cofinite)ˣ =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        ∏ᶠfinprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise.  (iι : ιType u_2),finprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise. 
          MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
            ((MulEquiv.restrictedProductUnitsMulEquiv.restrictedProductUnits.{u_6, u_7, u_8} {ι : Type u_6} {ℱ : Filter ι} {M : ι → Type u_7}
      [(i : ι) → Monoid (M i)] {S : ι → Type u_8} [(i : ι) → SetLike (S i) (M i)] [∀ (i : ι), SubmonoidClass (S i) (M i)]
      {A : (i : ι) → S i} :
      (RestrictedProduct (fun i ↦ M i) (fun i ↦ ↑(A i)) ℱ)ˣ ≃*
        RestrictedProduct (fun i ↦ (M i)ˣ) (fun i ↦ ↑(Submonoid.ofClass (A i)).units) ℱThe isomorphism between the units of a restricted product of monoids,
    and the restricted product of the units of the monoids. 
                u(RestrictedProduct (fun i ↦ A i) (fun i ↦ ↑(C i)) Filter.cofinite)ˣ)
              iι)
Proof

Uses Theorem 10.30. By definition of restricted product we have u_i\in C_i for all but finitely many i. Note also that u has an inverse v=(v_i)_i with v_i\in C_i for all but finitely many i. The fact that u_iv_i=v_iu_i=1 means that u_i,v_i\in C_i^\times for all but finitely many i. Thus the previous theorem MeasureTheory.addEquivAddHaarChar_restrictedProductCongrRight applies.

10.9. Adeles🔗

Corollary10.32
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

If K is a number field and V is a K-module, then the natural isomorphism V \otimes_K \A_K = V \otimes_{\Q} \A_{\Q} induced by the natural isomorphism \A_K = K \otimes_K \A_{\Q} is a homeomorphism if the left-hand side has the \A_K-module topology and the right-hand side has the \A_{\Q}-module topology.

Lean code for Corollary10.321 definition
  • complete
    def NumberField.AdeleRing.ModuleBaseChangeContinuousLinearEquiv.{u_1, u_2,
        u_3}NumberField.AdeleRing.ModuleBaseChangeContinuousLinearEquiv.{u_1, u_2, u_3} (K : Type u_1) (L : Type u_2) [Field K]
      [NumberField K] [Field L] [NumberField L] (V : Type u_3) [AddCommGroup V] [Module L V] [Module K V] [Algebra K L]
      [IsScalarTower K L V]
      [Algebra (IsDedekindDomain.FiniteAdeleRing (NumberField.RingOfIntegers K) K)
          (IsDedekindDomain.FiniteAdeleRing (NumberField.RingOfIntegers L) L)]
      [IsDedekindDomain.FiniteAdeleRing.ComapFiberwiseSMul (NumberField.RingOfIntegers K) K L
          (NumberField.RingOfIntegers L)]
      [FiniteDimensional L V] [FiniteDimensional K V]
      [Algebra (NumberField.InfiniteAdeleRing K) (NumberField.InfiniteAdeleRing L)]
      [Algebra (NumberField.AdeleRing (NumberField.RingOfIntegers K) K)
          (NumberField.AdeleRing (NumberField.RingOfIntegers L) L)]
      [Pi.FiberwiseSMul (fun a ↦ a.comap (algebraMap K L)) NumberField.InfinitePlace.Completion
          NumberField.InfinitePlace.Completion]
      [Prod.IsProdSMul (NumberField.InfiniteAdeleRing K) (IsDedekindDomain.FiniteAdeleRing (NumberField.RingOfIntegers K) K)
          (NumberField.InfiniteAdeleRing L) (IsDedekindDomain.FiniteAdeleRing (NumberField.RingOfIntegers L) L)]
      [Module (NumberField.AdeleRing (NumberField.RingOfIntegers K) K)
          (TensorProduct L V (NumberField.AdeleRing (NumberField.RingOfIntegers L) L))]
      [IsScalarTower (NumberField.AdeleRing (NumberField.RingOfIntegers K) K)
          (NumberField.AdeleRing (NumberField.RingOfIntegers L) L)
          (TensorProduct L V (NumberField.AdeleRing (NumberField.RingOfIntegers L) L))]
      [IsModuleTopology (NumberField.AdeleRing (NumberField.RingOfIntegers K) K)
          (NumberField.AdeleRing (NumberField.RingOfIntegers L) L)]
      [Module.Finite (NumberField.AdeleRing (NumberField.RingOfIntegers K) K)
          (NumberField.AdeleRing (NumberField.RingOfIntegers L) L)] :
      TensorProduct K V (NumberField.AdeleRing (NumberField.RingOfIntegers K) K) ≃L[L]
        TensorProduct L V (NumberField.AdeleRing (NumberField.RingOfIntegers L) L)𝔸_K ⊗[K] V = 𝔸_L ⊗[L] V as topological additive groups
    for V an L-module and K ⊆ L number fields. 
      (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) (LType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_1] [NumberFieldNumberField.{u_1} (K : Type u_1) [Field K] : PropA number field is a field which has characteristic zero and is finite
    dimensional over ℚ.  KType u_1] [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  LType u_2]
      [NumberFieldNumberField.{u_1} (K : Type u_1) [Field K] : PropA number field is a field which has characteristic zero and is finite
    dimensional over ℚ.  LType u_2] (VType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.  VType u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring.  LType u_2 VType u_3]
      [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring.  KType u_1 VType u_3] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     KType u_1 LType u_2] [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative
    action of `M` on `α` is determined by the multiplicative actions of `M` on `N`
    and `N` on `α`.  KType u_1 LType u_2 VType u_3]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
    
          (IsDedekindDomain.FiniteAdeleRingIsDedekindDomain.FiniteAdeleRing.{u_1, u_2} (R : Type u_1) [CommRing R] [IsDedekindDomain R] (K : Type u_2) [Field K]
      [Algebra R K] [IsFractionRing R K] : Type (max u_2 u_1)If `K` is the field of fractions of the Dedekind domain `R` then `FiniteAdeleRing R K` is
    the ring of finite adeles of `K`, defined as the restricted product of the completions
    `K_v` with respect to the subrings `R_v`. Here `v` runs through the nonzero primes of `R`
    and the restricted product is the subring of `∏_v K_v` consisting of elements which
    are in `R_v` for all but finitely many `v`.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1)
            KType u_1)
          (IsDedekindDomain.FiniteAdeleRingIsDedekindDomain.FiniteAdeleRing.{u_1, u_2} (R : Type u_1) [CommRing R] [IsDedekindDomain R] (K : Type u_2) [Field K]
      [Algebra R K] [IsFractionRing R K] : Type (max u_2 u_1)If `K` is the field of fractions of the Dedekind domain `R` then `FiniteAdeleRing R K` is
    the ring of finite adeles of `K`, defined as the restricted product of the completions
    `K_v` with respect to the subrings `R_v`. Here `v` runs through the nonzero primes of `R`
    and the restricted product is the subring of `∏_v K_v` consisting of elements which
    are in `R_v` for all but finitely many `v`.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2)
            LType u_2)]
      [IsDedekindDomain.FiniteAdeleRing.ComapFiberwiseSMulIsDedekindDomain.FiniteAdeleRing.ComapFiberwiseSMul.{u_1, u_2, u_3, u_4} (A : Type u_1) (K : Type u_2) (L : Type u_3)
      (B : Type u_4) [CommRing A] [CommRing B] [Algebra A B] [Field K] [Field L] [Algebra A K] [IsFractionRing A K]
      [Algebra B L] [IsDedekindDomain A] [Algebra K L] [Algebra A L] [IsScalarTower A B L] [IsScalarTower A K L]
      [Module.Finite A B] [IsDedekindDomain B] [IsFractionRing B L]
      [Algebra (IsDedekindDomain.FiniteAdeleRing A K) (IsDedekindDomain.FiniteAdeleRing B L)] : PropUtility class which specialises `RestrictedProduct.FiberwiseSMul` to the case of
    finite adele rings. 
          (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1 LType u_2 (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2)]
      [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  LType u_2 VType u_3] [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  KType u_1 VType u_3]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     (NumberField.InfiniteAdeleRingNumberField.InfiniteAdeleRing.{u_1} (K : Type u_1) [Field K] : Type u_1The infinite adele ring of a number field.  KType u_1)
          (NumberField.InfiniteAdeleRingNumberField.InfiniteAdeleRing.{u_1} (K : Type u_1) [Field K] : Type u_1The infinite adele ring of a number field.  LType u_2)]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2)]
      [Pi.FiberwiseSMulPi.FiberwiseSMul.{u_1, u_2, u_3, u_4} {α : Type u_1} {β : Type u_2} (f : α → β) (R : β → Type u_3) (M : α → Type u_4)
      [(b : β) → Semiring (R b)] [(a : α) → AddCommMonoid (M a)] [(b : β) → (σ : { a // f a = b }) → Module (R b) (M ↑σ)]
      [Module ((b : β) → R b) ((a : α) → M a)] : PropA class encoding the product scalar multiplication of `∀ b : β, R b` on `∀ a : α, M a`
    that is determined by the fibers of a supplied function `f : α → β` on indices.
    Specifically, if `f a = b`, then `(r • x) a = r b • x a` for any `r : ∀ b, R b` and
    `x : ∀ a, M a`.  (fun aNumberField.InfinitePlace L  aNumberField.InfinitePlace L.comapNumberField.InfinitePlace.comap.{u_1, u_2} {k : Type u_1} [Field k] {K : Type u_2} [Field K]
      (w : NumberField.InfinitePlace K) (f : k →+* K) : NumberField.InfinitePlace kThe restriction of an infinite place along an embedding.  (algebraMapAlgebra.algebraMap.{u, v} (R : Type u) (A : Type v) {inst✝ : CommSemiring R} {inst✝¹ : Semiring A}
      [self : Algebra R A] : R →+* AEmbedding `R →+* A` given by `Algebra` structure.  KType u_1 LType u_2))
          NumberField.InfinitePlace.CompletionNumberField.InfinitePlace.Completion.{u_1} {K : Type u_1} [Field K] (v : NumberField.InfinitePlace K) : Type u_1The completion of a number field at an infinite place. 
          NumberField.InfinitePlace.CompletionNumberField.InfinitePlace.Completion.{u_1} {K : Type u_1} [Field K] (v : NumberField.InfinitePlace K) : Type u_1The completion of a number field at an infinite place. ]
      [Prod.IsProdSMulProd.IsProdSMul.{u_1, u_2, u_3, u_4} (R : Type u_1) (S : Type u_2) (M : Type u_3) (N : Type u_4) [SMul R M] [SMul S N]
      [SMul (R × S) (M × N)] : PropA class encoding the product scalar multiplication of `R × S` on `M × N` of the format
    `x • y = (x.1 • y.1, x.2 • y.2)`. Use this as an assumption instead of constructing
    the `R × S` action on `M × N`.  (NumberField.InfiniteAdeleRingNumberField.InfiniteAdeleRing.{u_1} (K : Type u_1) [Field K] : Type u_1The infinite adele ring of a number field.  KType u_1)
          (IsDedekindDomain.FiniteAdeleRingIsDedekindDomain.FiniteAdeleRing.{u_1, u_2} (R : Type u_1) [CommRing R] [IsDedekindDomain R] (K : Type u_2) [Field K]
      [Algebra R K] [IsFractionRing R K] : Type (max u_2 u_1)If `K` is the field of fractions of the Dedekind domain `R` then `FiniteAdeleRing R K` is
    the ring of finite adeles of `K`, defined as the restricted product of the completions
    `K_v` with respect to the subrings `R_v`. Here `v` runs through the nonzero primes of `R`
    and the restricted product is the subring of `∏_v K_v` consisting of elements which
    are in `R_v` for all but finitely many `v`.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1)
            KType u_1)
          (NumberField.InfiniteAdeleRingNumberField.InfiniteAdeleRing.{u_1} (K : Type u_1) [Field K] : Type u_1The infinite adele ring of a number field.  LType u_2)
          (IsDedekindDomain.FiniteAdeleRingIsDedekindDomain.FiniteAdeleRing.{u_1, u_2} (R : Type u_1) [CommRing R] [IsDedekindDomain R] (K : Type u_2) [Field K]
      [Algebra R K] [IsFractionRing R K] : Type (max u_2 u_1)If `K` is the field of fractions of the Dedekind domain `R` then `FiniteAdeleRing R K` is
    the ring of finite adeles of `K`, defined as the restricted product of the completions
    `K_v` with respect to the subrings `R_v`. Here `v` runs through the nonzero primes of `R`
    and the restricted product is the subring of `∏_v K_v` consisting of elements which
    are in `R_v` for all but finitely many `v`.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2)
            LType u_2)]
      [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring.  (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  LType u_2 VType u_3
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2))]
      [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative
    action of `M` on `α` is determined by the multiplicative actions of `M` on `N`
    and `N` on `α`. 
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2)
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  LType u_2 VType u_3
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2))]
      [IsModuleTopologyIsModuleTopology.{u_1, u_2} (R : Type u_1) [TopologicalSpace R] (A : Type u_2) [Add A] [SMul R A]
      [τA : TopologicalSpace A] : PropA class asserting that the topology on a module over a topological ring `R` is
    the module topology. See `moduleTopology` for more discussion of the module topology. 
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2)]
      [Module.FiniteModule.Finite.{u_1, u_4} (R : Type u_1) (M : Type u_4) [Semiring R] [AddCommMonoid M] [Module R M] : PropA module over a semiring is `Module.Finite` if it is finitely generated as a module. 
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2)] :
      TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 VType u_3
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1) ≃L[ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`. LType u_2]ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`. 
        TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  LType u_2 VType u_3
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2)
    def NumberField.AdeleRing.ModuleBaseChangeContinuousLinearEquiv.{u_1,
        u_2, u_3}NumberField.AdeleRing.ModuleBaseChangeContinuousLinearEquiv.{u_1, u_2, u_3} (K : Type u_1) (L : Type u_2) [Field K]
      [NumberField K] [Field L] [NumberField L] (V : Type u_3) [AddCommGroup V] [Module L V] [Module K V] [Algebra K L]
      [IsScalarTower K L V]
      [Algebra (IsDedekindDomain.FiniteAdeleRing (NumberField.RingOfIntegers K) K)
          (IsDedekindDomain.FiniteAdeleRing (NumberField.RingOfIntegers L) L)]
      [IsDedekindDomain.FiniteAdeleRing.ComapFiberwiseSMul (NumberField.RingOfIntegers K) K L
          (NumberField.RingOfIntegers L)]
      [FiniteDimensional L V] [FiniteDimensional K V]
      [Algebra (NumberField.InfiniteAdeleRing K) (NumberField.InfiniteAdeleRing L)]
      [Algebra (NumberField.AdeleRing (NumberField.RingOfIntegers K) K)
          (NumberField.AdeleRing (NumberField.RingOfIntegers L) L)]
      [Pi.FiberwiseSMul (fun a ↦ a.comap (algebraMap K L)) NumberField.InfinitePlace.Completion
          NumberField.InfinitePlace.Completion]
      [Prod.IsProdSMul (NumberField.InfiniteAdeleRing K) (IsDedekindDomain.FiniteAdeleRing (NumberField.RingOfIntegers K) K)
          (NumberField.InfiniteAdeleRing L) (IsDedekindDomain.FiniteAdeleRing (NumberField.RingOfIntegers L) L)]
      [Module (NumberField.AdeleRing (NumberField.RingOfIntegers K) K)
          (TensorProduct L V (NumberField.AdeleRing (NumberField.RingOfIntegers L) L))]
      [IsScalarTower (NumberField.AdeleRing (NumberField.RingOfIntegers K) K)
          (NumberField.AdeleRing (NumberField.RingOfIntegers L) L)
          (TensorProduct L V (NumberField.AdeleRing (NumberField.RingOfIntegers L) L))]
      [IsModuleTopology (NumberField.AdeleRing (NumberField.RingOfIntegers K) K)
          (NumberField.AdeleRing (NumberField.RingOfIntegers L) L)]
      [Module.Finite (NumberField.AdeleRing (NumberField.RingOfIntegers K) K)
          (NumberField.AdeleRing (NumberField.RingOfIntegers L) L)] :
      TensorProduct K V (NumberField.AdeleRing (NumberField.RingOfIntegers K) K) ≃L[L]
        TensorProduct L V (NumberField.AdeleRing (NumberField.RingOfIntegers L) L)𝔸_K ⊗[K] V = 𝔸_L ⊗[L] V as topological additive groups
    for V an L-module and K ⊆ L number fields. 
      (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) (LType u_2 : Type u_2A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_1]
      [NumberFieldNumberField.{u_1} (K : Type u_1) [Field K] : PropA number field is a field which has characteristic zero and is finite
    dimensional over ℚ.  KType u_1] [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  LType u_2]
      [NumberFieldNumberField.{u_1} (K : Type u_1) [Field K] : PropA number field is a field which has characteristic zero and is finite
    dimensional over ℚ.  LType u_2] (VType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. )
      [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.  VType u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring.  LType u_2 VType u_3]
      [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring.  KType u_1 VType u_3] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     KType u_1 LType u_2]
      [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative
    action of `M` on `α` is determined by the multiplicative actions of `M` on `N`
    and `N` on `α`.  KType u_1 LType u_2 VType u_3]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
    
          (IsDedekindDomain.FiniteAdeleRingIsDedekindDomain.FiniteAdeleRing.{u_1, u_2} (R : Type u_1) [CommRing R] [IsDedekindDomain R] (K : Type u_2) [Field K]
      [Algebra R K] [IsFractionRing R K] : Type (max u_2 u_1)If `K` is the field of fractions of the Dedekind domain `R` then `FiniteAdeleRing R K` is
    the ring of finite adeles of `K`, defined as the restricted product of the completions
    `K_v` with respect to the subrings `R_v`. Here `v` runs through the nonzero primes of `R`
    and the restricted product is the subring of `∏_v K_v` consisting of elements which
    are in `R_v` for all but finitely many `v`.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (IsDedekindDomain.FiniteAdeleRingIsDedekindDomain.FiniteAdeleRing.{u_1, u_2} (R : Type u_1) [CommRing R] [IsDedekindDomain R] (K : Type u_2) [Field K]
      [Algebra R K] [IsFractionRing R K] : Type (max u_2 u_1)If `K` is the field of fractions of the Dedekind domain `R` then `FiniteAdeleRing R K` is
    the ring of finite adeles of `K`, defined as the restricted product of the completions
    `K_v` with respect to the subrings `R_v`. Here `v` runs through the nonzero primes of `R`
    and the restricted product is the subring of `∏_v K_v` consisting of elements which
    are in `R_v` for all but finitely many `v`.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2)]
      [IsDedekindDomain.FiniteAdeleRing.ComapFiberwiseSMulIsDedekindDomain.FiniteAdeleRing.ComapFiberwiseSMul.{u_1, u_2, u_3, u_4} (A : Type u_1) (K : Type u_2) (L : Type u_3)
      (B : Type u_4) [CommRing A] [CommRing B] [Algebra A B] [Field K] [Field L] [Algebra A K] [IsFractionRing A K]
      [Algebra B L] [IsDedekindDomain A] [Algebra K L] [Algebra A L] [IsScalarTower A B L] [IsScalarTower A K L]
      [Module.Finite A B] [IsDedekindDomain B] [IsFractionRing B L]
      [Algebra (IsDedekindDomain.FiniteAdeleRing A K) (IsDedekindDomain.FiniteAdeleRing B L)] : PropUtility class which specialises `RestrictedProduct.FiberwiseSMul` to the case of
    finite adele rings. 
          (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1 LType u_2
          (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2)]
      [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  LType u_2 VType u_3]
      [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  KType u_1 VType u_3]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
    
          (NumberField.InfiniteAdeleRingNumberField.InfiniteAdeleRing.{u_1} (K : Type u_1) [Field K] : Type u_1The infinite adele ring of a number field.  KType u_1)
          (NumberField.InfiniteAdeleRingNumberField.InfiniteAdeleRing.{u_1} (K : Type u_1) [Field K] : Type u_1The infinite adele ring of a number field.  LType u_2)]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
    
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2)]
      [Pi.FiberwiseSMulPi.FiberwiseSMul.{u_1, u_2, u_3, u_4} {α : Type u_1} {β : Type u_2} (f : α → β) (R : β → Type u_3) (M : α → Type u_4)
      [(b : β) → Semiring (R b)] [(a : α) → AddCommMonoid (M a)] [(b : β) → (σ : { a // f a = b }) → Module (R b) (M ↑σ)]
      [Module ((b : β) → R b) ((a : α) → M a)] : PropA class encoding the product scalar multiplication of `∀ b : β, R b` on `∀ a : α, M a`
    that is determined by the fibers of a supplied function `f : α → β` on indices.
    Specifically, if `f a = b`, then `(r • x) a = r b • x a` for any `r : ∀ b, R b` and
    `x : ∀ a, M a`. 
          (fun aNumberField.InfinitePlace L  aNumberField.InfinitePlace L.comapNumberField.InfinitePlace.comap.{u_1, u_2} {k : Type u_1} [Field k] {K : Type u_2} [Field K]
      (w : NumberField.InfinitePlace K) (f : k →+* K) : NumberField.InfinitePlace kThe restriction of an infinite place along an embedding.  (algebraMapAlgebra.algebraMap.{u, v} (R : Type u) (A : Type v) {inst✝ : CommSemiring R} {inst✝¹ : Semiring A}
      [self : Algebra R A] : R →+* AEmbedding `R →+* A` given by `Algebra` structure.  KType u_1 LType u_2))
          NumberField.InfinitePlace.CompletionNumberField.InfinitePlace.Completion.{u_1} {K : Type u_1} [Field K] (v : NumberField.InfinitePlace K) : Type u_1The completion of a number field at an infinite place. 
          NumberField.InfinitePlace.CompletionNumberField.InfinitePlace.Completion.{u_1} {K : Type u_1} [Field K] (v : NumberField.InfinitePlace K) : Type u_1The completion of a number field at an infinite place. ]
      [Prod.IsProdSMulProd.IsProdSMul.{u_1, u_2, u_3, u_4} (R : Type u_1) (S : Type u_2) (M : Type u_3) (N : Type u_4) [SMul R M] [SMul S N]
      [SMul (R × S) (M × N)] : PropA class encoding the product scalar multiplication of `R × S` on `M × N` of the format
    `x • y = (x.1 • y.1, x.2 • y.2)`. Use this as an assumption instead of constructing
    the `R × S` action on `M × N`. 
          (NumberField.InfiniteAdeleRingNumberField.InfiniteAdeleRing.{u_1} (K : Type u_1) [Field K] : Type u_1The infinite adele ring of a number field.  KType u_1)
          (IsDedekindDomain.FiniteAdeleRingIsDedekindDomain.FiniteAdeleRing.{u_1, u_2} (R : Type u_1) [CommRing R] [IsDedekindDomain R] (K : Type u_2) [Field K]
      [Algebra R K] [IsFractionRing R K] : Type (max u_2 u_1)If `K` is the field of fractions of the Dedekind domain `R` then `FiniteAdeleRing R K` is
    the ring of finite adeles of `K`, defined as the restricted product of the completions
    `K_v` with respect to the subrings `R_v`. Here `v` runs through the nonzero primes of `R`
    and the restricted product is the subring of `∏_v K_v` consisting of elements which
    are in `R_v` for all but finitely many `v`.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (NumberField.InfiniteAdeleRingNumberField.InfiniteAdeleRing.{u_1} (K : Type u_1) [Field K] : Type u_1The infinite adele ring of a number field.  LType u_2)
          (IsDedekindDomain.FiniteAdeleRingIsDedekindDomain.FiniteAdeleRing.{u_1, u_2} (R : Type u_1) [CommRing R] [IsDedekindDomain R] (K : Type u_2) [Field K]
      [Algebra R K] [IsFractionRing R K] : Type (max u_2 u_1)If `K` is the field of fractions of the Dedekind domain `R` then `FiniteAdeleRing R K` is
    the ring of finite adeles of `K`, defined as the restricted product of the completions
    `K_v` with respect to the subrings `R_v`. Here `v` runs through the nonzero primes of `R`
    and the restricted product is the subring of `∏_v K_v` consisting of elements which
    are in `R_v` for all but finitely many `v`.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2)]
      [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring. 
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  LType u_2 VType u_3
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
              (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2)
              LType u_2))]
      [IsScalarTowerIsScalarTower.{u_9, u_10, u_11} (M : Type u_9) (N : Type u_10) (α : Type u_11) [SMul M N] [SMul N α] [SMul M α] : PropAn instance of `IsScalarTower M N α` states that the multiplicative
    action of `M` on `α` is determined by the multiplicative actions of `M` on `N`
    and `N` on `α`. 
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2)
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  LType u_2 VType u_3
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
              (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2)
              LType u_2))]
      [IsModuleTopologyIsModuleTopology.{u_1, u_2} (R : Type u_1) [TopologicalSpace R] (A : Type u_2) [Add A] [SMul R A]
      [τA : TopologicalSpace A] : PropA class asserting that the topology on a module over a topological ring `R` is
    the module topology. See `moduleTopology` for more discussion of the module topology. 
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2)]
      [Module.FiniteModule.Finite.{u_1, u_4} (R : Type u_1) (M : Type u_4) [Semiring R] [AddCommMonoid M] [Module R M] : PropA module over a semiring is `Module.Finite` if it is finitely generated as a module. 
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1)
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2)
            LType u_2)] :
      TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 VType u_3
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1)
            KType u_1) ≃L[ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`. LType u_2]ContinuousLinearEquiv.{u_1, u_2, u_3, u_4} {R : Type u_1} {S : Type u_2} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_3) [TopologicalSpace M] [AddCommMonoid M]
      (M₂ : Type u_4) [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_3 u_4)Continuous linear equivalences between modules. We only put the type classes that are necessary
    for the definition, although in applications `M` and `M₂` will be topological modules over the
    topological semiring `R`. 
        TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  LType u_2 VType u_3
          (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     LType u_2) LType u_2)
    𝔸_K ⊗[K] V = 𝔸_L ⊗[L] V as topological additive groups
    for V an L-module and K ⊆ L number fields. 
Proof

Uses [??]. Lemma IsModuleTopology.continuous_bilinear_of_finite_left tells us that V\otimes_K\A_K has the \A_{\Q}-module topology, and it is easily checked that the isomorphism is \A_{\Q}-linear and hence automatically continuous.

Note that in Lean this is proved for a general extension L/K rather than only for K/\Q.

Theorem10.33
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
XL∃∀Nused by 1

Let B be a finite-dimensional central simple K-algebra. Say u ∈ B_{\A}^\times, and define \ell_u and r_u : B_{\A} → B_{\A} by \ell_u(x)=ux and r_u(x)=xu. Then d_{B_{\A}}(\ell_u)=d_{B_{\A}}(r_u).

Proof

Uses Theorem 10.30 and Corollary 10.20. We think of B_{\A} as B\otimes_K\A_K. If u=(u_v) as v runs through the places of K, then d_{B_{\A}}(\ell_u)=\prod_v d_{B_v}(\ell_{u_v}) by MeasureTheory.addEquivAddHaarChar_restrictedProductCongrRight, and the product is finite. By the central-simple-algebra formula established earlier this equals \prod_v d_{B_v}(r_{u_v}), and again by MeasureTheory.addEquivAddHaarChar_restrictedProductCongrRight this is d_{B_{\A}}(r_u).

The previous theorem only applies to inner forms of matrix algebras, but the below theorem, a generalization of the adelic product formula, is valid for any finite-dimensional K-algebra. Before we state it let's remind ourselves of the product formula for \Q, and restate it in the language of these Haar characters.

Lemma10.34
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 1

If x\in\A_{\Q}^\times, then \delta_{\A_{\Q}}(x)=\prod_v|x_v|_v.

Lean code for Lemma10.341 theorem
  • complete
    theorem MeasureTheory.ringHaarChar_adeles_ratMeasureTheory.ringHaarChar_adeles_rat (x : (NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ)ˣ) :
      MeasureTheory.ringHaarChar x =
        MeasureTheory.ringHaarChar (MulEquiv.prodUnits x).1 *
          ∏ᶠ (p : IsDedekindDomain.HeightOneSpectrum (NumberField.RingOfIntegers ℚ)),
            MeasureTheory.ringHaarChar ((MulEquiv.restrictedProductUnits (MulEquiv.prodUnits x).2) p)
      (x(NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ)ˣ : (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    ) Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    )ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     x(NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ)ˣ =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     (MulEquiv.prodUnitsMulEquiv.prodUnits.{u_3, u_4} {M : Type u_3} {N : Type u_4} [Monoid M] [Monoid N] : (M × N)ˣ ≃* Mˣ × NˣThe monoid equivalence between units of a product of two monoids, and the product of the
    units of each monoid.  x(NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ)ˣ).1 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          ∏ᶠfinprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise.  (pIsDedekindDomain.HeightOneSpectrum (NumberField.RingOfIntegers ℚ) :
            IsDedekindDomain.HeightOneSpectrumIsDedekindDomain.HeightOneSpectrum.{u_1} (R : Type u_1) [CommRing R] : Type u_1The height one prime spectrum of a Dedekind domain `R` is the type of nonzero prime ideals of
    `R`. Note that this equals the maximal spectrum if `R` has Krull dimension 1. 
              (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    )),finprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise. 
            MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
              ((MulEquiv.restrictedProductUnitsMulEquiv.restrictedProductUnits.{u_6, u_7, u_8} {ι : Type u_6} {ℱ : Filter ι} {M : ι → Type u_7}
      [(i : ι) → Monoid (M i)] {S : ι → Type u_8} [(i : ι) → SetLike (S i) (M i)] [∀ (i : ι), SubmonoidClass (S i) (M i)]
      {A : (i : ι) → S i} :
      (RestrictedProduct (fun i ↦ M i) (fun i ↦ ↑(A i)) ℱ)ˣ ≃*
        RestrictedProduct (fun i ↦ (M i)ˣ) (fun i ↦ ↑(Submonoid.ofClass (A i)).units) ℱThe isomorphism between the units of a restricted product of monoids,
    and the restricted product of the units of the monoids.  (MulEquiv.prodUnitsMulEquiv.prodUnits.{u_3, u_4} {M : Type u_3} {N : Type u_4} [Monoid M] [Monoid N] : (M × N)ˣ ≃* Mˣ × NˣThe monoid equivalence between units of a product of two monoids, and the product of the
    units of each monoid.  x(NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ)ˣ).2) pIsDedekindDomain.HeightOneSpectrum (NumberField.RingOfIntegers ℚ))
    theorem MeasureTheory.ringHaarChar_adeles_ratMeasureTheory.ringHaarChar_adeles_rat (x : (NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ)ˣ) :
      MeasureTheory.ringHaarChar x =
        MeasureTheory.ringHaarChar (MulEquiv.prodUnits x).1 *
          ∏ᶠ (p : IsDedekindDomain.HeightOneSpectrum (NumberField.RingOfIntegers ℚ)),
            MeasureTheory.ringHaarChar ((MulEquiv.restrictedProductUnits (MulEquiv.prodUnits x).2) p)
      (x(NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ)ˣ :
        (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
            (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    )
            Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    )ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
     x(NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ)ˣ =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
            (MulEquiv.prodUnitsMulEquiv.prodUnits.{u_3, u_4} {M : Type u_3} {N : Type u_4} [Monoid M] [Monoid N] : (M × N)ˣ ≃* Mˣ × NˣThe monoid equivalence between units of a product of two monoids, and the product of the
    units of each monoid.  x(NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ)ˣ).1 *HMul.hMul.{u, v, w} {α : Type u} {β : Type v} {γ : outParam (Type w)} [self : HMul α β γ] : α → β → γ`a * b` computes the product of `a` and `b`.
    The meaning of this notation is type-dependent. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `*` in identifiers is `mul`.
          ∏ᶠfinprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise.  (pIsDedekindDomain.HeightOneSpectrum (NumberField.RingOfIntegers ℚ) :
            IsDedekindDomain.HeightOneSpectrumIsDedekindDomain.HeightOneSpectrum.{u_1} (R : Type u_1) [CommRing R] : Type u_1The height one prime spectrum of a Dedekind domain `R` is the type of nonzero prime ideals of
    `R`. Note that this equals the maximal spectrum if `R` has Krull dimension 1. 
              (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    )),finprod.{u_7, u_8} {M : Type u_7} {α : Sort u_8} [CommMonoid M] (f : α → M) : MProduct of `f x` as `x` ranges over the elements of the multiplicative support of `f`, if it's
    finite. One otherwise. 
            MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
              ((MulEquiv.restrictedProductUnitsMulEquiv.restrictedProductUnits.{u_6, u_7, u_8} {ι : Type u_6} {ℱ : Filter ι} {M : ι → Type u_7}
      [(i : ι) → Monoid (M i)] {S : ι → Type u_8} [(i : ι) → SetLike (S i) (M i)] [∀ (i : ι), SubmonoidClass (S i) (M i)]
      {A : (i : ι) → S i} :
      (RestrictedProduct (fun i ↦ M i) (fun i ↦ ↑(A i)) ℱ)ˣ ≃*
        RestrictedProduct (fun i ↦ (M i)ˣ) (fun i ↦ ↑(Submonoid.ofClass (A i)).units) ℱThe isomorphism between the units of a restricted product of monoids,
    and the restricted product of the units of the monoids. 
                  (MulEquiv.prodUnitsMulEquiv.prodUnits.{u_3, u_4} {M : Type u_3} {N : Type u_4} [Monoid M] [Monoid N] : (M × N)ˣ ≃* Mˣ × NˣThe monoid equivalence between units of a product of two monoids, and the product of the
    units of each monoid.  x(NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ)ˣ).2)
                pIsDedekindDomain.HeightOneSpectrum (NumberField.RingOfIntegers ℚ))
Proof

Uses Lemma 10.21, Lemma 10.10, Theorem 10.30, and [??]. By theorem MeasureTheory.addEquivAddHaarChar_prodCongr we have \delta_{\A_{\Q}}(x)=\delta_{\A_{\Q}^\infty}(x^\infty)\times\delta_{\R}(x_\infty). By lemma MeasureTheory.ringHaarChar_real we have \delta_{\R}(x_\infty)=|x|_\infty, and by theorem MeasureTheory.addEquivAddHaarChar_restrictedProductCongrRight we have \delta_{\A_{\Q}^\infty}=\prod_p\delta_{\Q_p}(x_p). By lemma MeasureTheory.ringHaarChar_padic we have \delta_{\Q_p}(x_p)=|x_p|_p, and putting everything together we get the result.

Now \A_{\Q} is a nonzero \Q-algebra and hence we have an inclusion \Q^\times\to\A_{\Q}^\times. Here is our reinterpretation of the product formula.

Lemma10.35
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

If x\in\Q^\times\subseteq\A_{\Q}^\times, then \delta_{\A_{\Q}}(x)=1.

Lean code for Lemma10.351 theorem
  • complete
    theorem MeasureTheory.ringHaarChar_adeles_units_rat_eq_oneMeasureTheory.ringHaarChar_adeles_units_rat_eq_one (x : ℚˣ) :
      MeasureTheory.ringHaarChar ((Units.map ↑(algebraMap ℚ (NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ))) x) =
        1 (xℚˣ : Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
          ((Units.mapUnits.map.{u, v} {M : Type u} {N : Type v} [Monoid M] [Monoid N] (f : M →* N) : Mˣ →* NˣThe group homomorphism on units induced by a `MonoidHom`. 
              (algebraMapAlgebra.algebraMap.{u, v} (R : Type u) (A : Type v) {inst✝ : CommSemiring R} {inst✝¹ : Semiring A}
      [self : Algebra R A] : R →+* AEmbedding `R →+* A` given by `Algebra` structure.  Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    
                  (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    ) Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    )))
            xℚˣ) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        1
    theorem MeasureTheory.ringHaarChar_adeles_units_rat_eq_oneMeasureTheory.ringHaarChar_adeles_units_rat_eq_one (x : ℚˣ) :
      MeasureTheory.ringHaarChar ((Units.map ↑(algebraMap ℚ (NumberField.AdeleRing (NumberField.RingOfIntegers ℚ) ℚ))) x) =
        1
      (xℚˣ : Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.ringHaarCharMeasureTheory.ringHaarChar.{u_1} {R : Type u_1} [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Rˣ →ₜ* NNReal`ringHaarChar : Rˣ →ₜ* ℝ≥0` is the function sending a unit of
    a locally compact topological ring `R` to the positive real factor
    which left multiplication by the unit scales additive Haar measure by.
    
          ((Units.mapUnits.map.{u, v} {M : Type u} {N : Type v} [Monoid M] [Monoid N] (f : M →* N) : Mˣ →* NˣThe group homomorphism on units induced by a `MonoidHom`. 
              (algebraMapAlgebra.algebraMap.{u, v} (R : Type u) (A : Type v) {inst✝ : CommSemiring R} {inst✝¹ : Semiring A}
      [self : Algebra R A] : R →+* AEmbedding `R →+* A` given by `Algebra` structure.  Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    
                  (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
                    (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
    
                      Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    )
                    Rat : TypeRational numbers, implemented as a pair of integers `num / den` such that the
    denominator is positive and the numerator and denominator are coprime.
    )))
            xℚˣ) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        1
Proof

Uses Lemma 10.34. By lemma MeasureTheory.ringHaarChar_adeles_rat we have \delta_{\A_{\Q}}(x)=\prod_v|x|_v. But the product formula says that this is 1. A quick proof: if x=\pm\prod_pp^{e_p}, then \prod_p|x|_p=\prod_pp^{-e_p} and |x|_\infty=\prod_pp^{e_p}, so they cancel.

Next we generalize this to finite-dimensional \Q-vector spaces.

So say V is an N-dimensional \Q-vector space, and define V_{\A}:= V\otimes_{\Q}\A_{\Q} with its \A_{\Q}-module topology. If we choose an isomorphism V\cong\Q^N, then V_{\A}\cong\A_{\Q}^N as an additive topological abelian group. In particular, V_{\A} is locally compact.

Fix a \Q-linear automorphism \phi:V\to V. By base extension, φ induces an \A_{\Q}-linear automorphism \phi_{\A} of V_{\A} which is also a homeomorphism of V_{\A} if V_{\A} is given the module topology as an \A_{\Q}-module. Our goal is

Theorem10.36
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀N
Used by 2
Hover a use site to preview it.

In the above situation, where V is a finite-dimensional \Q-vector space, \phi : V \cong V is \Q-linear, and \phi_{\A} is the base extension to V_{\A}:=V\otimes_{\Q}\A_{\Q} as a continuous linear endomorphism of V_{\A} with the \A_{\Q}-module topology, we have d_{V_{\A}}(\phi_{\A})=1.

Lean code for Theorem10.361 theorem
  • complete
    theorem MeasureTheory.addHaarScalarFactor_tensor_adeles_eq_one.{u_1, u_3}MeasureTheory.addHaarScalarFactor_tensor_adeles_eq_one.{u_1, u_3} (K : Type u_1) [Field K] [NumberField K]
      (V : Type u_3) [AddCommGroup V] [Module K V] [FiniteDimensional K V] (φ : V ≃ₗ[K] V)
      [MeasurableSpace (TensorProduct K V (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))]
      [BorelSpace (TensorProduct K V (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))] :
      MeasureTheory.addEquivAddHaarChar
          (TensorProduct.RightActions.ContinuousLinearEquiv.baseChange K
              (NumberField.AdeleRing (NumberField.RingOfIntegers K) K) V V φ).toContinuousAddEquiv =
        1
      (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_1] [NumberFieldNumberField.{u_1} (K : Type u_1) [Field K] : PropA number field is a field which has characteristic zero and is finite
    dimensional over ℚ.  KType u_1] (VType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. )
      [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.  VType u_3] [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring.  KType u_1 VType u_3] [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  KType u_1 VType u_3] (φV ≃ₗ[K] V : VType u_3 ≃ₗ[LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M]
      [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map. KType u_1]LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M]
      [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map.  VType u_3)
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 VType u_3
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1))]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 VType u_3
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1))] :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (TensorProduct.RightActions.ContinuousLinearEquiv.baseChangeTensorProduct.RightActions.ContinuousLinearEquiv.baseChange.{u_5, u_6, u_7, u_8} (R : Type u_5) [CommRing R]
      (A : Type u_6) [CommRing A] [Algebra R A] [TopologicalSpace A] (M : Type u_7) (N : Type u_8) [AddCommGroup M]
      [Module R M] [AddCommGroup N] [Module R N] [Module.Finite R M] [Module.Finite R N] (φ : M ≃ₗ[R] N) :
      TensorProduct R M A ≃L[A] TensorProduct R N AThe continuous A-linear map (A a topological ring, tensor products have the module
    topology) A ⊗[R] M ≃ A ⊗[R] N associated to an abstract R-linear isomorphism M ≃ N.  KType u_1
              (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1) VType u_3 VType u_3
              φV ≃ₗ[K] V).toContinuousAddEquivContinuousLinearEquiv.toContinuousAddEquiv.{u_1, u_4, u_8} {R₁ : Type u_1} [Semiring R₁] {M₁ : Type u_4}
      [TopologicalSpace M₁] [AddCommMonoid M₁] [Module R₁ M₁] {M : Type u_8} [TopologicalSpace M] [AddCommMonoid M]
      [Module R₁ M] (e : M₁ ≃L[R₁] M) : M₁ ≃ₜ+ MA continuous linear equivalence seen as a `ContinuousAddEquiv`.  =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        1
    theorem MeasureTheory.addHaarScalarFactor_tensor_adeles_eq_one.{u_1,
        u_3}MeasureTheory.addHaarScalarFactor_tensor_adeles_eq_one.{u_1, u_3} (K : Type u_1) [Field K] [NumberField K]
      (V : Type u_3) [AddCommGroup V] [Module K V] [FiniteDimensional K V] (φ : V ≃ₗ[K] V)
      [MeasurableSpace (TensorProduct K V (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))]
      [BorelSpace (TensorProduct K V (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))] :
      MeasureTheory.addEquivAddHaarChar
          (TensorProduct.RightActions.ContinuousLinearEquiv.baseChange K
              (NumberField.AdeleRing (NumberField.RingOfIntegers K) K) V V φ).toContinuousAddEquiv =
        1
      (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_1] [NumberFieldNumberField.{u_1} (K : Type u_1) [Field K] : PropA number field is a field which has characteristic zero and is finite
    dimensional over ℚ.  KType u_1]
      (VType u_3 : Type u_3A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [AddCommGroupAddCommGroup.{u} (G : Type u) : Type uAn additive commutative group is an additive group with commutative `(+)`.  VType u_3]
      [ModuleModule.{u, v} (R : Type u) (M : Type v) [Semiring R] [AddCommMonoid M] : Type (max u v)A module is a generalization of vector spaces to a scalar semiring.
    It consists of a scalar semiring `R` and an additive monoid of "vectors" `M`,
    connected by a "scalar multiplication" operation `r • x : M`
    (where `r : R` and `x : M`) with some natural associativity and
    distributivity axioms similar to those on a ring.  KType u_1 VType u_3] [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  KType u_1 VType u_3]
      (φV ≃ₗ[K] V : VType u_3 ≃ₗ[LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M]
      [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map. KType u_1]LinearEquiv.{u_14, u_15, u_16, u_17} {R : Type u_14} {S : Type u_15} [Semiring R] [Semiring S] (σ : R →+* S)
      {σ' : S →+* R} [RingHomInvPair σ σ'] [RingHomInvPair σ' σ] (M : Type u_16) (M₂ : Type u_17) [AddCommMonoid M]
      [AddCommMonoid M₂] [Module R M] [Module S M₂] : Type (max u_16 u_17)A linear equivalence is an invertible linear map.  VType u_3)
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 VType u_3
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
              (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1)
              KType u_1))]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 VType u_3
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
              (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1)
              KType u_1))] :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (TensorProduct.RightActions.ContinuousLinearEquiv.baseChangeTensorProduct.RightActions.ContinuousLinearEquiv.baseChange.{u_5, u_6, u_7, u_8} (R : Type u_5) [CommRing R]
      (A : Type u_6) [CommRing A] [Algebra R A] [TopologicalSpace A] (M : Type u_7) (N : Type u_8) [AddCommGroup M]
      [Module R M] [AddCommGroup N] [Module R N] [Module.Finite R M] [Module.Finite R N] (φ : M ≃ₗ[R] N) :
      TensorProduct R M A ≃L[A] TensorProduct R N AThe continuous A-linear map (A a topological ring, tensor products have the module
    topology) A ⊗[R] M ≃ A ⊗[R] N associated to an abstract R-linear isomorphism M ≃ N. 
              KType u_1
              (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
                (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1)
                KType u_1)
              VType u_3 VType u_3 φV ≃ₗ[K] V).toContinuousAddEquivContinuousLinearEquiv.toContinuousAddEquiv.{u_1, u_4, u_8} {R₁ : Type u_1} [Semiring R₁] {M₁ : Type u_4}
      [TopologicalSpace M₁] [AddCommMonoid M₁] [Module R₁ M₁] {M : Type u_8} [TopologicalSpace M] [AddCommMonoid M]
      [Module R₁ M] (e : M₁ ≃L[R₁] M) : M₁ ≃ₜ+ MA continuous linear equivalence seen as a `ContinuousAddEquiv`.  =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        1
Proof

The original blueprint proof of this was that \phi_{\mathbb{A}} : V_{\mathbb{A}}\to V_{\mathbb{A}} could be written as a restricted product of \phi_v:V\otimes_{\Q}\Q_v \to V\otimes_{\Q}\Q_v, and hence by Theorem 10.30 we have d_{V_{\A}}(\phi_{\A})=\prod_p d_{V_p}(\phi_p)\times d_{V_\infty}(\phi_\infty), and then applying Lemma 10.17 this is equal to \prod_v\delta_{\Q_v}(\det(\phi_v))\prod_v\delta_{\Q_v}(\det(\phi))=1.

This turned out to be a nightmare to formalize, because commuting the tensor product and the restricted product cannot be done naively, as the tensor product is over \Q and the submodules in the restricted product defining \A_{\Q} are not \Q-modules. So one has to choose a \Z-lattice \Lambda in V and use the isomorphisms V\otimes_{\mathbb{Q}}\mathbb{A} =\Lambda\otimes_{\mathbb{Z}}\mathbb{A} =\Lambda\otimes_{\mathbb{Z}}\mathbb{Q}_\infty\times\prod'_p[\Lambda\otimes_{\mathbb{Z}}\mathbb{Q}_p;\Lambda\otimes_{\mathbb{Z}}\mathbb{Z}_p] =V\otimes_{\mathbb{Q}}\mathbb{Q}_\infty\times\prod'_p[V\otimes_{\mathbb{Q}}\mathbb{Q}_p;im(\Lambda\otimes_{\Z}\mathbb{Z}_p)] and check that all of these canonical maps are continuous. One of these claims boils down to yet another claim of the form "if you do something to the factors and then take the restricted product, then this is topologically the same as doing it to the restricted product", with the thing being \Lambda\otimes_{\Z} in this case. The needed homeomorphism is recorded in Corollary 10.32.

So here is the proof which we actually formalized. Say an automorphism of a finite free R-module is nice if it is a product of transvections and diagonal matrices with unit entries. Mathlib has the fact that if R is a field then all automorphisms are nice, and the base change of a nice morphism is nice. Hence \phi_{\mathbb{A}} is nice, and we can simply prove Lemma 10.17 for nice endomorphisms over a commutative ring, which gives the result immediately by the product formula.

Corollary10.37
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

If B is a finite-dimensional \Q-algebra, for example a number field, or a quaternion algebra over a number field, if B_{\A} denotes the ring B\otimes_{\Q}\A_{\Q}, and if b\in B^\times, then \delta_{B_{\A}}(b)=1.

Lean code for Corollary10.371 theorem
  • complete
    theorem NumberField.AdeleRing.units_mem_ringHaarCharacter_ker.{u_1, u_4}NumberField.AdeleRing.units_mem_ringHaarCharacter_ker.{u_1, u_4} (K : Type u_1) [Field K] [NumberField K] (B : Type u_4)
      [Ring B] [Algebra K B] [FiniteDimensional K B]
      [MeasurableSpace (TensorProduct K B (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))]
      [BorelSpace (TensorProduct K B (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))] (b : Bˣ) :
      (Units.map ↑Algebra.TensorProduct.includeLeftRingHom) b ∈
        MeasureTheory.ringHaarChar_ker (TensorProduct K B (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))Left multiplication by an element of Bˣ on B ⊗ 𝔸_K does not scale additive
    Haar measure. In other words, Bˣ is in the kernel of the `ringHaarChar` of `B ⊗ 𝔸_K`.
    
      (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_1] [NumberFieldNumberField.{u_1} (K : Type u_1) [Field K] : PropA number field is a field which has characteristic zero and is finite
    dimensional over ℚ.  KType u_1] (BType u_4 : Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  BType u_4]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     KType u_1 BType u_4] [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  KType u_1 BType u_4]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 BType u_4
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1))]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 BType u_4
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1))]
      (b : BType u_4ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      (Units.mapUnits.map.{u, v} {M : Type u} {N : Type v} [Monoid M] [Monoid N] (f : M →* N) : Mˣ →* NˣThe group homomorphism on units induced by a `MonoidHom`.  Algebra.TensorProduct.includeLeftRingHomAlgebra.TensorProduct.includeLeftRingHom.{uR, uA, uB} {R : Type uR} {A : Type uA} {B : Type uB} [CommSemiring R]
      [Semiring A] [Algebra R A] [Semiring B] [Algebra R B] : A →+* TensorProduct R A BThe ring morphism `A →+* A ⊗[R] B` sending `a` to `a ⊗ₜ 1`. ) b Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`.
        MeasureTheory.ringHaarChar_kerMeasureTheory.ringHaarChar_ker.{u_1} (R : Type u_1) [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Subgroup RˣThe kernel of the `ringHaarChar : Rˣ → ℝ≥0`, namely the units
    of a locally compact topological ring such that left multiplication
    by them does not change additive Haar measure.
    
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 BType u_4
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1))
    theorem NumberField.AdeleRing.units_mem_ringHaarCharacter_ker.{u_1,
        u_4}NumberField.AdeleRing.units_mem_ringHaarCharacter_ker.{u_1, u_4} (K : Type u_1) [Field K] [NumberField K] (B : Type u_4)
      [Ring B] [Algebra K B] [FiniteDimensional K B]
      [MeasurableSpace (TensorProduct K B (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))]
      [BorelSpace (TensorProduct K B (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))] (b : Bˣ) :
      (Units.map ↑Algebra.TensorProduct.includeLeftRingHom) b ∈
        MeasureTheory.ringHaarChar_ker (TensorProduct K B (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))Left multiplication by an element of Bˣ on B ⊗ 𝔸_K does not scale additive
    Haar measure. In other words, Bˣ is in the kernel of the `ringHaarChar` of `B ⊗ 𝔸_K`.
    
      (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_1] [NumberFieldNumberField.{u_1} (K : Type u_1) [Field K] : PropA number field is a field which has characteristic zero and is finite
    dimensional over ℚ.  KType u_1]
      (BType u_4 : Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  BType u_4] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     KType u_1 BType u_4]
      [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  KType u_1 BType u_4]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 BType u_4
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
              (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1)
              KType u_1))]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 BType u_4
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
              (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1)
              KType u_1))]
      (b : BType u_4ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      (Units.mapUnits.map.{u, v} {M : Type u} {N : Type v} [Monoid M] [Monoid N] (f : M →* N) : Mˣ →* NˣThe group homomorphism on units induced by a `MonoidHom`. 
            Algebra.TensorProduct.includeLeftRingHomAlgebra.TensorProduct.includeLeftRingHom.{uR, uA, uB} {R : Type uR} {A : Type uA} {B : Type uB} [CommSemiring R]
      [Semiring A] [Algebra R A] [Semiring B] [Algebra R B] : A →+* TensorProduct R A BThe ring morphism `A →+* A ⊗[R] B` sending `a` to `a ⊗ₜ 1`. )
          b Membership.mem.{u, v} {α : outParam (Type u)} {γ : Type v} [self : Membership α γ] : γ → α → PropThe membership relation `a ∈ s : Prop` where `a : α`, `s : γ`. 
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `∈` in identifiers is `mem`.
        MeasureTheory.ringHaarChar_kerMeasureTheory.ringHaarChar_ker.{u_1} (R : Type u_1) [Ring R] [TopologicalSpace R] [IsTopologicalRing R]
      [LocallyCompactSpace R] [MeasurableSpace R] [BorelSpace R] : Subgroup RˣThe kernel of the `ringHaarChar : Rˣ → ℝ≥0`, namely the units
    of a locally compact topological ring such that left multiplication
    by them does not change additive Haar measure.
    
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 BType u_4
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
              (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1)
              KType u_1))
    Left multiplication by an element of Bˣ on B ⊗ 𝔸_K does not scale additive
    Haar measure. In other words, Bˣ is in the kernel of the `ringHaarChar` of `B ⊗ 𝔸_K`.
    
Proof

Uses Theorem 10.36. Follows immediately from the previous theorem.

Corollary10.38
Group: Haar characters under linear automorphisms. (36)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Loading preview
Hover a group entry to preview it.
L∃∀Nused by 0

If B is a finite-dimensional \Q-algebra and if b\in B^\times, then right multiplication by b does not change Haar measure on B_{\A}.

Lean code for Corollary10.381 theorem
  • complete
    theorem NumberField.AdeleRing.addEquivAddHaarChar_mulRight_unit_eq_one.{u_1,
        u_4}NumberField.AdeleRing.addEquivAddHaarChar_mulRight_unit_eq_one.{u_1, u_4} (K : Type u_1) [Field K] [NumberField K]
      (B : Type u_4) [Ring B] [Algebra K B] [FiniteDimensional K B]
      [MeasurableSpace (TensorProduct K B (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))]
      [BorelSpace (TensorProduct K B (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))] (b : Bˣ) :
      MeasureTheory.addEquivAddHaarChar
          (ContinuousAddEquiv.mulRight ((Units.map ↑Algebra.TensorProduct.includeLeftRingHom) b)) =
        1Right multiplication by an element of Bˣ on B ⊗ 𝔸_K does not scale additive
    Haar measure.
    
      (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_1] [NumberFieldNumberField.{u_1} (K : Type u_1) [Field K] : PropA number field is a field which has characteristic zero and is finite
    dimensional over ℚ.  KType u_1] (BType u_4 : Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  BType u_4]
      [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     KType u_1 BType u_4] [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  KType u_1 BType u_4]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 BType u_4
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1))]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 BType u_4
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
     (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1) KType u_1))]
      (b : BType u_4ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (ContinuousAddEquiv.mulRightContinuousAddEquiv.mulRight.{u_1} {R : Type u_1} [TopologicalSpace R] [Semiring R] [IsTopologicalSemiring R] (r : Rˣ) :
      R ≃ₜ+ RThe additive homeomorphism from a topological ring to itself,
    induced by right multiplication by a unit. 
            ((Units.mapUnits.map.{u, v} {M : Type u} {N : Type v} [Monoid M] [Monoid N] (f : M →* N) : Mˣ →* NˣThe group homomorphism on units induced by a `MonoidHom`.  Algebra.TensorProduct.includeLeftRingHomAlgebra.TensorProduct.includeLeftRingHom.{uR, uA, uB} {R : Type uR} {A : Type uA} {B : Type uB} [CommSemiring R]
      [Semiring A] [Algebra R A] [Semiring B] [Algebra R B] : A →+* TensorProduct R A BThe ring morphism `A →+* A ⊗[R] B` sending `a` to `a ⊗ₜ 1`. ) b)) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        1
    theorem NumberField.AdeleRing.addEquivAddHaarChar_mulRight_unit_eq_one.{u_1,
        u_4}NumberField.AdeleRing.addEquivAddHaarChar_mulRight_unit_eq_one.{u_1, u_4} (K : Type u_1) [Field K] [NumberField K]
      (B : Type u_4) [Ring B] [Algebra K B] [FiniteDimensional K B]
      [MeasurableSpace (TensorProduct K B (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))]
      [BorelSpace (TensorProduct K B (NumberField.AdeleRing (NumberField.RingOfIntegers K) K))] (b : Bˣ) :
      MeasureTheory.addEquivAddHaarChar
          (ContinuousAddEquiv.mulRight ((Units.map ↑Algebra.TensorProduct.includeLeftRingHom) b)) =
        1Right multiplication by an element of Bˣ on B ⊗ 𝔸_K does not scale additive
    Haar measure.
    
      (KType u_1 : Type u_1A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [FieldField.{u} (K : Type u) : Type uA `Field` is a `CommRing` with multiplicative inverses for nonzero elements.
    
    An instance of `Field K` includes maps `ratCast : ℚ → K` and `qsmul : ℚ → K → K`.
    Those two fields are needed to implement the `DivisionRing K → Algebra ℚ K` instance since we need
    to control the specific definitions for some special cases of `K` (in particular `K = ℚ` itself).
    See also note [forgetful inheritance].
    
    If the field has positive characteristic `p`, our division by zero convention forces
    `ratCast (1 / p) = 1 / 0 = 0`.  KType u_1] [NumberFieldNumberField.{u_1} (K : Type u_1) [Field K] : PropA number field is a field which has characteristic zero and is finite
    dimensional over ℚ.  KType u_1]
      (BType u_4 : Type u_4A type universe. `Type ≡ Type 0`, `Type u ≡ Sort (u + 1)`. ) [RingRing.{u} (R : Type u) : Type uA `Ring` is a `Semiring` with negation making it an additive group.  BType u_4] [AlgebraAlgebra.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] : Type (max u v)An associative unital `R`-algebra is a semiring `A` equipped with a map into its center `R → A`.
    
    See the implementation notes in this file for discussion of the details of this definition.
     KType u_1 BType u_4]
      [FiniteDimensionalFiniteDimensional.{u_1, u_2} (K : Type u_1) (V : Type u_2) [DivisionRing K] [AddCommGroup V] [Module K V] : Prop`FiniteDimensional` vector spaces are defined to be finite modules.
    Use `Module.Basis.finiteDimensional_of_finite` to prove finite dimension from another definition.  KType u_1 BType u_4]
      [MeasurableSpaceMeasurableSpace.{u_7} (α : Type u_7) : Type u_7A measurable space is a space equipped with a σ-algebra. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 BType u_4
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
              (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1)
              KType u_1))]
      [BorelSpaceBorelSpace.{u_6} (α : Type u_6) [TopologicalSpace α] [MeasurableSpace α] : PropA space with `MeasurableSpace` and `TopologicalSpace` structures such that
    the `σ`-algebra of measurable sets is exactly the `σ`-algebra generated by open sets. 
          (TensorProductTensorProduct.{u_1, u_7, u_8} (R : Type u_1) [CommSemiring R] (M : Type u_7) (N : Type u_8) [AddCommMonoid M]
      [AddCommMonoid N] [Module R M] [Module R N] : Type (max u_7 u_8)The tensor product of two modules `M` and `N` over the same commutative semiring `R`.
    The localized notations are `M ⊗ N` and `M ⊗[R] N`, accessed by `open scoped TensorProduct`.  KType u_1 BType u_4
            (NumberField.AdeleRingNumberField.AdeleRing.{u_1, u_2} (R : Type u_1) (K : Type u_2) [CommRing R] [IsDedekindDomain R] [Field K] [Algebra R K]
      [IsFractionRing R K] : Type (max u_2 u_2 u_1)`AdeleRing (𝓞 K) K` is the adele ring of a number field `K`.
    
    More generally `AdeleRing R K` can be used if `K` is the field of fractions
    of the Dedekind domain `R`. This enables use of rings like `AdeleRing ℤ ℚ`, which
    in practice are easier to work with than `AdeleRing (𝓞 ℚ) ℚ`.
    
    Note that this definition does not give the correct answer in the function field case.
    
              (NumberField.RingOfIntegersNumberField.RingOfIntegers.{u_1} (K : Type u_1) [Field K] : Type u_1The ring of integers (or number ring) corresponding to a number field
    is the integral closure of ℤ in the number field.
    
    This is defined as its own type, rather than a `Subalgebra`, for performance reasons:
    looking for instances of the form `SMul (RingOfIntegers _) (RingOfIntegers _)` makes
    much more effective use of the discrimination tree than instances of the form
    `SMul (Subtype _) (Subtype _)`.
    The drawback is we have to copy over instances manually.
     KType u_1)
              KType u_1))]
      (b : BType u_4ˣUnits.{u} (α : Type u) [Monoid α] : Type uUnits of a `Monoid`, bundled version. Notation: `αˣ`.
    
    An element of a `Monoid` is a unit if it has a two-sided inverse.
    This version bundles the inverse element so that it can be computed.
    For a predicate see `IsUnit`. ) :
      MeasureTheory.addEquivAddHaarCharMeasureTheory.addEquivAddHaarChar.{u_1} {G : Type u_1} [AddGroup G] [TopologicalSpace G] [MeasurableSpace G]
      [BorelSpace G] [IsTopologicalAddGroup G] [LocallyCompactSpace G] (φ : G ≃ₜ+ G) : NNRealIf `φ : A ≃ₜ+ A` then `addEquivAddHaarChar φ` is the positive
    real factor by which `φ` scales Haar measures on `A`. 
          (ContinuousAddEquiv.mulRightContinuousAddEquiv.mulRight.{u_1} {R : Type u_1} [TopologicalSpace R] [Semiring R] [IsTopologicalSemiring R] (r : Rˣ) :
      R ≃ₜ+ RThe additive homeomorphism from a topological ring to itself,
    induced by right multiplication by a unit. 
            ((Units.mapUnits.map.{u, v} {M : Type u} {N : Type v} [Monoid M] [Monoid N] (f : M →* N) : Mˣ →* NˣThe group homomorphism on units induced by a `MonoidHom`. 
                Algebra.TensorProduct.includeLeftRingHomAlgebra.TensorProduct.includeLeftRingHom.{uR, uA, uB} {R : Type uR} {A : Type uA} {B : Type uB} [CommSemiring R]
      [Semiring A] [Algebra R A] [Semiring B] [Algebra R B] : A →+* TensorProduct R A BThe ring morphism `A →+* A ⊗[R] B` sending `a` to `a ⊗ₜ 1`. )
              b)) =Eq.{u_1} {α : Sort u_1} : α → α → PropThe equality relation. It has one introduction rule, `Eq.refl`.
    We use `a = b` as notation for `Eq a b`.
    A fundamental property of equality is that it is an equivalence relation.
    ```
    variable (α : Type) (a b c d : α)
    variable (hab : a = b) (hcb : c = b) (hcd : c = d)
    
    example : a = d :=
      Eq.trans (Eq.trans hab (Eq.symm hcb)) hcd
    ```
    Equality is much more than an equivalence relation, however. It has the important property that every assertion
    respects the equivalence, in the sense that we can substitute equal expressions without changing the truth value.
    That is, given `h1 : a = b` and `h2 : p a`, we can construct a proof for `p b` using substitution: `Eq.subst h1 h2`.
    Example:
    ```
    example (α : Type) (a b : α) (p : α → Prop)
            (h1 : a = b) (h2 : p a) : p b :=
      Eq.subst h1 h2
    
    example (α : Type) (a b : α) (p : α → Prop)
        (h1 : a = b) (h2 : p a) : p b :=
      h1 ▸ h2
    ```
    The triangle in the second presentation is a macro built on top of `Eq.subst` and `Eq.symm`, and you can enter it by typing `\t`.
    For more information: [Equality](https://lean-lang.org/theorem_proving_in_lean4/quantifiers_and_equality.html#equality)
    
    
    Conventions for notations in identifiers:
    
     * The recommended spelling of `=` in identifiers is `eq`.
        1
    Right multiplication by an element of Bˣ on B ⊗ 𝔸_K does not scale additive
    Haar measure.
    
Proof

Uses Theorem 10.36. Follows immediately from the previous theorem.