Documentation

Mathlib.Topology.MetricSpace.Snowflaking

Snowflaking of a metric space #

Given a (pseudo) (extended) metric space X and a number 0 < α ≤ 1, one can consider the metric given by d x y = (dist x y) ^ α. The metric space determined by this new metric is said to be the α-snowflaking (or α-snowflake) of X. In this file we define Metric.Snowflaking X α hα₀ hα₁ to be a one-field structure wrapper around X with metric given by this formula.

The use of the term snowflaking arises from the fact that if one chooses X := Set.Icc 0 1 and α := log 3 / log 4, then Metric.Snowflaking X α … … is isometric to the von Koch snowflake, where we equip that space with the natural metric induced by the α⁻¹-Hausdorff measure of paths.

Snowflake metrics are used regularly in the geometry of metric spaces where, among other things, they characterize doubling metrics. In particular, a metric is doubling if and only if every α-snowflaking (with 0 < α < 1) of it is bilipschitz equivalent to a subset of some Euclidean space (the dimension of the Euclidean space depends on α). See [Hei01].

Another reason to introduce this definition is the following. In the proof of his version of the Morse-Sard theorem, Moreira [Mor01] studies maps of two variables that are Lipschitz continuous in one variable, but satisfy a stronger assumption ‖f (a, y) - f (a, b)‖ = O(‖y - b‖ ^ (k + α)) along the second variable, as long as (a, b) is one of the "interesting" points.

If we want to apply Vitali covering theorem in this context, we need to cover the set by products closedBall a (R ^ (k + α)) ×ˢ closedBall b R so that both components make a similar contribution to ‖f (x, y) - f (a, b)‖. These sets aren't balls in the original metric (or even subsets of balls that occupy at least a fixed fraction of the volume, as we require in our version of Vitali theorem).

However, if we change the metric on the first component to the one introduced in this file, then these sets become balls, and we can apply Vitali theorem.

References #

structure Metric.Snowflaking (X : Type u_1) (α : ) (hα₀ : 0 < α) (hα₁ : α 1) :
Type u_1

A copy of a type with metric given by dist x y = (dist x.val y.val) ^ α.

This is defined as a one-field structure.

  • val : X

    The value wrapped in x : Snowflaking X α hα₀ hα₁.

Instances For
    theorem Metric.Snowflaking.ext {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} {x y : Snowflaking X α hα₀ hα₁} (val : x.val = y.val) :
    x = y
    theorem Metric.Snowflaking.ext_iff {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} {x y : Snowflaking X α hα₀ hα₁} :
    x = y x.val = y.val
    def Metric.Snowflaking.ofSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} :
    Snowflaking X α hα₀ hα₁ X

    The natural equivalence between Snowflaking X α hr₀ hr₁ and X.

    Equations
    Instances For
      def Metric.Snowflaking.toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} :
      X Snowflaking X α hα₀ hα₁

      The natural equivalence between X and Snowflaking X α hr₀ hr₁.

      Equations
      Instances For
        @[simp]
        theorem Metric.Snowflaking.toSnowflaking.sizeOf_spec {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [SizeOf X] (x : X) :
        def Metric.Snowflaking.casesOn_toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} {motive : Snowflaking X α hα₀ hα₁Sort u_2} (toSnowflaking : (x : X) → motive (toSnowflaking x)) (x : Snowflaking X α hα₀ hα₁) :
        motive x

        This definition makes cases x and induction x use toSnowflaking instead of mk.

        Equations
        Instances For
          @[simp]
          theorem Metric.Snowflaking.mk_eq_toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} :
          @[simp]
          theorem Metric.Snowflaking.val_eq_ofSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} :
          @[simp]
          theorem Metric.Snowflaking.symm_toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} :
          @[simp]
          theorem Metric.Snowflaking.symm_ofSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} :
          @[simp]
          theorem Metric.Snowflaking.toSnowflaking_ofSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} (x : Snowflaking X α hα₀ hα₁) :
          @[simp]
          theorem Metric.Snowflaking.ofSnowflaking_toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} (x : X) :
          @[simp]
          theorem Metric.Snowflaking.ofSnowflaking_comp_toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} :
          @[simp]
          theorem Metric.Snowflaking.toSnowflaking_comp_ofSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} :
          theorem Metric.Snowflaking.image_toSnowflaking_eq_preimage {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} (s : Set X) :
          theorem Metric.Snowflaking.image_ofSnowflaking_eq_preimage {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} (s : Set (Snowflaking X α hα₀ hα₁)) :
          @[simp]
          theorem Metric.Snowflaking.image_toSnowflaking_image_ofSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} (s : Set (Snowflaking X α hα₀ hα₁)) :
          @[simp]
          theorem Metric.Snowflaking.image_ofSnowflaking_image_toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} (s : Set X) :

          Topological space structure #

          The topology on Snowflaking X α hα₀ hα₁ is induced from X.

          instance Metric.Snowflaking.instTopologicalSpace {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [TopologicalSpace X] :
          TopologicalSpace (Snowflaking X α hα₀ hα₁)

          The topological space structure on Snowflaking X α _ _ is induced from the original space.

          Equations
          theorem Metric.Snowflaking.continuous_ofSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [TopologicalSpace X] :
          theorem Metric.Snowflaking.continuous_toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [TopologicalSpace X] :
          def Metric.Snowflaking.homeomorph {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [TopologicalSpace X] :
          Snowflaking X α hα₀ hα₁ ≃ₜ X

          The natural homeomorphism between Snowflaking X α hα₀ hα₁ and X.

          Equations
          Instances For
            @[simp]
            theorem Metric.Snowflaking.toEquiv_homeomorph {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [TopologicalSpace X] :
            @[simp]
            theorem Metric.Snowflaking.homeomorph_symm_apply {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [TopologicalSpace X] :
            @[simp]
            theorem Metric.Snowflaking.homeomorph_apply {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [TopologicalSpace X] :

            We copy some instances from the underlying space X to Snowflaking X α hα₀ hα₁. In the future, we can add more of them, if needed, or even copy all the topology-related classes, if we get a tactic to do it automatically.

            instance Metric.Snowflaking.instT0Space {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [TopologicalSpace X] [T0Space X] :
            T0Space (Snowflaking X α hα₀ hα₁)
            instance Metric.Snowflaking.instT2Space {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [TopologicalSpace X] [T2Space X] :
            T2Space (Snowflaking X α hα₀ hα₁)
            instance Metric.Snowflaking.instSecondCountableTopology {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [TopologicalSpace X] [SecondCountableTopology X] :

            Bornology #

            The bornology on Snowflaking X α hα₀ hα₁ is induced from X.

            @[simp]
            theorem Metric.Snowflaking.isBounded_image_ofSnowflaking_iff {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [Bornology X] {s : Set (Snowflaking X α hα₀ hα₁)} :
            @[simp]
            theorem Metric.Snowflaking.isBounded_preimage_toSnowflaking_iff {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [Bornology X] {s : Set (Snowflaking X α hα₀ hα₁)} :
            @[simp]
            theorem Metric.Snowflaking.isBounded_image_toSnowflaking_iff {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [Bornology X] {s : Set X} :
            @[simp]

            Uniform space structure #

            The uniform space structure on Snowflaking X α hα₀ hα₁ is induced from X.

            instance Metric.Snowflaking.instUniformSpace {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [UniformSpace X] :
            UniformSpace (Snowflaking X α hα₀ hα₁)
            Equations
            def Metric.Snowflaking.uniformEquiv {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [UniformSpace X] :
            Snowflaking X α hα₀ hα₁ ≃ᵤ X

            The natural uniform space equivalence between Snowflaking X α hα hα₁ and the underlying space.

            Equations
            Instances For
              @[simp]
              theorem Metric.Snowflaking.uniformEquiv_toEquiv {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [UniformSpace X] :
              @[simp]
              theorem Metric.Snowflaking.uniformEquiv_symm_apply {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [UniformSpace X] (val : X) :
              @[simp]
              theorem Metric.Snowflaking.uniformEquiv_apply {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [UniformSpace X] (self : Snowflaking X α hα₀ hα₁) :
              uniformEquiv self = self.val

              Extended distance and a (pseudo) extended metric space structure #

              Th extended distance on Snowflaking X α hα₀ hα₁ is given by edist x y = (edist x.ofSnowflaking y.ofSnowflaking) ^ α.

              If the original space is a (pseudo) extended metric space, then so is Snowflaking X α hα₀ hα₁.

              instance Metric.Snowflaking.instEDist {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [EDist X] :
              EDist (Snowflaking X α hα₀ hα₁)
              Equations
              theorem Metric.Snowflaking.edist_def {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [EDist X] (x y : Snowflaking X α hα₀ hα₁) :
              @[simp]
              theorem Metric.Snowflaking.edist_toSnowflaking_toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [EDist X] (x y : X) :
              @[simp]
              theorem Metric.Snowflaking.edist_ofSnowflaking_ofSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [EDist X] (x y : Snowflaking X α hα₀ hα₁) :
              instance Metric.Snowflaking.instPseudoEMetricSpace {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] :
              PseudoEMetricSpace (Snowflaking X α hα₀ hα₁)
              Equations
              • One or more equations did not get rendered due to their size.
              @[simp]
              theorem Metric.Snowflaking.preimage_ofSnowflaking_emetricBall {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] (x : X) (r : ENNReal) :
              @[simp]
              theorem Metric.Snowflaking.image_toSnowflaking_emetricBall {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] (x : X) (r : ENNReal) :
              @[simp]
              theorem Metric.Snowflaking.preimage_toSnowflaking_emetricBall {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] (x : Snowflaking X α hα₀ hα₁) (d : ENNReal) :
              @[simp]
              theorem Metric.Snowflaking.image_ofSnowflaking_emetricBall {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] (x : Snowflaking X α hα₀ hα₁) (d : ENNReal) :
              @[simp]
              @[simp]
              theorem Metric.Snowflaking.image_toSnowflaking_emetricClosedBall {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] (x : X) (r : ENNReal) :
              @[simp]
              theorem Metric.Snowflaking.preimage_toSnowflaking_emetricClosedBall {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] (x : Snowflaking X α hα₀ hα₁) (d : ENNReal) :
              @[simp]
              theorem Metric.Snowflaking.image_ofSnowflaking_emetricClosedBall {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] (x : Snowflaking X α hα₀ hα₁) (d : ENNReal) :
              @[simp]
              theorem Metric.Snowflaking.ediam_image_ofSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] (s : Set (Snowflaking X α hα₀ hα₁)) :
              @[simp]
              theorem Metric.Snowflaking.ediam_preimage_toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] (s : Set (Snowflaking X α hα₀ hα₁)) :
              @[simp]
              theorem Metric.Snowflaking.ediam_preimage_ofSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] (s : Set X) :
              @[simp]
              theorem Metric.Snowflaking.ediam_image_toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoEMetricSpace X] (s : Set X) :
              instance Metric.Snowflaking.instEMetricSpace {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [EMetricSpace X] :
              EMetricSpace (Snowflaking X α hα₀ hα₁)
              Equations

              Distance and a (pseudo) metric space structure #

              Th extended distance on Snowflaking X α hα₀ hα₁ is given by dist x y = (dist x.ofSnowflaking y.ofSnowflaking) ^ α.

              If the original space is a (pseudo) metric space, then so is Snowflaking X α hα₀ hα₁.

              instance Metric.Snowflaking.instDist {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [Dist X] :
              Dist (Snowflaking X α hα₀ hα₁)
              Equations
              @[simp]
              theorem Metric.Snowflaking.dist_toSnowflaking_toSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [Dist X] (x y : X) :
              @[simp]
              theorem Metric.Snowflaking.dist_ofSnowflaking_ofSnowflaking {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoMetricSpace X] (x y : Snowflaking X α hα₀ hα₁) :
              @[simp]
              theorem Metric.Snowflaking.preimage_ofSnowflaking_ball {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoMetricSpace X] (x : X) {r : } (hr : 0 r) :
              @[simp]
              theorem Metric.Snowflaking.image_toSnowflaking_ball {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoMetricSpace X] (x : X) {r : } (hr : 0 r) :
              @[simp]
              theorem Metric.Snowflaking.preimage_toSnowflaking_ball {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoMetricSpace X] (x : Snowflaking X α hα₀ hα₁) {r : } (hr : 0 r) :
              @[simp]
              theorem Metric.Snowflaking.image_ofSnowflaking_ball {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoMetricSpace X] (x : Snowflaking X α hα₀ hα₁) {r : } (hr : 0 r) :
              @[simp]
              theorem Metric.Snowflaking.preimage_ofSnowflaking_closedBall {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoMetricSpace X] (x : X) {r : } (hr : 0 r) :
              @[simp]
              theorem Metric.Snowflaking.image_toSnowflaking_closedBall {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoMetricSpace X] (x : X) {r : } (hr : 0 r) :
              @[simp]
              theorem Metric.Snowflaking.preimage_toSnowflaking_closedBall {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoMetricSpace X] (x : Snowflaking X α hα₀ hα₁) {r : } (hr : 0 r) :
              @[simp]
              theorem Metric.Snowflaking.image_ofSnowflaking_closedBall {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [PseudoMetricSpace X] (x : Snowflaking X α hα₀ hα₁) {r : } (hr : 0 r) :
              instance Metric.Snowflaking.instMetricSpace {X : Type u_1} {α : } {hα₀ : 0 < α} {hα₁ : α 1} [MetricSpace X] :
              MetricSpace (Snowflaking X α hα₀ hα₁)
              Equations