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: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Lemma 10.2
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar_eq»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀N

For a locally compact additive abelian group A, a regular Haar measure μ, and an additive homeomorphism φ : A ≃ₜ+ A, the Haar character d_A(φ) is the unique positive real such that μ(X) = d_A(φ) (φ_* μ)(X) for every Borel set X.

Code for Definition10.11 definition
  • def MeasureTheory.addEquivAddHaarChar.{u_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] (φ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}
      {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`. 
    complete

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: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀N
Used by 2
Hover a use site to preview it.
Preview
Lemma 10.3
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar_smul_map»
Uses target in
  • statement

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

Code for Lemma10.21 theorem
  • theorem MeasureTheory.addEquivAddHaarChar_eq.{u_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.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}
      {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)
    complete
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: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀N
Used by 3
Hover a use site to preview it.

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

Code for Lemma10.31 theorem
  • theorem MeasureTheory.addEquivAddHaarChar_smul_map.{u_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.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}
      {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
    complete
Proof

This is a restatement of the previous result.

Corollary10.4
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 1

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

Code for Corollary10.41 theorem
  • theorem MeasureTheory.addEquivAddHaarChar_smul_eq_comap.{u_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.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}
      {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
    complete
Proof

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

Lemma10.5
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 1

Definition 10.1 d_A(id)=1.

Code for Lemma10.51 theorem
  • theorem MeasureTheory.addEquivAddHaarChar_refl.{u_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}
      {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
    complete
Proof

Lemma 10.2 Clear.

Lemma10.6
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀N
Used by 2
Hover a use site to preview it.
Preview
Lemma 10.9
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar_trans»
Uses target in
  • proof

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

Code for Lemma10.61 theorem
  • theorem MeasureTheory.addEquivAddHaarChar_smul_preimage.{u_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.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}
      {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
    complete
Proof

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

Lemma10.7
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 1

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

Code for Lemma10.71 theorem
  • theorem MeasureTheory.addEquivAddHaarChar_smul_integral_map.{u_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.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}
      {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
    complete
Proof

Lemma 10.3 This also follows immediately from lemma MeasureTheory.addEquivAddHaarChar_smul_map.

We also have the following variant:

Lemma10.8
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 1

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

Code for Lemma10.81 theorem
  • theorem MeasureTheory.integral_comap_eq_addEquivAddHaarChar_smul.{u_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.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}
      {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
    complete
Proof

This is immediate from corollary MeasureTheory.addEquivAddHaarChar_comap.

Lemma10.9
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 1

Definition 10.1 d_A(φ ∘ ψ)=d_A(φ)d_A(ψ).

Code for Lemma10.91 theorem
  • theorem MeasureTheory.addEquivAddHaarChar_trans.{u_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] {φ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}
      {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
    complete
Proof

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 MeasureTheory.addEquivAddHaarChar_smul_map and the fact that (\phi\circ\psi)_*\mu = \phi_*(\psi_*\mu), one can simplify both sides to μ.

10.3. Examples🔗

Lemma10.10
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 0

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

Code for Lemma10.101 theorem
  • theorem MeasureTheory.ringHaarChar_real (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_real (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`. 
    complete
Proof

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: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 0

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

Code for Lemma10.111 theorem
  • theorem MeasureTheory.ringHaarChar_complex (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_complex
      (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`. 
    complete
Proof

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: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀N

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

Code for Definition10.121 definition
  • def MeasureTheory.ringHaarChar.{u_1} {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
    `topological_semiring.to_topological_add_group`)  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}
      {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
    `topological_semiring.to_topological_add_group`)  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.
    
    complete
Lemma10.13
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 1

Definition 10.12 If f : R → ℝ is Borel measurable and u ∈ R^\times, then δ_R(u) ∫ f(ux) dμ(x) = ∫ f(x) dμ(x).

Code for Lemma10.131 theorem
  • theorem MeasureTheory.ringHaarChar_mul_integral.{u_1} {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
    `topological_semiring.to_topological_add_group`)  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}
      {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
    `topological_semiring.to_topological_add_group`)  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
    complete
Proof

Lemma 10.7 A short calculation using the previous lemma.

Lemma10.14
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀N
Used by 2
Hover a use site to preview it.
Preview
Lemma 10.10
Blueprint label
  • «MeasureTheory.ringHaarChar_real»
Uses target in
  • proof

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

Code for Lemma10.141 theorem
  • theorem MeasureTheory.ringHaarChar_mul_volume.{u_1} {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
    `topological_semiring.to_topological_add_group`)  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}
      {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
    `topological_semiring.to_topological_add_group`)  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
    complete
Proof

Lemma 10.6 Immediate from the previous lemma.

Corollary10.15
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 1

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

Code for Corollary10.151 theorem
  • theorem MeasureTheory.ringHaarChar_continuous.{u_1} {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
    `topological_semiring.to_topological_add_group`)  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} [Ring R] [TopologicalSpace R] [IsTopologicalRing 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}
      {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
    `topological_semiring.to_topological_add_group`)  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} [Ring R] [TopologicalSpace R] [IsTopologicalRing R] (r : Rˣ) : R ≃ₜ+ RThe additive homeomorphism from a topological ring to itself,
    induced by left multiplication by a unit.
     u)
    complete
Proof

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) \neq 0. Then r \mapsto \int f(rx) d\mu(x) is continuous, and so is u \mapsto (\int f(ux) d\mu(x))/(\int f(x) d\mu(x)). Hence δ_R^{-1} is continuous from Lemma 10.13, and thus δ_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: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀N
Used by 2
Hover a use site to preview it.
Preview
Corollary 10.18
Blueprint label
  • «MeasureTheory.algebra_ringHaarChar_eq_ringHaarChar_det»
Uses target in
  • proof

Definition 10.12 Assume that there is an F-basis for V such that φ is a product of elementary and diagonal matrices. Then d_V(φ)=δ_F(det(φ)), where det(φ) ∈ F is the determinant of φ as an F-linear map.

Code for Lemma10.172 theorems
  • theorem MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det.{u_2, u_3}
      {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
    `topological_semiring.to_topological_add_group`)  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_2, u_3, u_4} {R₁ : Type u_1} {R₂ : Type u_2} [Semiring R₁]
      [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {σ₂₁ : R₂ →+* R₁} [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] {M₁ : Type u_3}
      {M₂ : Type u_4} [TopologicalSpace M₁] [AddCommMonoid M₁] [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R₁ M₁]
      [Module R₂ M₂] (e : M₁ ≃SL[σ₁₂] M₂) : M₁ ≃ₜ+ M₂ =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}
      {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
    `topological_semiring.to_topological_add_group`)  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_2, u_3, u_4} {R₁ : Type u_1} {R₂ : Type u_2} [Semiring R₁]
      [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {σ₂₁ : R₂ →+* R₁} [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] {M₁ : Type u_3}
      {M₂ : Type u_4} [TopologicalSpace M₁] [AddCommMonoid M₁] [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R₁ M₁]
      [Module R₂ M₂] (e : M₁ ≃SL[σ₁₂] M₂) : M₁ ≃ₜ+ M₂ =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]`. 
    complete
  • theorem MeasureTheory.addEquivAddHaarChar_eq_ringHaarChar_det_of_existsListTransvecEtc.{u_2,
        u_3}
      {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
    `topological_semiring.to_topological_add_group`)  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_2, u_3, u_4} {R₁ : Type u_1} {R₂ : Type u_2} [Semiring R₁]
      [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {σ₂₁ : R₂ →+* R₁} [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] {M₁ : Type u_3}
      {M₂ : Type u_4} [TopologicalSpace M₁] [AddCommMonoid M₁] [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R₁ M₁]
      [Module R₂ M₂] (e : M₁ ≃SL[σ₁₂] M₂) : M₁ ≃ₜ+ M₂ =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}
      {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
    `topological_semiring.to_topological_add_group`)  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_2, u_3, u_4} {R₁ : Type u_1} {R₂ : Type u_2} [Semiring R₁]
      [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {σ₂₁ : R₂ →+* R₁} [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] {M₁ : Type u_3}
      {M₂ : Type u_4} [TopologicalSpace M₁] [AddCommMonoid M₁] [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R₁ M₁]
      [Module R₂ M₂] (e : M₁ ≃SL[σ₁₂] M₂) : M₁ ≃ₜ+ M₂ =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]`. 
    complete
Proof

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 should not 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: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 0

If u ∈ R^\times then δ_R(u) = δ_F(det(ℓ_u)).

Code for Corollary10.181 theorem
  • theorem MeasureTheory.algebra_ringHaarChar_eq_ringHaarChar_det.{u_1, u_2}
      (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
    `topological_semiring.to_topological_add_group`)  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
    `topological_semiring.to_topological_add_group`)  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}
      (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
    `topological_semiring.to_topological_add_group`)  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
    `topological_semiring.to_topological_add_group`)  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))
    complete
Proof

Lemma 10.17 Follows immediately from the preceding lemma.

10.5. Left and right multiplication🔗

Lemma10.19
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 0

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).

Code for Lemma10.191 theorem
  • theorem IsSimpleRing.mulLeft_det_eq_mulRight_det.{u_1, u_2} (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}
      (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)
    complete
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.

For a central simple algebra B over a locally compact field F and u ∈ B^\times, one has d_B(r_u) = δ_B(u).

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

10.6. Finite products🔗

Here are two facts which we will need about products.

Lemma10.21
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀N
Used by 2
Hover a use site to preview it.
Preview
Lemma 10.22
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar_piCongrRight»
Uses target in
  • statement

If (A, +) and (B, +) are locally compact topological abelian groups, and if φ : A → A and ψ : B → B are additive homeomorphisms, then φ × ψ : A × B → A × B is an additive homeomorphism and d_{A × B}(φ × ψ) = d_A(φ) d_B(ψ).

Code for Lemma10.211 theorem
  • theorem MeasureTheory.addEquivAddHaarChar_prodCongr.{u_1, u_2} {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}
      {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
    complete
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: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 1

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).

Code for Lemma10.221 theorem
  • theorem MeasureTheory.addEquivAddHaarChar_piCongrRight.{u_1, u_2} {ι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}
      {ι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ι)
    complete
Proof

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

If R and S are locally compact topological rings, then δ_{R × S}(r, s) = δ_R(r) × δ_S(s).

Follows immediately from lemma MeasureTheory.addEquivAddHaarChar_prodCongr.

10.7. Some measure-theoretic preliminaries🔗

Lemma10.24
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
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.

Code for Lemma10.241 theorem
  • theorem Topology.IsOpenEmbedding.isHaarMeasure_comap.{u_1, u_2} {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}
      {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. 
    complete
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.25
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 1

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

Code for Lemma10.251 theorem
  • theorem Topology.IsOpenEmbedding.regular_comap.{u_1, u_2} {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}
      {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. 
    complete
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.26
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 1

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

Code for Lemma10.261 theorem
  • theorem MeasureTheory.mulEquivHaarChar_eq_one_of_compactSpace.{u_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}
      {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
    complete
Proof

We have d_A(\phi)\mu(A)=\mu(A), and \mu(A) is positive and finite because A is open and compact.

Lemma10.27
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
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(β).

Code for Lemma10.271 theorem
  • theorem MeasureTheory.addEquivAddHaarChar_eq_addEquivAddHaarChar_of_isOpenEmbedding.{u_2,
        u_3}
      {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}
      {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
    complete
Proof

Lemma 10.24 Lemma 10.25 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 < ∫ g(a) dμ(a) < ∞. Then d_A(α) ∫ g(a) dμ_A(a) = ∫ g(a) d(α^* μ_A)(a) by lemma MeasureTheory.addEquivAddHaarChar_smul_integral_comap. This equals ∫ g(a) d(α^* f^* μ_B)(a) by definition, which is ∫ g(a) d(f^* β^* μ_B)(a) because pullback of pullback is pullback. This equals d_B(β) ∫ g(a) d(f^* μ_B)(a) by corollary MeasureTheory.addEquivAddHaarChar_comap, which is d_B(β) ∫ g(a) dμ_A(a) by definition, and so d_A(α) = d_B(β) 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.28
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
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.

Code for Lemma10.281 theorem
  • theorem Continuous.restrictedProduct_congrRight.{u_1, u_2, u_3} {ι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}
      {ι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))
    complete
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.29
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀N
Used by 2
Hover a use site to preview it.
Preview
Theorem 10.31
Blueprint label
  • «NumberField.AdeleRing.isCentralSimple_addHaarScalarFactor_left_mul_eq_right_mul»
Uses target in
  • proof

With A, A_i, C_i, φ_i, and φ defined as above, one has δ_A(φ) = ∏_i δ_{A_i}(φ_i).

Code for Theorem10.291 theorem
  • theorem MeasureTheory.addEquivAddHaarChar_restrictedProductCongrRight.{u_1, u_2}
      {ι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.field`.
    
    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}
      {ι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.field`.
    
    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ι)
    complete

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

Lemma 10.27 Lemma 10.26 Lemma 10.22 Lemma 10.28 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 φ_S of U, and tells us that δ(\phi)=δ_U(\phi_S).

Next note that φ_S can be written as a product of automorphisms of \prod_{i\not\in S}C_i and \prod_{i\in S}A_i, so by Lemma 10.21 we have δ(\phi)=δ(\prod_{i\not\in S}\phi_i|_{C_i})\times\delta(\prod_{i\in S}\phi_i). Because \prod_{i\notin S}C_i is a compact group, the first term is 1 by lemma MeasureTheory.mulEquivHaarChar_eq_one_of_compactSpace. Finally lemma MeasureTheory.addEquivAddHaarChar_piCongrRight gives the second term as \prod_{i\in S}\delta(\phi_i).

10.9. Adeles🔗

Corollary10.30
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
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.

Code for Corollary10.301 definition
  • def NumberField.AdeleRing.ModuleBaseChangeContinuousLinearEquiv.{u_1, u_2,
        u_3}
      (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)]
      [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
          (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)]
      [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
          (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)]
      [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.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)
          (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)]
      [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.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)
          (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)
          (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)]
      [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.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)
          (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)]
      [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
          (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)]
      [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.  (algebraMapalgebraMap.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] [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}
      (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)]
      [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
          (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)]
      [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
          (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)]
      [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.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)
          (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)]
      [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.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)
          (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)
          (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)]
      [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.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)
          (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)]
      [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
          (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)]
      [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.  (algebraMapalgebraMap.{u, v} (R : Type u) (A : Type v) [CommSemiring R] [Semiring A] [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. 
    complete
Proof

[??] 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.31
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
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

Theorem 10.29 [??] 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).

Theorem10.32
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 1

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.

Code for Theorem10.321 theorem
  • theorem MeasureTheory.addHaarScalarFactor_tensor_adeles_eq_one.{u_1, u_3}
      (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_2, u_3, u_4} {R₁ : Type u_1} {R₂ : Type u_2} [Semiring R₁]
      [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {σ₂₁ : R₂ →+* R₁} [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] {M₁ : Type u_3}
      {M₂ : Type u_4} [TopologicalSpace M₁] [AddCommMonoid M₁] [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R₁ M₁]
      [Module R₂ M₂] (e : M₁ ≃SL[σ₁₂] M₂) : M₁ ≃ₜ+ M₂ =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}
      (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_2, u_3, u_4} {R₁ : Type u_1} {R₂ : Type u_2} [Semiring R₁]
      [Semiring R₂] {σ₁₂ : R₁ →+* R₂} {σ₂₁ : R₂ →+* R₁} [RingHomInvPair σ₁₂ σ₂₁] [RingHomInvPair σ₂₁ σ₁₂] {M₁ : Type u_3}
      {M₂ : Type u_4} [TopologicalSpace M₁] [AddCommMonoid M₁] [TopologicalSpace M₂] [AddCommMonoid M₂] [Module R₁ M₁]
      [Module R₂ M₂] (e : M₁ ≃SL[σ₁₂] M₂) : M₁ ≃ₜ+ M₂ =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
    complete
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.29 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.30.

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.33
Group: This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings. (29)
Hover another entry in this group to preview it.
Preview
Definition 10.1
Blueprint label
  • «MeasureTheory.addEquivAddHaarChar»
Group
  • This miniproject develops the API around how additive Haar measure changes under linear automorphisms, especially on locally compact topological rings.
L∃∀Nused by 0

If B is a finite-dimensional \Q-algebra, if B_{\A} denotes the ring B \otimes_{\Q} \A_{\Q}, and if b ∈ B^\times, then δ_{B_{\A}}(b)=1.

Code for Corollary10.331 theorem
  • theorem NumberField.AdeleRing.units_mem_ringHaarCharacter_ker.{u_1, u_4}
      (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}
      (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`.
    
    complete
Proof

Theorem 10.32 Follows immediately from the previous theorem.