Documentation

Mathlib.Topology.MetricSpace.IsometricSMul

Group actions by isometries #

In this file we define two typeclasses:

We also prove basic facts about isometric actions and define bundled isometries IsometryEquiv.constSMul, IsometryEquiv.mulLeft, IsometryEquiv.mulRight, IsometryEquiv.divLeft, IsometryEquiv.divRight, and IsometryEquiv.inv, as well as their additive versions.

If G is a group, then IsIsometricSMul G G means that G has a left-invariant metric while IsIsometricSMul Gᵐᵒᵖ G means that G has a right-invariant metric. For a commutative group, these two notions are equivalent. A group with a right-invariant metric can be also represented as a NormedGroup.

class IsIsometricVAdd (M : Type u) (X : Type w) [PseudoEMetricSpace X] [VAdd M X] :

An additive action is isometric if each map x ↦ c +ᵥ x is an isometry.

Instances
    @[deprecated IsIsometricVAdd (since := "2025-03-10")]
    def IsometricVAdd (M : Type u) (X : Type w) [PseudoEMetricSpace X] [VAdd M X] :

    Alias of IsIsometricVAdd.


    An additive action is isometric if each map x ↦ c +ᵥ x is an isometry.

    Equations
    Instances For
      class IsIsometricSMul (M : Type u) (X : Type w) [PseudoEMetricSpace X] [SMul M X] :

      A multiplicative action is isometric if each map x ↦ c • x is an isometry.

      • isometry_smul (c : M) : Isometry fun (x : X) => c x
      Instances
        @[deprecated IsIsometricSMul (since := "2025-03-10")]
        def IsometricSMul (M : Type u) (X : Type w) [PseudoEMetricSpace X] [SMul M X] :

        Alias of IsIsometricSMul.


        A multiplicative action is isometric if each map x ↦ c • x is an isometry.

        Equations
        Instances For
          theorem isometry_smul {M : Type u} (X : Type w) [PseudoEMetricSpace X] [SMul M X] [IsIsometricSMul M X] (c : M) :
          Isometry fun (x : X) => c x
          theorem isometry_vadd {M : Type u} (X : Type w) [PseudoEMetricSpace X] [VAdd M X] [IsIsometricVAdd M X] (c : M) :
          Isometry fun (x : X) => c +ᵥ x
          @[simp]
          theorem edist_smul_left {M : Type u} {X : Type w} [PseudoEMetricSpace X] [SMul M X] [IsIsometricSMul M X] (c : M) (x y : X) :
          edist (c x) (c y) = edist x y
          @[simp]
          theorem edist_vadd_left {M : Type u} {X : Type w} [PseudoEMetricSpace X] [VAdd M X] [IsIsometricVAdd M X] (c : M) (x y : X) :
          edist (c +ᵥ x) (c +ᵥ y) = edist x y
          @[simp]
          theorem ediam_smul {M : Type u} {X : Type w} [PseudoEMetricSpace X] [SMul M X] [IsIsometricSMul M X] (c : M) (s : Set X) :
          @[simp]
          theorem ediam_vadd {M : Type u} {X : Type w} [PseudoEMetricSpace X] [VAdd M X] [IsIsometricVAdd M X] (c : M) (s : Set X) :
          theorem isometry_mul_left {M : Type u} [Mul M] [PseudoEMetricSpace M] [IsIsometricSMul M M] (a : M) :
          Isometry fun (x : M) => a * x
          theorem isometry_add_left {M : Type u} [Add M] [PseudoEMetricSpace M] [IsIsometricVAdd M M] (a : M) :
          Isometry fun (x : M) => a + x
          @[simp]
          theorem edist_mul_left {M : Type u} [Mul M] [PseudoEMetricSpace M] [IsIsometricSMul M M] (a b c : M) :
          edist (a * b) (a * c) = edist b c
          @[simp]
          theorem edist_add_left {M : Type u} [Add M] [PseudoEMetricSpace M] [IsIsometricVAdd M M] (a b c : M) :
          edist (a + b) (a + c) = edist b c
          theorem isometry_mul_right {M : Type u} [Mul M] [PseudoEMetricSpace M] [IsIsometricSMul Mᵐᵒᵖ M] (a : M) :
          Isometry fun (x : M) => x * a
          theorem isometry_add_right {M : Type u} [Add M] [PseudoEMetricSpace M] [IsIsometricVAdd Mᵃᵒᵖ M] (a : M) :
          Isometry fun (x : M) => x + a
          @[simp]
          theorem edist_mul_right {M : Type u} [Mul M] [PseudoEMetricSpace M] [IsIsometricSMul Mᵐᵒᵖ M] (a b c : M) :
          edist (a * c) (b * c) = edist a b
          @[simp]
          theorem edist_add_right {M : Type u} [Add M] [PseudoEMetricSpace M] [IsIsometricVAdd Mᵃᵒᵖ M] (a b c : M) :
          edist (a + c) (b + c) = edist a b
          @[simp]
          theorem edist_div_right {M : Type u} [DivInvMonoid M] [PseudoEMetricSpace M] [IsIsometricSMul Mᵐᵒᵖ M] (a b c : M) :
          edist (a / c) (b / c) = edist a b
          @[simp]
          theorem edist_sub_right {M : Type u} [SubNegMonoid M] [PseudoEMetricSpace M] [IsIsometricVAdd Mᵃᵒᵖ M] (a b c : M) :
          edist (a - c) (b - c) = edist a b
          @[simp]
          @[simp]
          theorem edist_neg_neg {G : Type v} [AddGroup G] [PseudoEMetricSpace G] [IsIsometricVAdd G G] [IsIsometricVAdd Gᵃᵒᵖ G] (a b : G) :
          edist (-a) (-b) = edist a b
          theorem edist_neg {G : Type v} [AddGroup G] [PseudoEMetricSpace G] [IsIsometricVAdd G G] [IsIsometricVAdd Gᵃᵒᵖ G] (x y : G) :
          edist (-x) y = edist x (-y)
          @[simp]
          theorem edist_div_left {G : Type v} [Group G] [PseudoEMetricSpace G] [IsIsometricSMul G G] [IsIsometricSMul Gᵐᵒᵖ G] (a b c : G) :
          edist (a / b) (a / c) = edist b c
          @[simp]
          theorem edist_sub_left {G : Type v} [AddGroup G] [PseudoEMetricSpace G] [IsIsometricVAdd G G] [IsIsometricVAdd Gᵃᵒᵖ G] (a b c : G) :
          edist (a - b) (a - c) = edist b c
          def IsometryEquiv.constSMul {G : Type v} {X : Type w} [PseudoEMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) :
          X ≃ᵢ X

          If a group G acts on X by isometries, then IsometryEquiv.constSMul is the isometry of X given by multiplication of a constant element of the group.

          Equations
          Instances For
            def IsometryEquiv.constVAdd {G : Type v} {X : Type w} [PseudoEMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) :
            X ≃ᵢ X

            If an additive group G acts on X by isometries, then IsometryEquiv.constVAdd is the isometry of X given by addition of a constant element of the group.

            Equations
            Instances For
              @[simp]
              theorem IsometryEquiv.constSMul_apply {G : Type v} {X : Type w} [PseudoEMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) (x : X) :
              (constSMul c) x = c x
              @[simp]
              theorem IsometryEquiv.constVAdd_apply {G : Type v} {X : Type w} [PseudoEMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) (x : X) :
              (constVAdd c) x = c +ᵥ x
              @[simp]

              Multiplication y ↦ x * y as an IsometryEquiv.

              Equations
              Instances For

                Addition y ↦ x + y as an IsometryEquiv.

                Equations
                Instances For
                  @[simp]
                  theorem IsometryEquiv.mulLeft_apply {G : Type v} [Group G] [PseudoEMetricSpace G] [IsIsometricSMul G G] (c x : G) :
                  (mulLeft c) x = c * x
                  @[simp]
                  theorem IsometryEquiv.addLeft_apply {G : Type v} [AddGroup G] [PseudoEMetricSpace G] [IsIsometricVAdd G G] (c x : G) :
                  (addLeft c) x = c + x

                  Multiplication y ↦ y * x as an IsometryEquiv.

                  Equations
                  Instances For

                    Addition y ↦ y + x as an IsometryEquiv.

                    Equations
                    Instances For
                      @[simp]
                      @[simp]

                      Division y ↦ y / x as an IsometryEquiv.

                      Equations
                      Instances For

                        Subtraction y ↦ y - x as an IsometryEquiv.

                        Equations
                        Instances For
                          @[simp]
                          @[simp]

                          Division y ↦ x / y as an IsometryEquiv.

                          Equations
                          Instances For

                            Subtraction y ↦ x - y as an IsometryEquiv.

                            Equations
                            Instances For
                              @[simp]

                              Inversion x ↦ x⁻¹ as an IsometryEquiv.

                              Equations
                              Instances For

                                Negation x ↦ -x as an IsometryEquiv.

                                Equations
                                Instances For
                                  @[simp]
                                  theorem IsometryEquiv.neg_apply (G : Type v) [AddGroup G] [PseudoEMetricSpace G] [IsIsometricVAdd G G] [IsIsometricVAdd Gᵃᵒᵖ G] (a✝ : G) :
                                  (neg G) a✝ = -a✝
                                  @[simp]
                                  theorem IsometryEquiv.inv_apply (G : Type v) [Group G] [PseudoEMetricSpace G] [IsIsometricSMul G G] [IsIsometricSMul Gᵐᵒᵖ G] (a✝ : G) :
                                  (inv G) a✝ = a✝⁻¹
                                  @[simp]
                                  theorem EMetric.smul_ball {G : Type v} {X : Type w} [PseudoEMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) (x : X) (r : ENNReal) :
                                  c ball x r = ball (c x) r
                                  @[simp]
                                  theorem EMetric.vadd_ball {G : Type v} {X : Type w} [PseudoEMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) (x : X) (r : ENNReal) :
                                  c +ᵥ ball x r = ball (c +ᵥ x) r
                                  @[simp]
                                  theorem EMetric.preimage_smul_ball {G : Type v} {X : Type w} [PseudoEMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) (x : X) (r : ENNReal) :
                                  (fun (x : X) => c x) ⁻¹' ball x r = ball (c⁻¹ x) r
                                  @[simp]
                                  theorem EMetric.preimage_vadd_ball {G : Type v} {X : Type w} [PseudoEMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) (x : X) (r : ENNReal) :
                                  (fun (x : X) => c +ᵥ x) ⁻¹' ball x r = ball (-c +ᵥ x) r
                                  @[simp]
                                  theorem EMetric.smul_closedBall {G : Type v} {X : Type w} [PseudoEMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) (x : X) (r : ENNReal) :
                                  c closedBall x r = closedBall (c x) r
                                  @[simp]
                                  theorem EMetric.vadd_closedBall {G : Type v} {X : Type w} [PseudoEMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) (x : X) (r : ENNReal) :
                                  @[simp]
                                  theorem EMetric.preimage_smul_closedBall {G : Type v} {X : Type w} [PseudoEMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) (x : X) (r : ENNReal) :
                                  (fun (x : X) => c x) ⁻¹' closedBall x r = closedBall (c⁻¹ x) r
                                  @[simp]
                                  theorem EMetric.preimage_vadd_closedBall {G : Type v} {X : Type w} [PseudoEMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) (x : X) (r : ENNReal) :
                                  (fun (x : X) => c +ᵥ x) ⁻¹' closedBall x r = closedBall (-c +ᵥ x) r
                                  @[simp]
                                  theorem EMetric.preimage_mul_left_ball {G : Type v} [Group G] [PseudoEMetricSpace G] [IsIsometricSMul G G] (a b : G) (r : ENNReal) :
                                  (fun (x : G) => a * x) ⁻¹' ball b r = ball (a⁻¹ * b) r
                                  @[simp]
                                  theorem EMetric.preimage_add_left_ball {G : Type v} [AddGroup G] [PseudoEMetricSpace G] [IsIsometricVAdd G G] (a b : G) (r : ENNReal) :
                                  (fun (x : G) => a + x) ⁻¹' ball b r = ball (-a + b) r
                                  @[simp]
                                  theorem EMetric.preimage_mul_right_ball {G : Type v} [Group G] [PseudoEMetricSpace G] [IsIsometricSMul Gᵐᵒᵖ G] (a b : G) (r : ENNReal) :
                                  (fun (x : G) => x * a) ⁻¹' ball b r = ball (b / a) r
                                  @[simp]
                                  theorem EMetric.preimage_add_right_ball {G : Type v} [AddGroup G] [PseudoEMetricSpace G] [IsIsometricVAdd Gᵃᵒᵖ G] (a b : G) (r : ENNReal) :
                                  (fun (x : G) => x + a) ⁻¹' ball b r = ball (b - a) r
                                  @[simp]
                                  theorem EMetric.preimage_mul_left_closedBall {G : Type v} [Group G] [PseudoEMetricSpace G] [IsIsometricSMul G G] (a b : G) (r : ENNReal) :
                                  (fun (x : G) => a * x) ⁻¹' closedBall b r = closedBall (a⁻¹ * b) r
                                  @[simp]
                                  theorem EMetric.preimage_add_left_closedBall {G : Type v} [AddGroup G] [PseudoEMetricSpace G] [IsIsometricVAdd G G] (a b : G) (r : ENNReal) :
                                  (fun (x : G) => a + x) ⁻¹' closedBall b r = closedBall (-a + b) r
                                  @[simp]
                                  theorem EMetric.preimage_mul_right_closedBall {G : Type v} [Group G] [PseudoEMetricSpace G] [IsIsometricSMul Gᵐᵒᵖ G] (a b : G) (r : ENNReal) :
                                  (fun (x : G) => x * a) ⁻¹' closedBall b r = closedBall (b / a) r
                                  @[simp]
                                  theorem EMetric.preimage_add_right_closedBall {G : Type v} [AddGroup G] [PseudoEMetricSpace G] [IsIsometricVAdd Gᵃᵒᵖ G] (a b : G) (r : ENNReal) :
                                  (fun (x : G) => x + a) ⁻¹' closedBall b r = closedBall (b - a) r
                                  @[simp]
                                  theorem dist_smul {M : Type u} {X : Type w} [PseudoMetricSpace X] [SMul M X] [IsIsometricSMul M X] (c : M) (x y : X) :
                                  dist (c x) (c y) = dist x y
                                  @[simp]
                                  theorem dist_vadd {M : Type u} {X : Type w} [PseudoMetricSpace X] [VAdd M X] [IsIsometricVAdd M X] (c : M) (x y : X) :
                                  dist (c +ᵥ x) (c +ᵥ y) = dist x y
                                  @[simp]
                                  theorem nndist_smul {M : Type u} {X : Type w} [PseudoMetricSpace X] [SMul M X] [IsIsometricSMul M X] (c : M) (x y : X) :
                                  nndist (c x) (c y) = nndist x y
                                  @[simp]
                                  theorem nndist_vadd {M : Type u} {X : Type w} [PseudoMetricSpace X] [VAdd M X] [IsIsometricVAdd M X] (c : M) (x y : X) :
                                  nndist (c +ᵥ x) (c +ᵥ y) = nndist x y
                                  @[simp]
                                  theorem diam_smul {M : Type u} {X : Type w} [PseudoMetricSpace X] [SMul M X] [IsIsometricSMul M X] (c : M) (s : Set X) :
                                  @[simp]
                                  theorem diam_vadd {M : Type u} {X : Type w} [PseudoMetricSpace X] [VAdd M X] [IsIsometricVAdd M X] (c : M) (s : Set X) :
                                  @[simp]
                                  theorem dist_mul_left {M : Type u} [PseudoMetricSpace M] [Mul M] [IsIsometricSMul M M] (a b c : M) :
                                  dist (a * b) (a * c) = dist b c
                                  @[simp]
                                  theorem dist_add_left {M : Type u} [PseudoMetricSpace M] [Add M] [IsIsometricVAdd M M] (a b c : M) :
                                  dist (a + b) (a + c) = dist b c
                                  @[simp]
                                  theorem nndist_mul_left {M : Type u} [PseudoMetricSpace M] [Mul M] [IsIsometricSMul M M] (a b c : M) :
                                  nndist (a * b) (a * c) = nndist b c
                                  @[simp]
                                  theorem nndist_add_left {M : Type u} [PseudoMetricSpace M] [Add M] [IsIsometricVAdd M M] (a b c : M) :
                                  nndist (a + b) (a + c) = nndist b c
                                  @[simp]
                                  theorem dist_mul_right {M : Type u} [Mul M] [PseudoMetricSpace M] [IsIsometricSMul Mᵐᵒᵖ M] (a b c : M) :
                                  dist (a * c) (b * c) = dist a b
                                  @[simp]
                                  theorem dist_add_right {M : Type u} [Add M] [PseudoMetricSpace M] [IsIsometricVAdd Mᵃᵒᵖ M] (a b c : M) :
                                  dist (a + c) (b + c) = dist a b
                                  @[simp]
                                  theorem nndist_mul_right {M : Type u} [PseudoMetricSpace M] [Mul M] [IsIsometricSMul Mᵐᵒᵖ M] (a b c : M) :
                                  nndist (a * c) (b * c) = nndist a b
                                  @[simp]
                                  theorem nndist_add_right {M : Type u} [PseudoMetricSpace M] [Add M] [IsIsometricVAdd Mᵃᵒᵖ M] (a b c : M) :
                                  nndist (a + c) (b + c) = nndist a b
                                  @[simp]
                                  theorem dist_div_right {M : Type u} [DivInvMonoid M] [PseudoMetricSpace M] [IsIsometricSMul Mᵐᵒᵖ M] (a b c : M) :
                                  dist (a / c) (b / c) = dist a b
                                  @[simp]
                                  theorem dist_sub_right {M : Type u} [SubNegMonoid M] [PseudoMetricSpace M] [IsIsometricVAdd Mᵃᵒᵖ M] (a b c : M) :
                                  dist (a - c) (b - c) = dist a b
                                  @[simp]
                                  theorem nndist_div_right {M : Type u} [DivInvMonoid M] [PseudoMetricSpace M] [IsIsometricSMul Mᵐᵒᵖ M] (a b c : M) :
                                  nndist (a / c) (b / c) = nndist a b
                                  @[simp]
                                  theorem nndist_sub_right {M : Type u} [SubNegMonoid M] [PseudoMetricSpace M] [IsIsometricVAdd Mᵃᵒᵖ M] (a b c : M) :
                                  nndist (a - c) (b - c) = nndist a b
                                  @[simp]
                                  @[simp]
                                  theorem dist_neg_neg {G : Type v} [AddGroup G] [PseudoMetricSpace G] [IsIsometricVAdd G G] [IsIsometricVAdd Gᵃᵒᵖ G] (a b : G) :
                                  dist (-a) (-b) = dist a b
                                  @[simp]
                                  theorem nndist_neg_neg {G : Type v} [AddGroup G] [PseudoMetricSpace G] [IsIsometricVAdd G G] [IsIsometricVAdd Gᵃᵒᵖ G] (a b : G) :
                                  nndist (-a) (-b) = nndist a b
                                  @[simp]
                                  theorem dist_div_left {G : Type v} [Group G] [PseudoMetricSpace G] [IsIsometricSMul G G] [IsIsometricSMul Gᵐᵒᵖ G] (a b c : G) :
                                  dist (a / b) (a / c) = dist b c
                                  @[simp]
                                  theorem dist_sub_left {G : Type v} [AddGroup G] [PseudoMetricSpace G] [IsIsometricVAdd G G] [IsIsometricVAdd Gᵃᵒᵖ G] (a b c : G) :
                                  dist (a - b) (a - c) = dist b c
                                  @[simp]
                                  theorem nndist_div_left {G : Type v} [Group G] [PseudoMetricSpace G] [IsIsometricSMul G G] [IsIsometricSMul Gᵐᵒᵖ G] (a b c : G) :
                                  nndist (a / b) (a / c) = nndist b c
                                  @[simp]
                                  theorem nndist_sub_left {G : Type v} [AddGroup G] [PseudoMetricSpace G] [IsIsometricVAdd G G] [IsIsometricVAdd Gᵃᵒᵖ G] (a b c : G) :
                                  nndist (a - b) (a - c) = nndist b c
                                  theorem Bornology.IsBounded.smul {G : Type v} {X : Type w} [PseudoMetricSpace X] [SMul G X] [IsIsometricSMul G X] {s : Set X} (hs : IsBounded s) (c : G) :

                                  If G acts isometrically on X, then the image of a bounded set in X under scalar multiplication by c : G is bounded. See also Bornology.IsBounded.smul₀ for a similar lemma about normed spaces.

                                  theorem Bornology.IsBounded.vadd {G : Type v} {X : Type w} [PseudoMetricSpace X] [VAdd G X] [IsIsometricVAdd G X] {s : Set X} (hs : IsBounded s) (c : G) :

                                  Given an additive isometric action of G on X, the image of a bounded set in X under translation by c : G is bounded

                                  @[simp]
                                  theorem Metric.smul_ball {G : Type v} {X : Type w} [PseudoMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) (x : X) (r : ) :
                                  c ball x r = ball (c x) r
                                  @[simp]
                                  theorem Metric.vadd_ball {G : Type v} {X : Type w} [PseudoMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) (x : X) (r : ) :
                                  c +ᵥ ball x r = ball (c +ᵥ x) r
                                  @[simp]
                                  theorem Metric.preimage_smul_ball {G : Type v} {X : Type w} [PseudoMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) (x : X) (r : ) :
                                  (fun (x : X) => c x) ⁻¹' ball x r = ball (c⁻¹ x) r
                                  @[simp]
                                  theorem Metric.preimage_vadd_ball {G : Type v} {X : Type w} [PseudoMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) (x : X) (r : ) :
                                  (fun (x : X) => c +ᵥ x) ⁻¹' ball x r = ball (-c +ᵥ x) r
                                  @[simp]
                                  theorem Metric.smul_closedBall {G : Type v} {X : Type w} [PseudoMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) (x : X) (r : ) :
                                  c closedBall x r = closedBall (c x) r
                                  @[simp]
                                  theorem Metric.vadd_closedBall {G : Type v} {X : Type w} [PseudoMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) (x : X) (r : ) :
                                  @[simp]
                                  theorem Metric.preimage_smul_closedBall {G : Type v} {X : Type w} [PseudoMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) (x : X) (r : ) :
                                  (fun (x : X) => c x) ⁻¹' closedBall x r = closedBall (c⁻¹ x) r
                                  @[simp]
                                  theorem Metric.preimage_vadd_closedBall {G : Type v} {X : Type w} [PseudoMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) (x : X) (r : ) :
                                  (fun (x : X) => c +ᵥ x) ⁻¹' closedBall x r = closedBall (-c +ᵥ x) r
                                  @[simp]
                                  theorem Metric.smul_sphere {G : Type v} {X : Type w} [PseudoMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) (x : X) (r : ) :
                                  c sphere x r = sphere (c x) r
                                  @[simp]
                                  theorem Metric.vadd_sphere {G : Type v} {X : Type w} [PseudoMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) (x : X) (r : ) :
                                  c +ᵥ sphere x r = sphere (c +ᵥ x) r
                                  @[simp]
                                  theorem Metric.preimage_smul_sphere {G : Type v} {X : Type w} [PseudoMetricSpace X] [Group G] [MulAction G X] [IsIsometricSMul G X] (c : G) (x : X) (r : ) :
                                  (fun (x : X) => c x) ⁻¹' sphere x r = sphere (c⁻¹ x) r
                                  @[simp]
                                  theorem Metric.preimage_vadd_sphere {G : Type v} {X : Type w} [PseudoMetricSpace X] [AddGroup G] [AddAction G X] [IsIsometricVAdd G X] (c : G) (x : X) (r : ) :
                                  (fun (x : X) => c +ᵥ x) ⁻¹' sphere x r = sphere (-c +ᵥ x) r
                                  @[simp]
                                  theorem Metric.preimage_mul_left_ball {G : Type v} [Group G] [PseudoMetricSpace G] [IsIsometricSMul G G] (a b : G) (r : ) :
                                  (fun (x : G) => a * x) ⁻¹' ball b r = ball (a⁻¹ * b) r
                                  @[simp]
                                  theorem Metric.preimage_add_left_ball {G : Type v} [AddGroup G] [PseudoMetricSpace G] [IsIsometricVAdd G G] (a b : G) (r : ) :
                                  (fun (x : G) => a + x) ⁻¹' ball b r = ball (-a + b) r
                                  @[simp]
                                  theorem Metric.preimage_mul_right_ball {G : Type v} [Group G] [PseudoMetricSpace G] [IsIsometricSMul Gᵐᵒᵖ G] (a b : G) (r : ) :
                                  (fun (x : G) => x * a) ⁻¹' ball b r = ball (b / a) r
                                  @[simp]
                                  theorem Metric.preimage_add_right_ball {G : Type v} [AddGroup G] [PseudoMetricSpace G] [IsIsometricVAdd Gᵃᵒᵖ G] (a b : G) (r : ) :
                                  (fun (x : G) => x + a) ⁻¹' ball b r = ball (b - a) r
                                  @[simp]
                                  theorem Metric.preimage_mul_left_closedBall {G : Type v} [Group G] [PseudoMetricSpace G] [IsIsometricSMul G G] (a b : G) (r : ) :
                                  (fun (x : G) => a * x) ⁻¹' closedBall b r = closedBall (a⁻¹ * b) r
                                  @[simp]
                                  theorem Metric.preimage_add_left_closedBall {G : Type v} [AddGroup G] [PseudoMetricSpace G] [IsIsometricVAdd G G] (a b : G) (r : ) :
                                  (fun (x : G) => a + x) ⁻¹' closedBall b r = closedBall (-a + b) r
                                  @[simp]
                                  theorem Metric.preimage_mul_right_closedBall {G : Type v} [Group G] [PseudoMetricSpace G] [IsIsometricSMul Gᵐᵒᵖ G] (a b : G) (r : ) :
                                  (fun (x : G) => x * a) ⁻¹' closedBall b r = closedBall (b / a) r
                                  @[simp]
                                  theorem Metric.preimage_add_right_closedBall {G : Type v} [AddGroup G] [PseudoMetricSpace G] [IsIsometricVAdd Gᵃᵒᵖ G] (a b : G) (r : ) :
                                  (fun (x : G) => x + a) ⁻¹' closedBall b r = closedBall (b - a) r
                                  instance instIsIsometricSMulForall {M : Type u} {ι : Type u_3} {X : ιType u_2} [Fintype ι] [(i : ι) → SMul M (X i)] [(i : ι) → PseudoEMetricSpace (X i)] [∀ (i : ι), IsIsometricSMul M (X i)] :
                                  IsIsometricSMul M ((i : ι) → X i)
                                  instance instIsIsometricVAddForall {M : Type u} {ι : Type u_3} {X : ιType u_2} [Fintype ι] [(i : ι) → VAdd M (X i)] [(i : ι) → PseudoEMetricSpace (X i)] [∀ (i : ι), IsIsometricVAdd M (X i)] :
                                  IsIsometricVAdd M ((i : ι) → X i)
                                  instance Pi.isIsometricSMul' {ι : Type u_4} {M : ιType u_2} {X : ιType u_3} [Fintype ι] [(i : ι) → SMul (M i) (X i)] [(i : ι) → PseudoEMetricSpace (X i)] [∀ (i : ι), IsIsometricSMul (M i) (X i)] :
                                  IsIsometricSMul ((i : ι) → M i) ((i : ι) → X i)
                                  instance Pi.isIsometricVAdd' {ι : Type u_4} {M : ιType u_2} {X : ιType u_3} [Fintype ι] [(i : ι) → VAdd (M i) (X i)] [(i : ι) → PseudoEMetricSpace (X i)] [∀ (i : ι), IsIsometricVAdd (M i) (X i)] :
                                  IsIsometricVAdd ((i : ι) → M i) ((i : ι) → X i)
                                  instance Pi.isIsometricSMul'' {ι : Type u_3} {M : ιType u_2} [Fintype ι] [(i : ι) → Mul (M i)] [(i : ι) → PseudoEMetricSpace (M i)] [∀ (i : ι), IsIsometricSMul (M i)ᵐᵒᵖ (M i)] :
                                  IsIsometricSMul ((i : ι) → M i)ᵐᵒᵖ ((i : ι) → M i)
                                  instance Pi.isIsometricVAdd'' {ι : Type u_3} {M : ιType u_2} [Fintype ι] [(i : ι) → Add (M i)] [(i : ι) → PseudoEMetricSpace (M i)] [∀ (i : ι), IsIsometricVAdd (M i)ᵃᵒᵖ (M i)] :
                                  IsIsometricVAdd ((i : ι) → M i)ᵃᵒᵖ ((i : ι) → M i)