diff --git a/src/metric-spaces.lagda.md b/src/metric-spaces.lagda.md
index c501d3c56d..5ea0eb4f03 100644
--- a/src/metric-spaces.lagda.md
+++ b/src/metric-spaces.lagda.md
@@ -62,6 +62,7 @@ open import metric-spaces.bounded-distance-decompositions-of-metric-spaces publi
open import metric-spaces.cartesian-products-metric-spaces public
open import metric-spaces.category-of-metric-spaces-and-isometries public
open import metric-spaces.category-of-metric-spaces-and-short-functions public
+open import metric-spaces.cauchy-approximations-metric-quotients-of-pseudometric-spaces public
open import metric-spaces.cauchy-approximations-metric-spaces public
open import metric-spaces.cauchy-approximations-pseudometric-spaces public
open import metric-spaces.cauchy-sequences-complete-metric-spaces public
@@ -101,6 +102,9 @@ 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.located-metric-spaces public
+open import metric-spaces.metric-pseudocompletion-of-metric-spaces public
+open import metric-spaces.metric-pseudocompletion-of-pseudometric-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
@@ -125,6 +129,8 @@ open import metric-spaces.precategory-of-metric-spaces-and-functions public
open import metric-spaces.precategory-of-metric-spaces-and-isometries public
open import metric-spaces.precategory-of-metric-spaces-and-short-functions public
open import metric-spaces.preimages-rational-neighborhood-relations public
+open import metric-spaces.pseudometric-completion-of-metric-spaces public
+open import metric-spaces.pseudometric-completion-of-pseudometric-spaces public
open import metric-spaces.pseudometric-spaces public
open import metric-spaces.rational-approximations-of-zero public
open import metric-spaces.rational-cauchy-approximations public
diff --git a/src/metric-spaces/cauchy-approximations-metric-quotients-of-pseudometric-spaces.lagda.md b/src/metric-spaces/cauchy-approximations-metric-quotients-of-pseudometric-spaces.lagda.md
new file mode 100644
index 0000000000..9414e516f8
--- /dev/null
+++ b/src/metric-spaces/cauchy-approximations-metric-quotients-of-pseudometric-spaces.lagda.md
@@ -0,0 +1,312 @@
+# Cauchy approximations in metric quotients of pseudometric spaces
+
+```agda
+{-# OPTIONS --lossy-unification #-}
+
+module metric-spaces.cauchy-approximations-metric-quotients-of-pseudometric-spaces where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.addition-positive-rational-numbers
+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.inhabited-subtypes
+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.transport-along-identifications
+open import foundation.universal-property-set-quotients
+open import foundation.universe-levels
+
+open import logic.functoriality-existential-quantification
+
+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-quotients-of-pseudometric-spaces
+open import metric-spaces.metric-spaces
+open import metric-spaces.pseudometric-completion-of-metric-spaces
+open import metric-spaces.pseudometric-completion-of-pseudometric-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 pointwise [quotients](foundation.set-quotients.md) of
+[Cauchy approximations](metric-spaces.cauchy-approximations-pseudometric-spaces.md)
+by the
+[similarity relation](metric-spaces.similarity-of-elements-pseudometric-spaces.md)
+in a [pseudometric space](metric-spaces.pseudometric-spaces.md) are Cauchy
+approximations in the
+[metric quotient](metric-spaces.metric-quotients-of-pseudometric-spaces.md). A
+Cauchy approximation in a the metric quotient of a pseudometric space has a
+{{#concept "lift up to similarity" Agda=has-lift-cauchy-approximation-metric-quotient-Pseudometric-Space}}
+if it is similar (in the
+[pseudometric completion](metric-spaces.pseudometric-completion-of-metric-spaces.md)
+of the metric quotient) to the pointwise quotient of
+[some](foundation.existential-quantification.md) Cauchy approximation in the
+pseudometric space.
+
+The pointwise quotient of Cauchy approximations preserves
+[limits](metric-spaces.limits-of-cauchy-approximations-pseudometric-spaces.md).
+The pointwise quotient of a Cauchy approximation has a lift. A Cauchy
+approximation that admits a
+[limit](metric-spaces.limits-of-cauchy-approximations-pseudometric-spaces.md)
+has a lift.
+
+## Definitions
+
+### The pointwise quotient Cauchy approximation of a Cauchy approximation in a pseudometric 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-map-metric-quotient-Pseudometric-Space M)
+```
+
+### Lifts of Cauchy approximations in the quotient metric space up to similarity
+
+```agda
+module _
+ { l1 l2 : Level} (A : Pseudometric-Space l1 l2)
+ ( u :
+ cauchy-approximation-Metric-Space
+ ( metric-quotient-Pseudometric-Space A))
+ ( v : cauchy-approximation-Pseudometric-Space A)
+ where
+
+ is-lift-quotient-prop-cauchy-approximation-Pseudometric-Space :
+ Prop (l1 ⊔ l2)
+ is-lift-quotient-prop-cauchy-approximation-Pseudometric-Space =
+ sim-prop-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-metric-quotient-Pseudometric-Space A))
+ ( u)
+ ( map-metric-quotient-cauchy-approximation-Pseudometric-Space A v)
+
+ is-lift-quotient-cauchy-approximation-Pseudometric-Space : UU (l1 ⊔ l2)
+ is-lift-quotient-cauchy-approximation-Pseudometric-Space =
+ type-Prop is-lift-quotient-prop-cauchy-approximation-Pseudometric-Space
+
+ is-prop-is-lift-quotient-cauchy-approximation-Pseudometric-Space :
+ is-prop is-lift-quotient-cauchy-approximation-Pseudometric-Space
+ is-prop-is-lift-quotient-cauchy-approximation-Pseudometric-Space =
+ is-prop-type-Prop
+ is-lift-quotient-prop-cauchy-approximation-Pseudometric-Space
+
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space l1 l2)
+ ( u :
+ cauchy-approximation-Metric-Space
+ ( metric-quotient-Pseudometric-Space A))
+ where
+
+ has-lift-prop-cauchy-approximation-metric-quotient-Pseudometric-Space :
+ Prop (l1 ⊔ l2)
+ has-lift-prop-cauchy-approximation-metric-quotient-Pseudometric-Space =
+ ∃ ( cauchy-approximation-Pseudometric-Space A)
+ ( is-lift-quotient-prop-cauchy-approximation-Pseudometric-Space A u)
+
+ has-lift-cauchy-approximation-metric-quotient-Pseudometric-Space :
+ UU (l1 ⊔ l2)
+ has-lift-cauchy-approximation-metric-quotient-Pseudometric-Space =
+ type-Prop
+ has-lift-prop-cauchy-approximation-metric-quotient-Pseudometric-Space
+
+ is-prop-has-lift-cauchy-approximation-metric-quotient-Pseudometric-Space :
+ is-prop has-lift-cauchy-approximation-metric-quotient-Pseudometric-Space
+ is-prop-has-lift-cauchy-approximation-metric-quotient-Pseudometric-Space =
+ is-prop-type-Prop
+ has-lift-prop-cauchy-approximation-metric-quotient-Pseudometric-Space
+```
+
+## Properties
+
+### 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-quotient-map-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-quotient-map-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)
+ ( uε~x)
+ ( lim~y)
+ ( ε +ℚ⁺ δ)
+ ( is-lim ε δ)
+```
+
+### Pointwise quotients of Cauchy approximations have lifts
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space l1 l2)
+ (u : cauchy-approximation-Pseudometric-Space A)
+ where
+
+ has-lift-map-quotient-cauchy-approximation-metric-quotient-Pseudometric-Space :
+ has-lift-cauchy-approximation-metric-quotient-Pseudometric-Space
+ ( A)
+ ( map-metric-quotient-cauchy-approximation-Pseudometric-Space A u)
+ has-lift-map-quotient-cauchy-approximation-metric-quotient-Pseudometric-Space =
+ unit-trunc-Prop
+ ( u ,
+ refl-sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-metric-quotient-Pseudometric-Space A))
+ ( map-metric-quotient-cauchy-approximation-Pseudometric-Space A u))
+```
+
+### Convergent Cauchy approximations in the quotient metric space have a lift up to similarity
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space l1 l2)
+ ( u :
+ cauchy-approximation-Metric-Space
+ ( metric-quotient-Pseudometric-Space A))
+ ( lim : type-Metric-Space (metric-quotient-Pseudometric-Space A))
+ ( is-lim :
+ is-limit-cauchy-approximation-Metric-Space
+ ( metric-quotient-Pseudometric-Space A)
+ ( u)
+ ( lim))
+ where
+
+ lemma-sim-lift-is-limit-cauchy-approximation-metric-quotient-Pseudometric-Space :
+ (x : type-Pseudometric-Space A) →
+ (is-in-class-metric-quotient-Pseudometric-Space A lim x) →
+ is-lift-quotient-cauchy-approximation-Pseudometric-Space
+ ( A)
+ ( u)
+ ( const-cauchy-approximation-Pseudometric-Space A x)
+ lemma-sim-lift-is-limit-cauchy-approximation-metric-quotient-Pseudometric-Space
+ x x∈lim =
+ transitive-sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-metric-quotient-Pseudometric-Space A))
+ ( u)
+ ( const-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-metric-quotient-Pseudometric-Space A)
+ ( lim))
+ ( const-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-metric-quotient-Pseudometric-Space A)
+ ( map-metric-quotient-Pseudometric-Space A x))
+ ( λ d α β →
+ sim-eq-Pseudometric-Space
+ ( pseudometric-metric-quotient-Pseudometric-Space A)
+ ( lim)
+ ( map-metric-quotient-Pseudometric-Space A x)
+ ( inv
+ ( eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( lim)
+ ( x∈lim)))
+ ( α +ℚ⁺ β +ℚ⁺ d))
+ ( sim-const-is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-metric-quotient-Pseudometric-Space A)
+ ( u)
+ ( lim)
+ ( is-lim))
+
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space l1 l2)
+ ( u :
+ cauchy-approximation-Metric-Space
+ ( metric-quotient-Pseudometric-Space A))
+ where
+
+ has-lift-is-convergent-cauchy-approximation-metric-quotient-Pseudometric-Space :
+ is-convergent-cauchy-approximation-Metric-Space
+ ( metric-quotient-Pseudometric-Space A)
+ ( u) →
+ has-lift-cauchy-approximation-metric-quotient-Pseudometric-Space A u
+ has-lift-is-convergent-cauchy-approximation-metric-quotient-Pseudometric-Space
+ (lim , is-lim) =
+ map-exists
+ ( is-lift-quotient-cauchy-approximation-Pseudometric-Space A u)
+ ( const-cauchy-approximation-Pseudometric-Space A)
+ ( lemma-sim-lift-is-limit-cauchy-approximation-metric-quotient-Pseudometric-Space
+ ( A)
+ ( u)
+ ( lim)
+ ( is-lim))
+ ( is-inhabited-class-metric-quotient-Pseudometric-Space A lim)
+```
diff --git a/src/metric-spaces/cauchy-sequences-complete-metric-spaces.lagda.md b/src/metric-spaces/cauchy-sequences-complete-metric-spaces.lagda.md
index 7a77f2ac4e..3d822f77fc 100644
--- a/src/metric-spaces/cauchy-sequences-complete-metric-spaces.lagda.md
+++ b/src/metric-spaces/cauchy-sequences-complete-metric-spaces.lagda.md
@@ -90,8 +90,8 @@ module _
( metric-space-Complete-Metric-Space M)
( x)
has-limit-cauchy-sequence-Complete-Metric-Space =
- limit-cauchy-sequence-Complete-Metric-Space ,
- is-limit-limit-cauchy-sequence-Complete-Metric-Space
+ ( limit-cauchy-sequence-Complete-Metric-Space ,
+ is-limit-limit-cauchy-sequence-Complete-Metric-Space)
```
### If every Cauchy sequence has a limit in a metric space, the metric space is complete
@@ -123,5 +123,5 @@ module _
complete-metric-space-cauchy-sequences-have-limits-Metric-Space :
Complete-Metric-Space l1 l2
complete-metric-space-cauchy-sequences-have-limits-Metric-Space =
- M , is-complete-metric-space-cauchy-sequences-have-limits-Metric-Space
+ ( M , is-complete-metric-space-cauchy-sequences-have-limits-Metric-Space)
```
diff --git a/src/metric-spaces/complete-metric-spaces.lagda.md b/src/metric-spaces/complete-metric-spaces.lagda.md
index 6b10db7b42..8f894926c8 100644
--- a/src/metric-spaces/complete-metric-spaces.lagda.md
+++ b/src/metric-spaces/complete-metric-spaces.lagda.md
@@ -12,9 +12,12 @@ open import elementary-number-theory.positive-rational-numbers
open import foundation.binary-relations
open import foundation.dependent-pair-types
open import foundation.equivalences
+open import foundation.function-types
+open import foundation.homotopies
open import foundation.identity-types
open import foundation.propositions
open import foundation.retractions
+open import foundation.retracts-of-types
open import foundation.sections
open import foundation.subtypes
open import foundation.universe-levels
@@ -23,6 +26,7 @@ open import metric-spaces.cauchy-approximations-metric-spaces
open import metric-spaces.convergent-cauchy-approximations-metric-spaces
open import metric-spaces.limits-of-cauchy-approximations-metric-spaces
open import metric-spaces.metric-spaces
+open import metric-spaces.pseudometric-spaces
```
@@ -80,6 +84,10 @@ module _
metric-space-Complete-Metric-Space : Metric-Space l1 l2
metric-space-Complete-Metric-Space = pr1 A
+ pseudometric-space-Complete-Metric-Space : Pseudometric-Space l1 l2
+ pseudometric-space-Complete-Metric-Space =
+ pseudometric-Metric-Space metric-space-Complete-Metric-Space
+
type-Complete-Metric-Space : UU l1
type-Complete-Metric-Space =
type-Metric-Space metric-space-Complete-Metric-Space
@@ -122,13 +130,13 @@ module _
( metric-space-Complete-Metric-Space A))
( refl)
- is-retraction-convergent-cauchy-approximation-Metric-Space :
+ is-retraction-convergent-cauchy-approximation-Complete-Metric-Space :
is-retraction
( convergent-cauchy-approximation-Complete-Metric-Space)
( inclusion-subtype
( is-convergent-prop-cauchy-approximation-Metric-Space
( metric-space-Complete-Metric-Space A)))
- is-retraction-convergent-cauchy-approximation-Metric-Space u = refl
+ is-retraction-convergent-cauchy-approximation-Complete-Metric-Space u = refl
is-equiv-convergent-cauchy-approximation-Complete-Metric-Space :
is-equiv convergent-cauchy-approximation-Complete-Metric-Space
@@ -141,7 +149,7 @@ module _
( inclusion-subtype
( is-convergent-prop-cauchy-approximation-Metric-Space
( metric-space-Complete-Metric-Space A))) ,
- ( is-retraction-convergent-cauchy-approximation-Metric-Space)
+ ( is-retraction-convergent-cauchy-approximation-Complete-Metric-Space)
```
### The limit of a Cauchy approximation in a complete metric space
@@ -172,6 +180,52 @@ module _
( convergent-cauchy-approximation-Complete-Metric-Space A u)
```
+### Any complete metric space is a retract of its type of Cauchy approximations
+
+```agda
+module _
+ {l1 l2 : Level} (A : Complete-Metric-Space l1 l2)
+ where
+
+ abstract
+ is-retraction-limit-cauchy-approximation-Complete-Metric-Space :
+ ( limit-cauchy-approximation-Complete-Metric-Space A ∘
+ const-cauchy-approximation-Metric-Space
+ ( metric-space-Complete-Metric-Space A)) ~
+ ( id)
+ is-retraction-limit-cauchy-approximation-Complete-Metric-Space x =
+ all-eq-is-limit-cauchy-approximation-Metric-Space
+ ( metric-space-Complete-Metric-Space A)
+ ( const-cauchy-approximation-Metric-Space
+ ( metric-space-Complete-Metric-Space A)
+ ( x))
+ ( limit-cauchy-approximation-Complete-Metric-Space
+ ( A)
+ ( const-cauchy-approximation-Metric-Space
+ ( metric-space-Complete-Metric-Space A)
+ ( x)))
+ ( x)
+ ( is-limit-limit-cauchy-approximation-Complete-Metric-Space
+ ( A)
+ ( const-cauchy-approximation-Metric-Space
+ ( metric-space-Complete-Metric-Space A)
+ ( x)))
+ ( is-limit-const-cauchy-approximation-Metric-Space
+ ( metric-space-Complete-Metric-Space A)
+ ( x))
+
+ retract-limit-cauchy-approximation-Complete-Metric-Space :
+ retract
+ ( cauchy-approximation-Metric-Space
+ ( metric-space-Complete-Metric-Space A))
+ ( type-Complete-Metric-Space A)
+ retract-limit-cauchy-approximation-Complete-Metric-Space =
+ ( ( const-cauchy-approximation-Metric-Space
+ ( metric-space-Complete-Metric-Space A)) ,
+ ( limit-cauchy-approximation-Complete-Metric-Space A) ,
+ ( is-retraction-limit-cauchy-approximation-Complete-Metric-Space))
+```
+
### Saturation of the limit
```agda
diff --git a/src/metric-spaces/convergent-cauchy-approximations-metric-spaces.lagda.md b/src/metric-spaces/convergent-cauchy-approximations-metric-spaces.lagda.md
index 53b0dbe5b7..5641ecc9fb 100644
--- a/src/metric-spaces/convergent-cauchy-approximations-metric-spaces.lagda.md
+++ b/src/metric-spaces/convergent-cauchy-approximations-metric-spaces.lagda.md
@@ -12,8 +12,10 @@ open import elementary-number-theory.positive-rational-numbers
open import foundation.dependent-pair-types
open import foundation.function-types
+open import foundation.homotopies
open import foundation.identity-types
open import foundation.propositions
+open import foundation.retracts-of-types
open import foundation.subtypes
open import foundation.transport-along-identifications
open import foundation.universe-levels
@@ -141,3 +143,51 @@ module _
( limit-convergent-cauchy-approximation-Metric-Space)
is-limit-limit-convergent-cauchy-approximation-Metric-Space = pr2 (pr2 f)
```
+
+## Properties
+
+### Constant Cauchy approximations are convergent
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ (x : type-Metric-Space A)
+ where
+
+ is-convergent-const-cauchy-approximation-Metric-Space :
+ is-convergent-cauchy-approximation-Metric-Space
+ ( A)
+ ( const-cauchy-approximation-Metric-Space A x)
+ is-convergent-const-cauchy-approximation-Metric-Space =
+ ( x , is-limit-const-cauchy-approximation-Metric-Space A x)
+
+ convergent-const-cauchy-approximation-Metric-Space :
+ convergent-cauchy-approximation-Metric-Space A
+ convergent-const-cauchy-approximation-Metric-Space =
+ ( const-cauchy-approximation-Metric-Space A x ,
+ is-convergent-const-cauchy-approximation-Metric-Space)
+```
+
+### Any metric space is a retract of its type of convergent Cauchy approximations
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ where
+
+ abstract
+ is-retraction-convergent-cauchy-approximation-Metric-Space :
+ ( limit-convergent-cauchy-approximation-Metric-Space A ∘
+ convergent-const-cauchy-approximation-Metric-Space A) ~
+ ( id)
+ is-retraction-convergent-cauchy-approximation-Metric-Space x = refl
+
+ retract-convergent-cauchy-approximation-Metric-Space :
+ retract
+ ( convergent-cauchy-approximation-Metric-Space A)
+ ( type-Metric-Space A)
+ retract-convergent-cauchy-approximation-Metric-Space =
+ ( convergent-const-cauchy-approximation-Metric-Space A ,
+ limit-convergent-cauchy-approximation-Metric-Space A ,
+ is-retraction-convergent-cauchy-approximation-Metric-Space)
+```
diff --git a/src/metric-spaces/limits-of-cauchy-approximations-metric-spaces.lagda.md b/src/metric-spaces/limits-of-cauchy-approximations-metric-spaces.lagda.md
index e1ecfba92e..4ba16ab30a 100644
--- a/src/metric-spaces/limits-of-cauchy-approximations-metric-spaces.lagda.md
+++ b/src/metric-spaces/limits-of-cauchy-approximations-metric-spaces.lagda.md
@@ -123,6 +123,25 @@ module _
( all-sim-is-limit-cauchy-approximation-Metric-Space lim-x lim-y)
```
+### The value of a constant Cauchy approximation is its limit
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space l1 l2)
+ (x : type-Metric-Space A)
+ where
+
+ is-limit-const-cauchy-approximation-Metric-Space :
+ is-limit-cauchy-approximation-Metric-Space
+ ( A)
+ ( const-cauchy-approximation-Metric-Space A x)
+ ( x)
+ is-limit-const-cauchy-approximation-Metric-Space =
+ is-limit-const-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-Metric-Space A)
+ ( x)
+```
+
## See also
- [Convergent cauchy approximations](metric-spaces.convergent-cauchy-approximations-metric-spaces.md)
diff --git a/src/metric-spaces/limits-of-cauchy-approximations-pseudometric-spaces.lagda.md b/src/metric-spaces/limits-of-cauchy-approximations-pseudometric-spaces.lagda.md
index 3e6705b776..6226f7b2c9 100644
--- a/src/metric-spaces/limits-of-cauchy-approximations-pseudometric-spaces.lagda.md
+++ b/src/metric-spaces/limits-of-cauchy-approximations-pseudometric-spaces.lagda.md
@@ -145,6 +145,23 @@ module _
( Nxy)
```
+### The value of a constant Cauchy approximation is its limit
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space l1 l2)
+ (x : type-Pseudometric-Space A)
+ where
+
+ is-limit-const-cauchy-approximation-Pseudometric-Space :
+ is-limit-cauchy-approximation-Pseudometric-Space
+ ( A)
+ ( const-cauchy-approximation-Pseudometric-Space A x)
+ ( x)
+ is-limit-const-cauchy-approximation-Pseudometric-Space ε δ =
+ refl-neighborhood-Pseudometric-Space A _ x
+```
+
## References
Our definition of limit of Cauchy approximation follows Definition 11.2.10 of
diff --git a/src/metric-spaces/metric-pseudocompletion-of-metric-spaces.lagda.md b/src/metric-spaces/metric-pseudocompletion-of-metric-spaces.lagda.md
new file mode 100644
index 0000000000..a2bc054b60
--- /dev/null
+++ b/src/metric-spaces/metric-pseudocompletion-of-metric-spaces.lagda.md
@@ -0,0 +1,380 @@
+# The metric pseudocompletion of a metric space
+
+```agda
+{-# OPTIONS --lossy-unification #-}
+
+module metric-spaces.metric-pseudocompletion-of-metric-spaces where
+```
+
+Imports
+
+```agda
+open import category-theory.isomorphisms-in-precategories
+
+open import elementary-number-theory.positive-rational-numbers
+open import elementary-number-theory.strict-inequality-rational-numbers
+
+open import foundation.action-on-identifications-binary-functions
+open import foundation.action-on-identifications-functions
+open import foundation.binary-relations
+open import foundation.binary-transport
+open import foundation.dependent-pair-types
+open import foundation.equivalences
+open import foundation.existential-quantification
+open import foundation.function-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.set-quotients
+open import foundation.sets
+open import foundation.transport-along-identifications
+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.complete-metric-spaces
+open import metric-spaces.convergent-cauchy-approximations-metric-spaces
+open import metric-spaces.equality-of-metric-spaces
+open import metric-spaces.functions-metric-spaces
+open import metric-spaces.functions-pseudometric-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-pseudocompletion-of-pseudometric-spaces
+open import metric-spaces.metric-quotients-of-pseudometric-spaces
+open import metric-spaces.metric-spaces
+open import metric-spaces.precategory-of-metric-spaces-and-short-functions
+open import metric-spaces.pseudometric-completion-of-metric-spaces
+open import metric-spaces.pseudometric-completion-of-pseudometric-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 pseudocompletion" Disambiguation="of a metric space Agda=metric-pseudocompletion-Metric-Space}}
+of a [metric space](metric-spaces.metric-spaces.md) `M` is the
+[metric pseudocompletion](metric-spaces.metric-pseudocompletion-of-pseudometric-spaces.md)
+of its underlying [pseudometric space](metric-spaces.pseudometric-spaces.md);
+i.e. the
+[metric quotient](metric-spaces.metric-quotients-of-pseudometric-spaces.md)
+`[C M]` of its
+[pseudometric completion](metric-spaces.pseudometric-completion-of-metric-spaces.md)
+`C M`.
+
+The natural [isometry](metric-spaces.isometries-metric-spaces.md)
+
+```text
+M → [C M]
+```
+
+is an [equivalence](foundation.equivalences.md) if and only if `M` is
+[complete](metric-spaces.complete-metric-spaces.md).
+
+## Definitions
+
+### The metric pseudocompletion of a metric space
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ metric-pseudocompletion-Metric-Space :
+ Metric-Space (l1 ⊔ l2) (l1 ⊔ l2)
+ metric-pseudocompletion-Metric-Space =
+ metric-pseudocompletion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+
+ pseudometric-metric-pseudocompletion-Metric-Space :
+ Pseudometric-Space (l1 ⊔ l2) (l1 ⊔ l2)
+ pseudometric-metric-pseudocompletion-Metric-Space =
+ pseudometric-Metric-Space
+ metric-pseudocompletion-Metric-Space
+
+ type-metric-pseudocompletion-Metric-Space : UU (l1 ⊔ l2)
+ type-metric-pseudocompletion-Metric-Space =
+ type-Metric-Space metric-pseudocompletion-Metric-Space
+```
+
+### The isometry from the pseudometric completion of a metric space into its metric pseudocompletion
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ isometry-metric-pseudocompletion-pseudometric-completion-Metric-Space :
+ isometry-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( pseudometric-metric-pseudocompletion-Metric-Space M)
+ isometry-metric-pseudocompletion-pseudometric-completion-Metric-Space =
+ isometry-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+
+ map-metric-pseudocompletion-pseudometric-completion-Metric-Space :
+ type-function-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( pseudometric-metric-pseudocompletion-Metric-Space M)
+ map-metric-pseudocompletion-pseudometric-completion-Metric-Space =
+ map-isometry-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( pseudometric-metric-pseudocompletion-Metric-Space M)
+ ( isometry-metric-pseudocompletion-pseudometric-completion-Metric-Space)
+```
+
+### The isometry from a metric space into its metric pseudocompletion
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ isometry-metric-pseudocompletion-Metric-Space :
+ isometry-Metric-Space
+ ( M)
+ ( metric-pseudocompletion-Metric-Space M)
+ isometry-metric-pseudocompletion-Metric-Space =
+ isometry-metric-pseudocompletion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+
+ map-metric-pseudocompletion-Metric-Space :
+ type-function-Metric-Space
+ ( M)
+ ( metric-pseudocompletion-Metric-Space M)
+ map-metric-pseudocompletion-Metric-Space =
+ map-isometry-Metric-Space
+ ( M)
+ ( metric-pseudocompletion-Metric-Space M)
+ ( isometry-metric-pseudocompletion-Metric-Space)
+
+ is-isometry-map-metric-pseudocompletion-Metric-Space :
+ is-isometry-Metric-Space
+ ( M)
+ ( metric-pseudocompletion-Metric-Space M)
+ ( map-metric-pseudocompletion-Metric-Space)
+ is-isometry-map-metric-pseudocompletion-Metric-Space =
+ is-isometry-map-isometry-Metric-Space
+ ( M)
+ ( metric-pseudocompletion-Metric-Space M)
+ ( isometry-metric-pseudocompletion-Metric-Space)
+```
+
+## Properties
+
+### The mapping from a complete metric space into its metric pseudocompletion is an isometric equivalence
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ (is-complete-M : is-complete-Metric-Space M)
+ where
+
+ short-map-lim-metric-pseudocompletion-is-complete-Metric-Space :
+ short-function-Metric-Space
+ ( metric-pseudocompletion-Metric-Space M)
+ ( M)
+ short-map-lim-metric-pseudocompletion-is-complete-Metric-Space =
+ short-map-short-function-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( M)
+ ( short-map-lim-pseudometric-completion-is-complete-Metric-Space
+ ( M)
+ ( is-complete-M))
+
+ map-lim-metric-pseudocompletion-is-complete-Metric-Space :
+ type-function-Metric-Space
+ ( metric-pseudocompletion-Metric-Space M)
+ ( M)
+ map-lim-metric-pseudocompletion-is-complete-Metric-Space =
+ map-short-function-Metric-Space
+ ( metric-pseudocompletion-Metric-Space M)
+ ( M)
+ ( short-map-lim-metric-pseudocompletion-is-complete-Metric-Space)
+
+ is-short-map-lim-metric-pseudocompletion-is-completr-Metric-Space :
+ is-short-function-Metric-Space
+ ( metric-pseudocompletion-Metric-Space M)
+ ( M)
+ ( map-lim-metric-pseudocompletion-is-complete-Metric-Space)
+ is-short-map-lim-metric-pseudocompletion-is-completr-Metric-Space =
+ is-short-map-short-function-Metric-Space
+ ( metric-pseudocompletion-Metric-Space M)
+ ( M)
+ ( short-map-lim-metric-pseudocompletion-is-complete-Metric-Space)
+
+ compute-map-lim-metric-pseudocompletion-is-complete-Metric-Space :
+ (X : type-metric-pseudocompletion-Metric-Space M) →
+ (x : cauchy-approximation-Metric-Space M) →
+ is-in-class-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( X)
+ ( x) →
+ map-lim-metric-pseudocompletion-is-complete-Metric-Space X =
+ limit-cauchy-approximation-Complete-Metric-Space
+ ( M , is-complete-M)
+ ( x)
+ compute-map-lim-metric-pseudocompletion-is-complete-Metric-Space =
+ compute-map-short-function-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( M)
+ ( short-map-lim-pseudometric-completion-is-complete-Metric-Space
+ ( M)
+ (is-complete-M))
+
+ is-section-map-metric-pseudocompletion-is-complete-Metric-Space :
+ ( map-metric-pseudocompletion-Metric-Space M ∘
+ map-lim-metric-pseudocompletion-is-complete-Metric-Space) ~
+ ( id)
+ is-section-map-metric-pseudocompletion-is-complete-Metric-Space U =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( Id-Prop
+ ( set-Metric-Space
+ ( metric-pseudocompletion-Metric-Space M))
+ ( map-metric-pseudocompletion-Metric-Space M
+ ( map-lim-metric-pseudocompletion-is-complete-Metric-Space U))
+ ( U))
+ in do
+ (u , u∈U) ←
+ is-inhabited-class-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( U)
+ let
+ lim-u : type-Metric-Space M
+ lim-u =
+ limit-cauchy-approximation-Complete-Metric-Space
+ ( M , is-complete-M)
+ ( u)
+
+ compute-map-lim-U :
+ map-lim-metric-pseudocompletion-is-complete-Metric-Space U = lim-u
+ compute-map-lim-U =
+ compute-map-lim-metric-pseudocompletion-is-complete-Metric-Space
+ ( U)
+ ( u)
+ ( u∈U)
+
+ sim-u-lim-u :
+ sim-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( u)
+ ( const-cauchy-approximation-Metric-Space
+ ( M)
+ ( lim-u))
+ sim-u-lim-u =
+ sim-const-is-limit-cauchy-approximation-Metric-Space
+ ( M)
+ ( u)
+ ( lim-u)
+ ( is-limit-map-lim-pseudometric-completion-is-complete-Metric-Space
+ ( M)
+ ( is-complete-M)
+ ( u))
+
+ [u]=[lim-u] :
+ ( map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( u)) =
+ ( map-metric-pseudocompletion-Metric-Space M lim-u)
+ [u]=[lim-u] =
+ apply-effectiveness-quotient-map'
+ ( equivalence-relation-sim-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M))
+ ( sim-u-lim-u)
+ ( ( ap
+ ( map-metric-pseudocompletion-Metric-Space M)
+ ( compute-map-lim-U)) ∙
+ ( inv [u]=[lim-u]) ∙
+ ( eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M))
+ ( U)
+ ( u∈U)))
+
+ is-retraction-map-metric-pseudocompletion-is-complete-Metric-Space :
+ ( map-lim-metric-pseudocompletion-is-complete-Metric-Space ∘
+ map-metric-pseudocompletion-Metric-Space M) ~
+ ( id)
+ is-retraction-map-metric-pseudocompletion-is-complete-Metric-Space x =
+ ( compute-map-lim-metric-pseudocompletion-is-complete-Metric-Space
+ ( map-metric-pseudocompletion-Metric-Space M x)
+ ( const-cauchy-approximation-Metric-Space M x)
+ ( is-in-class-map-quotient-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( const-cauchy-approximation-Metric-Space M x))) ∙
+ ( is-retraction-limit-cauchy-approximation-Complete-Metric-Space
+ ( M , is-complete-M)
+ ( x))
+
+ is-equiv-map-metric-pseudocompletion-is-complete-Metric-Space :
+ is-equiv
+ ( map-metric-pseudocompletion-Metric-Space M)
+ is-equiv-map-metric-pseudocompletion-is-complete-Metric-Space =
+ is-equiv-is-invertible
+ ( map-lim-metric-pseudocompletion-is-complete-Metric-Space)
+ ( is-section-map-metric-pseudocompletion-is-complete-Metric-Space)
+ ( is-retraction-map-metric-pseudocompletion-is-complete-Metric-Space)
+
+ isometric-equiv-metric-pseudocompletion-is-complete-Metric-Space' :
+ isometric-equiv-Metric-Space'
+ ( M)
+ ( metric-pseudocompletion-Metric-Space M)
+ isometric-equiv-metric-pseudocompletion-is-complete-Metric-Space' =
+ ( map-metric-pseudocompletion-Metric-Space M ,
+ is-equiv-map-metric-pseudocompletion-is-complete-Metric-Space ,
+ is-isometry-map-metric-pseudocompletion-Metric-Space M)
+```
+
+### If the mapping from a metric space into its metric pseudocompletion is an equivalence, the metric space is complete
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ is-complete-is-equiv-map-metric-pseudocompletion-Metric-Space :
+ is-equiv (map-metric-pseudocompletion-Metric-Space M) →
+ is-complete-Metric-Space M
+ is-complete-is-equiv-map-metric-pseudocompletion-Metric-Space H u =
+ (lim-u , is-limit-lim-u)
+ where
+
+ lim-u : type-Metric-Space M
+ lim-u =
+ map-inv-is-equiv
+ ( H)
+ ( map-metric-pseudocompletion-pseudometric-completion-Metric-Space
+ ( M)
+ ( u))
+
+ is-limit-lim-u :
+ is-limit-cauchy-approximation-Metric-Space
+ ( M)
+ ( u)
+ ( lim-u)
+ is-limit-lim-u =
+ is-limit-sim-const-cauchy-approximation-Metric-Space
+ ( M)
+ ( u)
+ ( lim-u)
+ ( apply-effectiveness-quotient-map
+ ( equivalence-relation-sim-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M))
+ ( inv
+ ( is-section-map-section-is-equiv
+ ( H)
+ ( map-metric-pseudocompletion-pseudometric-completion-Metric-Space
+ ( M)
+ ( u)))))
+```
diff --git a/src/metric-spaces/metric-pseudocompletion-of-pseudometric-spaces.lagda.md b/src/metric-spaces/metric-pseudocompletion-of-pseudometric-spaces.lagda.md
new file mode 100644
index 0000000000..b57d473117
--- /dev/null
+++ b/src/metric-spaces/metric-pseudocompletion-of-pseudometric-spaces.lagda.md
@@ -0,0 +1,801 @@
+# The metric pseudocompletion of a pseudometric space
+
+```agda
+module metric-spaces.metric-pseudocompletion-of-pseudometric-spaces where
+```
+
+Imports
+
+```agda
+open import category-theory.isomorphisms-in-precategories
+
+open import elementary-number-theory.positive-rational-numbers
+open import elementary-number-theory.strict-inequality-rational-numbers
+
+open import foundation.action-on-identifications-binary-functions
+open import foundation.action-on-identifications-functions
+open import foundation.binary-relations
+open import foundation.binary-transport
+open import foundation.dependent-pair-types
+open import foundation.equivalences
+open import foundation.existential-quantification
+open import foundation.function-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.set-quotients
+open import foundation.sets
+open import foundation.transport-along-identifications
+open import foundation.universe-levels
+
+open import metric-spaces.cauchy-approximations-metric-quotients-of-pseudometric-spaces
+open import metric-spaces.cauchy-approximations-metric-spaces
+open import metric-spaces.cauchy-approximations-pseudometric-spaces
+open import metric-spaces.complete-metric-spaces
+open import metric-spaces.convergent-cauchy-approximations-metric-spaces
+open import metric-spaces.equality-of-metric-spaces
+open import metric-spaces.functions-metric-spaces
+open import metric-spaces.functions-pseudometric-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-quotients-of-pseudometric-spaces
+open import metric-spaces.metric-spaces
+open import metric-spaces.precategory-of-metric-spaces-and-short-functions
+open import metric-spaces.pseudometric-completion-of-pseudometric-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
+
+Let `M` be a [pseudometric space](metric-spaces.pseudometric-spaces.md) and
+`C M` denote its
+[pseudometric completion](metric-spaces.pseudometric-completion-of-pseudometric-spaces.md);
+the
+{{#concept "metric pseudocompletion" Disambiguation="of a pseudometric space" Agda=metric-pseudocompletion-Pseudometric-Space}}
+of `M` is the
+[metric quotient](metric-spaces.metric-quotients-of-pseudometric-spaces.md)
+
+```text
+[C M] = C M / ~
+```
+
+There are [isometries](metric-spaces.isometries-pseudometric-spaces.md)
+
+```text
+M → C M → [C M]
+```
+
+The metric pseudocompletion of the pseudometric completion of a pseudometric
+space is the metric pseudocompletion of the pseudometric space:
+
+```text
+[C (C M)] = [C M]
+```
+
+A [Cauchy approximation](metric-spaces.cauchy-approximations-metric-spaces.md)
+in `[C M]`, `f : C [C M]` is
+[convergent](metric-spaces.convergent-cauchy-approximations-metric-spaces.md) if
+and only if it is
+[similar](metric-spaces.similarity-of-elements-pseudometric-spaces.md) in
+`C [C M]` to the
+[pointwise quotient](metric-spaces.cauchy-approximations-metric-quotients-of-pseudometric-spaces.md)
+of some
+[Cauchy approximation](metric-spaces.cauchy-approximations-pseudometric-spaces.md)
+`g : C (C M)`.
+
+## Definition
+
+### The metric pseudocompletion of a pseudometric space
+
+```agda
+module _
+ {l1 l2 : Level} (P : Pseudometric-Space l1 l2)
+ where
+
+ metric-pseudocompletion-Pseudometric-Space :
+ Metric-Space (l1 ⊔ l2) (l1 ⊔ l2)
+ metric-pseudocompletion-Pseudometric-Space =
+ metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+
+ pseudometric-metric-pseudocompletion-Pseudometric-Space :
+ Pseudometric-Space (l1 ⊔ l2) (l1 ⊔ l2)
+ pseudometric-metric-pseudocompletion-Pseudometric-Space =
+ pseudometric-Metric-Space
+ metric-pseudocompletion-Pseudometric-Space
+
+ type-metric-pseudocompletion-Pseudometric-Space : UU (l1 ⊔ l2)
+ type-metric-pseudocompletion-Pseudometric-Space =
+ type-Metric-Space metric-pseudocompletion-Pseudometric-Space
+```
+
+### The metric pseudocompletion of the pseudometric completion of a pseudometric space
+
+```agda
+module _
+ {l1 l2 : Level} (P : Pseudometric-Space l1 l2)
+ where
+
+ metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ Metric-Space (l1 ⊔ l2) (l1 ⊔ l2)
+ metric-pseudocompletion-pseudometric-completion-Pseudometric-Space =
+ metric-pseudocompletion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+```
+
+## Properties
+
+### The isometry from the pseudometric completion of a pseudometric space into its metric pseudocompletion
+
+```agda
+module _
+ {l1 l2 : Level} (P : Pseudometric-Space l1 l2)
+ where
+
+ isometry-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ isometry-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space P)
+ isometry-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space =
+ isometry-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+```
+
+### The isometry from a pseudometric space into its metric pseudocompletion
+
+```agda
+module _
+ {l1 l2 : Level} (P : Pseudometric-Space l1 l2)
+ where
+
+ isometry-metric-pseudocompletion-Pseudometric-Space :
+ isometry-Pseudometric-Space
+ ( P)
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space P)
+ isometry-metric-pseudocompletion-Pseudometric-Space =
+ comp-isometry-Pseudometric-Space
+ ( P)
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space P)
+ ( isometry-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( P))
+ ( isometry-pseudometric-completion-Pseudometric-Space P)
+```
+
+### The isometry from the pseudometric completion of the pseudometric completion into the metric pseudocompletion
+
+```agda
+module _
+ { l1 l2 : Level} (P : Pseudometric-Space l1 l2)
+ where
+
+ isometry-metric-pseudocompletion-pseudometric-completion²-Pseudometric-Space :
+ isometry-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space P)
+ isometry-metric-pseudocompletion-pseudometric-completion²-Pseudometric-Space =
+ comp-isometry-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space P)
+ ( isometry-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( isometry-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P))
+
+ short-map-metric-pseudocompletion-pseudometric-completion²-Pseudometric-Space :
+ short-function-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space P)
+ short-map-metric-pseudocompletion-pseudometric-completion²-Pseudometric-Space =
+ short-isometry-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space P)
+ ( isometry-metric-pseudocompletion-pseudometric-completion²-Pseudometric-Space)
+```
+
+### The short isomorphism from the metric pseudocompletion of the pseudometric completion of a pseudometric space into its metric pseudocompletion
+
+```agda
+module _
+ {l1 l2 : Level} (P : Pseudometric-Space l1 l2)
+ where
+
+ short-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ short-function-Metric-Space
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ short-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space =
+ short-map-short-function-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( short-map-metric-pseudocompletion-pseudometric-completion²-Pseudometric-Space
+ ( P))
+
+ map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ type-function-Metric-Space
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space =
+ map-short-function-Metric-Space
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( short-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space)
+
+ compute-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ ( X :
+ type-metric-pseudocompletion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)) →
+ ( x :
+ cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)) →
+ is-in-class-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( X)
+ ( x) →
+ map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space X =
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( x))
+ compute-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ =
+ compute-map-short-function-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( short-map-metric-pseudocompletion-pseudometric-completion²-Pseudometric-Space
+ ( P))
+
+ short-map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ short-function-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ short-map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space =
+ short-map-short-function-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ ( comp-short-function-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( short-map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)))
+ ( short-map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)))
+
+ map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ type-function-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space =
+ map-short-function-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ ( short-map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space)
+
+ compute-map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ (X : type-metric-pseudocompletion-Pseudometric-Space P) →
+ (x : cauchy-approximation-Pseudometric-Space P) →
+ is-in-class-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( X)
+ ( x) →
+ map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( X) =
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x))
+ compute-map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ =
+ compute-map-short-function-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ ( comp-short-function-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( short-map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)))
+ ( short-map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)))
+
+ is-section-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ ( map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space ∘
+ map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space) ~
+ id
+ is-section-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ X =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( Id-Prop
+ ( set-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P))
+ ( map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( X)))
+ ( X))
+ in do
+ ( x , x∈X) ←
+ is-inhabited-class-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( X)
+ let
+ map-inv-X =
+ map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( X)
+
+ compute-map-inv-X :
+ map-inv-X =
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x))
+ compute-map-inv-X =
+ compute-map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( X)
+ ( x)
+ ( x∈X)
+
+ is-in-class-x :
+ is-in-class-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( map-inv-X)
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x))
+ is-in-class-x =
+ inv-tr
+ ( λ Y →
+ is-in-class-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( Y)
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x)))
+ ( compute-map-inv-X)
+ ( is-in-class-map-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x)))
+
+ compute-map :
+ map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( map-inv-X) =
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x)))
+ compute-map =
+ compute-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( map-inv-X)
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x))
+ ( is-in-class-x)
+
+ compute-quotient-lim :
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x))) =
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x)
+ compute-quotient-lim =
+ apply-effectiveness-quotient-map'
+ ( equivalence-relation-sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( all-sim-is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x))
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x)))
+ ( x)
+ ( is-limit-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x)))
+ ( is-limit-const-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x)))
+
+ compute-quotient-x :
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x) = X
+ compute-quotient-x =
+ eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( X)
+ ( x∈X)
+
+ ( compute-map ∙
+ compute-quotient-lim ∙
+ compute-quotient-x)
+
+ is-retraction-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ ( map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space ∘
+ map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space)
+ ~
+ id
+ is-retraction-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ X =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( Id-Prop
+ ( set-Metric-Space
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( P)))
+ ( map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( X)))
+ ( X))
+
+ in do
+ ( x , x∈X) ←
+ is-inhabited-class-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( X)
+ let
+ map-X =
+ map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( X)
+
+ compute-map-X :
+ map-X =
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( x))
+ compute-map-X =
+ compute-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( X)
+ ( x)
+ ( x∈X)
+
+ is-in-class-map-X :
+ is-in-class-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( map-X)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( x))
+ is-in-class-map-X =
+ inv-tr
+ ( λ Y →
+ is-in-class-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( Y)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( x)))
+ ( compute-map-X)
+ ( is-in-class-map-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( x)))
+
+ compute-map-inv :
+ map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( map-X) =
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( x)))
+ compute-map-inv =
+ compute-map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( map-X)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( x))
+ ( is-in-class-map-X)
+
+ compute-map-quotient-lim :
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( x))) =
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( x)
+ compute-map-quotient-lim =
+ apply-effectiveness-quotient-map'
+ ( equivalence-relation-sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)))
+ ( symmetric-sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( x)
+ ( map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( x)))
+ ( sim-const-is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( x)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( x))
+ ( is-limit-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( x))))
+
+ compute-quotient-x :
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( x) =
+ X
+ compute-quotient-x =
+ eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)))
+ ( X)
+ ( x∈X)
+
+ ( compute-map-inv ∙
+ compute-map-quotient-lim ∙
+ compute-quotient-x)
+
+ is-iso-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ is-iso-Precategory
+ precategory-short-function-Metric-Space
+ { metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P}
+ { metric-pseudocompletion-Pseudometric-Space P}
+ short-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ pr1
+ is-iso-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ =
+ short-map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ pr2
+ is-iso-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ =
+ ( ( eq-htpy-map-short-function-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( comp-short-function-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( P))
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( short-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space)
+ ( short-map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space))
+ ( short-id-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P))
+ ( is-section-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space)) ,
+ ( eq-htpy-map-short-function-Metric-Space
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ ( comp-short-function-Metric-Space
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( P))
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( P))
+ ( short-map-inv-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space)
+ ( short-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space))
+ ( short-id-Metric-Space
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space
+ ( P)))
+ ( is-retraction-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space)))
+
+ iso-metric-pseudocompeletion-pseudometric-completion-Pseudometric-Space :
+ iso-Precategory
+ ( precategory-short-function-Metric-Space)
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ iso-metric-pseudocompeletion-pseudometric-completion-Pseudometric-Space =
+ ( short-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space ,
+ is-iso-map-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space)
+```
+
+### The equality between the metric pseudocompletion of the pseudometric completion of a pseudometric space and its metric pseudocompletion
+
+```agda
+module _
+ {l1 l2 : Level} (P : Pseudometric-Space l1 l2)
+ where
+
+ eq-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space :
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P) =
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ eq-metric-pseudocompletion-pseudometric-completion-Pseudometric-Space =
+ eq-isometric-equiv-Metric-Space'
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( map-equiv-isometric-equiv-iso-short-function-Metric-Space'
+ ( metric-pseudocompletion-pseudometric-completion-Pseudometric-Space P)
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( iso-metric-pseudocompeletion-pseudometric-completion-Pseudometric-Space
+ ( P)))
+```
+
+### Cauchy approximations similar to pointwise quotient of Cauchy approximations in the pseudometric completion are convergent
+
+```agda
+module _
+ {l1 l2 : Level} (P : Pseudometric-Space l1 l2)
+ ( u :
+ cauchy-approximation-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P))
+ where
+
+ is-convergent-has-lift-cauchy-approximation-metric-pseudocompletion-Pseudometric-Space :
+ has-lift-cauchy-approximation-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( u) →
+ is-convergent-cauchy-approximation-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( u)
+ is-convergent-has-lift-cauchy-approximation-metric-pseudocompletion-Pseudometric-Space
+ sim-lift =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( is-convergent-prop-cauchy-approximation-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( u))
+ in do
+ ( v , u~[v]) ← sim-lift
+ let
+ ( lim-v , is-lim-v) =
+ has-limit-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( P)
+ ( v)
+
+ lim-u =
+ map-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( lim-v)
+
+ is-lim[v]-lim-u :
+ is-limit-cauchy-approximation-Metric-Space
+ ( metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P))
+ ( map-metric-quotient-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( v))
+ ( lim-u)
+ is-lim[v]-lim-u =
+ preserves-limit-map-metric-quotient-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( v)
+ ( lim-v)
+ ( is-lim-v)
+
+ [lim-u] =
+ const-cauchy-approximation-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( lim-u)
+
+ u~[lim-u] :
+ sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space P))
+ ( u)
+ ( [lim-u])
+ u~[lim-u] =
+ transitive-sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space P))
+ ( u)
+ ( map-metric-quotient-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( v))
+ ( [lim-u])
+ ( sim-const-is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space P)
+ ( map-metric-quotient-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( v))
+ ( lim-u)
+ ( is-lim[v]-lim-u))
+ ( u~[v])
+ ( ( lim-u) ,
+ ( is-limit-sim-const-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-metric-pseudocompletion-Pseudometric-Space P)
+ ( u)
+ ( lim-u)
+ ( u~[lim-u])))
+
+ iff-has-lift-is-convergent-cauchy-approximation-metric-pseudocompletion-Pseudometric-Space :
+ is-convergent-cauchy-approximation-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( u) ↔
+ has-lift-cauchy-approximation-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( u)
+ pr1
+ iff-has-lift-is-convergent-cauchy-approximation-metric-pseudocompletion-Pseudometric-Space
+ =
+ has-lift-is-convergent-cauchy-approximation-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( u)
+ pr2
+ iff-has-lift-is-convergent-cauchy-approximation-metric-pseudocompletion-Pseudometric-Space
+ =
+ is-convergent-has-lift-cauchy-approximation-metric-pseudocompletion-Pseudometric-Space
+
+ equiv-has-lift-is-convergent-cauchy-approximation-metric-pseudocompletion-Pseudometric-Space :
+ is-convergent-cauchy-approximation-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( u) ≃
+ has-lift-cauchy-approximation-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( u)
+ equiv-has-lift-is-convergent-cauchy-approximation-metric-pseudocompletion-Pseudometric-Space
+ =
+ equiv-iff
+ ( is-convergent-prop-cauchy-approximation-Metric-Space
+ ( metric-pseudocompletion-Pseudometric-Space P)
+ ( u))
+ ( has-lift-prop-cauchy-approximation-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( u))
+ ( has-lift-is-convergent-cauchy-approximation-metric-quotient-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space P)
+ ( u))
+ ( is-convergent-has-lift-cauchy-approximation-metric-pseudocompletion-Pseudometric-Space)
+```
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..f0d82da780
--- /dev/null
+++ b/src/metric-spaces/metric-quotients-of-pseudometric-spaces.lagda.md
@@ -0,0 +1,836 @@
+# 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.addition-positive-rational-numbers
+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.inhabited-subtypes
+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.transport-along-identifications
+open import foundation.universal-property-set-quotients
+open import foundation.universe-levels
+
+open import logic.functoriality-existential-quantification
+
+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-completion-of-pseudometric-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 pseudometric space `M` has an
+[isometry](metric-spaces.isometries-pseudometric-spaces.md) into its metric
+quotient; if `M` is a metric space, this is an
+[isometric equivalence](metric-spaces.equality-of-metric-spaces.md).
+
+Any [short map](metric-spaces.short-functions-pseudometric-spaces.md) (resp.
+isometry) from a pseudometric space to a metric space factors through the metric
+quotient of its domain.
+
+## Definitions
+
+```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
+
+ subtype-class-metric-quotient-Pseudometric-Space :
+ (X : type-metric-quotient-Pseudometric-Space) →
+ subtype l2 (type-Pseudometric-Space M)
+ subtype-class-metric-quotient-Pseudometric-Space =
+ subtype-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+
+ is-in-class-metric-quotient-Pseudometric-Space :
+ (X : type-metric-quotient-Pseudometric-Space) →
+ type-Pseudometric-Space M →
+ UU l2
+ is-in-class-metric-quotient-Pseudometric-Space =
+ is-in-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+
+ 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-class-metric-quotient-Pseudometric-Space 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
+
+### All quotient classes are inhabited
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space l1 l2)
+ (x : type-metric-quotient-Pseudometric-Space A)
+ where
+
+ is-inhabited-class-metric-quotient-Pseudometric-Space :
+ is-inhabited-subtype
+ ( subtype-class-metric-quotient-Pseudometric-Space A x)
+ is-inhabited-class-metric-quotient-Pseudometric-Space =
+ is-inhabited-subtype-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( x)
+```
+
+### 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)
+```
+
+### The 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)
+
+ is-in-class-map-quotient-Pseudometric-Space :
+ (x : type-Pseudometric-Space M) →
+ is-in-class-metric-quotient-Pseudometric-Space
+ ( M)
+ ( map-metric-quotient-Pseudometric-Space x)
+ ( x)
+ is-in-class-map-quotient-Pseudometric-Space =
+ is-in-equivalence-class-quotient-map-set-quotient
+ ( 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-quotient-map-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( x)
+ ( x')
+ ( x≈x')
+
+ y~y' =
+ sim-is-in-equivalence-class-quotient-map-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space M)
+ ( y)
+ ( y')
+ ( y≈y')
+
+ in
+ preserves-neighborhood-right-sim-Pseudometric-Space M y~y' d x'
+ ( preserves-neighborhood-left-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-metric-quotient-Pseudometric-Space :
+ isometry-Pseudometric-Space
+ ( M)
+ ( pseudometric-metric-quotient-Pseudometric-Space M)
+ isometry-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-metric-quotient-Pseudometric-Space M)
+```
+
+### The isometric equivalence between a metric space and the quotient metric space of its pseudometric space
+
+```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)))
+```
+
+### 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)
+
+ compute-map-short-function-metric-quotient-Pseudometric-Space :
+ (X : type-metric-quotient-Pseudometric-Space A) →
+ (x : type-Pseudometric-Space A) →
+ is-in-class-metric-quotient-Pseudometric-Space A X x →
+ map-short-function-metric-quotient-Pseudometric-space X =
+ map-short-function-Pseudometric-Space A (pseudometric-Metric-Space B) f x
+ compute-map-short-function-metric-quotient-Pseudometric-Space X x x∈X =
+ tr
+ ( λ Y →
+ map-short-function-metric-quotient-Pseudometric-space Y =
+ map-short-function-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f)
+ ( x))
+ ( eq-set-quotient-equivalence-class-set-quotient
+ ( equivalence-relation-sim-Pseudometric-Space A)
+ ( X)
+ ( x∈X))
+ ( htpy-map-short-function-metric-quotient-Pseudometric-Space x)
+
+ 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)
+
+ binary-tr
+ ( neighborhood-Metric-Space B d)
+ ( inv
+ ( compute-map-short-function-metric-quotient-Pseudometric-Space
+ ( X)
+ ( x)
+ ( x∈X)))
+ ( inv
+ ( compute-map-short-function-metric-quotient-Pseudometric-Space
+ ( Y)
+ ( y)
+ ( y∈Y)))
+ ( 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-map-short-function-metric-quotient-Pseudometric-Space :
+ short-function-Metric-Space
+ ( metric-quotient-Pseudometric-Space A)
+ ( B)
+ short-map-short-function-metric-quotient-Pseudometric-Space =
+ ( map-short-function-metric-quotient-Pseudometric-space ,
+ is-short-map-short-function-metric-quotient-Pseudometric-Space)
+```
+
+### Induced isometry 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 : isometry-Pseudometric-Space A (pseudometric-Metric-Space B))
+ where
+
+ map-isometry-metric-quotient-Pseudometric-Space :
+ type-function-Metric-Space
+ ( metric-quotient-Pseudometric-Space A)
+ ( B)
+ map-isometry-metric-quotient-Pseudometric-Space =
+ map-short-function-metric-quotient-Pseudometric-space
+ ( A)
+ ( B)
+ ( short-isometry-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f))
+
+ htpy-map-isometry-metric-quotient-Pseudometric-Space :
+ ( ( map-isometry-metric-quotient-Pseudometric-Space) ∘
+ ( map-metric-quotient-Pseudometric-Space A)) ~
+ ( map-isometry-Pseudometric-Space A (pseudometric-Metric-Space B) f)
+ htpy-map-isometry-metric-quotient-Pseudometric-Space =
+ htpy-map-short-function-metric-quotient-Pseudometric-Space
+ ( A)
+ ( B)
+ ( short-isometry-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f))
+
+ compute-map-isometry-metric-quotient-Pseudometric-Space :
+ (X : type-metric-quotient-Pseudometric-Space A) →
+ (x : type-Pseudometric-Space A) →
+ is-in-class-metric-quotient-Pseudometric-Space A X x →
+ map-isometry-metric-quotient-Pseudometric-Space X =
+ map-isometry-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f)
+ ( x)
+ compute-map-isometry-metric-quotient-Pseudometric-Space =
+ compute-map-short-function-metric-quotient-Pseudometric-Space
+ ( A)
+ ( B)
+ ( short-isometry-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f))
+
+ abstract
+ preserves-neighborhood-map-isometry-metric-quotient-Pseudometric-Space :
+ (d : ℚ⁺) →
+ (x y : type-metric-quotient-Pseudometric-Space A) →
+ neighborhood-metric-quotient-Pseudometric-Space
+ ( A)
+ ( d)
+ ( x)
+ ( y) →
+ neighborhood-Metric-Space
+ ( B)
+ ( d)
+ ( map-isometry-metric-quotient-Pseudometric-Space x)
+ ( map-isometry-metric-quotient-Pseudometric-Space y)
+ preserves-neighborhood-map-isometry-metric-quotient-Pseudometric-Space =
+ is-short-map-short-function-metric-quotient-Pseudometric-Space
+ ( A)
+ ( B)
+ ( short-isometry-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f))
+
+ reflects-neighborhood-map-isometry-metric-quotient-Pseudometric-Space :
+ (d : ℚ⁺) →
+ (x y : type-metric-quotient-Pseudometric-Space A) →
+ neighborhood-Metric-Space
+ ( B)
+ ( d)
+ ( map-isometry-metric-quotient-Pseudometric-Space x)
+ ( map-isometry-metric-quotient-Pseudometric-Space y) →
+ neighborhood-metric-quotient-Pseudometric-Space
+ ( A)
+ ( d)
+ ( x)
+ ( y)
+ reflects-neighborhood-map-isometry-metric-quotient-Pseudometric-Space
+ d X Y N⟨fX,fY⟩ (x , x∈X) (y , y∈Y) =
+ reflects-neighborhood-map-isometry-Pseudometric-Space
+ ( A)
+ ( pseudometric-Metric-Space B)
+ ( f)
+ ( d)
+ ( x)
+ ( y)
+ ( binary-tr
+ ( neighborhood-Metric-Space B d)
+ ( compute-map-isometry-metric-quotient-Pseudometric-Space X x x∈X)
+ ( compute-map-isometry-metric-quotient-Pseudometric-Space Y y y∈Y)
+ ( N⟨fX,fY⟩))
+
+ is-isometry-map-isometry-metric-quotient-Pseudometric-Space :
+ is-isometry-Metric-Space
+ ( metric-quotient-Pseudometric-Space A)
+ ( B)
+ ( map-isometry-metric-quotient-Pseudometric-Space)
+ is-isometry-map-isometry-metric-quotient-Pseudometric-Space d x y =
+ ( preserves-neighborhood-map-isometry-metric-quotient-Pseudometric-Space
+ ( d)
+ ( x)
+ ( y) ,
+ reflects-neighborhood-map-isometry-metric-quotient-Pseudometric-Space
+ ( d)
+ ( x)
+ ( y))
+
+ isometry-map-isometry-metric-quotient-Pseudometric-Space :
+ isometry-Metric-Space
+ ( metric-quotient-Pseudometric-Space A)
+ ( B)
+ isometry-map-isometry-metric-quotient-Pseudometric-Space =
+ ( map-isometry-metric-quotient-Pseudometric-Space ,
+ is-isometry-map-isometry-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 c507203765..25fbe2e982 100644
--- a/src/metric-spaces/metric-spaces.lagda.md
+++ b/src/metric-spaces/metric-spaces.lagda.md
@@ -21,6 +21,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
@@ -34,6 +35,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
@@ -340,6 +342,63 @@ 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
+
+ abstract
+ 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))
+```
+
## See also
- Metric spaces that _are_ defined by a distance function are defined in
diff --git a/src/metric-spaces/precategory-of-metric-spaces-and-short-functions.lagda.md b/src/metric-spaces/precategory-of-metric-spaces-and-short-functions.lagda.md
index 564a2b9385..6d3251395d 100644
--- a/src/metric-spaces/precategory-of-metric-spaces-and-short-functions.lagda.md
+++ b/src/metric-spaces/precategory-of-metric-spaces-and-short-functions.lagda.md
@@ -232,6 +232,7 @@ module _
{l1 l2 : Level}
(A B : Metric-Space l1 l2)
where
+
equiv-isometric-equiv-iso-short-function-Metric-Space' :
iso-Precategory precategory-short-function-Metric-Space A B ≃
isometric-equiv-Metric-Space' A B
@@ -239,6 +240,13 @@ module _
( equiv-tot
( equiv-is-isometric-equiv-is-iso-short-function-Metric-Space A B)) ∘e
( associative-Σ)
+
+ map-equiv-isometric-equiv-iso-short-function-Metric-Space' :
+ iso-Precategory precategory-short-function-Metric-Space A B →
+ isometric-equiv-Metric-Space' A B
+ map-equiv-isometric-equiv-iso-short-function-Metric-Space' =
+ map-equiv
+ ( equiv-isometric-equiv-iso-short-function-Metric-Space')
```
## See also
diff --git a/src/metric-spaces/pseudometric-completion-of-metric-spaces.lagda.md b/src/metric-spaces/pseudometric-completion-of-metric-spaces.lagda.md
new file mode 100644
index 0000000000..57328439f2
--- /dev/null
+++ b/src/metric-spaces/pseudometric-completion-of-metric-spaces.lagda.md
@@ -0,0 +1,437 @@
+# The pseudometric completion of a metric space
+
+```agda
+module metric-spaces.pseudometric-completion-of-metric-spaces where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.addition-positive-rational-numbers
+open import elementary-number-theory.positive-rational-numbers
+open import elementary-number-theory.strict-inequality-rational-numbers
+
+open import foundation.action-on-identifications-binary-functions
+open import foundation.action-on-identifications-functions
+open import foundation.binary-relations
+open import foundation.binary-transport
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.homotopies
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.transport-along-identifications
+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.complete-metric-spaces
+open import metric-spaces.convergent-cauchy-approximations-metric-spaces
+open import metric-spaces.functions-pseudometric-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-completion-of-pseudometric-spaces
+open import metric-spaces.pseudometric-spaces
+open import metric-spaces.rational-neighborhood-relations
+open import metric-spaces.short-functions-pseudometric-spaces
+open import metric-spaces.similarity-of-elements-pseudometric-spaces
+```
+
+
+
+## Idea
+
+The
+{{#concept "pseudometric completion" Disambiguation="of a metric space" Agda=pseudometric-completion-Metric-Space}}
+of a [metric space](metric-spaces.metric-spaces.md) `M` is the
+[pseudometric completion](metric-spaces.pseudometric-completion-of-pseudometric-spaces.md)
+of its underlying [pseudometric space](metric-spaces.pseudometric-spaces.md):
+the pseudometric space of
+[Cauchy approximations](metric-spaces.cauchy-approximations-pseudometric-spaces.md)
+in `M` where two Cauchy approximations `x` and `y` are in a
+[`d`-neighborhood](metric-spaces.rational-neighborhood-relations.md) of one
+another if for all `δ ε : ℚ⁺`, `x δ` and `y ε` are in a
+`(δ + ε + d)`-neighborhood of one another in `M`.
+
+Any Cauchy approximation in the pseudometric completion has a
+[limit](metric-spaces.limits-of-cauchy-approximations-pseudometric-spaces.md).
+If the metric space is [complete](metric-spaces.complete-metric-spaces.md), it
+is a [retract](foundation.retracts-of-types.md) of its pseudometric completion.
+
+## Definition
+
+### The pseudometric completion of a metric space
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ pseudometric-completion-Metric-Space :
+ Pseudometric-Space (l1 ⊔ l2) l2
+ pseudometric-completion-Metric-Space =
+ pseudometric-completion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+```
+
+### The pseudometric completion neighborhood relation on the type of Cauchy approximations in a pseudometric space
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ neighborhood-prop-pseudometric-completion-Metric-Space :
+ Rational-Neighborhood-Relation l2
+ (cauchy-approximation-Metric-Space M)
+ neighborhood-prop-pseudometric-completion-Metric-Space =
+ neighborhood-prop-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+
+ neighborhood-pseudometric-completion-Metric-Space :
+ ℚ⁺ → Relation l2 (cauchy-approximation-Metric-Space M)
+ neighborhood-pseudometric-completion-Metric-Space =
+ neighborhood-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+```
+
+## Properties
+
+### The neighborhood relation is reflexive
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ abstract
+ is-reflexive-neighborhood-pseudometric-completion-Metric-Space :
+ (d : ℚ⁺) (x : cauchy-approximation-Metric-Space M) →
+ neighborhood-pseudometric-completion-Metric-Space M d x x
+ is-reflexive-neighborhood-pseudometric-completion-Metric-Space =
+ is-reflexive-neighborhood-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+```
+
+### The neighborhood relation is symmetric
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ abstract
+ is-symmetric-neighborhood-pseudometric-completion-Metric-Space :
+ (d : ℚ⁺) (x y : cauchy-approximation-Metric-Space M) →
+ neighborhood-pseudometric-completion-Metric-Space M d x y →
+ neighborhood-pseudometric-completion-Metric-Space M d y x
+ is-symmetric-neighborhood-pseudometric-completion-Metric-Space =
+ is-symmetric-neighborhood-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+```
+
+### The neighborhood relation is triangular
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ abstract
+ is-triangular-neighborhood-pseudometric-completion-Metric-Space :
+ (x y z : cauchy-approximation-Metric-Space M) →
+ (dxy dyz : ℚ⁺) →
+ neighborhood-pseudometric-completion-Metric-Space M dyz y z →
+ neighborhood-pseudometric-completion-Metric-Space M dxy x y →
+ neighborhood-pseudometric-completion-Metric-Space
+ ( M)
+ ( dxy +ℚ⁺ dyz)
+ ( x)
+ ( z)
+ is-triangular-neighborhood-pseudometric-completion-Metric-Space =
+ is-triangular-neighborhood-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+```
+
+### The neighborhood relation is saturated
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ abstract
+ is-saturated-neighborhood-pseudometric-completion-Metric-Space :
+ ( ε : ℚ⁺) (x y : cauchy-approximation-Metric-Space M) →
+ ( (δ : ℚ⁺) →
+ neighborhood-pseudometric-completion-Metric-Space
+ ( M)
+ ( ε +ℚ⁺ δ)
+ ( x)
+ ( y)) →
+ neighborhood-pseudometric-completion-Metric-Space M ε x y
+ is-saturated-neighborhood-pseudometric-completion-Metric-Space =
+ is-saturated-neighborhood-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+```
+
+### The isometry from a metric space to its pseudometric completion
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ isometry-pseudometric-completion-Metric-Space :
+ isometry-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+ ( pseudometric-completion-Metric-Space M)
+ isometry-pseudometric-completion-Metric-Space =
+ isometry-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+
+ map-pseudometric-completion-Metric-Space :
+ type-Metric-Space M → cauchy-approximation-Metric-Space M
+ map-pseudometric-completion-Metric-Space =
+ map-isometry-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+ ( pseudometric-completion-Metric-Space M)
+ ( isometry-pseudometric-completion-Metric-Space)
+
+ abstract
+ is-isometry-map-pseudometric-completion-Metric-Space :
+ is-isometry-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+ ( pseudometric-completion-Metric-Space M)
+ ( map-pseudometric-completion-Metric-Space)
+ is-isometry-map-pseudometric-completion-Metric-Space =
+ is-isometry-map-isometry-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+ ( pseudometric-completion-Metric-Space M)
+ ( isometry-pseudometric-completion-Metric-Space)
+```
+
+### Convergent Cauchy approximations are similar to constant Cauchy approximations in the pseudometric completion
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ (u : cauchy-approximation-Metric-Space M)
+ (x : type-Metric-Space M)
+ where
+
+ abstract
+ sim-const-is-limit-cauchy-approximation-Metric-Space :
+ is-limit-cauchy-approximation-Metric-Space M u x →
+ sim-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( u)
+ ( const-cauchy-approximation-Metric-Space M x)
+ sim-const-is-limit-cauchy-approximation-Metric-Space H d α β =
+ monotonic-neighborhood-Metric-Space
+ ( M)
+ ( map-cauchy-approximation-Metric-Space M u α)
+ ( x)
+ ( α +ℚ⁺ β)
+ ( α +ℚ⁺ β +ℚ⁺ d)
+ ( le-left-add-ℚ⁺ (α +ℚ⁺ β) d)
+ ( H α β)
+
+ is-limit-sim-const-cauchy-approximation-Metric-Space :
+ sim-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( u)
+ ( const-cauchy-approximation-Metric-Space M x) →
+ is-limit-cauchy-approximation-Metric-Space M u x
+ is-limit-sim-const-cauchy-approximation-Metric-Space H α β =
+ saturated-neighborhood-Metric-Space
+ ( M)
+ ( α +ℚ⁺ β)
+ ( map-cauchy-approximation-Metric-Space M u α)
+ ( x)
+ ( λ d → H d α β)
+```
+
+### Any Cauchy approximation in the pseudometric completion of a metric space has a limit
+
+```agda
+module _
+ { l1 l2 : Level} (M : Metric-Space l1 l2)
+ ( U :
+ cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M))
+ where
+
+ has-limit-cauchy-approximation-pseudometric-completion-Metric-Space :
+ Σ ( cauchy-approximation-Metric-Space M)
+ ( is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( U))
+ has-limit-cauchy-approximation-pseudometric-completion-Metric-Space =
+ has-limit-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+ ( U)
+
+ lim-cauchy-approximation-pseudometric-completion-Metric-Space :
+ cauchy-approximation-Metric-Space M
+ lim-cauchy-approximation-pseudometric-completion-Metric-Space =
+ pr1 has-limit-cauchy-approximation-pseudometric-completion-Metric-Space
+
+ is-limit-lim-cauchy-approximation-pseudometric-completion-Metric-Space :
+ is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( U)
+ ( lim-cauchy-approximation-pseudometric-completion-Metric-Space)
+ is-limit-lim-cauchy-approximation-pseudometric-completion-Metric-Space =
+ pr2 has-limit-cauchy-approximation-pseudometric-completion-Metric-Space
+```
+
+### The isometry from a Cauchy approximation in the pseudometric completion to its limit
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ where
+
+ isometry-lim-cauchy-approximation-pseudometric-completion-Metric-Space :
+ isometry-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M))
+ ( pseudometric-completion-Metric-Space M)
+ isometry-lim-cauchy-approximation-pseudometric-completion-Metric-Space =
+ isometry-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-Metric-Space M)
+```
+
+### Any complete metric space is a short retract of its pseudometric completion
+
+```agda
+module _
+ {l1 l2 : Level} (M : Metric-Space l1 l2)
+ (is-complete-M : is-complete-Metric-Space M)
+ where
+
+ map-lim-pseudometric-completion-is-complete-Metric-Space :
+ type-function-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( pseudometric-Metric-Space M)
+ map-lim-pseudometric-completion-is-complete-Metric-Space =
+ limit-cauchy-approximation-Complete-Metric-Space
+ ( M , is-complete-M)
+
+ is-limit-map-lim-pseudometric-completion-is-complete-Metric-Space :
+ (u : cauchy-approximation-Metric-Space M) →
+ is-limit-cauchy-approximation-Metric-Space
+ ( M)
+ ( u)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space u)
+ is-limit-map-lim-pseudometric-completion-is-complete-Metric-Space =
+ is-limit-limit-cauchy-approximation-Complete-Metric-Space
+ ( M , is-complete-M)
+
+ sim-const-map-lim-pseudometric-completion-is-complete-Metric-Space :
+ (u : cauchy-approximation-Metric-Space M) →
+ sim-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( u)
+ ( const-cauchy-approximation-Metric-Space
+ ( M)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space u))
+ sim-const-map-lim-pseudometric-completion-is-complete-Metric-Space u =
+ sim-const-is-limit-cauchy-approximation-Metric-Space
+ ( M)
+ ( u)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space u)
+ ( is-limit-map-lim-pseudometric-completion-is-complete-Metric-Space u)
+
+ is-short-map-lim-pseudometric-completion-is-complete-Metric-Space :
+ is-short-function-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( pseudometric-Metric-Space M)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space)
+ is-short-map-lim-pseudometric-completion-is-complete-Metric-Space d x y Nxy =
+ saturated-neighborhood-Metric-Space
+ ( M)
+ ( d)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space x)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space y)
+ ( lemma-saturated-neighborhood-map-lim)
+ where
+
+ neighborhood-const-lim-x-y :
+ neighborhood-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( d)
+ ( const-cauchy-approximation-Metric-Space M
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space x))
+ ( const-cauchy-approximation-Metric-Space M
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space y))
+ neighborhood-const-lim-x-y =
+ preserves-neighborhood-sim-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ { x}
+ { const-cauchy-approximation-Metric-Space
+ ( M)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space x)}
+ { y}
+ { const-cauchy-approximation-Metric-Space
+ ( M)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space y)}
+ ( sim-const-map-lim-pseudometric-completion-is-complete-Metric-Space
+ ( x))
+ ( sim-const-map-lim-pseudometric-completion-is-complete-Metric-Space
+ ( y))
+ ( d)
+ ( Nxy)
+
+ lemma-saturated-neighborhood-map-lim :
+ (δ : ℚ⁺) →
+ neighborhood-Metric-Space
+ ( M)
+ ( d +ℚ⁺ δ)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space x)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space y)
+ lemma-saturated-neighborhood-map-lim δ =
+ tr
+ ( is-upper-bound-dist-Metric-Space
+ ( M)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space x)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space y))
+ ( ap (add-ℚ⁺' d) (eq-add-split-ℚ⁺ δ) ∙ commutative-add-ℚ⁺ δ d)
+ ( neighborhood-const-lim-x-y
+ ( left-summand-split-ℚ⁺ δ)
+ ( right-summand-split-ℚ⁺ δ))
+
+ short-map-lim-pseudometric-completion-is-complete-Metric-Space :
+ short-function-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( pseudometric-Metric-Space M)
+ short-map-lim-pseudometric-completion-is-complete-Metric-Space =
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space ,
+ is-short-map-lim-pseudometric-completion-is-complete-Metric-Space)
+
+ is-retraction-map-pseudometric-completion-is-complete-Metric-Space :
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space ∘
+ map-pseudometric-completion-Metric-Space M) ~
+ ( id)
+ is-retraction-map-pseudometric-completion-is-complete-Metric-Space =
+ is-retraction-limit-cauchy-approximation-Complete-Metric-Space
+ ( M , is-complete-M)
+
+ sim-map-lim-pseudometric-completion-is-complete-Metric-Space :
+ (u : cauchy-approximation-Metric-Space M) →
+ sim-Pseudometric-Space
+ ( pseudometric-completion-Metric-Space M)
+ ( u)
+ ( map-pseudometric-completion-Metric-Space
+ ( M)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space u))
+ sim-map-lim-pseudometric-completion-is-complete-Metric-Space u =
+ sim-const-is-limit-cauchy-approximation-Metric-Space
+ ( M)
+ ( u)
+ ( map-lim-pseudometric-completion-is-complete-Metric-Space u)
+ ( is-limit-map-lim-pseudometric-completion-is-complete-Metric-Space u)
+```
diff --git a/src/metric-spaces/pseudometric-completion-of-pseudometric-spaces.lagda.md b/src/metric-spaces/pseudometric-completion-of-pseudometric-spaces.lagda.md
new file mode 100644
index 0000000000..e7489c92e2
--- /dev/null
+++ b/src/metric-spaces/pseudometric-completion-of-pseudometric-spaces.lagda.md
@@ -0,0 +1,766 @@
+# The pseudometric completion of a pseudometric space
+
+```agda
+{-# OPTIONS --lossy-unification #-}
+
+module metric-spaces.pseudometric-completion-of-pseudometric-spaces where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.addition-positive-rational-numbers
+open import elementary-number-theory.positive-rational-numbers
+open import elementary-number-theory.strict-inequality-positive-rational-numbers
+open import elementary-number-theory.strict-inequality-rational-numbers
+
+open import foundation.action-on-identifications-binary-functions
+open import foundation.action-on-identifications-functions
+open import foundation.binary-relations
+open import foundation.binary-transport
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.homotopies
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.transport-along-identifications
+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.complete-metric-spaces
+open import metric-spaces.convergent-cauchy-approximations-metric-spaces
+open import metric-spaces.functions-pseudometric-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-pseudometric-spaces
+open import metric-spaces.similarity-of-elements-pseudometric-spaces
+```
+
+
+
+## Idea
+
+The
+{{#concept "pseudometric completion" Disambiguation="of a pseudometric space" Agda=pseudometric-completion-Pseudometric-Space}}
+of a [pseudometric space](metric-spaces.pseudometric-spaces.md) `M` is the
+pseudometric space of
+[Cauchy approximations](metric-spaces.cauchy-approximations-pseudometric-spaces.md)
+in `M` where two Cauchy approximations `x` and `y` are in a
+[`d`-neighborhood](metric-spaces.rational-neighborhood-relations.md) of one
+another if for all `δ ε : ℚ⁺`, `x δ` and `y ε` are in a
+`(δ + ε + d)`-neighborhood of one another in `M`.
+
+Any Cauchy approximation in the pseudometric completion has a
+[limit](metric-spaces.limits-of-cauchy-approximations-pseudometric-spaces.md).
+
+## Definition
+
+### The pseudometric completion neighborhood relation on the type of Cauchy approximations in a pseudometric space
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ neighborhood-prop-pseudometric-completion-Pseudometric-Space :
+ Rational-Neighborhood-Relation l2
+ (cauchy-approximation-Pseudometric-Space M)
+ neighborhood-prop-pseudometric-completion-Pseudometric-Space
+ d x y =
+ Π-Prop
+ ( ℚ⁺)
+ ( λ δ →
+ Π-Prop
+ ( ℚ⁺)
+ ( λ ε →
+ neighborhood-prop-Pseudometric-Space
+ ( M)
+ ( δ +ℚ⁺ ε +ℚ⁺ d)
+ ( map-cauchy-approximation-Pseudometric-Space M x δ)
+ ( map-cauchy-approximation-Pseudometric-Space M y ε)))
+
+ neighborhood-pseudometric-completion-Pseudometric-Space :
+ ℚ⁺ → Relation l2 (cauchy-approximation-Pseudometric-Space M)
+ neighborhood-pseudometric-completion-Pseudometric-Space d x y =
+ type-Prop
+ ( neighborhood-prop-pseudometric-completion-Pseudometric-Space
+ ( d)
+ ( x)
+ ( y))
+```
+
+## Properties
+
+### The neighborhood relation is reflexive
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ abstract
+ is-reflexive-neighborhood-pseudometric-completion-Pseudometric-Space :
+ (d : ℚ⁺) (x : cauchy-approximation-Pseudometric-Space M) →
+ neighborhood-pseudometric-completion-Pseudometric-Space M d x x
+ is-reflexive-neighborhood-pseudometric-completion-Pseudometric-Space
+ d x δ ε =
+ let
+ xδ = map-cauchy-approximation-Pseudometric-Space M x δ
+ xε = map-cauchy-approximation-Pseudometric-Space M x ε
+ in
+ monotonic-neighborhood-Pseudometric-Space M xδ xε
+ ( δ +ℚ⁺ ε)
+ ( δ +ℚ⁺ ε +ℚ⁺ d)
+ ( le-right-add-rational-ℚ⁺ _ d)
+ ( is-cauchy-approximation-map-cauchy-approximation-Pseudometric-Space
+ ( M)
+ ( x)
+ ( δ)
+ ( ε))
+```
+
+### The neighborhood relation is symmetric
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ abstract
+ is-symmetric-neighborhood-pseudometric-completion-Pseudometric-Space :
+ (d : ℚ⁺) (x y : cauchy-approximation-Pseudometric-Space M) →
+ neighborhood-pseudometric-completion-Pseudometric-Space M d x y →
+ neighborhood-pseudometric-completion-Pseudometric-Space M d y x
+ is-symmetric-neighborhood-pseudometric-completion-Pseudometric-Space
+ d x y Ndxy δ ε =
+ let
+ xε = map-cauchy-approximation-Pseudometric-Space M x ε
+ yδ = map-cauchy-approximation-Pseudometric-Space M y δ
+ in
+ tr
+ ( λ d' → neighborhood-Pseudometric-Space M d' yδ xε)
+ ( ap (_+ℚ⁺ d) (commutative-add-ℚ⁺ ε δ))
+ ( symmetric-neighborhood-Pseudometric-Space M _ xε yδ (Ndxy ε δ))
+```
+
+### The neighborhood relation is triangular
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ abstract
+ is-triangular-neighborhood-pseudometric-completion-Pseudometric-Space :
+ (x y z : cauchy-approximation-Pseudometric-Space M) →
+ (dxy dyz : ℚ⁺) →
+ neighborhood-pseudometric-completion-Pseudometric-Space M dyz y z →
+ neighborhood-pseudometric-completion-Pseudometric-Space M dxy x y →
+ neighborhood-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( dxy +ℚ⁺ dyz)
+ ( x)
+ ( z)
+ is-triangular-neighborhood-pseudometric-completion-Pseudometric-Space
+ x y z dxy dyz Ndyz Ndxy δ ε =
+ let
+ xδ = map-cauchy-approximation-Pseudometric-Space M x δ
+ zε = map-cauchy-approximation-Pseudometric-Space M z ε
+ in
+ saturated-neighborhood-Pseudometric-Space
+ ( M)
+ ( δ +ℚ⁺ ε +ℚ⁺ (dxy +ℚ⁺ dyz))
+ ( xδ)
+ ( zε)
+ ( λ θ →
+ let
+ (θ₂ , θ₂+θ₂<θ) = bound-double-le-ℚ⁺ θ
+ (θa , θb , θa+θb=θ₂) = split-ℚ⁺ θ₂
+ yθa = map-cauchy-approximation-Pseudometric-Space M y θa
+ in
+ monotonic-neighborhood-Pseudometric-Space
+ ( M)
+ ( xδ)
+ ( zε)
+ ( (δ +ℚ⁺ θa +ℚ⁺ dxy +ℚ⁺ θb) +ℚ⁺ (θa +ℚ⁺ ε +ℚ⁺ dyz +ℚ⁺ θb))
+ ( δ +ℚ⁺ ε +ℚ⁺ (dxy +ℚ⁺ dyz) +ℚ⁺ θ)
+ ( tr
+ ( λ q → le-ℚ⁺ q (δ +ℚ⁺ ε +ℚ⁺ (dxy +ℚ⁺ dyz) +ℚ⁺ θ))
+ ( equational-reasoning
+ ((δ +ℚ⁺ ε) +ℚ⁺ (dxy +ℚ⁺ dyz)) +ℚ⁺ (θ₂ +ℚ⁺ θ₂)
+ =
+ ((δ +ℚ⁺ dxy) +ℚ⁺ (ε +ℚ⁺ dyz)) +ℚ⁺
+ ((θa +ℚ⁺ θb) +ℚ⁺ (θa +ℚ⁺ θb))
+ by
+ ap-add-ℚ⁺
+ ( interchange-law-add-add-ℚ⁺ δ ε dxy dyz)
+ ( inv (ap-add-ℚ⁺ θa+θb=θ₂ θa+θb=θ₂))
+ =
+ ((δ +ℚ⁺ dxy) +ℚ⁺ (θa +ℚ⁺ θb)) +ℚ⁺
+ ((ε +ℚ⁺ dyz) +ℚ⁺ (θa +ℚ⁺ θb))
+ by interchange-law-add-add-ℚ⁺ _ _ _ _
+ =
+ ((δ +ℚ⁺ θa) +ℚ⁺ (dxy +ℚ⁺ θb)) +ℚ⁺
+ ((ε +ℚ⁺ θa) +ℚ⁺ (dyz +ℚ⁺ θb))
+ by
+ ap-add-ℚ⁺
+ ( interchange-law-add-add-ℚ⁺ _ _ _ _)
+ ( interchange-law-add-add-ℚ⁺ _ _ _ _)
+ =
+ (δ +ℚ⁺ θa +ℚ⁺ dxy +ℚ⁺ θb) +ℚ⁺
+ ((θa +ℚ⁺ ε) +ℚ⁺ (dyz +ℚ⁺ θb))
+ by
+ ap-add-ℚ⁺
+ ( inv (associative-add-ℚ⁺ _ _ _))
+ ( ap-add-ℚ⁺ (commutative-add-ℚ⁺ _ _) refl)
+ = (δ +ℚ⁺ θa +ℚ⁺ dxy +ℚ⁺ θb) +ℚ⁺ (θa +ℚ⁺ ε +ℚ⁺ dyz +ℚ⁺ θb)
+ by ap-add-ℚ⁺ refl (inv (associative-add-ℚ⁺ _ _ _)))
+ ( preserves-le-right-add-ℚ
+ ( rational-ℚ⁺ (δ +ℚ⁺ ε +ℚ⁺ (dxy +ℚ⁺ dyz)))
+ ( rational-ℚ⁺ (θ₂ +ℚ⁺ θ₂))
+ ( rational-ℚ⁺ θ)
+ ( θ₂+θ₂<θ)))
+ ( triangular-neighborhood-Pseudometric-Space M xδ yθa zε
+ ( δ +ℚ⁺ θa +ℚ⁺ dxy +ℚ⁺ θb)
+ ( θa +ℚ⁺ ε +ℚ⁺ dyz +ℚ⁺ θb)
+ ( monotonic-neighborhood-Pseudometric-Space M yθa zε
+ ( θa +ℚ⁺ ε +ℚ⁺ dyz)
+ ( θa +ℚ⁺ ε +ℚ⁺ dyz +ℚ⁺ θb)
+ ( le-left-add-ℚ⁺ (θa +ℚ⁺ ε +ℚ⁺ dyz) θb)
+ ( Ndyz θa ε))
+ ( monotonic-neighborhood-Pseudometric-Space M xδ yθa
+ ( δ +ℚ⁺ θa +ℚ⁺ dxy)
+ ( δ +ℚ⁺ θa +ℚ⁺ dxy +ℚ⁺ θb)
+ ( le-left-add-ℚ⁺ (δ +ℚ⁺ θa +ℚ⁺ dxy) θb)
+ ( Ndxy δ θa))))
+```
+
+### The neighborhood relation is saturated
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ abstract
+ is-saturated-neighborhood-pseudometric-completion-Pseudometric-Space :
+ ( ε : ℚ⁺) (x y : cauchy-approximation-Pseudometric-Space M) →
+ ( (δ : ℚ⁺) →
+ neighborhood-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( ε +ℚ⁺ δ)
+ ( x)
+ ( y)) →
+ neighborhood-pseudometric-completion-Pseudometric-Space M ε x y
+ is-saturated-neighborhood-pseudometric-completion-Pseudometric-Space
+ d x y H δ ε =
+ let
+ xδ = map-cauchy-approximation-Pseudometric-Space M x δ
+ yε = map-cauchy-approximation-Pseudometric-Space M y ε
+ in
+ saturated-neighborhood-Pseudometric-Space M
+ ( δ +ℚ⁺ ε +ℚ⁺ d)
+ ( xδ)
+ ( yε)
+ ( λ θ →
+ tr
+ ( λ η → neighborhood-Pseudometric-Space M η xδ yε)
+ ( inv (associative-add-ℚ⁺ _ _ _))
+ ( H θ δ ε))
+```
+
+### The pseudometric completion of a pseudometric space
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ pseudometric-completion-Pseudometric-Space :
+ Pseudometric-Space (l1 ⊔ l2) l2
+ pseudometric-completion-Pseudometric-Space =
+ ( cauchy-approximation-Pseudometric-Space M ,
+ neighborhood-prop-pseudometric-completion-Pseudometric-Space M ,
+ is-reflexive-neighborhood-pseudometric-completion-Pseudometric-Space M ,
+ is-symmetric-neighborhood-pseudometric-completion-Pseudometric-Space M ,
+ is-triangular-neighborhood-pseudometric-completion-Pseudometric-Space M ,
+ is-saturated-neighborhood-pseudometric-completion-Pseudometric-Space M)
+```
+
+### The isometry from a pseudometric space to its pseudometric completion
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ map-pseudometric-completion-Pseudometric-Space :
+ type-Pseudometric-Space M → cauchy-approximation-Pseudometric-Space M
+ map-pseudometric-completion-Pseudometric-Space =
+ const-cauchy-approximation-Pseudometric-Space M
+
+ abstract
+ preserves-neighborhood-map-pseudometric-completion-Pseudometric-Space :
+ (d : ℚ⁺) (x y : type-Pseudometric-Space M) →
+ neighborhood-Pseudometric-Space M d x y →
+ neighborhood-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( d)
+ ( map-pseudometric-completion-Pseudometric-Space x)
+ ( map-pseudometric-completion-Pseudometric-Space y)
+ preserves-neighborhood-map-pseudometric-completion-Pseudometric-Space
+ d x y Nxy δ ε =
+ monotonic-neighborhood-Pseudometric-Space M x y d (δ +ℚ⁺ ε +ℚ⁺ d)
+ ( le-right-add-ℚ⁺ (δ +ℚ⁺ ε) d)
+ ( Nxy)
+
+ reflects-neighborhood-map-pseudometric-completion-Pseudometric-Space :
+ (d : ℚ⁺) (x y : type-Pseudometric-Space M) →
+ neighborhood-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( d)
+ ( map-pseudometric-completion-Pseudometric-Space x)
+ ( map-pseudometric-completion-Pseudometric-Space y) →
+ neighborhood-Pseudometric-Space M d x y
+ reflects-neighborhood-map-pseudometric-completion-Pseudometric-Space
+ d x y Nxy =
+ saturated-neighborhood-Pseudometric-Space M d x y
+ ( λ δ →
+ let
+ (δ₁ , δ₂ , δ₁+δ₂=δ) = split-ℚ⁺ δ
+ in
+ tr
+ ( λ ε → neighborhood-Pseudometric-Space M ε x y)
+ ( commutative-add-ℚ⁺ _ _ ∙ ap (d +ℚ⁺_) δ₁+δ₂=δ)
+ ( Nxy δ₁ δ₂))
+
+ is-isometry-map-pseudometric-completion-Pseudometric-Space :
+ is-isometry-Pseudometric-Space
+ ( M)
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( map-pseudometric-completion-Pseudometric-Space)
+ is-isometry-map-pseudometric-completion-Pseudometric-Space d x y =
+ ( ( preserves-neighborhood-map-pseudometric-completion-Pseudometric-Space
+ ( d)
+ ( x)
+ ( y)) ,
+ (reflects-neighborhood-map-pseudometric-completion-Pseudometric-Space
+ ( d)
+ ( x)
+ ( y)))
+
+ isometry-pseudometric-completion-Pseudometric-Space :
+ isometry-Pseudometric-Space
+ ( M)
+ ( pseudometric-completion-Pseudometric-Space M)
+ isometry-pseudometric-completion-Pseudometric-Space =
+ ( map-pseudometric-completion-Pseudometric-Space ,
+ is-isometry-map-pseudometric-completion-Pseudometric-Space)
+
+ short-map-pseudometric-completion-Pseudometric-Space :
+ short-function-Pseudometric-Space
+ ( M)
+ ( pseudometric-completion-Pseudometric-Space M)
+ short-map-pseudometric-completion-Pseudometric-Space =
+ short-isometry-Pseudometric-Space
+ ( M)
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( isometry-pseudometric-completion-Pseudometric-Space)
+```
+
+### Convergent Cauchy approximations are similar to constant Cauchy approximations in the pseudometric completion
+
+```agda
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ (u : cauchy-approximation-Pseudometric-Space M)
+ (x : type-Pseudometric-Space M)
+ where
+
+ abstract
+ sim-const-is-limit-cauchy-approximation-Pseudometric-Space :
+ is-limit-cauchy-approximation-Pseudometric-Space M u x →
+ sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( u)
+ ( const-cauchy-approximation-Pseudometric-Space M x)
+ sim-const-is-limit-cauchy-approximation-Pseudometric-Space H d α β =
+ monotonic-neighborhood-Pseudometric-Space
+ ( M)
+ ( map-cauchy-approximation-Pseudometric-Space M u α)
+ ( x)
+ ( α +ℚ⁺ β)
+ ( α +ℚ⁺ β +ℚ⁺ d)
+ ( le-left-add-ℚ⁺ (α +ℚ⁺ β) d)
+ ( H α β)
+
+ is-limit-sim-const-cauchy-approximation-Pseudometric-Space :
+ sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( u)
+ ( const-cauchy-approximation-Pseudometric-Space M x) →
+ is-limit-cauchy-approximation-Pseudometric-Space M u x
+ is-limit-sim-const-cauchy-approximation-Pseudometric-Space H α β =
+ saturated-neighborhood-Pseudometric-Space
+ ( M)
+ ( α +ℚ⁺ β)
+ ( map-cauchy-approximation-Pseudometric-Space M u α)
+ ( x)
+ ( λ d → H d α β)
+```
+
+### Any Cauchy approximation in the pseudometric completion of a pseudometric space has a limit
+
+```agda
+module _
+ { l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ ( U :
+ cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M))
+ where
+
+ map-cauchy-approximation-pseudometric-completion-Pseudometric-Space :
+ ℚ⁺ → ℚ⁺ → type-Pseudometric-Space M
+ map-cauchy-approximation-pseudometric-completion-Pseudometric-Space ε =
+ map-cauchy-approximation-Pseudometric-Space M
+ ( map-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( U)
+ ( ε))
+
+ is-cauchy-map-cauchy-approximation-pseudometric-completion-Pseudometric-Space :
+ (δ ε d₁ d₂ : ℚ⁺) →
+ neighborhood-Pseudometric-Space
+ ( M)
+ ( d₁ +ℚ⁺ d₂ +ℚ⁺ (δ +ℚ⁺ ε))
+ ( map-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( δ)
+ ( d₁))
+ ( map-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( ε)
+ ( d₂))
+ is-cauchy-map-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ =
+ is-cauchy-approximation-map-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( U)
+
+ map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space :
+ ℚ⁺ → type-Pseudometric-Space M
+ map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space d =
+ let
+ (d₁ , d₂ , _) = split-ℚ⁺ d
+ in
+ map-cauchy-approximation-pseudometric-completion-Pseudometric-Space d₂ d₁
+
+ is-cauchy-map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space :
+ is-cauchy-approximation-Pseudometric-Space
+ ( M)
+ ( map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space)
+ is-cauchy-map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ δ ε =
+ let
+ (δ₁ , δ₂ , δ₁+δ₂=δ) = split-ℚ⁺ δ
+ (ε₁ , ε₂ , ε₁+ε₂=ε) = split-ℚ⁺ ε
+
+ lemma-δ+ε :
+ (δ₁ +ℚ⁺ ε₁ +ℚ⁺ (δ₂ +ℚ⁺ ε₂)) = δ +ℚ⁺ ε
+ lemma-δ+ε =
+ ( interchange-law-add-add-ℚ⁺
+ ( δ₁)
+ ( ε₁)
+ ( δ₂)
+ ( ε₂)) ∙
+ ( ap-binary
+ ( add-ℚ⁺)
+ ( δ₁+δ₂=δ)
+ ( ε₁+ε₂=ε))
+ in
+ tr
+ ( is-upper-bound-dist-Pseudometric-Space
+ ( M)
+ ( map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( δ))
+ ( map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( ε)))
+ ( lemma-δ+ε)
+ ( is-cauchy-map-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ _ _ _ _)
+
+ lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space :
+ cauchy-approximation-Pseudometric-Space M
+ lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space =
+ ( map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space ,
+ is-cauchy-map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space)
+
+ is-limit-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space :
+ is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( U)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space)
+ is-limit-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ δ ε η θ =
+ let
+ (θ₁ , θ₂ , θ₁+θ₂=θ) = split-ℚ⁺ θ
+
+ lemma-η+θ+δ :
+ ( η +ℚ⁺ θ₁ +ℚ⁺ (δ +ℚ⁺ θ₂)) = η +ℚ⁺ θ +ℚ⁺ δ
+ lemma-η+θ+δ =
+ ( interchange-law-add-add-ℚ⁺ η θ₁ δ θ₂) ∙
+ ( ap
+ ( add-ℚ⁺ (η +ℚ⁺ δ))
+ ( θ₁+θ₂=θ)) ∙
+ ( associative-add-ℚ⁺ η δ θ) ∙
+ ( ap
+ ( add-ℚ⁺ η)
+ ( commutative-add-ℚ⁺ δ θ)) ∙
+ ( inv (associative-add-ℚ⁺ η θ δ))
+
+ lemma-lim :
+ neighborhood-Pseudometric-Space M
+ ( η +ℚ⁺ θ +ℚ⁺ δ)
+ ( map-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( δ)
+ ( η))
+ ( map-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( θ₂)
+ ( θ₁))
+ lemma-lim =
+ tr
+ ( is-upper-bound-dist-Pseudometric-Space M
+ ( map-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( δ)
+ ( η))
+ ( map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( θ)))
+ ( lemma-η+θ+δ)
+ ( is-cauchy-map-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ _ _ _ _)
+ in
+ tr
+ ( is-upper-bound-dist-Pseudometric-Space M
+ ( map-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( δ)
+ ( η))
+ ( map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( θ)))
+ ( associative-add-ℚ⁺
+ ( η +ℚ⁺ θ)
+ ( δ)
+ ( ε))
+ ( monotonic-neighborhood-Pseudometric-Space M
+ ( map-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( δ)
+ ( η))
+ ( map-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( θ))
+ ( η +ℚ⁺ θ +ℚ⁺ δ)
+ ( η +ℚ⁺ θ +ℚ⁺ δ +ℚ⁺ ε)
+ ( le-left-add-ℚ⁺ ( η +ℚ⁺ θ +ℚ⁺ δ) ε)
+ ( lemma-lim))
+
+ has-limit-cauchy-approximation-pseudometric-completion-Pseudometric-Space :
+ Σ ( cauchy-approximation-Pseudometric-Space M)
+ ( is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( U))
+ has-limit-cauchy-approximation-pseudometric-completion-Pseudometric-Space =
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space ,
+ is-limit-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space)
+```
+
+### The map from a Cauchy approximation in the pseudometric completion to its limit is an isometry
+
+```agda
+module _
+ { l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ ( d : ℚ⁺)
+ ( u v :
+ cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M))
+ where
+
+ abstract
+ preserves-neighborhood-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space :
+ neighborhood-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M))
+ ( d)
+ ( u)
+ ( v) →
+ neighborhood-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( d)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( u))
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( v))
+ preserves-neighborhood-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ Nuv =
+ let
+ neighborhood-const-lim :
+ neighborhood-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M))
+ ( d)
+ ( const-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( u)))
+ ( const-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( v)))
+ neighborhood-const-lim =
+ preserves-neighborhood-sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M))
+ { u}
+ { const-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( u))}
+ { v}
+ { const-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( v))}
+ ( sim-const-is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( u)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( u))
+ ( is-limit-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( u)))
+ ( sim-const-is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( v)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( v))
+ ( is-limit-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( v)))
+ ( d)
+ ( Nuv)
+ in
+ reflects-neighborhood-map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( d)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( u))
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( v))
+ ( neighborhood-const-lim)
+
+ reflects-neighborhood-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space :
+ neighborhood-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( d)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( u))
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( v)) →
+ neighborhood-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M))
+ ( d)
+ ( u)
+ ( v)
+ reflects-neighborhood-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ N-lim =
+ reflects-neighborhood-sim-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M))
+ { u}
+ { const-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( u))}
+ { v}
+ { const-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( v))}
+ ( sim-const-is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( u)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( u))
+ ( is-limit-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( u)))
+ ( sim-const-is-limit-cauchy-approximation-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( v)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( v))
+ ( is-limit-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( v)))
+ ( d)
+ ( preserves-neighborhood-map-pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( d)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( u))
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( v))
+ ( N-lim))
+
+module _
+ {l1 l2 : Level} (M : Pseudometric-Space l1 l2)
+ where
+
+ abstract
+ is-isometry-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space :
+ is-isometry-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M))
+ ( pseudometric-completion-Pseudometric-Space M)
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space M)
+ is-isometry-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ d x y =
+ ( ( preserves-neighborhood-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( d)
+ ( x)
+ ( y)) ,
+ ( reflects-neighborhood-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space
+ ( M)
+ ( d)
+ ( x)
+ ( y)))
+
+ isometry-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space :
+ isometry-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space
+ ( pseudometric-completion-Pseudometric-Space M))
+ ( pseudometric-completion-Pseudometric-Space M)
+ isometry-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space =
+ ( lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space M ,
+ is-isometry-lim-cauchy-approximation-pseudometric-completion-Pseudometric-Space)
+```
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 289635cb19..763b86217f 100644
--- a/src/metric-spaces/similarity-of-elements-pseudometric-spaces.lagda.md
+++ b/src/metric-spaces/similarity-of-elements-pseudometric-spaces.lagda.md
@@ -24,6 +24,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
```
@@ -170,54 +171,98 @@ module _
{l1 l2 : Level} (A : Pseudometric-Space l1 l2)
where
- 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 x z →
- neighborhood-Pseudometric-Space A d y z
- preserves-neighborhood-sim-Pseudometric-Space {x} {y} x≍y d z Nxz =
- saturated-neighborhood-Pseudometric-Space
- ( A)
- ( d)
- ( y)
- ( z)
- ( λ δ →
- tr
- ( is-upper-bound-dist-Pseudometric-Space A y z)
- ( commutative-add-ℚ⁺ δ d)
- ( triangular-neighborhood-Pseudometric-Space
- ( A)
- ( y)
- ( x)
- ( z)
- ( δ)
- ( d)
- ( Nxz)
- ( symmetric-neighborhood-Pseudometric-Space
+ abstract
+ preserves-neighborhood-left-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 x z →
+ neighborhood-Pseudometric-Space A d y z
+ preserves-neighborhood-left-sim-Pseudometric-Space {x} {y} x≍y d z Nxz =
+ saturated-neighborhood-Pseudometric-Space
+ ( A)
+ ( d)
+ ( y)
+ ( z)
+ ( λ δ →
+ tr
+ ( is-upper-bound-dist-Pseudometric-Space A y z)
+ ( commutative-add-ℚ⁺ δ d)
+ ( triangular-neighborhood-Pseudometric-Space
( A)
- ( δ)
- ( x)
( y)
- ( x≍y δ))))
-
- iff-same-neighbors-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 x z ↔
- neighborhood-Pseudometric-Space A d y z)
- iff-same-neighbors-sim-Pseudometric-Space =
- ( λ x≍y d z →
- ( preserves-neighborhood-sim-Pseudometric-Space x≍y d z) ,
- ( preserves-neighborhood-sim-Pseudometric-Space
- ( inv-sim-Pseudometric-Space A x≍y)
+ ( x)
+ ( z)
+ ( δ)
+ ( d)
+ ( Nxz)
+ ( symmetric-neighborhood-Pseudometric-Space
+ ( A)
+ ( δ)
+ ( x)
+ ( y)
+ ( x≍y δ))))
+
+ preserves-neighborhood-right-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-right-sim-Pseudometric-Space {x} {y} x≍y d z Nzx =
+ symmetric-neighborhood-Pseudometric-Space A d y z
+ ( preserves-neighborhood-left-sim-Pseudometric-Space x≍y d z
+ ( symmetric-neighborhood-Pseudometric-Space A d z x Nzx))
+
+ preserves-neighborhood-sim-Pseudometric-Space :
+ {x x' y y' : type-Pseudometric-Space A} →
+ sim-Pseudometric-Space A x x' →
+ sim-Pseudometric-Space A y y' →
+ (d : ℚ⁺) →
+ neighborhood-Pseudometric-Space A d x y →
+ neighborhood-Pseudometric-Space A d x' y'
+ preserves-neighborhood-sim-Pseudometric-Space
+ {x} {x'} {y} {y'} x~x' y~y' d Nxy =
+ preserves-neighborhood-left-sim-Pseudometric-Space
+ ( x~x')
( d)
- ( z))) ,
- ( λ same-neighbors d →
- backward-implication
- ( same-neighbors d _)
- ( refl-sim-Pseudometric-Space A _ d))
+ ( y')
+ ( preserves-neighborhood-right-sim-Pseudometric-Space
+ ( y~y')
+ ( d)
+ ( x)
+ ( Nxy))
+
+ reflects-neighborhood-sim-Pseudometric-Space :
+ {x x' y y' : type-Pseudometric-Space A} →
+ sim-Pseudometric-Space A x x' →
+ sim-Pseudometric-Space A y y' →
+ (d : ℚ⁺) →
+ neighborhood-Pseudometric-Space A d x' y' →
+ neighborhood-Pseudometric-Space A d x y
+ reflects-neighborhood-sim-Pseudometric-Space
+ {x} {x'} {y} {y'} x~x' y~y' =
+ preserves-neighborhood-sim-Pseudometric-Space
+ ( inv-sim-Pseudometric-Space A x~x')
+ ( inv-sim-Pseudometric-Space A y~y')
+
+ iff-same-neighbors-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 x z ↔
+ neighborhood-Pseudometric-Space A d y z)
+ iff-same-neighbors-sim-Pseudometric-Space =
+ ( λ x≍y d z →
+ ( preserves-neighborhood-left-sim-Pseudometric-Space x≍y d z) ,
+ ( preserves-neighborhood-left-sim-Pseudometric-Space
+ ( inv-sim-Pseudometric-Space A x≍y)
+ ( d)
+ ( z))) ,
+ ( λ same-neighbors d →
+ backward-implication
+ ( same-neighbors d _)
+ ( refl-sim-Pseudometric-Space A _ d))
```
### Similar elements are elements similar w.r.t the underlying rational neighborhood relation
@@ -227,35 +272,57 @@ module _
{l1 l2 : Level} (A : Pseudometric-Space l1 l2)
where
- iff-same-neighbors-same-neighborhood-Pseudometric-Space :
- {x y : type-Pseudometric-Space A} →
- ( (d : ℚ⁺) (z : type-Pseudometric-Space A) →
- neighborhood-Pseudometric-Space A d x z ↔
- neighborhood-Pseudometric-Space A d y z) ↔
- ( sim-Rational-Neighborhood-Relation
- ( neighborhood-prop-Pseudometric-Space A)
- ( x)
- ( y))
- iff-same-neighbors-same-neighborhood-Pseudometric-Space =
- ( λ H d z →
- ( H d z) ,
- ( inv-neighborhood-Pseudometric-Space A ∘
- pr1 (H d z) ∘
- inv-neighborhood-Pseudometric-Space A) ,
- ( inv-neighborhood-Pseudometric-Space A ∘
- pr2 (H d z) ∘
- inv-neighborhood-Pseudometric-Space A)) ,
- ( iff-left-neighbor-sim-Rational-Neighborhood-Relation
- ( neighborhood-prop-Pseudometric-Space A))
-
- iff-same-neighborhood-sim-Pseudometric-Space :
- { x y : type-Pseudometric-Space A} →
- ( sim-Pseudometric-Space A x y) ↔
- ( sim-Rational-Neighborhood-Relation
- ( neighborhood-prop-Pseudometric-Space A)
- ( x)
- ( y))
- iff-same-neighborhood-sim-Pseudometric-Space =
- ( iff-same-neighbors-same-neighborhood-Pseudometric-Space) ∘iff
- ( iff-same-neighbors-sim-Pseudometric-Space A)
+ abstract
+ iff-same-neighbors-same-neighborhood-Pseudometric-Space :
+ {x y : type-Pseudometric-Space A} →
+ ( (d : ℚ⁺) (z : type-Pseudometric-Space A) →
+ neighborhood-Pseudometric-Space A d x z ↔
+ neighborhood-Pseudometric-Space A d y z) ↔
+ ( sim-Rational-Neighborhood-Relation
+ ( neighborhood-prop-Pseudometric-Space A)
+ ( x)
+ ( y))
+ iff-same-neighbors-same-neighborhood-Pseudometric-Space =
+ ( λ H d z →
+ ( H d z) ,
+ ( inv-neighborhood-Pseudometric-Space A ∘
+ pr1 (H d z) ∘
+ inv-neighborhood-Pseudometric-Space A) ,
+ ( inv-neighborhood-Pseudometric-Space A ∘
+ pr2 (H d z) ∘
+ inv-neighborhood-Pseudometric-Space A)) ,
+ ( iff-left-neighbor-sim-Rational-Neighborhood-Relation
+ ( neighborhood-prop-Pseudometric-Space A))
+
+ iff-same-neighborhood-sim-Pseudometric-Space :
+ { x y : type-Pseudometric-Space A} →
+ ( sim-Pseudometric-Space A x y) ↔
+ ( sim-Rational-Neighborhood-Relation
+ ( neighborhood-prop-Pseudometric-Space A)
+ ( x)
+ ( y))
+ iff-same-neighborhood-sim-Pseudometric-Space =
+ ( 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
+
+ abstract
+ 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)
```