diff --git a/src/foundation/equivalence-classes.lagda.md b/src/foundation/equivalence-classes.lagda.md
index 71954bae57..39adccde10 100644
--- a/src/foundation/equivalence-classes.lagda.md
+++ b/src/foundation/equivalence-classes.lagda.md
@@ -8,11 +8,15 @@ module foundation.equivalence-classes where
```agda
open import foundation.conjunction
+open import foundation.contractible-types
open import foundation.dependent-pair-types
open import foundation.effective-maps-equivalence-relations
+open import foundation.equivalences
open import foundation.existential-quantification
+open import foundation.function-types
open import foundation.functoriality-propositional-truncation
open import foundation.fundamental-theorem-of-identity-types
+open import foundation.homotopies
open import foundation.inhabited-subtypes
open import foundation.locally-small-types
open import foundation.logical-equivalences
@@ -23,13 +27,13 @@ open import foundation.small-types
open import foundation.subtype-identity-principle
open import foundation.subtypes
open import foundation.surjective-maps
+open import foundation.type-arithmetic-dependent-pair-types
open import foundation.universal-property-image
open import foundation.universe-levels
open import foundation-core.cartesian-product-types
open import foundation-core.embeddings
open import foundation-core.equivalence-relations
-open import foundation-core.equivalences
open import foundation-core.functoriality-dependent-pair-types
open import foundation-core.identity-types
open import foundation-core.propositions
@@ -315,12 +319,13 @@ module _
( λ D → is-in-equivalence-class-Prop R D a)
( eq-class-equivalence-class R C H)
- is-torsorial-is-in-equivalence-class :
- is-torsorial (λ P → is-in-equivalence-class R P a)
- pr1 is-torsorial-is-in-equivalence-class =
- center-total-is-in-equivalence-class
- pr2 is-torsorial-is-in-equivalence-class =
- contraction-total-is-in-equivalence-class
+ abstract
+ is-torsorial-is-in-equivalence-class :
+ is-torsorial (λ P → is-in-equivalence-class R P a)
+ pr1 is-torsorial-is-in-equivalence-class =
+ center-total-is-in-equivalence-class
+ pr2 is-torsorial-is-in-equivalence-class =
+ contraction-total-is-in-equivalence-class
is-in-equivalence-class-eq-equivalence-class :
(q : equivalence-class R) → class R a = q →
@@ -338,6 +343,26 @@ module _
( is-in-equivalence-class-eq-equivalence-class)
```
+### Σ-decompositions of types induced by equivalence classes
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (R : equivalence-relation l2 A)
+ where
+
+ equiv-total-is-in-equivalence-class :
+ Σ A (λ x → Σ (equivalence-class R) (λ X → is-in-equivalence-class R X x)) ≃
+ ( A)
+ equiv-total-is-in-equivalence-class =
+ right-unit-law-Σ-is-contr
+ ( is-torsorial-is-in-equivalence-class R)
+
+ Σ-decomposition-is-in-equivalence-class :
+ Σ (equivalence-class R) (type-subtype ∘ is-in-equivalence-class-Prop R) ≃ A
+ Σ-decomposition-is-in-equivalence-class =
+ equiv-total-is-in-equivalence-class ∘e equiv-left-swap-Σ
+```
+
### The map `class : A → equivalence-class R` is an effective quotient map
```agda
diff --git a/src/foundation/set-quotients.lagda.md b/src/foundation/set-quotients.lagda.md
index 26fd53a4bf..4ed14ec988 100644
--- a/src/foundation/set-quotients.lagda.md
+++ b/src/foundation/set-quotients.lagda.md
@@ -8,18 +8,29 @@ module foundation.set-quotients where
```agda
open import foundation.action-on-identifications-functions
+open import foundation.contractible-maps
+open import foundation.contractible-types
open import foundation.dependent-pair-types
open import foundation.effective-maps-equivalence-relations
open import foundation.embeddings
+open import foundation.equality-dependent-pair-types
open import foundation.equivalence-classes
open import foundation.equivalences
+open import foundation.fibers-of-maps
open import foundation.function-extensionality
+open import foundation.function-types
+open import foundation.functoriality-dependent-pair-types
+open import foundation.homotopies
open import foundation.identity-types
open import foundation.inhabited-subtypes
+open import foundation.logical-equivalences
open import foundation.reflecting-maps-equivalence-relations
open import foundation.sets
open import foundation.slice
open import foundation.surjective-maps
+open import foundation.torsorial-type-families
+open import foundation.transport-along-identifications
+open import foundation.type-arithmetic-dependent-pair-types
open import foundation.uniqueness-set-quotients
open import foundation.universal-property-image
open import foundation.universal-property-set-quotients
@@ -27,9 +38,7 @@ open import foundation.universe-levels
open import foundation.whiskering-homotopies-composition
open import foundation-core.equivalence-relations
-open import foundation-core.function-types
open import foundation-core.functoriality-dependent-function-types
-open import foundation-core.homotopies
open import foundation-core.propositions
open import foundation-core.small-types
open import foundation-core.subtypes
@@ -152,7 +161,38 @@ module _
( is-surjective-quotient-map)
```
-### The map `class : A → equivalence-class R` is an effective quotient map
+### Any element is in the class of its quotient
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (R : equivalence-relation l2 A)
+ where
+
+ is-in-equivalence-class-quotient-map-set-quotient :
+ (x : A) →
+ is-in-equivalence-class-set-quotient
+ ( R)
+ ( quotient-map R x)
+ ( x)
+ is-in-equivalence-class-quotient-map-set-quotient x =
+ is-in-equivalence-class-eq-equivalence-class
+ ( R)
+ ( x)
+ ( equivalence-class-set-quotient R (quotient-map R x))
+ ( inv
+ ( is-retraction-equivalence-class-set-quotient R (class R x)))
+
+ inhabitant-equivalence-class-quotient-map-set-quotient :
+ (x : A) →
+ type-subtype
+ ( subtype-set-quotient R (quotient-map R x))
+ inhabitant-equivalence-class-quotient-map-set-quotient x =
+ (x , is-in-equivalence-class-quotient-map-set-quotient x)
+```
+
+## Properties
+
+### The map `class : A → set-quotient R` is an effective quotient map
```agda
module _
@@ -417,6 +457,127 @@ module _
B f Uf
```
+### Any quotient class containing a given element `x` is equal to `quotient-map x`
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (R : equivalence-relation l2 A)
+ where
+
+ eq-set-quotient-equivalence-class-set-quotient :
+ (X : set-quotient R) {x : A} →
+ is-in-equivalence-class-set-quotient R X x →
+ quotient-map R x = X
+ eq-set-quotient-equivalence-class-set-quotient X {x} H =
+ ( ap
+ ( set-quotient-equivalence-class R)
+ ( eq-class-equivalence-class
+ ( R)
+ ( equivalence-class-set-quotient R X)
+ ( H))) ∙
+ ( is-section-equivalence-class-set-quotient R X)
+```
+
+### Two quotient classes that contain similar elements are equal
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (R : equivalence-relation l2 A)
+ where
+
+ eq-set-quotient-sim-element-set-quotient :
+ (X : set-quotient R) {x : A} →
+ (Y : set-quotient R) {y : A} →
+ is-in-equivalence-class-set-quotient R X x →
+ is-in-equivalence-class-set-quotient R Y y →
+ sim-equivalence-relation R x y →
+ X = Y
+ eq-set-quotient-sim-element-set-quotient X {x} Y {y} x∈X y∈Y x~y =
+ ( ( inv (eq-set-quotient-equivalence-class-set-quotient R X x∈X)) ∙
+ ( apply-effectiveness-quotient-map' R x~y) ∙
+ ( eq-set-quotient-equivalence-class-set-quotient R Y y∈Y))
+```
+
+### Any element in the quotient class of another is similar to it
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (R : equivalence-relation l2 A)
+ where
+
+ sim-is-in-equivalence-class-set-quotient :
+ (x y : A) →
+ is-in-equivalence-class-set-quotient
+ ( R)
+ ( quotient-map R x)
+ ( y) →
+ sim-equivalence-relation R x y
+ sim-is-in-equivalence-class-set-quotient x y y∈X =
+ apply-effectiveness-quotient-map
+ ( R)
+ ( inv
+ ( eq-set-quotient-equivalence-class-set-quotient
+ ( R)
+ ( quotient-map R x)
+ ( y∈X)))
+```
+
+### Σ-decompositions of types induced by set quotients
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (R : equivalence-relation l2 A)
+ where
+
+ abstract
+ is-torsorial-is-in-equivalence-class-set-quotient :
+ (x : A) →
+ is-contr
+ ( Σ ( set-quotient R)
+ ( λ X → is-in-equivalence-class-set-quotient R X x))
+ is-torsorial-is-in-equivalence-class-set-quotient x =
+ is-contr-equiv'
+ ( Σ (equivalence-class R) (λ X → is-in-equivalence-class R X x))
+ ( equiv-Σ
+ ( λ X → is-in-equivalence-class-set-quotient R X x)
+ ( compute-set-quotient R)
+ ( λ X →
+ equiv-iff-is-prop
+ ( is-prop-is-in-equivalence-class R X x)
+ ( is-prop-is-in-equivalence-class-set-quotient
+ ( R)
+ ( set-quotient-equivalence-class R X)
+ ( x))
+ ( λ x∈X →
+ inv-tr
+ ( λ Y → is-in-equivalence-class R Y x)
+ ( is-retraction-equivalence-class-set-quotient R X)
+ ( x∈X))
+ ( λ x∈X →
+ tr
+ ( λ Y → is-in-equivalence-class R Y x)
+ ( is-retraction-equivalence-class-set-quotient R X)
+ ( x∈X))))
+ ( is-torsorial-is-in-equivalence-class R x)
+
+ equiv-total-is-in-equivalence-class-set-quotient :
+ Σ ( A)
+ ( λ x →
+ Σ ( set-quotient R)
+ ( λ X → is-in-equivalence-class-set-quotient R X x)) ≃
+ ( A)
+ equiv-total-is-in-equivalence-class-set-quotient =
+ right-unit-law-Σ-is-contr
+ ( is-torsorial-is-in-equivalence-class-set-quotient)
+
+ Σ-decomposition-is-in-equivalence-class-set-quotient :
+ Σ ( set-quotient R)
+ ( type-subtype ∘ is-in-equivalence-class-set-quotient-Prop R) ≃
+ ( A)
+ Σ-decomposition-is-in-equivalence-class-set-quotient =
+ equiv-total-is-in-equivalence-class-set-quotient ∘e equiv-left-swap-Σ
+```
+
## See also
- [Set coequalizers](foundation.set-coequalizers.md) for an equivalent notion
diff --git a/src/metric-spaces.lagda.md b/src/metric-spaces.lagda.md
index 63dca9f747..504d515b72 100644
--- a/src/metric-spaces.lagda.md
+++ b/src/metric-spaces.lagda.md
@@ -55,6 +55,7 @@ open import metric-spaces.complete-metric-spaces public
open import metric-spaces.continuous-functions-metric-spaces public
open import metric-spaces.convergent-cauchy-approximations-metric-spaces public
open import metric-spaces.convergent-sequences-metric-spaces public
+open import metric-spaces.decomposition-metric-spaces-elements-at-bounded-distance-metric-spaces public
open import metric-spaces.dependent-products-metric-spaces public
open import metric-spaces.discrete-metric-spaces public
open import metric-spaces.elements-at-bounded-distance-metric-spaces public
@@ -74,6 +75,7 @@ open import metric-spaces.limits-of-functions-metric-spaces public
open import metric-spaces.limits-of-sequences-metric-spaces public
open import metric-spaces.lipschitz-functions-metric-spaces public
open import metric-spaces.locally-constant-functions-metric-spaces public
+open import metric-spaces.metric-quotients-of-pseudometric-spaces public
open import metric-spaces.metric-space-of-cauchy-approximations-complete-metric-spaces public
open import metric-spaces.metric-space-of-cauchy-approximations-metric-spaces public
open import metric-spaces.metric-space-of-convergent-cauchy-approximations-metric-spaces public
diff --git a/src/metric-spaces/decomposition-metric-spaces-elements-at-bounded-distance-metric-spaces.lagda.md b/src/metric-spaces/decomposition-metric-spaces-elements-at-bounded-distance-metric-spaces.lagda.md
new file mode 100644
index 0000000000..2b4ce0a37e
--- /dev/null
+++ b/src/metric-spaces/decomposition-metric-spaces-elements-at-bounded-distance-metric-spaces.lagda.md
@@ -0,0 +1,364 @@
+# Decomposition of metric spaces as indexed sums of metric spaces with elements at bounded distance
+
+```agda
+module metric-spaces.decomposition-metric-spaces-elements-at-bounded-distance-metric-spaces where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.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.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.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](metric-spaces.metric-spaces.md) is
+[isometrically equivalent](metric-spaces.equality-of-metric-spaces.md) to its
+{{#concept "Σ-decomposition into subspaces of elements at bounded distance" Agda=Σ-components-at-bounded-distance-Metric-Space}},
+the [indexed sum](metric-spaces.indexed-sums-metric-spaces.md) of its
+[subspaces](metric-spaces.subspaces-metric-spaces.md) of
+[elements at bounded distance](metric-spaces.elements-at-bounded-distance-metric-spaces.md)
+indexed by the [set quotient](foundation.set-quotients.md) of the metric space
+by the [equivalence relation](foundation.equivalence-relations.md) of being at
+bounded distance.
+
+## Definitions
+
+### The set of components of subspaces of elements at bounded distance in a metric space
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ where
+
+ set-components-at-bounded-distance-Metric-Space : Set (l1 ⊔ l2)
+ set-components-at-bounded-distance-Metric-Space =
+ quotient-Set
+ ( equivalence-relation-bounded-dist-Metric-Space A)
+
+ type-components-at-bounded-distance-Metric-Space : UU (l1 ⊔ l2)
+ type-components-at-bounded-distance-Metric-Space =
+ type-Set set-components-at-bounded-distance-Metric-Space
+
+ map-type-components-at-bounded-distance-Metric-Space :
+ type-Metric-Space A →
+ type-components-at-bounded-distance-Metric-Space
+ map-type-components-at-bounded-distance-Metric-Space =
+ quotient-map
+ ( equivalence-relation-bounded-dist-Metric-Space A)
+```
+
+### The metric subspaces of elements at bounded distance in a metric space
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ (x : type-components-at-bounded-distance-Metric-Space A)
+ where
+
+ subspace-components-at-bounded-distance-Metric-Space :
+ Metric-Space (l1 ⊔ l2) l2
+ subspace-components-at-bounded-distance-Metric-Space =
+ subspace-Metric-Space
+ ( A)
+ ( subtype-set-quotient
+ ( equivalence-relation-bounded-dist-Metric-Space A)
+ ( x))
+
+ type-subspace-components-at-bounded-distance-Metric-Space : UU (l1 ⊔ l2)
+ type-subspace-components-at-bounded-distance-Metric-Space =
+ type-Metric-Space
+ subspace-components-at-bounded-distance-Metric-Space
+```
+
+### The sum of metric subspaces of elements at bounded distance indexed by the set of components
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ where
+
+ Σ-components-at-bounded-distance-Metric-Space :
+ Metric-Space (l1 ⊔ l2) (l1 ⊔ l2)
+ Σ-components-at-bounded-distance-Metric-Space =
+ indexed-sum-Metric-Space
+ ( set-components-at-bounded-distance-Metric-Space A)
+ ( subspace-components-at-bounded-distance-Metric-Space A)
+
+ type-Σ-components-at-bounded-distance-Metric-Space : UU (l1 ⊔ l2)
+ type-Σ-components-at-bounded-distance-Metric-Space =
+ type-Metric-Space Σ-components-at-bounded-distance-Metric-Space
+```
+
+## Properties
+
+### All elements in a subspace of elements at bounded distance are at bounded distance
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ (X : type-components-at-bounded-distance-Metric-Space A)
+ where
+
+ all-elements-at-bounded-distance-subspace-components-at-bounded-distance-Metric-Space :
+ (x y : type-subspace-components-at-bounded-distance-Metric-Space A X) →
+ bounded-dist-Metric-Space
+ ( subspace-components-at-bounded-distance-Metric-Space A X)
+ ( x)
+ ( y)
+ all-elements-at-bounded-distance-subspace-components-at-bounded-distance-Metric-Space
+ (x , x∈X) (y , y∈X) =
+ apply-effectiveness-quotient-map
+ ( equivalence-relation-bounded-dist-Metric-Space A)
+ ( ( eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-bounded-dist-Metric-Space A)
+ ( X)
+ ( x∈X)) ∙
+ ( inv
+ ( eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-bounded-dist-Metric-Space A)
+ ( X)
+ ( y∈X))))
+```
+
+### Neighborhoods in subspaces of equal components are neigborhoods in the ambient metric space
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ where
+
+ lemma-iff-neighborhood-Σ-components-at-bounded-distance-Metric-Space :
+ ( d : ℚ⁺) →
+ ( X Y : type-components-at-bounded-distance-Metric-Space A) →
+ ( eqXY : X = Y) →
+ ( x : type-subspace-components-at-bounded-distance-Metric-Space A X) →
+ ( y : type-subspace-components-at-bounded-distance-Metric-Space A Y) →
+ ( neighborhood-Metric-Space
+ ( subspace-components-at-bounded-distance-Metric-Space A Y)
+ ( d)
+ ( tr
+ ( type-Metric-Space ∘
+ subspace-components-at-bounded-distance-Metric-Space A)
+ ( eqXY)
+ ( x))
+ ( y)) ↔
+ neighborhood-Metric-Space A d (pr1 x) (pr1 y)
+ lemma-iff-neighborhood-Σ-components-at-bounded-distance-Metric-Space
+ d X .X refl (x , x∈X) (y , y∈X) = id-iff
+```
+
+### Any metric space is isometrically equivalent to the indexed sum of its subspaces of components of elements at bounded distance
+
+#### Equivalence of underlying types
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ where
+
+ equiv-type-Σ-components-at-bounded-distance-Metric-Space :
+ type-Σ-components-at-bounded-distance-Metric-Space A ≃
+ type-Metric-Space A
+ equiv-type-Σ-components-at-bounded-distance-Metric-Space =
+ Σ-decomposition-is-in-equivalence-class-set-quotient
+ ( equivalence-relation-bounded-dist-Metric-Space A)
+
+ map-equiv-Σ-components-at-bounded-distance-Metric-Space :
+ type-function-Metric-Space
+ ( Σ-components-at-bounded-distance-Metric-Space A)
+ ( A)
+ map-equiv-Σ-components-at-bounded-distance-Metric-Space =
+ map-equiv
+ ( equiv-type-Σ-components-at-bounded-distance-Metric-Space)
+```
+
+#### The equivalence between a metric space and its decompositions into subspaces of elements at bounded distance is an isometry
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ where
+
+ preserves-neighborhood-map-equiv-Σ-components-at-bounded-distance-Metric-Space :
+ ( d : ℚ⁺)
+ ( x y : type-Σ-components-at-bounded-distance-Metric-Space A) →
+ neighborhood-Metric-Space
+ ( Σ-components-at-bounded-distance-Metric-Space A)
+ ( d)
+ ( x)
+ ( y) →
+ neighborhood-Metric-Space A d
+ ( map-equiv-Σ-components-at-bounded-distance-Metric-Space A x)
+ ( map-equiv-Σ-components-at-bounded-distance-Metric-Space A y)
+ preserves-neighborhood-map-equiv-Σ-components-at-bounded-distance-Metric-Space
+ d (X , x , x∈X) (Y , y , y∈Y) (X=Y , Nxy) =
+ forward-implication
+ ( lemma-iff-neighborhood-Σ-components-at-bounded-distance-Metric-Space
+ ( A)
+ ( d)
+ ( X)
+ ( Y)
+ ( X=Y)
+ ( x , x∈X)
+ ( y , y∈Y))
+ ( Nxy)
+
+ reflects-neighborhood-map-equiv-Σ-components-at-bounded-distance-Metric-Space :
+ ( d : ℚ⁺)
+ ( x y : type-Σ-components-at-bounded-distance-Metric-Space A) →
+ neighborhood-Metric-Space A d
+ ( map-equiv-Σ-components-at-bounded-distance-Metric-Space A x)
+ ( map-equiv-Σ-components-at-bounded-distance-Metric-Space A y) →
+ neighborhood-Metric-Space
+ ( Σ-components-at-bounded-distance-Metric-Space A)
+ ( d)
+ ( x)
+ ( y)
+ reflects-neighborhood-map-equiv-Σ-components-at-bounded-distance-Metric-Space
+ d (X , x , x∈X) (Y , y , y∈Y) Nxy =
+ ( lemma-eq ,
+ backward-implication
+ ( lemma-iff-neighborhood-Σ-components-at-bounded-distance-Metric-Space
+ ( A)
+ ( d)
+ ( X)
+ ( Y)
+ ( lemma-eq)
+ ( x , x∈X)
+ ( y , y∈Y))
+ ( Nxy))
+ where
+
+ lemma-eq-Y :
+ map-type-components-at-bounded-distance-Metric-Space A y = Y
+ lemma-eq-Y =
+ eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-bounded-dist-Metric-Space A)
+ ( Y)
+ ( y∈Y)
+
+ lemma-eq-X :
+ map-type-components-at-bounded-distance-Metric-Space A x = X
+ lemma-eq-X =
+ eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-bounded-dist-Metric-Space A)
+ ( X)
+ ( x∈X)
+
+ lemma-eq-map-type-components-at-bounded-distance-Metric-Space :
+ ( map-type-components-at-bounded-distance-Metric-Space A x) =
+ ( map-type-components-at-bounded-distance-Metric-Space A y)
+ lemma-eq-map-type-components-at-bounded-distance-Metric-Space =
+ apply-effectiveness-quotient-map'
+ ( equivalence-relation-bounded-dist-Metric-Space A)
+ ( unit-trunc-Prop (d , Nxy))
+
+ lemma-eq : X = Y
+ lemma-eq =
+ ( inv lemma-eq-X) ∙
+ ( lemma-eq-map-type-components-at-bounded-distance-Metric-Space) ∙
+ ( lemma-eq-Y)
+
+ is-isometry-map-equiv-Σ-components-at-bounded-distance-Metric-Space :
+ is-isometry-Metric-Space
+ ( Σ-components-at-bounded-distance-Metric-Space A)
+ ( A)
+ ( map-equiv-Σ-components-at-bounded-distance-Metric-Space A)
+ is-isometry-map-equiv-Σ-components-at-bounded-distance-Metric-Space d x y =
+ ( ( preserves-neighborhood-map-equiv-Σ-components-at-bounded-distance-Metric-Space
+ ( d)
+ ( x)
+ ( y)) ,
+ ( reflects-neighborhood-map-equiv-Σ-components-at-bounded-distance-Metric-Space
+ ( d)
+ ( x)
+ ( y)))
+```
+
+#### The isometric equivalence between a metric space and its decompositions into subspaces of elements at bounded distance
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ where
+
+ isometric-equiv-Σ-components-at-bounded-distance-Metric-Space :
+ isometric-equiv-Metric-Space
+ ( Σ-components-at-bounded-distance-Metric-Space A)
+ ( A)
+ isometric-equiv-Σ-components-at-bounded-distance-Metric-Space =
+ ( equiv-type-Σ-components-at-bounded-distance-Metric-Space A ,
+ is-isometry-map-equiv-Σ-components-at-bounded-distance-Metric-Space A)
+```
+
+### The decomposition into subspaces of elements at bounded distance is idempotent
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ where
+
+ idempotent-Σ-components-at-bounded-distance-Metric-Space :
+ Σ-components-at-bounded-distance-Metric-Space
+ ( Σ-components-at-bounded-distance-Metric-Space A) =
+ Σ-components-at-bounded-distance-Metric-Space A
+ idempotent-Σ-components-at-bounded-distance-Metric-Space =
+ eq-isometric-equiv-Metric-Space
+ ( Σ-components-at-bounded-distance-Metric-Space
+ ( Σ-components-at-bounded-distance-Metric-Space A))
+ ( Σ-components-at-bounded-distance-Metric-Space A)
+ ( isometric-equiv-Σ-components-at-bounded-distance-Metric-Space
+ ( Σ-components-at-bounded-distance-Metric-Space A))
+```
+
+### Universal property of the decomposition into subspaces of elements at bounded distance
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ where
+
+ eq-Σ-components-at-bounded-distance-Metric-Space :
+ (M : Metric-Space (l1 ⊔ l2) (l1 ⊔ l2)) →
+ isometric-equiv-Metric-Space A M →
+ Σ-components-at-bounded-distance-Metric-Space A = M
+ eq-Σ-components-at-bounded-distance-Metric-Space M isometric-equiv-M =
+ eq-isometric-equiv-Metric-Space
+ ( Σ-components-at-bounded-distance-Metric-Space A)
+ ( M)
+ ( comp-isometric-equiv-Metric-Space
+ ( Σ-components-at-bounded-distance-Metric-Space A)
+ ( A)
+ ( M)
+ ( isometric-equiv-M)
+ ( isometric-equiv-Σ-components-at-bounded-distance-Metric-Space A))
+```
diff --git a/src/metric-spaces/equality-of-metric-spaces.lagda.md b/src/metric-spaces/equality-of-metric-spaces.lagda.md
index d66c56acff..f589d893af 100644
--- a/src/metric-spaces/equality-of-metric-spaces.lagda.md
+++ b/src/metric-spaces/equality-of-metric-spaces.lagda.md
@@ -201,6 +201,27 @@ module _
( is-torsorial-Id A)
```
+### Composition of isometric equivalences
+
+```agda
+module _
+ {la la' lb lb' lc lc' : Level}
+ (A : Metric-Space la la') (B : Metric-Space lb lb') (C : Metric-Space lc lc')
+ where
+
+ comp-isometric-equiv-Metric-Space :
+ isometric-equiv-Metric-Space B C →
+ isometric-equiv-Metric-Space A B →
+ isometric-equiv-Metric-Space A C
+ comp-isometric-equiv-Metric-Space (B≃C , isometry-B≃C) (A≃B , isometry-A≃B) =
+ ( B≃C ∘e A≃B ,
+ is-isometry-comp-is-isometry-Metric-Space A B C
+ ( map-equiv B≃C)
+ ( map-equiv A≃B)
+ ( isometry-B≃C)
+ ( isometry-A≃B))
+```
+
### Two metric spaces are isometrically equivalent if and only if there is an isometric equivalence between them
```agda
diff --git a/src/metric-spaces/metric-quotients-of-pseudometric-spaces.lagda.md b/src/metric-spaces/metric-quotients-of-pseudometric-spaces.lagda.md
new file mode 100644
index 0000000000..36d41a5dd3
--- /dev/null
+++ b/src/metric-spaces/metric-quotients-of-pseudometric-spaces.lagda.md
@@ -0,0 +1,790 @@
+# Metric quotients of pseudometric spaces
+
+```agda
+{-# OPTIONS --lossy-unification #-}
+
+module metric-spaces.metric-quotients-of-pseudometric-spaces where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.action-on-identifications-functions
+open import foundation.binary-relations
+open import foundation.binary-transport
+open import foundation.contractible-maps
+open import foundation.contractible-types
+open import foundation.dependent-pair-types
+open import foundation.equivalence-classes
+open import foundation.equivalences
+open import foundation.existential-quantification
+open import foundation.fibers-of-maps
+open import foundation.function-types
+open import foundation.functoriality-dependent-pair-types
+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.reflecting-maps-equivalence-relations
+open import foundation.retractions
+open import foundation.sections
+open import foundation.set-quotients
+open import foundation.sets
+open import foundation.subtypes
+open import foundation.universal-property-set-quotients
+open import foundation.universe-levels
+
+open import metric-spaces.cauchy-approximations-metric-spaces
+open import metric-spaces.cauchy-approximations-pseudometric-spaces
+open import metric-spaces.convergent-cauchy-approximations-metric-spaces
+open import metric-spaces.equality-of-metric-spaces
+open import metric-spaces.extensionality-pseudometric-spaces
+open import metric-spaces.functions-metric-spaces
+open import metric-spaces.isometries-metric-spaces
+open import metric-spaces.isometries-pseudometric-spaces
+open import metric-spaces.limits-of-cauchy-approximations-metric-spaces
+open import metric-spaces.limits-of-cauchy-approximations-pseudometric-spaces
+open import metric-spaces.metric-spaces
+open import metric-spaces.pseudometric-spaces
+open import metric-spaces.rational-neighborhood-relations
+open import metric-spaces.short-functions-metric-spaces
+open import metric-spaces.short-functions-pseudometric-spaces
+open import metric-spaces.similarity-of-elements-pseudometric-spaces
+```
+
+
+
+## Idea
+
+The
+{{#concept "metric quotient" Disambiguation="of a pseudometric space" Agda=metric-quotient-Pseudometric-Space}}
+of a [pseudometric space](metric-spaces.pseudometric-spaces.md) is the
+[metric space](metric-spaces.metric-spaces.md) whose points are
+[quotient classes](foundation.set-quotients.md) of `M` by the
+[similarity relation](metric-spaces.similarity-of-elements-pseudometric-spaces.md)
+and [neighborhoods](metric-spaces.rational-neighborhood-relations.md) given by
+neighborhoods of inhabitants of the quotient classes: two quotient classes `X`,
+`Y` are in a `d`-neighborhood if for all `x ∈ X` and `y ∈ Y`, `x` and `y` are
+`d`-neighbors in the pseudometric space.
+
+Any metric space is
+[isometrically equivalent](metric-spaces.equality-of-metric-spaces.md) to its
+induced metric space.
+
+## Definition
+
+```agda
+module _
+ {l1 l2 : Level}
+ (M : Pseudometric-Space l1 l2)
+ where
+
+ set-metric-quotient-Pseudometric-Space : Set (l1 ⊔ l2)
+ set-metric-quotient-Pseudometric-Space =
+ quotient-Set (equivalence-relation-sim-Pseudometric-Space M)
+
+ type-metric-quotient-Pseudometric-Space : UU (l1 ⊔ l2)
+ type-metric-quotient-Pseudometric-Space =
+ type-Set set-metric-quotient-Pseudometric-Space
+
+ type-subtype-metric-quotient-Pseudometric-Space :
+ (X : type-metric-quotient-Pseudometric-Space) → UU (l1 ⊔ l2)
+ type-subtype-metric-quotient-Pseudometric-Space X =
+ type-subtype
+ ( subtype-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( X))
+
+ neighborhood-prop-metric-quotient-Pseudometric-Space :
+ Rational-Neighborhood-Relation
+ ( l1 ⊔ l2)
+ ( type-metric-quotient-Pseudometric-Space)
+ neighborhood-prop-metric-quotient-Pseudometric-Space ε X Y =
+ Π-Prop
+ ( type-subtype-metric-quotient-Pseudometric-Space X)
+ ( λ (x , x∈X) →
+ Π-Prop
+ ( type-subtype-metric-quotient-Pseudometric-Space Y)
+ ( λ (y , y∈Y) → neighborhood-prop-Pseudometric-Space M ε x y))
+
+ neighborhood-metric-quotient-Pseudometric-Space :
+ ℚ⁺ → Relation (l1 ⊔ l2) type-metric-quotient-Pseudometric-Space
+ neighborhood-metric-quotient-Pseudometric-Space ε X Y =
+ type-Prop (neighborhood-prop-metric-quotient-Pseudometric-Space ε X Y)
+```
+
+## Properties
+
+### The quotient neighborhood relation is reflexive
+
+```agda
+module _
+ {l1 l2 : Level}
+ (M : Pseudometric-Space l1 l2)
+ where
+
+ abstract
+ is-reflexive-neighborhood-metric-quotient-Pseudometric-Space :
+ (d : ℚ⁺) (X : type-metric-quotient-Pseudometric-Space M) →
+ neighborhood-metric-quotient-Pseudometric-Space M d X X
+ is-reflexive-neighborhood-metric-quotient-Pseudometric-Space
+ d X (x , x∈X) (y , y∈X) =
+ apply-effectiveness-quotient-map
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( ( eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( X)
+ ( x∈X)) ∙
+ ( inv
+ ( eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( X)
+ ( y∈X))))
+ ( d)
+```
+
+### The quotient neighborhood relation is symmetric
+
+```agda
+module _
+ {l1 l2 : Level}
+ (M : Pseudometric-Space l1 l2)
+ where
+
+ abstract
+ is-symmetric-neighborhood-metric-quotient-Pseudometric-Space :
+ (d : ℚ⁺) (x y : type-metric-quotient-Pseudometric-Space M) →
+ neighborhood-metric-quotient-Pseudometric-Space M d x y →
+ neighborhood-metric-quotient-Pseudometric-Space M d y x
+ is-symmetric-neighborhood-metric-quotient-Pseudometric-Space
+ d X Y d⟨X,Y⟩ (y , y∈Y) (x , x∈X) =
+ symmetric-neighborhood-Pseudometric-Space
+ ( M)
+ ( d)
+ ( x)
+ ( y)
+ ( d⟨X,Y⟩ (x , x∈X) (y , y∈Y))
+```
+
+### The quotient neighborhood relation is triangular
+
+```agda
+module _
+ {l1 l2 : Level}
+ (M : Pseudometric-Space l1 l2)
+ (X Y Z : type-metric-quotient-Pseudometric-Space M)
+ (d₁ d₂ : ℚ⁺)
+ where
+
+ abstract
+ is-triangular-neighborhood-metric-quotient-Pseudometric-Space :
+ neighborhood-metric-quotient-Pseudometric-Space M d₂ Y Z →
+ neighborhood-metric-quotient-Pseudometric-Space M d₁ X Y →
+ neighborhood-metric-quotient-Pseudometric-Space M (d₁ +ℚ⁺ d₂) X Z
+ is-triangular-neighborhood-metric-quotient-Pseudometric-Space
+ d₂⟨Y,Z⟩ d₁⟨X,Y⟩ (x , x∈X) (z , z∈Z) =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( neighborhood-prop-Pseudometric-Space M (d₁ +ℚ⁺ d₂) x z)
+ in do
+ (y , y∈Y) ←
+ is-inhabited-subtype-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( Y)
+ triangular-neighborhood-Pseudometric-Space
+ ( M)
+ ( x)
+ ( y)
+ ( z)
+ ( d₁)
+ ( d₂)
+ ( d₂⟨Y,Z⟩ (y , y∈Y) (z , z∈Z))
+ ( d₁⟨X,Y⟩ (x , x∈X) (y , y∈Y))
+```
+
+### The quotient neighborhood relation is saturated
+
+```agda
+module _
+ {l1 l2 : Level}
+ (M : Pseudometric-Space l1 l2)
+ where
+
+ abstract
+ is-saturated-neighborhood-metric-quotient-Pseudometric-Space :
+ (ε : ℚ⁺) (X Y : type-metric-quotient-Pseudometric-Space M) →
+ ((δ : ℚ⁺) →
+ neighborhood-metric-quotient-Pseudometric-Space M (ε +ℚ⁺ δ) X Y) →
+ neighborhood-metric-quotient-Pseudometric-Space M ε X Y
+ is-saturated-neighborhood-metric-quotient-Pseudometric-Space
+ ε X Y H (x , x∈X) (y , y∈Y) =
+ saturated-neighborhood-Pseudometric-Space M ε x y
+ ( λ δ → H δ (x , x∈X) (y , y∈Y))
+```
+
+### The quotient pseudometric space
+
+```agda
+module _
+ {l1 l2 : Level}
+ (M : Pseudometric-Space l1 l2)
+ where
+
+ pseudometric-metric-quotient-Pseudometric-Space :
+ Pseudometric-Space (l1 ⊔ l2) (l1 ⊔ l2)
+ pseudometric-metric-quotient-Pseudometric-Space =
+ ( type-metric-quotient-Pseudometric-Space M ,
+ neighborhood-prop-metric-quotient-Pseudometric-Space M ,
+ is-reflexive-neighborhood-metric-quotient-Pseudometric-Space M ,
+ is-symmetric-neighborhood-metric-quotient-Pseudometric-Space M ,
+ is-triangular-neighborhood-metric-quotient-Pseudometric-Space M ,
+ is-saturated-neighborhood-metric-quotient-Pseudometric-Space M)
+```
+
+### The quotient pseudometric space is tight and extensional
+
+```agda
+module _
+ {l1 l2 : Level}
+ (M : Pseudometric-Space l1 l2)
+ where
+
+ abstract
+ is-tight-pseudometric-metric-quotient-Pseudometric-Space :
+ is-tight-Pseudometric-Space
+ (pseudometric-metric-quotient-Pseudometric-Space M)
+ is-tight-pseudometric-metric-quotient-Pseudometric-Space X Y X~Y =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( Id-Prop
+ ( set-metric-quotient-Pseudometric-Space M)
+ ( X)
+ ( Y))
+ in do
+ ( x , x∈X) ←
+ is-inhabited-subtype-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( X)
+
+ ( y , y∈Y) ←
+ is-inhabited-subtype-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( Y)
+
+ eq-set-quotient-sim-element-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( X)
+ ( Y)
+ ( x∈X)
+ ( y∈Y)
+ ( λ d → X~Y d (x , x∈X) (y , y∈Y))
+
+ is-extensional-pseudometric-metric-quotient-Pseudometric-Space :
+ is-extensional-Pseudometric-Space
+ ( pseudometric-metric-quotient-Pseudometric-Space M)
+ is-extensional-pseudometric-metric-quotient-Pseudometric-Space =
+ is-extensional-is-tight-Pseudometric-Space
+ ( pseudometric-metric-quotient-Pseudometric-Space M)
+ ( is-tight-pseudometric-metric-quotient-Pseudometric-Space)
+```
+
+### The quotient metric space of a pseudometric space
+
+```agda
+module _
+ {l1 l2 : Level}
+ (M : Pseudometric-Space l1 l2)
+ where
+
+ metric-quotient-Pseudometric-Space : Metric-Space (l1 ⊔ l2) (l1 ⊔ l2)
+ metric-quotient-Pseudometric-Space =
+ make-Metric-Space
+ ( type-metric-quotient-Pseudometric-Space M)
+ ( neighborhood-prop-metric-quotient-Pseudometric-Space M)
+ ( is-reflexive-neighborhood-metric-quotient-Pseudometric-Space M)
+ ( is-symmetric-neighborhood-metric-quotient-Pseudometric-Space M)
+ ( is-triangular-neighborhood-metric-quotient-Pseudometric-Space M)
+ ( is-saturated-neighborhood-metric-quotient-Pseudometric-Space M)
+ ( is-extensional-pseudometric-metric-quotient-Pseudometric-Space M)
+```
+
+### Mapping from a pseudometric space to its quotient metric space
+
+```agda
+module _
+ {l1 l2 : Level}
+ (M : Pseudometric-Space l1 l2)
+ where
+
+ map-metric-quotient-Pseudometric-Space :
+ type-Pseudometric-Space M → type-metric-quotient-Pseudometric-Space M
+ map-metric-quotient-Pseudometric-Space =
+ quotient-map (equivalence-relation-sim-Pseudometric-Space M)
+
+ map-subtype-metric-quotient-Pseudometric-Space :
+ (x : type-Pseudometric-Space M) →
+ type-subtype-metric-quotient-Pseudometric-Space M
+ ( map-metric-quotient-Pseudometric-Space x)
+ map-subtype-metric-quotient-Pseudometric-Space =
+ inhabitant-equivalence-class-quotient-map-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+```
+
+### The mapping from a pseudometric space its quotient metric space is an isometry
+
+```agda
+module _
+ {l1 l2 : Level}
+ (M : Pseudometric-Space l1 l2)
+ where
+
+ abstract
+ preserves-neighborhood-map-metric-quotient-Pseudometric-Space :
+ (d : ℚ⁺) (x y : type-Pseudometric-Space M) →
+ neighborhood-Pseudometric-Space M d x y →
+ neighborhood-metric-quotient-Pseudometric-Space
+ ( M)
+ ( d)
+ ( map-metric-quotient-Pseudometric-Space M x)
+ ( map-metric-quotient-Pseudometric-Space M y)
+ preserves-neighborhood-map-metric-quotient-Pseudometric-Space
+ d x y d⟨x,y⟩ (x' , x≈x') (y' , y≈y') =
+ let
+ x~x' =
+ sim-is-in-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( x)
+ ( x')
+ ( x≈x')
+
+ y~y' =
+ sim-is-in-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( y)
+ ( y')
+ ( y≈y')
+
+ in
+ preserves-neighborhood-sim-Pseudometric-Space' M y~y' d x'
+ ( preserves-neighborhood-sim-Pseudometric-Space M x~x' d y d⟨x,y⟩)
+
+ reflects-neighborhood-map-metric-quotient-Pseudometric-Space :
+ (d : ℚ⁺) (x y : type-Pseudometric-Space M) →
+ neighborhood-metric-quotient-Pseudometric-Space
+ ( M)
+ ( d)
+ ( map-metric-quotient-Pseudometric-Space M x)
+ ( map-metric-quotient-Pseudometric-Space M y) →
+ neighborhood-Pseudometric-Space M d x y
+ reflects-neighborhood-map-metric-quotient-Pseudometric-Space
+ d x y Nxy =
+ Nxy
+ ( map-subtype-metric-quotient-Pseudometric-Space M x)
+ ( map-subtype-metric-quotient-Pseudometric-Space M y)
+
+ is-isometry-map-metric-quotient-Pseudometric-Space :
+ is-isometry-Pseudometric-Space
+ ( M)
+ ( pseudometric-metric-quotient-Pseudometric-Space M)
+ ( map-metric-quotient-Pseudometric-Space M)
+ is-isometry-map-metric-quotient-Pseudometric-Space d x y =
+ ( preserves-neighborhood-map-metric-quotient-Pseudometric-Space d x y ,
+ reflects-neighborhood-map-metric-quotient-Pseudometric-Space d x y)
+```
+
+### The isometry from a pseudometric space to its quotient metric space
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ isometry-map-metric-quotient-Pseudometric-Space :
+ isometry-Pseudometric-Space
+ ( M)
+ ( pseudometric-metric-quotient-Pseudometric-Space M)
+ isometry-map-metric-quotient-Pseudometric-Space =
+ ( map-metric-quotient-Pseudometric-Space M ,
+ is-isometry-map-metric-quotient-Pseudometric-Space M)
+```
+
+### The short map from a pseudometric space to its quotient metric space
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ short-map-metric-quotient-Pseudometric-Space :
+ short-function-Pseudometric-Space
+ ( M)
+ ( pseudometric-metric-quotient-Pseudometric-Space M)
+ short-map-metric-quotient-Pseudometric-Space =
+ short-isometry-Pseudometric-Space
+ ( M)
+ ( pseudometric-metric-quotient-Pseudometric-Space M)
+ ( isometry-map-metric-quotient-Pseudometric-Space M)
+```
+
+### The isometric equivalence between a metric space and the quotient metric space of its pseudometric
+
+```agda
+module _
+ {l1 l2 : Level}
+ (M : Metric-Space l1 l2)
+ where
+
+ map-metric-quotient-Metric-Space :
+ type-Metric-Space M →
+ type-metric-quotient-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+ map-metric-quotient-Metric-Space =
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+
+ abstract
+ is-contr-map-metric-quotient-Metric-Space :
+ is-contr-map map-metric-quotient-Metric-Space
+ is-contr-map-metric-quotient-Metric-Space X =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( is-contr-Prop
+ ( fiber map-metric-quotient-Metric-Space X))
+ in do
+ ( x , x∈X) ←
+ is-inhabited-subtype-set-quotient
+ ( equivalence-relation-sim-Metric-Space M)
+ ( X)
+
+ ( ( x ,
+ eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Metric-Space M)
+ ( X)
+ ( x∈X)) ,
+ ( λ (y , Y=X) →
+ eq-type-subtype
+ ( λ z →
+ Id-Prop
+ ( set-metric-quotient-Pseudometric-Space
+ ( pseudometric-Metric-Space M))
+ ( map-metric-quotient-Metric-Space z)
+ ( X))
+ ( eq-sim-Metric-Space
+ ( M)
+ ( x)
+ ( y)
+ ( apply-effectiveness-quotient-map
+ ( equivalence-relation-sim-Metric-Space M)
+ ( ( eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Metric-Space M)
+ ( X)
+ ( x∈X)) ∙
+ ( inv Y=X))))))
+
+ is-equiv-map-metric-quotient-Metric-Space :
+ is-equiv map-metric-quotient-Metric-Space
+ is-equiv-map-metric-quotient-Metric-Space =
+ is-equiv-is-contr-map
+ ( is-contr-map-metric-quotient-Metric-Space)
+
+ is-isometry-map-metric-quotient-Metric-Space :
+ is-isometry-Metric-Space
+ ( M)
+ ( metric-quotient-Pseudometric-Space
+ ( pseudometric-Metric-Space M))
+ ( map-metric-quotient-Metric-Space)
+ is-isometry-map-metric-quotient-Metric-Space =
+ is-isometry-map-metric-quotient-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+
+ isometric-equiv-metric-quotient-Metric-Space' :
+ isometric-equiv-Metric-Space'
+ ( M)
+ ( metric-quotient-Pseudometric-Space
+ ( pseudometric-Metric-Space M))
+ isometric-equiv-metric-quotient-Metric-Space' =
+ ( map-metric-quotient-Metric-Space ,
+ is-equiv-map-metric-quotient-Metric-Space ,
+ is-isometry-map-metric-quotient-Metric-Space)
+```
+
+### The construction of the quotient metric space of a pseudometric space is idempotent
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ is-idempotent-metric-quotient-Pseudometric-Space :
+ metric-quotient-Pseudometric-Space
+ ( pseudometric-Metric-Space
+ ( metric-quotient-Pseudometric-Space M)) =
+ metric-quotient-Pseudometric-Space M
+ is-idempotent-metric-quotient-Pseudometric-Space =
+ inv
+ ( eq-isometric-equiv-Metric-Space'
+ ( metric-quotient-Pseudometric-Space M)
+ ( metric-quotient-Pseudometric-Space
+ ( pseudometric-Metric-Space
+ ( metric-quotient-Pseudometric-Space M)))
+ ( isometric-equiv-metric-quotient-Metric-Space'
+ ( metric-quotient-Pseudometric-Space M)))
+```
+
+### The pointwise quotient of a Cauchy approximation in a pseudometric space is a Cauchy approximation in the quotient metric space
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ map-metric-quotient-cauchy-approximation-Pseudometric-Space :
+ cauchy-approximation-Pseudometric-Space M →
+ cauchy-approximation-Metric-Space
+ ( metric-quotient-Pseudometric-Space M)
+ map-metric-quotient-cauchy-approximation-Pseudometric-Space =
+ map-short-function-cauchy-approximation-Pseudometric-Space
+ ( M)
+ ( pseudometric-metric-quotient-Pseudometric-Space M)
+ ( short-isometry-Pseudometric-Space
+ ( M)
+ ( pseudometric-metric-quotient-Pseudometric-Space M)
+ ( isometry-map-metric-quotient-Pseudometric-Space M))
+```
+
+### The pointwise quotient of Cauchy approximations in the quotient metric space preserves limits
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ (u : cauchy-approximation-Pseudometric-Space M)
+ (lim : type-Pseudometric-Space M)
+ (is-lim :
+ is-limit-cauchy-approximation-Pseudometric-Space M u lim)
+ where
+
+ preserves-limit-map-metric-quotient-cauchy-approximation-Pseudometric-Space :
+ is-limit-cauchy-approximation-Metric-Space
+ ( metric-quotient-Pseudometric-Space M)
+ ( map-metric-quotient-cauchy-approximation-Pseudometric-Space M u)
+ ( map-metric-quotient-Pseudometric-Space M lim)
+ preserves-limit-map-metric-quotient-cauchy-approximation-Pseudometric-Space
+ ε δ (x , x∈uε) (y , y∈lim) =
+ let
+ lim~y : sim-Pseudometric-Space M lim y
+ lim~y =
+ sim-is-in-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( lim)
+ ( y)
+ ( y∈lim)
+
+ uε~x :
+ sim-Pseudometric-Space M
+ ( map-cauchy-approximation-Pseudometric-Space M u ε)
+ ( x)
+ uε~x =
+ sim-is-in-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( map-cauchy-approximation-Pseudometric-Space M u ε)
+ ( x)
+ ( x∈uε)
+ in
+ preserves-neighborhood-sim-Pseudometric-Space'
+ ( M)
+ ( lim~y)
+ ( ε +ℚ⁺ δ)
+ ( x)
+ ( preserves-neighborhood-sim-Pseudometric-Space
+ ( M)
+ ( uε~x)
+ ( ε +ℚ⁺ δ)
+ ( lim)
+ ( is-lim ε δ))
+
+ convergent-map-metric-quotient-cauchy-approximation-Pseudometric-Space :
+ convergent-cauchy-approximation-Metric-Space
+ ( metric-quotient-Pseudometric-Space M)
+ convergent-map-metric-quotient-cauchy-approximation-Pseudometric-Space =
+ ( map-metric-quotient-cauchy-approximation-Pseudometric-Space M u ,
+ map-metric-quotient-Pseudometric-Space M lim ,
+ preserves-limit-map-metric-quotient-cauchy-approximation-Pseudometric-Space)
+```
+
+### Characterization of functions from the quotient metric space into metric spaces
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Pseudometric-Space l1 l2)
+ (B : Metric-Space l1' l2')
+ where
+
+ precomp-map-metric-quotient-Pseudometric-Space :
+ type-function-Metric-Space
+ ( metric-quotient-Pseudometric-Space A)
+ ( B) →
+ reflecting-map-equivalence-relation
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( type-Metric-Space B)
+ precomp-map-metric-quotient-Pseudometric-Space =
+ precomp-Set-Quotient
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( set-metric-quotient-Pseudometric-Space A)
+ ( reflecting-map-quotient-map
+ ( equivalence-relation-sim-Pseudometric-Space A))
+ ( set-Metric-Space B)
+
+ is-equiv-precomp-map-metric-quotient-Pseudometric-Space :
+ is-equiv precomp-map-metric-quotient-Pseudometric-Space
+ is-equiv-precomp-map-metric-quotient-Pseudometric-Space =
+ is-set-quotient-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( set-Metric-Space B)
+
+ equiv-type-function-metric-quotient-Pseudometric-Space :
+ type-function-Metric-Space
+ ( metric-quotient-Pseudometric-Space A)
+ ( B) ≃
+ reflecting-map-equivalence-relation
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( type-Metric-Space B)
+ equiv-type-function-metric-quotient-Pseudometric-Space =
+ ( precomp-map-metric-quotient-Pseudometric-Space ,
+ is-equiv-precomp-map-metric-quotient-Pseudometric-Space)
+```
+
+### Induced short function from the quotient metric space into a metric space
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Pseudometric-Space l1 l2)
+ (B : Metric-Space l1' l2')
+ (f : short-function-Pseudometric-Space A (pseudometric-Metric-Space B))
+ where
+
+ map-short-function-metric-quotient-Pseudometric-space :
+ type-function-Metric-Space
+ ( metric-quotient-Pseudometric-Space A)
+ ( B)
+ map-short-function-metric-quotient-Pseudometric-space =
+ inv-precomp-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( set-Metric-Space B)
+ ( reflecting-map-short-function-metric-space-Pseudometric-Space A B f)
+
+ htpy-map-short-function-metric-quotient-Pseudometric-Space :
+ ( ( map-short-function-metric-quotient-Pseudometric-space) ∘
+ ( map-metric-quotient-Pseudometric-Space A)) ~
+ ( map-short-function-Pseudometric-Space A (pseudometric-Metric-Space B) f)
+ htpy-map-short-function-metric-quotient-Pseudometric-Space =
+ is-section-inv-precomp-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( set-Metric-Space B)
+ ( reflecting-map-short-function-metric-space-Pseudometric-Space A B f)
+
+ abstract
+ is-short-map-short-function-metric-quotient-Pseudometric-Space :
+ is-short-function-Metric-Space
+ ( metric-quotient-Pseudometric-Space A)
+ ( B)
+ ( map-short-function-metric-quotient-Pseudometric-space)
+ is-short-map-short-function-metric-quotient-Pseudometric-Space
+ d X Y N⟨X,Y⟩ =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( neighborhood-prop-Metric-Space
+ ( B)
+ ( d)
+ ( map-short-function-metric-quotient-Pseudometric-space X)
+ ( map-short-function-metric-quotient-Pseudometric-space Y))
+ in do
+ ( x , x∈X) ←
+ is-inhabited-subtype-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( X)
+ ( y , y∈Y) ←
+ is-inhabited-subtype-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( Y)
+ let
+ lemma-eq-X :
+ map-metric-quotient-Pseudometric-Space A x = X
+ lemma-eq-X =
+ eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( X)
+ ( x∈X)
+
+ lemma-eq-fX :
+ ( map-short-function-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f)
+ ( x)) =
+ ( map-short-function-metric-quotient-Pseudometric-space X)
+ lemma-eq-fX =
+ ( inv
+ ( htpy-map-short-function-metric-quotient-Pseudometric-Space
+ ( x))) ∙
+ ( ap
+ ( map-short-function-metric-quotient-Pseudometric-space)
+ ( lemma-eq-X))
+
+ lemma-eq-Y :
+ map-metric-quotient-Pseudometric-Space A y = Y
+ lemma-eq-Y =
+ eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( Y)
+ ( y∈Y)
+
+ lemma-eq-fY :
+ ( map-short-function-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f)
+ ( y)) =
+ ( map-short-function-metric-quotient-Pseudometric-space Y)
+ lemma-eq-fY =
+ ( inv
+ ( htpy-map-short-function-metric-quotient-Pseudometric-Space
+ ( y))) ∙
+ ( ap
+ ( map-short-function-metric-quotient-Pseudometric-space)
+ ( lemma-eq-Y))
+
+ binary-tr
+ ( neighborhood-Metric-Space B d)
+ ( lemma-eq-fX)
+ ( lemma-eq-fY)
+ ( is-short-map-short-function-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f)
+ ( d)
+ ( x)
+ ( y)
+ ( N⟨X,Y⟩ (x , x∈X) (y , y∈Y)))
+
+ short-function-metric-quotient-Pseudometric-Space :
+ short-function-Metric-Space
+ ( metric-quotient-Pseudometric-Space A)
+ ( B)
+ short-function-metric-quotient-Pseudometric-Space =
+ ( map-short-function-metric-quotient-Pseudometric-space ,
+ is-short-map-short-function-metric-quotient-Pseudometric-Space)
+```
+
+## External links
+
+- [Metric identification](https://en.wikipedia.org/wiki/Pseudometric_space#Metric_identification)
+ on pseudometric spaces at Wikipedia
diff --git a/src/metric-spaces/metric-spaces.lagda.md b/src/metric-spaces/metric-spaces.lagda.md
index 9d9e823937..d857545e04 100644
--- a/src/metric-spaces/metric-spaces.lagda.md
+++ b/src/metric-spaces/metric-spaces.lagda.md
@@ -17,6 +17,7 @@ open import foundation.function-types
open import foundation.functoriality-dependent-pair-types
open import foundation.identity-types
open import foundation.propositions
+open import foundation.reflecting-maps-equivalence-relations
open import foundation.sets
open import foundation.subtypes
open import foundation.transport-along-identifications
@@ -30,6 +31,7 @@ open import metric-spaces.pseudometric-spaces
open import metric-spaces.rational-neighborhood-relations
open import metric-spaces.reflexive-rational-neighborhood-relations
open import metric-spaces.saturated-rational-neighborhood-relations
+open import metric-spaces.short-functions-pseudometric-spaces
open import metric-spaces.similarity-of-elements-pseudometric-spaces
open import metric-spaces.symmetric-rational-neighborhood-relations
open import metric-spaces.triangular-rational-neighborhood-relations
@@ -328,6 +330,53 @@ module _
map-inv-equiv (equiv-sim-eq-Metric-Space x y)
```
+### Short maps from a pseudometric space to a metric space reflect similarity
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Pseudometric-Space l1 l2)
+ (B : Metric-Space l1' l2')
+ (f : short-function-Pseudometric-Space A (pseudometric-Metric-Space B))
+ where
+
+ reflects-sim-map-short-function-metric-space-Pseudometric-Space :
+ {x y : type-Pseudometric-Space A} →
+ sim-Pseudometric-Space A x y →
+ map-short-function-Pseudometric-Space A (pseudometric-Metric-Space B) f x =
+ map-short-function-Pseudometric-Space A (pseudometric-Metric-Space B) f y
+ reflects-sim-map-short-function-metric-space-Pseudometric-Space {x} {y} x~y =
+ eq-sim-Metric-Space B
+ ( map-short-function-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f)
+ ( x))
+ ( map-short-function-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f)
+ ( y))
+ ( preserves-sim-map-short-function-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f)
+ ( x)
+ ( y)
+ ( x~y))
+
+ reflecting-map-short-function-metric-space-Pseudometric-Space :
+ reflecting-map-equivalence-relation
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( type-Metric-Space B)
+ reflecting-map-short-function-metric-space-Pseudometric-Space =
+ ( ( map-short-function-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f)) ,
+ ( reflects-sim-map-short-function-metric-space-Pseudometric-Space))
+```
+
## External links
- [`MetricSpaces.Type`](https://www.cs.bham.ac.uk/~mhe/TypeTopology/MetricSpaces.Type.html)
diff --git a/src/metric-spaces/similarity-of-elements-pseudometric-spaces.lagda.md b/src/metric-spaces/similarity-of-elements-pseudometric-spaces.lagda.md
index c48a4bb7ef..cc4d35de83 100644
--- a/src/metric-spaces/similarity-of-elements-pseudometric-spaces.lagda.md
+++ b/src/metric-spaces/similarity-of-elements-pseudometric-spaces.lagda.md
@@ -23,6 +23,7 @@ open import foundation.universe-levels
open import metric-spaces.pseudometric-spaces
open import metric-spaces.rational-neighborhood-relations
+open import metric-spaces.short-functions-pseudometric-spaces
```
@@ -200,6 +201,17 @@ module _
( y)
( x≍y δ))))
+ preserves-neighborhood-sim-Pseudometric-Space' :
+ { x y : type-Pseudometric-Space A} →
+ ( sim-Pseudometric-Space A x y) →
+ ( d : ℚ⁺) (z : type-Pseudometric-Space A) →
+ neighborhood-Pseudometric-Space A d z x →
+ neighborhood-Pseudometric-Space A d z y
+ preserves-neighborhood-sim-Pseudometric-Space' {x} {y} x≍y d z Nzx =
+ symmetric-neighborhood-Pseudometric-Space A d y z
+ ( preserves-neighborhood-sim-Pseudometric-Space x≍y d z
+ ( symmetric-neighborhood-Pseudometric-Space A d z x Nzx))
+
iff-same-neighbors-sim-Pseudometric-Space :
{ x y : type-Pseudometric-Space A} →
( sim-Pseudometric-Space A x y) ↔
@@ -258,3 +270,23 @@ module _
( iff-same-neighbors-same-neighborhood-Pseudometric-Space) ∘iff
( iff-same-neighbors-sim-Pseudometric-Space A)
```
+
+### Short maps between pseudometric spaces preserves similarity
+
+```agda
+module _
+ { l1 l2 l1' l2' : Level}
+ ( A : Pseudometric-Space l1 l2)
+ ( B : Pseudometric-Space l1' l2')
+ ( f : short-function-Pseudometric-Space A B)
+ where
+
+ preserves-sim-map-short-function-Pseudometric-Space :
+ ( x y : type-Pseudometric-Space A) →
+ ( sim-Pseudometric-Space A x y) →
+ ( sim-Pseudometric-Space B
+ ( map-short-function-Pseudometric-Space A B f x)
+ ( map-short-function-Pseudometric-Space A B f y))
+ preserves-sim-map-short-function-Pseudometric-Space x y x~y d =
+ is-short-map-short-function-Pseudometric-Space A B f d x y (x~y d)
+```