Documentation

Mathlib.Topology.MetricSpace.Algebra

Compatibility of algebraic operations with metric space structures #

In this file we define mixin typeclasses LipschitzMul, LipschitzAdd, IsBoundedSMul expressing compatibility of multiplication, addition and scalar-multiplication operations with an underlying metric space structure. The intended use case is to abstract certain properties shared by normed groups and by R≥0.

Implementation notes #

We deduce a ContinuousMul instance from LipschitzMul, etc. In principle there should be an intermediate typeclass for uniform spaces, but the algebraic hierarchy there (see IsUniformGroup) is structured differently.

class LipschitzAdd (β : Type u_2) [PseudoMetricSpace β] [AddMonoid β] :

Class LipschitzAdd M says that the addition (+) : X × X → X is Lipschitz jointly in the two arguments.

Instances
    class LipschitzMul (β : Type u_2) [PseudoMetricSpace β] [Monoid β] :

    Class LipschitzMul M says that the multiplication (*) : X × X → X is Lipschitz jointly in the two arguments.

    Instances

      The Lipschitz constant of an AddMonoid β satisfying LipschitzAdd

      Equations
        Instances For
          def LipschitzMul.C (β : Type u_2) [PseudoMetricSpace β] [Monoid β] [_i : LipschitzMul β] :

          The Lipschitz constant of a monoid β satisfying LipschitzMul

          Equations
            Instances For
              theorem lipschitzWith_lipschitz_const_mul_edist {β : Type u_2} [PseudoMetricSpace β] [Monoid β] [_i : LipschitzMul β] :
              LipschitzWith (LipschitzMul.C β) fun (p : β × β) => p.1 * p.2
              theorem lipschitzWith_lipschitz_const_add_edist {β : Type u_2} [PseudoMetricSpace β] [AddMonoid β] [_i : LipschitzAdd β] :
              LipschitzWith (LipschitzAdd.C β) fun (p : β × β) => p.1 + p.2
              theorem lipschitz_with_lipschitz_const_mul {β : Type u_2} [PseudoMetricSpace β] [Monoid β] [LipschitzMul β] (p q : β × β) :
              dist (p.1 * p.2) (q.1 * q.2) (LipschitzMul.C β) * dist p q
              theorem lipschitz_with_lipschitz_const_add {β : Type u_2} [PseudoMetricSpace β] [AddMonoid β] [LipschitzAdd β] (p q : β × β) :
              dist (p.1 + p.2) (q.1 + q.2) (LipschitzAdd.C β) * dist p q
              @[instance 100]
              @[instance 100]
              class IsBoundedSMul (α : Type u_1) (β : Type u_2) [PseudoMetricSpace α] [PseudoMetricSpace β] [Zero α] [Zero β] [SMul α β] :

              Mixin typeclass on a scalar action of a metric space α on a metric space β both with distinguished points 0, requiring compatibility of the action in the sense that dist (x • y₁) (x • y₂) ≤ dist x 0 * dist y₁ y₂ and dist (x₁ • y) (x₂ • y) ≤ dist x₁ x₂ * dist y 0.

              If [NormedDivisionRing α] [SeminormedAddCommGroup β] [Module α β] are assumed, then prefer writing [NormSMulClass α β] instead of using [IsBoundedSMul α β], since while equivalent, typeclass search can only infer the latter from the former and not vice versa.

              Instances
                @[deprecated IsBoundedSMul (since := "2025-03-10")]
                def BoundedSMul (α : Type u_1) (β : Type u_2) [PseudoMetricSpace α] [PseudoMetricSpace β] [Zero α] [Zero β] [SMul α β] :

                Alias of IsBoundedSMul.


                Mixin typeclass on a scalar action of a metric space α on a metric space β both with distinguished points 0, requiring compatibility of the action in the sense that dist (x • y₁) (x • y₂) ≤ dist x 0 * dist y₁ y₂ and dist (x₁ • y) (x₂ • y) ≤ dist x₁ x₂ * dist y 0.

                If [NormedDivisionRing α] [SeminormedAddCommGroup β] [Module α β] are assumed, then prefer writing [NormSMulClass α β] instead of using [IsBoundedSMul α β], since while equivalent, typeclass search can only infer the latter from the former and not vice versa.

                Equations
                  Instances For
                    theorem dist_smul_pair {α : Type u_1} {β : Type u_2} [PseudoMetricSpace α] [PseudoMetricSpace β] [Zero α] [Zero β] [SMul α β] [IsBoundedSMul α β] (x : α) (y₁ y₂ : β) :
                    dist (x y₁) (x y₂) dist x 0 * dist y₁ y₂
                    theorem dist_pair_smul {α : Type u_1} {β : Type u_2} [PseudoMetricSpace α] [PseudoMetricSpace β] [Zero α] [Zero β] [SMul α β] [IsBoundedSMul α β] (x₁ x₂ : α) (y : β) :
                    dist (x₁ y) (x₂ y) dist x₁ x₂ * dist y 0
                    @[instance 100]
                    instance IsBoundedSMul.continuousSMul {α : Type u_1} {β : Type u_2} [PseudoMetricSpace α] [PseudoMetricSpace β] [Zero α] [Zero β] [SMul α β] [IsBoundedSMul α β] :

                    The typeclass IsBoundedSMul on a metric-space scalar action implies continuity of the action.

                    @[instance 100]
                    instance IsBoundedSMul.op {α : Type u_1} {β : Type u_2} [PseudoMetricSpace α] [PseudoMetricSpace β] [Zero α] [Zero β] [SMul α β] [IsBoundedSMul α β] [SMul αᵐᵒᵖ β] [IsCentralScalar α β] :

                    If a scalar is central, then its right action is bounded when its left action is.

                    instance Pi.instIsBoundedSMul {ι : Type u_3} [Fintype ι] {α : Type u_4} {β : ιType u_5} [PseudoMetricSpace α] [(i : ι) → PseudoMetricSpace (β i)] [Zero α] [(i : ι) → Zero (β i)] [(i : ι) → SMul α (β i)] [∀ (i : ι), IsBoundedSMul α (β i)] :
                    IsBoundedSMul α ((i : ι) → β i)
                    instance Pi.instIsBoundedSMul' {ι : Type u_3} [Fintype ι] {α : ιType u_4} {β : ιType u_5} [(i : ι) → PseudoMetricSpace (α i)] [(i : ι) → PseudoMetricSpace (β i)] [(i : ι) → Zero (α i)] [(i : ι) → Zero (β i)] [(i : ι) → SMul (α i) (β i)] [∀ (i : ι), IsBoundedSMul (α i) (β i)] :
                    IsBoundedSMul ((i : ι) → α i) ((i : ι) → β i)
                    instance Prod.instIsBoundedSMul {α : Type u_4} {β : Type u_5} {γ : Type u_6} [PseudoMetricSpace α] [PseudoMetricSpace β] [PseudoMetricSpace γ] [Zero α] [Zero β] [Zero γ] [SMul α β] [SMul α γ] [IsBoundedSMul α β] [IsBoundedSMul α γ] :
                    IsBoundedSMul α (β × γ)