The bounded distance decomposition of metric spaces

Content created by malarbol.

Created on 2025-08-30.
Last modified on 2025-08-30.

{-# OPTIONS --lossy-unification #-}

module metric-spaces.bounded-distance-decompositions-of-metric-spaces where
Imports
open import elementary-number-theory.positive-rational-numbers

open import foundation.contractible-maps
open import foundation.contractible-types
open import foundation.dependent-pair-types
open import foundation.equality-dependent-pair-types
open import foundation.equivalence-classes
open import foundation.equivalence-relations
open import foundation.equivalences
open import foundation.existential-quantification
open import foundation.function-types
open import foundation.functoriality-dependent-pair-types
open import foundation.functoriality-propositional-truncation
open import foundation.homotopies
open import foundation.identity-types
open import foundation.logical-equivalences
open import foundation.propositional-truncations
open import foundation.propositions
open import foundation.set-quotients
open import foundation.sets
open import foundation.subtypes
open import foundation.transport-along-identifications
open import foundation.universe-levels

open import metric-spaces.cauchy-approximations-metric-spaces
open import metric-spaces.elements-at-bounded-distance-metric-spaces
open import metric-spaces.equality-of-metric-spaces
open import metric-spaces.functions-metric-spaces
open import metric-spaces.indexed-sums-metric-spaces
open import metric-spaces.isometries-metric-spaces
open import metric-spaces.metric-spaces
open import metric-spaces.subspaces-metric-spaces

Idea

Any metric space is isometrically equivalent to its bounded distance decomposition, the indexed sum of its subspaces of elements at bounded distance indexed by the set quotient of the metric space by the equivalence relation of being at bounded distance.

Definitions

The set of bounded distance components of a metric space

module _
  {l1 l2 : Level} (A : Metric-Space l1 l2)
  where

  set-bounded-distance-component-Metric-Space : Set (l1  l2)
  set-bounded-distance-component-Metric-Space =
    quotient-Set
      ( equivalence-relation-bounded-dist-Metric-Space A)

  type-bounded-distance-component-Metric-Space : UU (l1  l2)
  type-bounded-distance-component-Metric-Space =
    type-Set set-bounded-distance-component-Metric-Space

  map-type-bounded-distance-component-Metric-Space :
    type-Metric-Space A 
    type-bounded-distance-component-Metric-Space
  map-type-bounded-distance-component-Metric-Space =
    quotient-map
      ( equivalence-relation-bounded-dist-Metric-Space A)

The family of metric subspaces of elements at bounded distance

module _
  {l1 l2 : Level} (A : Metric-Space l1 l2)
  (x : type-bounded-distance-component-Metric-Space A)
  where

  subtype-bounded-distance-component-Metric-Space : subset-Metric-Space l2 A
  subtype-bounded-distance-component-Metric-Space =
    subtype-set-quotient
      ( equivalence-relation-bounded-dist-Metric-Space A)
      ( x)

  subspace-bounded-distance-component-Metric-Space :
    Metric-Space (l1  l2) l2
  subspace-bounded-distance-component-Metric-Space =
    subspace-Metric-Space
      ( A)
      ( subtype-bounded-distance-component-Metric-Space)

  type-subspace-bounded-distance-component-Metric-Space : UU (l1  l2)
  type-subspace-bounded-distance-component-Metric-Space =
    type-Metric-Space
      subspace-bounded-distance-component-Metric-Space

The bounded distance decomposition of a metric space

module _
  {l1 l2 : Level} (A : Metric-Space l1 l2)
  where

  bounded-distance-decomposition-Metric-Space :
    Metric-Space (l1  l2) (l1  l2)
  bounded-distance-decomposition-Metric-Space =
    indexed-sum-Metric-Space
      ( set-bounded-distance-component-Metric-Space A)
      ( subspace-bounded-distance-component-Metric-Space A)

  type-bounded-distance-decomposition-Metric-Space : UU (l1  l2)
  type-bounded-distance-decomposition-Metric-Space =
    type-Metric-Space bounded-distance-decomposition-Metric-Space

Properties

All elements of a bounded distance subspace are at bounded distance

module _
  {l1 l2 : Level} (A : Metric-Space l1 l2)
  (X : type-bounded-distance-component-Metric-Space A)
  where

  all-elements-at-bounded-distance-subspace-bounded-distance-component-Metric-Space :
    (x y : type-subspace-bounded-distance-component-Metric-Space A X) 
    bounded-dist-Metric-Space
      ( subspace-bounded-distance-component-Metric-Space A X)
      ( x)
      ( y)
  all-elements-at-bounded-distance-subspace-bounded-distance-component-Metric-Space
    (x , x∈X) (y , y∈X) =
    sim-is-in-equivalence-class-set-quotient
      ( equivalence-relation-bounded-dist-Metric-Space A)
      ( X)
      ( x∈X)
      ( y∈X)

Neighborhoods in subspaces of equal components are neigborhoods in the ambient metric space

module _
  {l1 l2 : Level} (A : Metric-Space l1 l2)
  where

  lemma-iff-neighborhood-bounded-distance-decomposition-Metric-Space :
    ( d : ℚ⁺) 
    ( X Y : type-bounded-distance-component-Metric-Space A) 
    ( eqXY : X  Y) 
    ( x : type-subspace-bounded-distance-component-Metric-Space A X) 
    ( y : type-subspace-bounded-distance-component-Metric-Space A Y) 
    ( neighborhood-Metric-Space
      ( subspace-bounded-distance-component-Metric-Space A Y)
      ( d)
      ( tr
        ( type-Metric-Space 
          subspace-bounded-distance-component-Metric-Space A)
        ( eqXY)
        ( x))
      ( y)) 
    neighborhood-Metric-Space A d (pr1 x) (pr1 y)
  lemma-iff-neighborhood-bounded-distance-decomposition-Metric-Space
    d X .X refl (x , x∈X) (y , y∈X) = id-iff

Metric spaces are isometrically equivalent to their bounded distance decomposition

Equivalence of underlying types

module _
  {l1 l2 : Level} (A : Metric-Space l1 l2)
  where

  equiv-type-bounded-distance-decomposition-Metric-Space :
    type-bounded-distance-decomposition-Metric-Space A 
    type-Metric-Space A
  equiv-type-bounded-distance-decomposition-Metric-Space =
    equiv-total-set-quotient
      ( equivalence-relation-bounded-dist-Metric-Space A)

  map-equiv-bounded-distance-decomposition-Metric-Space :
    type-function-Metric-Space
      ( bounded-distance-decomposition-Metric-Space A)
      ( A)
  map-equiv-bounded-distance-decomposition-Metric-Space =
    map-equiv
      ( equiv-type-bounded-distance-decomposition-Metric-Space)

The equivalence between a metric space and its bounded distance decomposition is an isometry

module _
  {l1 l2 : Level} (A : Metric-Space l1 l2)
  where

  preserves-neighborhood-map-equiv-bounded-distance-decomposition-Metric-Space :
    ( d : ℚ⁺)
    ( x y : type-bounded-distance-decomposition-Metric-Space A) 
    neighborhood-Metric-Space
      ( bounded-distance-decomposition-Metric-Space A)
      ( d)
      ( x)
      ( y) 
    neighborhood-Metric-Space A d
      ( map-equiv-bounded-distance-decomposition-Metric-Space A x)
      ( map-equiv-bounded-distance-decomposition-Metric-Space A y)
  preserves-neighborhood-map-equiv-bounded-distance-decomposition-Metric-Space
    d (X , x , x∈X) (Y , y , y∈Y) (X=Y , Nxy) =
    forward-implication
      ( lemma-iff-neighborhood-bounded-distance-decomposition-Metric-Space
        ( A)
        ( d)
        ( X)
        ( Y)
        ( X=Y)
        ( x , x∈X)
        ( y , y∈Y))
      ( Nxy)

  reflects-neighborhood-map-equiv-bounded-distance-decomposition-Metric-Space :
    ( d : ℚ⁺)
    ( x y : type-bounded-distance-decomposition-Metric-Space A) 
    neighborhood-Metric-Space A d
      ( map-equiv-bounded-distance-decomposition-Metric-Space A x)
      ( map-equiv-bounded-distance-decomposition-Metric-Space A y) 
    neighborhood-Metric-Space
      ( bounded-distance-decomposition-Metric-Space A)
      ( d)
      ( x)
      ( y)
  reflects-neighborhood-map-equiv-bounded-distance-decomposition-Metric-Space
    d (X , x , x∈X) (Y , y , y∈Y) Nxy =
    ( lemma-eq ,
      backward-implication
        ( lemma-iff-neighborhood-bounded-distance-decomposition-Metric-Space
          ( A)
          ( d)
          ( X)
          ( Y)
          ( lemma-eq)
          ( x , x∈X)
          ( y , y∈Y))
        ( Nxy))
    where

    lemma-eq : X  Y
    lemma-eq =
      eq-set-quotient-sim-element-set-quotient
        ( equivalence-relation-bounded-dist-Metric-Space A)
        ( X)
        ( Y)
        ( x∈X)
        ( y∈Y)
        ( unit-trunc-Prop (d , Nxy))

  is-isometry-map-equiv-bounded-distance-decomposition-Metric-Space :
    is-isometry-Metric-Space
      ( bounded-distance-decomposition-Metric-Space A)
      ( A)
      ( map-equiv-bounded-distance-decomposition-Metric-Space A)
  is-isometry-map-equiv-bounded-distance-decomposition-Metric-Space
    d x y =
    ( ( preserves-neighborhood-map-equiv-bounded-distance-decomposition-Metric-Space
        ( d)
        ( x)
        ( y)) ,
      ( reflects-neighborhood-map-equiv-bounded-distance-decomposition-Metric-Space
        ( d)
        ( x)
        ( y)))

The isometric equivalence between a metric space and its bounded distance decomposition

module _
  {l1 l2 : Level} (A : Metric-Space l1 l2)
  where

  isometric-equiv-bounded-distance-decomposition-Metric-Space :
    isometric-equiv-Metric-Space
      ( bounded-distance-decomposition-Metric-Space A)
      ( A)
  isometric-equiv-bounded-distance-decomposition-Metric-Space =
    ( equiv-type-bounded-distance-decomposition-Metric-Space A ,
      is-isometry-map-equiv-bounded-distance-decomposition-Metric-Space A)

The bounded distance decomposition operation is idempotent

module _
  {l1 l2 : Level} (A : Metric-Space l1 l2)
  where

  is-idempotent-bounded-distance-decomposition-Metric-Space :
    bounded-distance-decomposition-Metric-Space
      ( bounded-distance-decomposition-Metric-Space A) 
    bounded-distance-decomposition-Metric-Space A
  is-idempotent-bounded-distance-decomposition-Metric-Space =
    eq-isometric-equiv-Metric-Space
      ( bounded-distance-decomposition-Metric-Space
        ( bounded-distance-decomposition-Metric-Space A))
      ( bounded-distance-decomposition-Metric-Space A)
      ( isometric-equiv-bounded-distance-decomposition-Metric-Space
        ( bounded-distance-decomposition-Metric-Space A))

Cauchy approximations in the bounded distance decomposition of a metric space

Cauchy approximations in bounded distance subspaces are Cauchy approximations in the ambient metric space

module _
  { l1 l2 : Level} (A : Metric-Space l1 l2)
  ( X : type-bounded-distance-component-Metric-Space A)
  ( f :
    cauchy-approximation-Metric-Space
      ( subspace-bounded-distance-component-Metric-Space A X))
  where

  map-cauchy-approximation-subspace-bounded-distance-component-Metric-Space :
    cauchy-approximation-Metric-Space A
  map-cauchy-approximation-subspace-bounded-distance-component-Metric-Space =
    map-short-function-cauchy-approximation-Metric-Space
      ( subspace-bounded-distance-component-Metric-Space A X)
      ( A)
      ( short-inclusion-subspace-Metric-Space
        ( A)
        ( subtype-bounded-distance-component-Metric-Space A X))
      ( f)

  is-in-subspace-map-cauchy-approximation-bounded-distance-component-Metric-Space :
    (d : ℚ⁺) 
    is-in-subtype
      ( subtype-bounded-distance-component-Metric-Space A X)
      ( map-cauchy-approximation-Metric-Space
        ( A)
        ( map-cauchy-approximation-subspace-bounded-distance-component-Metric-Space)
        ( d))
  is-in-subspace-map-cauchy-approximation-bounded-distance-component-Metric-Space
    d =
    is-in-subtype-inclusion-subtype
      ( subtype-bounded-distance-component-Metric-Space A X)
      ( map-cauchy-approximation-Metric-Space
        ( subspace-bounded-distance-component-Metric-Space A X)
        ( f)
        ( d))

Cauchy approximations take values in a unique bounded distance component

module _
  {l1 l2 : Level} (A : Metric-Space l1 l2)
  (f : cauchy-approximation-Metric-Space A)
  where

  is-bounded-distance-component-prop-cauchy-approximation-Metric-Space :
    subtype l2 (type-bounded-distance-component-Metric-Space A)
  is-bounded-distance-component-prop-cauchy-approximation-Metric-Space X =
    Π-Prop
      ( ℚ⁺)
      ( λ d 
        subtype-bounded-distance-component-Metric-Space A X
          ( map-cauchy-approximation-Metric-Space A f d))

  is-bounded-distance-component-cauchy-approximation-Metric-Space :
    type-bounded-distance-component-Metric-Space A  UU l2
  is-bounded-distance-component-cauchy-approximation-Metric-Space X =
    type-Prop
      (is-bounded-distance-component-prop-cauchy-approximation-Metric-Space X)

  all-eq-is-bounded-distance-component-cauchy-approximation-Metric-Space :
    (X Y : type-bounded-distance-component-Metric-Space A) 
    is-bounded-distance-component-cauchy-approximation-Metric-Space X 
    is-bounded-distance-component-cauchy-approximation-Metric-Space Y 
    X  Y
  all-eq-is-bounded-distance-component-cauchy-approximation-Metric-Space
    X Y f∈X f∈Y =
    let
      open
        do-syntax-trunc-Prop
          ( Id-Prop
            ( quotient-Set
              ( equivalence-relation-bounded-dist-Metric-Space A))
            ( X)
            ( Y))
    in do
      d  is-inhabited-ℚ⁺
      eq-set-quotient-sim-element-set-quotient
        ( equivalence-relation-bounded-dist-Metric-Space A)
        ( X)
        ( Y)
        ( f∈X d)
        ( f∈Y d)
        ( refl-bounded-dist-Metric-Space A _)

  type-bounded-distance-component-cauchy-approximation-Metric-Space :
    UU (l1  l2)
  type-bounded-distance-component-cauchy-approximation-Metric-Space =
    type-subtype
      is-bounded-distance-component-prop-cauchy-approximation-Metric-Space

  abstract
    all-eq-type-bounded-distance-component-cauchy-approximation-Metric-Space :
      ( X Y :
        type-bounded-distance-component-cauchy-approximation-Metric-Space) 
      ( X  Y)
    all-eq-type-bounded-distance-component-cauchy-approximation-Metric-Space
      (X , f∈X) (Y , f∈Y) =
      eq-type-subtype
        ( is-bounded-distance-component-prop-cauchy-approximation-Metric-Space)
        ( all-eq-is-bounded-distance-component-cauchy-approximation-Metric-Space
          ( X)
          ( Y)
          ( f∈X)
          ( f∈Y))

    is-prop-type-bounded-distance-component-cauchy-approximation-Metric-Space :
      is-prop type-bounded-distance-component-cauchy-approximation-Metric-Space
    is-prop-type-bounded-distance-component-cauchy-approximation-Metric-Space =
      is-prop-all-elements-equal
        ( all-eq-type-bounded-distance-component-cauchy-approximation-Metric-Space)

  bounded-distance-component-prop-cauchy-approximation-Metric-Space :
    Prop (l1  l2)
  bounded-distance-component-prop-cauchy-approximation-Metric-Space =
    ( type-bounded-distance-component-cauchy-approximation-Metric-Space ,
      is-prop-type-bounded-distance-component-cauchy-approximation-Metric-Space)

  is-bounded-distance-component-map-component-cauchy-approximation-Metric-Space :
    (d : ℚ⁺) 
    is-bounded-distance-component-cauchy-approximation-Metric-Space
      ( map-type-bounded-distance-component-Metric-Space A
        ( map-cauchy-approximation-Metric-Space A f d))
  is-bounded-distance-component-map-component-cauchy-approximation-Metric-Space
    ε δ =
    inv-tr
      ( λ X 
        is-in-equivalence-class-set-quotient
          ( equivalence-relation-bounded-dist-Metric-Space A)
          ( X)
          ( map-cauchy-approximation-Metric-Space A f δ))
      ( apply-effectiveness-quotient-map'
        ( equivalence-relation-bounded-dist-Metric-Space A)
        ( bounded-dist-map-cauchy-approximation-Metric-Space A f ε δ))
      ( is-in-equivalence-class-quotient-map-set-quotient
        ( equivalence-relation-bounded-dist-Metric-Space A)
        ( _))

  center-bounded-distance-component-cauchy-appromimation-Metric-Space :
    type-bounded-distance-component-cauchy-approximation-Metric-Space
  center-bounded-distance-component-cauchy-appromimation-Metric-Space =
    rec-trunc-Prop
      ( bounded-distance-component-prop-cauchy-approximation-Metric-Space)
      ( λ d 
        ( ( map-type-bounded-distance-component-Metric-Space A
            ( map-cauchy-approximation-Metric-Space A f d)) ,
          ( is-bounded-distance-component-map-component-cauchy-approximation-Metric-Space
            ( d))))
      ( is-inhabited-ℚ⁺)

  is-contr-type-bounded-distance-component-cauchy-approximation-Metric-Space :
    is-contr type-bounded-distance-component-cauchy-approximation-Metric-Space
  is-contr-type-bounded-distance-component-cauchy-approximation-Metric-Space =
    ( center-bounded-distance-component-cauchy-appromimation-Metric-Space ,
      all-eq-type-bounded-distance-component-cauchy-approximation-Metric-Space
        ( center-bounded-distance-component-cauchy-appromimation-Metric-Space))

  bounded-distance-component-cauchy-approximation-Metric-Space :
    type-bounded-distance-component-Metric-Space A
  bounded-distance-component-cauchy-approximation-Metric-Space =
    pr1 center-bounded-distance-component-cauchy-appromimation-Metric-Space

  is-bounded-distance-component-bounded-distance-component-cauchy-approximation-Metric-Space :
    is-bounded-distance-component-cauchy-approximation-Metric-Space
      bounded-distance-component-cauchy-approximation-Metric-Space
  is-bounded-distance-component-bounded-distance-component-cauchy-approximation-Metric-Space
    = pr2 center-bounded-distance-component-cauchy-appromimation-Metric-Space

  map-subspace-bounded-distance-component-cauchy-approximation-Metric-Space :
    cauchy-approximation-Metric-Space
      ( subspace-bounded-distance-component-Metric-Space
        ( A)
        ( bounded-distance-component-cauchy-approximation-Metric-Space))
  pr1 map-subspace-bounded-distance-component-cauchy-approximation-Metric-Space
    d =
    ( ( map-cauchy-approximation-Metric-Space A f d) ,
      ( is-bounded-distance-component-bounded-distance-component-cauchy-approximation-Metric-Space
        ( d)))
  pr2 map-subspace-bounded-distance-component-cauchy-approximation-Metric-Space
    = is-cauchy-approximation-map-cauchy-approximation-Metric-Space A f

  map-cauchy-approximation-bounded-distance-decomposition-Metric-Space :
    Σ ( type-bounded-distance-component-Metric-Space A)
      ( ( cauchy-approximation-Metric-Space) 
        ( subspace-bounded-distance-component-Metric-Space A))
  map-cauchy-approximation-bounded-distance-decomposition-Metric-Space =
    ( bounded-distance-component-cauchy-approximation-Metric-Space ,
      map-subspace-bounded-distance-component-cauchy-approximation-Metric-Space)

Recent changes