diff --git a/src/metric-spaces.lagda.md b/src/metric-spaces.lagda.md
index 81a017ff2d..f7778db529 100644
--- a/src/metric-spaces.lagda.md
+++ b/src/metric-spaces.lagda.md
@@ -48,29 +48,39 @@ module metric-spaces where
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-spaces public
+open import metric-spaces.cauchy-approximations-metric-spaces-WIP public
open import metric-spaces.cauchy-approximations-premetric-spaces public
open import metric-spaces.cauchy-sequences-complete-metric-spaces public
open import metric-spaces.cauchy-sequences-metric-spaces public
open import metric-spaces.closed-premetric-structures public
open import metric-spaces.complete-metric-spaces public
+open import metric-spaces.complete-metric-spaces-WIP public
open import metric-spaces.continuous-functions-metric-spaces public
+open import metric-spaces.continuous-functions-metric-spaces-WIP public
open import metric-spaces.continuous-functions-premetric-spaces public
open import metric-spaces.convergent-cauchy-approximations-metric-spaces public
+open import metric-spaces.convergent-cauchy-approximations-metric-spaces-WIP public
open import metric-spaces.convergent-sequences-metric-spaces public
open import metric-spaces.dependent-products-metric-spaces public
+open import metric-spaces.dependent-products-metric-spaces-WIP public
open import metric-spaces.discrete-premetric-structures public
open import metric-spaces.elements-at-bounded-distance-metric-spaces public
open import metric-spaces.equality-of-metric-spaces public
+open import metric-spaces.equality-of-metric-spaces-WIP public
open import metric-spaces.equality-of-premetric-spaces public
open import metric-spaces.extensional-premetric-structures public
+open import metric-spaces.extensional-pseudometric-spaces-WIP public
open import metric-spaces.functions-metric-spaces public
open import metric-spaces.functor-category-set-functions-isometry-metric-spaces public
open import metric-spaces.functor-category-short-isometry-metric-spaces public
open import metric-spaces.induced-premetric-structures-on-preimages public
open import metric-spaces.isometric-equivalences-premetric-spaces public
open import metric-spaces.isometries-metric-spaces public
+open import metric-spaces.isometries-metric-spaces-WIP public
open import metric-spaces.isometries-premetric-spaces public
+open import metric-spaces.limits-of-cauchy-approximations-metric-spaces-WIP public
open import metric-spaces.limits-of-cauchy-approximations-premetric-spaces public
+open import metric-spaces.limits-of-functions-metric-spaces public
open import metric-spaces.limits-of-sequences-metric-spaces public
open import metric-spaces.limits-of-sequences-premetric-spaces public
open import metric-spaces.limits-of-sequences-pseudometric-spaces public
@@ -84,34 +94,49 @@ open import metric-spaces.metric-space-of-functions-metric-spaces public
open import metric-spaces.metric-space-of-isometries-metric-spaces public
open import metric-spaces.metric-space-of-lipschitz-functions-metric-spaces public
open import metric-spaces.metric-space-of-rational-numbers public
+open import metric-spaces.metric-space-of-rational-numbers-WIP public
open import metric-spaces.metric-space-of-rational-numbers-with-open-neighborhoods public
open import metric-spaces.metric-space-of-short-functions-metric-spaces public
open import metric-spaces.metric-spaces public
+open import metric-spaces.metric-spaces-WIP public
open import metric-spaces.metric-structures public
open import metric-spaces.monotonic-premetric-structures public
+open import metric-spaces.monotonic-rational-neighborhoods public
open import metric-spaces.ordering-premetric-structures public
+open import metric-spaces.ordering-rational-neighborhoods public
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.preimage-rational-neighborhoods public
open import metric-spaces.premetric-spaces public
open import metric-spaces.premetric-structures public
open import metric-spaces.pseudometric-spaces public
+open import metric-spaces.pseudometric-spaces-WIP public
open import metric-spaces.pseudometric-structures public
open import metric-spaces.rational-approximations-of-zero public
open import metric-spaces.rational-cauchy-approximations public
+open import metric-spaces.rational-neighborhoods public
open import metric-spaces.rational-sequences-approximating-zero public
open import metric-spaces.reflexive-premetric-structures public
+open import metric-spaces.reflexive-rational-neighborhoods public
open import metric-spaces.saturated-complete-metric-spaces public
open import metric-spaces.saturated-metric-spaces public
+open import metric-spaces.saturated-rational-neighborhoods public
open import metric-spaces.sequences-metric-spaces public
open import metric-spaces.sequences-premetric-spaces public
open import metric-spaces.sequences-pseudometric-spaces public
open import metric-spaces.short-functions-metric-spaces public
+open import metric-spaces.short-functions-metric-spaces-WIP public
open import metric-spaces.short-functions-premetric-spaces public
+open import metric-spaces.similarity-of-elements-pseudometric-spaces public
open import metric-spaces.subspaces-metric-spaces public
+open import metric-spaces.subspaces-metric-spaces-WIP public
open import metric-spaces.symmetric-premetric-structures public
+open import metric-spaces.symmetric-rational-neighborhoods public
open import metric-spaces.triangular-premetric-structures public
+open import metric-spaces.triangular-rational-neighborhoods public
open import metric-spaces.uniformly-continuous-functions-metric-spaces public
+open import metric-spaces.uniformly-continuous-functions-metric-spaces-WIP public
open import metric-spaces.uniformly-continuous-functions-premetric-spaces public
```
diff --git a/src/metric-spaces/cauchy-approximations-metric-spaces-WIP.lagda.md b/src/metric-spaces/cauchy-approximations-metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..0b763c2aef
--- /dev/null
+++ b/src/metric-spaces/cauchy-approximations-metric-spaces-WIP.lagda.md
@@ -0,0 +1,161 @@
+# Cauchy approximations in metric spaces (WIP)
+
+```agda
+module metric-spaces.cauchy-approximations-metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.constant-maps
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.subtypes
+open import foundation.universe-levels
+
+open import metric-spaces.metric-spaces-WIP
+open import metric-spaces.short-functions-metric-spaces-WIP
+```
+
+
+
+## Idea
+
+A
+{{#concept "Cauchy approximation" Disambiguation="in a metric space" Agda=is-cauchy-approximation-Metric-Space-WIP}}
+in a [metric space](metric-spaces.metric-spaces.md) `A` is a map `f` from
+[`ℚ⁺`](elementary-number-theory.positive-rational-numbers.md) to its carrier
+type such that for all `(ε δ : ℚ⁺)`, `f ε` and `f δ` are in a
+(`ε + δ`)-[neighborhood](metric-spaces.premetric-structures.md), i.e. the
+distance between `f ε` and `f δ` is bounded by `ε + δ`.
+
+## Definitions
+
+### Cauchy approximations in metric spaces
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ where
+
+ is-cauchy-approximation-prop-Metric-Space-WIP :
+ (ℚ⁺ → type-Metric-Space-WIP A) → Prop l2
+ is-cauchy-approximation-prop-Metric-Space-WIP f =
+ Π-Prop
+ ( ℚ⁺)
+ ( λ ε →
+ Π-Prop
+ ( ℚ⁺)
+ ( λ δ →
+ neighborhood-prop-Metric-Space-WIP A (ε +ℚ⁺ δ) (f ε) (f δ)))
+
+ is-cauchy-approximation-Metric-Space-WIP :
+ (ℚ⁺ → type-Metric-Space-WIP A) → UU l2
+ is-cauchy-approximation-Metric-Space-WIP =
+ type-Prop ∘ is-cauchy-approximation-prop-Metric-Space-WIP
+
+ cauchy-approximation-Metric-Space-WIP : UU (l1 ⊔ l2)
+ cauchy-approximation-Metric-Space-WIP =
+ type-subtype is-cauchy-approximation-prop-Metric-Space-WIP
+```
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ (f : cauchy-approximation-Metric-Space-WIP A)
+ where
+
+ map-cauchy-approximation-Metric-Space-WIP :
+ ℚ⁺ → type-Metric-Space-WIP A
+ map-cauchy-approximation-Metric-Space-WIP = pr1 f
+
+ is-cauchy-approximation-map-cauchy-approximation-Metric-Space-WIP :
+ (ε δ : ℚ⁺) →
+ neighborhood-Metric-Space-WIP
+ ( A)
+ ( ε +ℚ⁺ δ)
+ ( map-cauchy-approximation-Metric-Space-WIP ε)
+ ( map-cauchy-approximation-Metric-Space-WIP δ)
+ is-cauchy-approximation-map-cauchy-approximation-Metric-Space-WIP = pr2 f
+```
+
+## Properties
+
+### Constant maps in metric spaces are Cauchy approximations
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ (x : type-Metric-Space-WIP A)
+ where
+
+ const-cauchy-approximation-Metric-Space-WIP :
+ cauchy-approximation-Metric-Space-WIP A
+ const-cauchy-approximation-Metric-Space-WIP =
+ (const ℚ⁺ x) , (λ ε δ → refl-neighborhood-Metric-Space-WIP A (ε +ℚ⁺ δ) x)
+```
+
+### Short maps between metric spaces are functorial on Cauchy approximations
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (f : short-function-Metric-Space-WIP A B)
+ where
+
+ map-short-function-cauchy-approximation-Metric-Space-WIP :
+ cauchy-approximation-Metric-Space-WIP A →
+ cauchy-approximation-Metric-Space-WIP B
+ map-short-function-cauchy-approximation-Metric-Space-WIP (u , H) =
+ ( map-short-function-Metric-Space-WIP A B f ∘ u) ,
+ ( λ ε δ →
+ is-short-map-short-function-Metric-Space-WIP
+ ( A)
+ ( B)
+ ( f)
+ ( ε +ℚ⁺ δ)
+ ( u ε)
+ ( u δ)
+ ( H ε δ))
+
+module _
+ {l1 l2 : Level}
+ (A : Metric-Space-WIP l1 l2)
+ where
+
+ eq-id-map-short-function-cauchy-approximation-Metric-Space-WIP :
+ map-short-function-cauchy-approximation-Metric-Space-WIP
+ ( A)
+ ( A)
+ ( short-id-Metric-Space-WIP A) =
+ id
+ eq-id-map-short-function-cauchy-approximation-Metric-Space-WIP = refl
+
+module _
+ {l1a l2a l1b l2b l1c l2c : Level}
+ (A : Metric-Space-WIP l1a l2a)
+ (B : Metric-Space-WIP l1b l2b)
+ (C : Metric-Space-WIP l1c l2c)
+ (g : short-function-Metric-Space-WIP B C)
+ (f : short-function-Metric-Space-WIP A B)
+ where
+
+ eq-comp-map-short-function-cauchy-approximation-Metric-Space-WIP :
+ ( map-short-function-cauchy-approximation-Metric-Space-WIP B C g ∘
+ map-short-function-cauchy-approximation-Metric-Space-WIP A B f) =
+ ( map-short-function-cauchy-approximation-Metric-Space-WIP A C
+ (comp-short-function-Metric-Space-WIP A B C g f))
+ eq-comp-map-short-function-cauchy-approximation-Metric-Space-WIP = refl
+```
+
+## References
+
+Our definition of Cauchy approximation follows Definition 4.5.5 of
+{{#cite Booij20PhD}} and Definition 11.2.10 of {{#cite UF13}}.
+
+{{#bibliography}}
diff --git a/src/metric-spaces/complete-metric-spaces-WIP.lagda.md b/src/metric-spaces/complete-metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..8084e84bc6
--- /dev/null
+++ b/src/metric-spaces/complete-metric-spaces-WIP.lagda.md
@@ -0,0 +1,172 @@
+# Complete metric spaces (WIP)
+
+```agda
+module metric-spaces.complete-metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.equivalences
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.retractions
+open import foundation.sections
+open import foundation.subtypes
+open import foundation.universe-levels
+
+open import metric-spaces.cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.convergent-cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.limits-of-cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.metric-spaces-WIP
+```
+
+
+
+## Idea
+
+A [metric space](metric-spaces.metric-spaces-WIP.md) is
+{{#concept "complete" Disambiguation="metric space" Agda=is-complete-Metric-Space-WIP WD="complete metric space" WDID=Q848569}}
+if all its
+[Cauchy approximations](metric-spaces.cauchy-approximations-metric-spaces-WIP.md)
+are
+[convergent](metric-spaces.convergent-cauchy-approximations-metric-spaces-WIP.md).
+
+## Definitions
+
+### The property of being a complete metric space
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ where
+
+ is-complete-prop-Metric-Space-WIP : Prop (l1 ⊔ l2)
+ is-complete-prop-Metric-Space-WIP =
+ Π-Prop
+ ( cauchy-approximation-Metric-Space-WIP A)
+ ( is-convergent-prop-cauchy-approximation-Metric-Space-WIP A)
+
+ is-complete-Metric-Space-WIP : UU (l1 ⊔ l2)
+ is-complete-Metric-Space-WIP = type-Prop is-complete-prop-Metric-Space-WIP
+
+ is-prop-is-complete-Metric-Space-WIP : is-prop is-complete-Metric-Space-WIP
+ is-prop-is-complete-Metric-Space-WIP =
+ is-prop-type-Prop is-complete-prop-Metric-Space-WIP
+```
+
+### The type of complete metric spaces
+
+```agda
+module _
+ (l1 l2 : Level)
+ where
+
+ Complete-Metric-Space-WIP : UU (lsuc l1 ⊔ lsuc l2)
+ Complete-Metric-Space-WIP =
+ type-subtype (is-complete-prop-Metric-Space-WIP {l1} {l2})
+```
+
+```agda
+module _
+ {l1 l2 : Level}
+ (A : Complete-Metric-Space-WIP l1 l2)
+ where
+
+ metric-space-Complete-Metric-Space-WIP : Metric-Space-WIP l1 l2
+ metric-space-Complete-Metric-Space-WIP = pr1 A
+
+ type-Complete-Metric-Space-WIP : UU l1
+ type-Complete-Metric-Space-WIP =
+ type-Metric-Space-WIP metric-space-Complete-Metric-Space-WIP
+
+ is-complete-metric-space-Complete-Metric-Space-WIP :
+ is-complete-Metric-Space-WIP metric-space-Complete-Metric-Space-WIP
+ is-complete-metric-space-Complete-Metric-Space-WIP = pr2 A
+```
+
+### The equivalence between Cauchy approximations and convergent Cauchy approximations in a complete metric space
+
+```agda
+module _
+ {l1 l2 : Level}
+ (A : Complete-Metric-Space-WIP l1 l2)
+ where
+
+ convergent-cauchy-approximation-Complete-Metric-Space-WIP :
+ cauchy-approximation-Metric-Space-WIP
+ ( metric-space-Complete-Metric-Space-WIP A) →
+ convergent-cauchy-approximation-Metric-Space-WIP
+ ( metric-space-Complete-Metric-Space-WIP A)
+ convergent-cauchy-approximation-Complete-Metric-Space-WIP u =
+ ( u , is-complete-metric-space-Complete-Metric-Space-WIP A u)
+
+ is-section-convergent-cauchy-approximation-Complete-Metric-Space-WIP :
+ is-section
+ ( convergent-cauchy-approximation-Complete-Metric-Space-WIP)
+ ( inclusion-subtype
+ ( is-convergent-prop-cauchy-approximation-Metric-Space-WIP
+ ( metric-space-Complete-Metric-Space-WIP A)))
+ is-section-convergent-cauchy-approximation-Complete-Metric-Space-WIP u =
+ eq-type-subtype
+ ( is-convergent-prop-cauchy-approximation-Metric-Space-WIP
+ ( metric-space-Complete-Metric-Space-WIP A))
+ ( refl)
+
+ is-retraction-convergent-cauchy-approximation-Metric-Space-WIP :
+ is-retraction
+ ( convergent-cauchy-approximation-Complete-Metric-Space-WIP)
+ ( inclusion-subtype
+ ( is-convergent-prop-cauchy-approximation-Metric-Space-WIP
+ ( metric-space-Complete-Metric-Space-WIP A)))
+ is-retraction-convergent-cauchy-approximation-Metric-Space-WIP u = refl
+
+ is-equiv-convergent-cauchy-approximation-Complete-Metric-Space-WIP :
+ is-equiv convergent-cauchy-approximation-Complete-Metric-Space-WIP
+ pr1 is-equiv-convergent-cauchy-approximation-Complete-Metric-Space-WIP =
+ ( inclusion-subtype
+ ( is-convergent-prop-cauchy-approximation-Metric-Space-WIP
+ ( metric-space-Complete-Metric-Space-WIP A))) ,
+ ( is-section-convergent-cauchy-approximation-Complete-Metric-Space-WIP)
+ pr2 is-equiv-convergent-cauchy-approximation-Complete-Metric-Space-WIP =
+ ( inclusion-subtype
+ ( is-convergent-prop-cauchy-approximation-Metric-Space-WIP
+ ( metric-space-Complete-Metric-Space-WIP A))) ,
+ ( is-retraction-convergent-cauchy-approximation-Metric-Space-WIP)
+```
+
+### The limit of a Cauchy approximation in a complete metric space
+
+```agda
+module _
+ { l1 l2 : Level}
+ ( A : Complete-Metric-Space-WIP l1 l2)
+ ( u : cauchy-approximation-Metric-Space-WIP
+ ( metric-space-Complete-Metric-Space-WIP A))
+ where
+
+ limit-cauchy-approximation-Complete-Metric-Space-WIP :
+ type-Complete-Metric-Space-WIP A
+ limit-cauchy-approximation-Complete-Metric-Space-WIP =
+ limit-convergent-cauchy-approximation-Metric-Space-WIP
+ ( metric-space-Complete-Metric-Space-WIP A)
+ ( convergent-cauchy-approximation-Complete-Metric-Space-WIP A u)
+
+ is-limit-limit-cauchy-approximation-Complete-Metric-Space-WIP :
+ is-limit-cauchy-approximation-Metric-Space-WIP
+ ( metric-space-Complete-Metric-Space-WIP A)
+ ( u)
+ ( limit-cauchy-approximation-Complete-Metric-Space-WIP)
+ is-limit-limit-cauchy-approximation-Complete-Metric-Space-WIP =
+ is-limit-limit-convergent-cauchy-approximation-Metric-Space-WIP
+ ( metric-space-Complete-Metric-Space-WIP A)
+ ( convergent-cauchy-approximation-Complete-Metric-Space-WIP A u)
+```
+
+## External links
+
+- [Complete metric space](https://en.wikipedia.org/wiki/Complete_metric_space)
+ at Wikipedia
diff --git a/src/metric-spaces/continuous-functions-metric-spaces-WIP.lagda.md b/src/metric-spaces/continuous-functions-metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..7fe2777b1c
--- /dev/null
+++ b/src/metric-spaces/continuous-functions-metric-spaces-WIP.lagda.md
@@ -0,0 +1,70 @@
+# Continuous functions between metric spaces (WIP)
+
+```agda
+module metric-spaces.continuous-functions-metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.existential-quantification
+open import foundation.inhabited-subtypes
+open import foundation.propositional-truncations
+open import foundation.propositions
+open import foundation.subtypes
+open import foundation.universe-levels
+
+open import metric-spaces.limits-of-functions-metric-spaces
+open import metric-spaces.metric-spaces-WIP
+```
+
+
+
+## Idea
+
+A [function](metric-spaces.functions-metric-spaces.md) `f` between
+[metric spaces](metric-spaces.metric-spaces.md) `X` and `Y` is
+{{#concept "continuous" Disambiguation="function between metric spaces at a point" WDID=Q170058 WD="continuous function" Agda=is-continuous-at-point-function-Metric-Space-WIP}}
+at a point `x` if `f x` is the
+[limit](metric-spaces.limits-of-functions-metric-spaces.md) of `f` at `x`. I.e.,
+there exists a function `m : ℚ⁺ → ℚ⁺` such that whenever `x'` is in an
+`m ε`-neighborhood of `x`, `f x'` is in an `ε`-neighborhood of `f x`. `m` is
+called a modulus of continuity of `f` at `x`.
+
+## Definitions
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level}
+ (X : Metric-Space-WIP l1 l2)
+ (Y : Metric-Space-WIP l3 l4)
+ (f : type-function-Metric-Space-WIP X Y)
+ (x : type-Metric-Space-WIP X)
+ where
+
+ is-continuous-at-point-prop-function-Metric-Space-WIP : Prop (l1 ⊔ l2 ⊔ l4)
+ is-continuous-at-point-prop-function-Metric-Space-WIP =
+ is-pt-limit-prop-function-Metric-Space-WIP X Y f x (f x)
+
+ is-continuous-at-point-function-Metric-Space-WIP : UU (l1 ⊔ l2 ⊔ l4)
+ is-continuous-at-point-function-Metric-Space-WIP =
+ is-pt-limit-function-Metric-Space-WIP X Y f x (f x)
+
+ is-modulus-of-continuity-at-point-prop-function-Metric-Space-WIP :
+ (ℚ⁺ → ℚ⁺) → Prop (l1 ⊔ l2 ⊔ l4)
+ is-modulus-of-continuity-at-point-prop-function-Metric-Space-WIP =
+ is-modulus-of-pt-limit-prop-function-Metric-Space-WIP X Y f x (f x)
+
+ is-modulus-of-continuity-at-point-function-Metric-Space-WIP :
+ (ℚ⁺ → ℚ⁺) → UU (l1 ⊔ l2 ⊔ l4)
+ is-modulus-of-continuity-at-point-function-Metric-Space-WIP =
+ is-modulus-of-pt-limit-function-Metric-Space-WIP X Y f x (f x)
+
+ modulus-of-continuity-at-point-function-Metric-Space-WIP : UU (l1 ⊔ l2 ⊔ l4)
+ modulus-of-continuity-at-point-function-Metric-Space-WIP =
+ type-subtype
+ is-modulus-of-continuity-at-point-prop-function-Metric-Space-WIP
+```
diff --git a/src/metric-spaces/convergent-cauchy-approximations-metric-spaces-WIP.lagda.md b/src/metric-spaces/convergent-cauchy-approximations-metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..a08f84aa68
--- /dev/null
+++ b/src/metric-spaces/convergent-cauchy-approximations-metric-spaces-WIP.lagda.md
@@ -0,0 +1,142 @@
+# Convergent Cauchy approximations in metric spaces (WIP)
+
+```agda
+module metric-spaces.convergent-cauchy-approximations-metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.subtypes
+open import foundation.transport-along-identifications
+open import foundation.universe-levels
+
+open import metric-spaces.cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.limits-of-cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.metric-spaces-WIP
+```
+
+
+
+## Idea
+
+A [Cauchy approximation](metric-spaces.cauchy-approximations-metric-spaces.md)
+in a [metric space](metric-spaces.metric-spaces.md) is
+{{#concept "convergent" Disambiguation="Cauchy approximation in a metric space" agda=is-convergent-cauchy-approximation-Metric-Space-WIP}}
+if it has a
+[limit](metric-spaces.limits-of-cauchy-approximations-metric-spaces-WIP.md).
+Because limits of Cauchy approximations in metric spaces are unique, this is a
+[subtype](foundation.subtypes.md) of the type of Cauchy approximations.
+
+## Definitions
+
+### The property of being a convergent Cauchy approximation in a metric space
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ (f : cauchy-approximation-Metric-Space-WIP A)
+ where
+
+ is-convergent-cauchy-approximation-Metric-Space-WIP : UU (l1 ⊔ l2)
+ is-convergent-cauchy-approximation-Metric-Space-WIP =
+ Σ ( type-Metric-Space-WIP A)
+ ( is-limit-cauchy-approximation-Metric-Space-WIP A f)
+
+ limit-is-convergent-cauchy-approximation-Metric-Space-WIP :
+ is-convergent-cauchy-approximation-Metric-Space-WIP →
+ type-Metric-Space-WIP A
+ limit-is-convergent-cauchy-approximation-Metric-Space-WIP = pr1
+
+ is-limit-limit-is-convergent-cauchy-approximation-Metric-Space-WIP :
+ (x : is-convergent-cauchy-approximation-Metric-Space-WIP) →
+ is-limit-cauchy-approximation-Metric-Space-WIP
+ ( A)
+ ( f)
+ ( limit-is-convergent-cauchy-approximation-Metric-Space-WIP x)
+ is-limit-limit-is-convergent-cauchy-approximation-Metric-Space-WIP = pr2
+
+ abstract
+ is-prop-is-convergent-cauchy-approximation-Metric-Space-WIP :
+ is-prop is-convergent-cauchy-approximation-Metric-Space-WIP
+ is-prop-is-convergent-cauchy-approximation-Metric-Space-WIP =
+ is-prop-all-elements-equal
+ ( λ x y →
+ eq-type-subtype
+ ( is-limit-cauchy-approximation-prop-Metric-Space-WIP A f)
+ ( all-eq-is-limit-cauchy-approximation-Metric-Space-WIP
+ ( A)
+ ( f)
+ ( limit-is-convergent-cauchy-approximation-Metric-Space-WIP x)
+ ( limit-is-convergent-cauchy-approximation-Metric-Space-WIP y)
+ ( is-limit-limit-is-convergent-cauchy-approximation-Metric-Space-WIP
+ x)
+ ( is-limit-limit-is-convergent-cauchy-approximation-Metric-Space-WIP
+ y)))
+
+ is-convergent-prop-cauchy-approximation-Metric-Space-WIP : Prop (l1 ⊔ l2)
+ is-convergent-prop-cauchy-approximation-Metric-Space-WIP =
+ is-convergent-cauchy-approximation-Metric-Space-WIP ,
+ is-prop-is-convergent-cauchy-approximation-Metric-Space-WIP
+```
+
+### The type of convergent Cauchy approximations in a metric space
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ where
+
+ convergent-cauchy-approximation-Metric-Space-WIP : UU (l1 ⊔ l2)
+ convergent-cauchy-approximation-Metric-Space-WIP =
+ type-subtype (is-convergent-prop-cauchy-approximation-Metric-Space-WIP A)
+```
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ (f : convergent-cauchy-approximation-Metric-Space-WIP A)
+ where
+
+ approximation-convergent-cauchy-approximation-Metric-Space-WIP :
+ cauchy-approximation-Metric-Space-WIP A
+ approximation-convergent-cauchy-approximation-Metric-Space-WIP = pr1 f
+
+ map-convergent-cauchy-approximation-Metric-Space-WIP :
+ ℚ⁺ → type-Metric-Space-WIP A
+ map-convergent-cauchy-approximation-Metric-Space-WIP =
+ map-cauchy-approximation-Metric-Space-WIP
+ A
+ approximation-convergent-cauchy-approximation-Metric-Space-WIP
+
+ is-cauchy-approximation-map-convergent-cauchy-approximation-Metric-Space-WIP :
+ (ε δ : ℚ⁺) →
+ neighborhood-Metric-Space-WIP
+ ( A)
+ ( ε +ℚ⁺ δ)
+ ( map-convergent-cauchy-approximation-Metric-Space-WIP ε)
+ ( map-convergent-cauchy-approximation-Metric-Space-WIP δ)
+ is-cauchy-approximation-map-convergent-cauchy-approximation-Metric-Space-WIP =
+ is-cauchy-approximation-map-cauchy-approximation-Metric-Space-WIP
+ A
+ approximation-convergent-cauchy-approximation-Metric-Space-WIP
+
+ limit-convergent-cauchy-approximation-Metric-Space-WIP :
+ type-Metric-Space-WIP A
+ limit-convergent-cauchy-approximation-Metric-Space-WIP = pr1 (pr2 f)
+
+ is-limit-limit-convergent-cauchy-approximation-Metric-Space-WIP :
+ (ε δ : ℚ⁺) →
+ neighborhood-Metric-Space-WIP
+ ( A)
+ ( ε +ℚ⁺ δ)
+ ( map-convergent-cauchy-approximation-Metric-Space-WIP ε)
+ ( limit-convergent-cauchy-approximation-Metric-Space-WIP)
+ is-limit-limit-convergent-cauchy-approximation-Metric-Space-WIP = pr2 (pr2 f)
+```
diff --git a/src/metric-spaces/dependent-products-metric-spaces-WIP.lagda.md b/src/metric-spaces/dependent-products-metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..a4496a0e54
--- /dev/null
+++ b/src/metric-spaces/dependent-products-metric-spaces-WIP.lagda.md
@@ -0,0 +1,268 @@
+# Dependent products of metric spaces (WIP)
+
+```agda
+module metric-spaces.dependent-products-metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import foundation.dependent-pair-types
+open import foundation.evaluation-functions
+open import foundation.function-extensionality
+open import foundation.function-types
+open import foundation.propositions
+open import foundation.sets
+open import foundation.universe-levels
+
+open import metric-spaces.cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.complete-metric-spaces-WIP
+open import metric-spaces.convergent-cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.extensional-pseudometric-spaces-WIP
+open import metric-spaces.limits-of-cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.metric-spaces-WIP
+open import metric-spaces.monotonic-rational-neighborhoods
+open import metric-spaces.pseudometric-spaces-WIP
+open import metric-spaces.rational-neighborhoods
+open import metric-spaces.reflexive-rational-neighborhoods
+open import metric-spaces.saturated-rational-neighborhoods
+open import metric-spaces.short-functions-metric-spaces-WIP
+open import metric-spaces.symmetric-rational-neighborhoods
+open import metric-spaces.triangular-rational-neighborhoods
+```
+
+
+
+## Idea
+
+A family of [metric spaces](metric-spaces.metric-spaces.md) over a type produces
+a {{#concept "product metric space" Agda=Π-Metric-Space-WIP}} on the type of
+dependent functions into the carrier types of the family. Two functions `f` and
+`g` are in a [`d`-neighborhood](metric-spaces.premetric-structures.md) in the
+product structure if this holds for all the evaluations `f x` and `g x`. I.e
+this is the premetric such that
+[upper bounds](metric-spaces.premetric-structures.md) on the distance between
+`f` and `g` are bounded below by the supremum of the distances between each
+`f x` and `g x`. The evaluation functions from the product metric space to each
+projected metric space are
+[short maps](metric-spaces.short-functions-metric-spaces.md).
+
+## Definitions
+
+### Product of metric spaces
+
+```agda
+module _
+ {l l1 l2 : Level} (A : UU l) (P : A → Metric-Space-WIP l1 l2)
+ where
+
+ type-Π-Metric-Space-WIP : UU (l ⊔ l1)
+ type-Π-Metric-Space-WIP = (x : A) → type-Metric-Space-WIP (P x)
+
+ neighborhood-prop-Π-Metric-Space-WIP :
+ Rational-Neighborhood-Relation (l ⊔ l2) type-Π-Metric-Space-WIP
+ neighborhood-prop-Π-Metric-Space-WIP d f g =
+ Π-Prop A (λ x → neighborhood-prop-Metric-Space-WIP (P x) d (f x) (g x))
+
+ is-reflexive-neighborhood-Π-Metric-Space-WIP :
+ is-reflexive-Rational-Neighborhood-Relation
+ neighborhood-prop-Π-Metric-Space-WIP
+ is-reflexive-neighborhood-Π-Metric-Space-WIP d f a =
+ refl-neighborhood-Metric-Space-WIP (P a) d (f a)
+
+ is-symmetric-neighborhood-Π-Metric-Space-WIP :
+ is-symmetric-Rational-Neighborhood-Relation
+ neighborhood-prop-Π-Metric-Space-WIP
+ is-symmetric-neighborhood-Π-Metric-Space-WIP d f g H a =
+ symmetric-neighborhood-Metric-Space-WIP (P a) d (f a) (g a) (H a)
+
+ is-triangular-neighborhood-Π-Metric-Space-WIP :
+ is-triangular-Rational-Neighborhood-Relation
+ neighborhood-prop-Π-Metric-Space-WIP
+ is-triangular-neighborhood-Π-Metric-Space-WIP f g h d₁ d₂ H K a =
+ triangular-neighborhood-Metric-Space-WIP
+ ( P a)
+ ( f a)
+ ( g a)
+ ( h a)
+ ( d₁)
+ ( d₂)
+ ( H a)
+ ( K a)
+
+ is-saturated-neighborhood-Π-Metric-Space-WIP :
+ is-saturated-Rational-Neighborhood-Relation
+ neighborhood-prop-Π-Metric-Space-WIP
+ is-saturated-neighborhood-Π-Metric-Space-WIP ε x y H a =
+ saturated-neighborhood-Metric-Space-WIP
+ ( P a)
+ ( ε)
+ ( x a)
+ ( y a)
+ ( λ d → H d a)
+
+ pseudometric-space-Π-Metric-Space : Pseudometric-Space-WIP (l ⊔ l1) (l ⊔ l2)
+ pseudometric-space-Π-Metric-Space =
+ ( type-Π-Metric-Space-WIP) ,
+ ( neighborhood-prop-Π-Metric-Space-WIP ,
+ is-reflexive-neighborhood-Π-Metric-Space-WIP ,
+ is-symmetric-neighborhood-Π-Metric-Space-WIP ,
+ is-triangular-neighborhood-Π-Metric-Space-WIP ,
+ is-saturated-neighborhood-Π-Metric-Space-WIP)
+
+ is-extensional-pseudometric-space-Π-Metric-Space :
+ is-extensional-Pseudometric-Space-WIP
+ pseudometric-space-Π-Metric-Space
+ is-extensional-pseudometric-space-Π-Metric-Space =
+ is-extensional-is-tight-Pseudometric-Space
+ ( pseudometric-space-Π-Metric-Space)
+ ( λ f g H →
+ eq-htpy
+ ( λ a →
+ eq-sim-Metric-Space-WIP
+ ( P a)
+ ( f a)
+ ( g a)
+ ( λ d → H d a)))
+
+ Π-Metric-Space-WIP : Metric-Space-WIP (l ⊔ l1) (l ⊔ l2)
+ Π-Metric-Space-WIP =
+ make-Metric-Space-WIP
+ type-Π-Metric-Space-WIP
+ neighborhood-prop-Π-Metric-Space-WIP
+ is-reflexive-neighborhood-Π-Metric-Space-WIP
+ is-symmetric-neighborhood-Π-Metric-Space-WIP
+ is-triangular-neighborhood-Π-Metric-Space-WIP
+ is-saturated-neighborhood-Π-Metric-Space-WIP
+ is-extensional-pseudometric-space-Π-Metric-Space
+```
+
+## Properties
+
+### The evaluation maps on a product metric space are short
+
+```agda
+module _
+ {l l1 l2 : Level} (A : UU l) (P : A → Metric-Space-WIP l1 l2) (a : A)
+ where
+
+ is-short-ev-Π-Metric-Space-WIP :
+ is-short-function-Metric-Space-WIP
+ ( Π-Metric-Space-WIP A P)
+ ( P a)
+ ( ev a)
+ is-short-ev-Π-Metric-Space-WIP ε x y H = H a
+
+ short-ev-Π-Metric-Space-WIP :
+ short-function-Metric-Space-WIP
+ ( Π-Metric-Space-WIP A P)
+ ( P a)
+ short-ev-Π-Metric-Space-WIP = (ev a) , (is-short-ev-Π-Metric-Space-WIP)
+```
+
+### The partial applications of a Cauchy approximation in a dependent product metric space are Cauchy approximations
+
+```agda
+module _
+ {l l1 l2 : Level} (A : UU l) (P : A → Metric-Space-WIP l1 l2)
+ (f : cauchy-approximation-Metric-Space-WIP (Π-Metric-Space-WIP A P))
+ where
+
+ ev-cauchy-approximation-Π-Metric-Space-WIP :
+ (x : A) → cauchy-approximation-Metric-Space-WIP (P x)
+ ev-cauchy-approximation-Π-Metric-Space-WIP x =
+ map-short-function-cauchy-approximation-Metric-Space-WIP
+ ( Π-Metric-Space-WIP A P)
+ ( P x)
+ ( short-ev-Π-Metric-Space-WIP A P x)
+ ( f)
+```
+
+### A dependent map is the limit of a Cauchy approximation in a dependent product of metric spaces if and only if it is the pointwise limit of its partial applications
+
+```agda
+module _
+ {l l1 l2 : Level} (A : UU l) (P : A → Metric-Space-WIP l1 l2)
+ (f : cauchy-approximation-Metric-Space-WIP (Π-Metric-Space-WIP A P))
+ (g : type-Π-Metric-Space-WIP A P)
+ where
+
+ is-pointwise-limit-is-limit-cauchy-approximation-Π-Metric-Space-WIP :
+ is-limit-cauchy-approximation-Metric-Space-WIP
+ ( Π-Metric-Space-WIP A P)
+ ( f)
+ ( g) →
+ (x : A) →
+ is-limit-cauchy-approximation-Metric-Space-WIP
+ ( P x)
+ ( ev-cauchy-approximation-Π-Metric-Space-WIP A P f x)
+ ( g x)
+ is-pointwise-limit-is-limit-cauchy-approximation-Π-Metric-Space-WIP L x ε δ =
+ L ε δ x
+
+ is-limit-is-pointwise-limit-cauchy-approximation-Π-Metric-Space-WIP :
+ ( (x : A) →
+ is-limit-cauchy-approximation-Metric-Space-WIP
+ ( P x)
+ ( ev-cauchy-approximation-Π-Metric-Space-WIP A P f x)
+ ( g x)) →
+ is-limit-cauchy-approximation-Metric-Space-WIP
+ ( Π-Metric-Space-WIP A P)
+ ( f)
+ ( g)
+ is-limit-is-pointwise-limit-cauchy-approximation-Π-Metric-Space-WIP L ε δ x =
+ L x ε δ
+```
+
+### A product of complete metric spaces is complete
+
+```agda
+module _
+ {l l1 l2 : Level} (A : UU l) (P : A → Metric-Space-WIP l1 l2)
+ (Π-complete : (x : A) → is-complete-Metric-Space-WIP (P x))
+ where
+
+ limit-cauchy-approximation-Π-is-complete-Metric-Space-WIP :
+ cauchy-approximation-Metric-Space-WIP (Π-Metric-Space-WIP A P) →
+ type-Π-Metric-Space-WIP A P
+ limit-cauchy-approximation-Π-is-complete-Metric-Space-WIP u x =
+ limit-cauchy-approximation-Complete-Metric-Space-WIP
+ ( P x , Π-complete x)
+ ( ev-cauchy-approximation-Π-Metric-Space-WIP A P u x)
+
+ is-limit-limit-cauchy-approximation-Π-is-complete-Metric-Space-WIP :
+ (u : cauchy-approximation-Metric-Space-WIP (Π-Metric-Space-WIP A P)) →
+ is-limit-cauchy-approximation-Metric-Space-WIP
+ ( Π-Metric-Space-WIP A P)
+ ( u)
+ ( limit-cauchy-approximation-Π-is-complete-Metric-Space-WIP u)
+ is-limit-limit-cauchy-approximation-Π-is-complete-Metric-Space-WIP u ε δ x =
+ is-limit-limit-cauchy-approximation-Complete-Metric-Space-WIP
+ ( P x , Π-complete x)
+ ( ev-cauchy-approximation-Π-Metric-Space-WIP A P u x)
+ ( ε)
+ ( δ)
+
+ is-complete-Π-Metric-Space-WIP :
+ is-complete-Metric-Space-WIP (Π-Metric-Space-WIP A P)
+ is-complete-Π-Metric-Space-WIP u =
+ limit-cauchy-approximation-Π-is-complete-Metric-Space-WIP u ,
+ is-limit-limit-cauchy-approximation-Π-is-complete-Metric-Space-WIP u
+```
+
+### The complete product of complete metric spaces
+
+```agda
+module _
+ {l l1 l2 : Level} (A : UU l) (C : A → Complete-Metric-Space-WIP l1 l2)
+ where
+
+ Π-Complete-Metric-Space-WIP : Complete-Metric-Space-WIP (l ⊔ l1) (l ⊔ l2)
+ pr1 Π-Complete-Metric-Space-WIP =
+ Π-Metric-Space-WIP A (metric-space-Complete-Metric-Space-WIP ∘ C)
+ pr2 Π-Complete-Metric-Space-WIP =
+ is-complete-Π-Metric-Space-WIP
+ ( A)
+ ( metric-space-Complete-Metric-Space-WIP ∘ C)
+ ( is-complete-metric-space-Complete-Metric-Space-WIP ∘ C)
+```
diff --git a/src/metric-spaces/equality-of-metric-spaces-WIP.lagda.md b/src/metric-spaces/equality-of-metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..454284610d
--- /dev/null
+++ b/src/metric-spaces/equality-of-metric-spaces-WIP.lagda.md
@@ -0,0 +1,241 @@
+# Equality of metric spaces (WIP)
+
+```agda
+module metric-spaces.equality-of-metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import foundation.action-on-identifications-functions
+open import foundation.cartesian-product-types
+open import foundation.contractible-types
+open import foundation.dependent-pair-types
+open import foundation.equality-dependent-pair-types
+open import foundation.equivalences
+open import foundation.function-extensionality
+open import foundation.function-types
+open import foundation.functoriality-dependent-pair-types
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.subtypes
+open import foundation.torsorial-type-families
+open import foundation.transport-along-identifications
+open import foundation.type-arithmetic-dependent-pair-types
+open import foundation.univalence
+open import foundation.universe-levels
+
+open import metric-spaces.extensional-pseudometric-spaces-WIP
+open import metric-spaces.isometries-metric-spaces-WIP
+open import metric-spaces.metric-spaces-WIP
+open import metric-spaces.pseudometric-spaces-WIP
+open import metric-spaces.rational-neighborhoods
+```
+
+
+
+## Idea
+
+[Equality](foundation-core.identity-types.md) of
+[metric spaces](metric-spaces.metric-spaces-WIP.md) is characterized by the
+following equivalent concepts:
+
+- an [equality](foundation-core.identity-types.md) between their carrier types
+ such that the induced map under [`map-eq`](foundation-core.univalence.md) is
+ an [isometry](metric-spaces.isometries-metric-spaces-WIP.md);
+
+- an [equivalence](foundation-core.equivalences.md) between their carrier types
+ such that the induced map under [`map-equiv`](foundation-core.equivalences.md)
+ is an [isometry](metric-spaces.isometries-metric-spaces-WIP.md);
+
+- a function between their carrier types that is both an
+ [equivalence](foundation-core.equivalences.md) and an
+ [isometry](metric-spaces.isometries-metric-spaces-WIP.md).
+
+## Definitions
+
+### Isometric equality between metric spaces
+
+```agda
+module _
+ {l1 l2 l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1 l2')
+ where
+
+ isometric-eq-Metric-Space-WIP : UU (lsuc l1 ⊔ l2 ⊔ l2')
+ isometric-eq-Metric-Space-WIP =
+ Σ (type-Metric-Space-WIP A = type-Metric-Space-WIP B)
+ (λ e → is-isometry-Metric-Space-WIP A B (map-eq e))
+```
+
+### Isometric equivalence of metric spaces
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ where
+
+ isometric-equiv-Metric-Space-WIP : UU (l1 ⊔ l2 ⊔ l1' ⊔ l2')
+ isometric-equiv-Metric-Space-WIP =
+ Σ (type-Metric-Space-WIP A ≃ type-Metric-Space-WIP B)
+ (λ e → is-isometry-Metric-Space-WIP A B (map-equiv e))
+```
+
+### Isometric equivalences between metric spaces
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ where
+
+ isometric-equiv-Metric-Space-WIP' : UU (l1 ⊔ l2 ⊔ l1' ⊔ l2')
+ isometric-equiv-Metric-Space-WIP' =
+ Σ ( type-function-Metric-Space-WIP A B)
+ ( λ f → (is-equiv f) × (is-isometry-Metric-Space-WIP A B f))
+```
+
+## Properties
+
+### Equality of metric spaces is equivalent to the existence of an isometric equality between their carrier types
+
+```agda
+module _
+ {l1 l2 : Level}
+ (A B : Metric-Space-WIP l1 l2)
+ where
+
+ equiv-eq-isometric-eq-Metric-Space-WIP :
+ (A = B) ≃ isometric-eq-Metric-Space-WIP A B
+ equiv-eq-isometric-eq-Metric-Space-WIP =
+ ( equiv-tot
+ ( equiv-Eq-tr-Metric-Structure
+ ( type-Metric-Space-WIP A)
+ ( type-Metric-Space-WIP B)
+ ( structure-Metric-Space-WIP A)
+ ( structure-Metric-Space-WIP B))) ∘e
+ ( equiv-pair-eq-Σ A B)
+```
+
+### Isometric equality is torsorial
+
+```agda
+module _
+ {l1 l2 : Level}
+ (A : Metric-Space-WIP l1 l2)
+ where
+
+ is-torsorial-isometric-eq-Metric-Space-WIP :
+ is-torsorial (isometric-eq-Metric-Space-WIP A)
+ is-torsorial-isometric-eq-Metric-Space-WIP =
+ is-contr-equiv'
+ ( Σ (Metric-Space-WIP l1 l2) (Id A))
+ ( equiv-tot (equiv-eq-isometric-eq-Metric-Space-WIP A))
+ ( is-torsorial-Id A)
+```
+
+### Isometric equality between the carrier types of metric spaces is equivalent to the existence of an isometric equivalence between them
+
+```agda
+module _
+ {l1 l2 : Level}
+ (A B : Metric-Space-WIP l1 l2)
+ where
+
+ equiv-isometric-eq-equiv-Metric-Space-WIP :
+ isometric-eq-Metric-Space-WIP A B ≃ isometric-equiv-Metric-Space-WIP A B
+ equiv-isometric-eq-equiv-Metric-Space-WIP =
+ equiv-Σ
+ ( λ e → is-isometry-Metric-Space-WIP A B (map-equiv e))
+ ( equiv-univalence)
+ ( λ (e : type-Metric-Space-WIP A = type-Metric-Space-WIP B) →
+ equiv-eq
+ (ap (is-isometry-Metric-Space-WIP A B) (eq-htpy (λ x → refl))))
+```
+
+### Isometric equivalence of metric spaces characterize their equalities
+
+```agda
+module _
+ {l1 l2 : Level}
+ (A B : Metric-Space-WIP l1 l2)
+ where
+
+ equiv-eq-isometric-equiv-Metric-Space-WIP :
+ (A = B) ≃ isometric-equiv-Metric-Space-WIP A B
+ equiv-eq-isometric-equiv-Metric-Space-WIP =
+ ( equiv-isometric-eq-equiv-Metric-Space-WIP A B) ∘e
+ ( equiv-eq-isometric-eq-Metric-Space-WIP A B)
+```
+
+### Isometric equivalence is torsorial
+
+```agda
+module _
+ {l1 l2 : Level}
+ (A : Metric-Space-WIP l1 l2)
+ where
+
+ is-torsorial-isometric-equiv-Metric-Space-WIP :
+ is-torsorial (isometric-equiv-Metric-Space-WIP A)
+ is-torsorial-isometric-equiv-Metric-Space-WIP =
+ is-contr-equiv'
+ ( Σ (Metric-Space-WIP l1 l2) (Id A))
+ ( equiv-tot (equiv-eq-isometric-equiv-Metric-Space-WIP A))
+ ( is-torsorial-Id A)
+```
+
+### Two metric spaces are isometrically equivalent if and only if there is an isometric equivalence between them
+
+```agda
+module _
+ {l1 l2 : Level}
+ (A B : Metric-Space-WIP l1 l2)
+ where
+
+ equiv-isometric-equiv-isometric-equiv-Metric-Space-WIP' :
+ isometric-equiv-Metric-Space-WIP A B ≃ isometric-equiv-Metric-Space-WIP' A B
+ equiv-isometric-equiv-isometric-equiv-Metric-Space-WIP' =
+ equiv-tot
+ ( λ f →
+ equiv-tot
+ ( λ e →
+ equiv-eq (ap (is-isometry-Metric-Space-WIP A B) refl))) ∘e
+ associative-Σ
+ ( type-function-Metric-Space-WIP A B)
+ ( is-equiv)
+ ( is-isometry-Metric-Space-WIP A B ∘ map-equiv)
+```
+
+### Isometric equivalences between metric spaces characterize their equality
+
+```agda
+module _
+ {l1 l2 : Level}
+ (A B : Metric-Space-WIP l1 l2)
+ where
+
+ equiv-eq-isometric-equiv-Metric-Space-WIP' :
+ (A = B) ≃ isometric-equiv-Metric-Space-WIP' A B
+ equiv-eq-isometric-equiv-Metric-Space-WIP' =
+ ( equiv-isometric-equiv-isometric-equiv-Metric-Space-WIP' A B) ∘e
+ ( equiv-eq-isometric-equiv-Metric-Space-WIP A B)
+```
+
+### The existence of invertibe isometries between metric spaces is torsorial
+
+```agda
+module _
+ {l1 l2 : Level}
+ (A : Metric-Space-WIP l1 l2)
+ where
+
+ is-torsorial-isometric-equiv-Metric-Space-WIP' :
+ is-torsorial (isometric-equiv-Metric-Space-WIP' A)
+ is-torsorial-isometric-equiv-Metric-Space-WIP' =
+ is-contr-equiv'
+ ( Σ (Metric-Space-WIP l1 l2) (Id A))
+ ( equiv-tot (equiv-eq-isometric-equiv-Metric-Space-WIP' A))
+ ( is-torsorial-Id A)
+```
diff --git a/src/metric-spaces/extensional-pseudometric-spaces-WIP.lagda.md b/src/metric-spaces/extensional-pseudometric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..88e1883bee
--- /dev/null
+++ b/src/metric-spaces/extensional-pseudometric-spaces-WIP.lagda.md
@@ -0,0 +1,190 @@
+# Extensional pseudometric spaces (WIP)
+
+```agda
+module metric-spaces.extensional-pseudometric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.equivalences
+open import foundation.function-types
+open import foundation.fundamental-theorem-of-identity-types
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.sets
+open import foundation.subtypes
+open import foundation.torsorial-type-families
+open import foundation.transport-along-identifications
+open import foundation.universe-levels
+
+open import metric-spaces.pseudometric-spaces-WIP
+open import metric-spaces.similarity-of-elements-pseudometric-spaces
+```
+
+
+
+## Idea
+
+A [pseudometric space](metric-spaces.pseudometric-spaces-WIP.md) is called
+{{#concept "extensional" Disambiguation="pseudometric space" Agda=is-extensional-Pseudometric-Space-WIP}}
+if any of the following equivalent condition holds:
+
+- any [similar](metric-spaces.similarity-of-elements-pseudometric-spaces.md)
+ elements are [identical](foundation-core.identity-types.md);
+- the similarity relation has [propositional](foundation.propositions.md)
+ fibers;
+- the similarity relation is [torsorial](foundation.torsorial-type-families.md).
+
+The carrier type of an extensional pseudometric space is a
+[set](foundation.sets.md) and the
+[discrete pseudometric structure](metric-spaces.discrete-premetric-structures.md)
+over a set is extensional.
+
+## Definitions
+
+### The property of being an extensional pseudometric space
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ where
+
+ is-extensional-prop-Pseudometric-Space-WIP : Prop (l1 ⊔ l2)
+ is-extensional-prop-Pseudometric-Space-WIP =
+ Π-Prop
+ ( type-Pseudometric-Space-WIP A)
+ ( is-prop-Prop ∘
+ Σ (type-Pseudometric-Space-WIP A) ∘
+ sim-Pseudometric-Space-WIP A)
+
+ is-extensional-Pseudometric-Space-WIP : UU (l1 ⊔ l2)
+ is-extensional-Pseudometric-Space-WIP =
+ type-Prop is-extensional-prop-Pseudometric-Space-WIP
+
+ is-prop-is-extensional-Pseudometric-Space-WIP :
+ is-prop is-extensional-Pseudometric-Space-WIP
+ is-prop-is-extensional-Pseudometric-Space-WIP =
+ is-prop-type-Prop is-extensional-prop-Pseudometric-Space-WIP
+```
+
+### Tightness of a pseudometric space
+
+A pseudometric space is
+{{#concept "tight" Disambiguation="pseudometric" Agda=is-tight-Pseudometric-Space-WIP}}
+if any two
+[similar](metric-spaces.similarity-of-elements-pseudometric-spaces.md) elements
+are [equal](foundation-core.identity-types.md).
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ where
+
+ is-tight-Pseudometric-Space-WIP : UU (l1 ⊔ l2)
+ is-tight-Pseudometric-Space-WIP =
+ (x y : type-Pseudometric-Space-WIP A) →
+ sim-Pseudometric-Space-WIP A x y →
+ x = y
+```
+
+## Properties
+
+### Any tight pseudometric space is extensional
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ (T : is-tight-Pseudometric-Space-WIP A)
+ where
+
+ is-extensional-is-tight-Pseudometric-Space :
+ is-extensional-Pseudometric-Space-WIP A
+ is-extensional-is-tight-Pseudometric-Space x =
+ is-prop-all-elements-equal
+ ( λ (u , I) (v , J) →
+ eq-type-subtype
+ ( sim-prop-Pseudometric-Space-WIP A x)
+ ( inv (T x u I) ∙ T x v J))
+```
+
+### Characterization of equality in an extensional pseudometric space
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ (E : is-extensional-Pseudometric-Space-WIP A)
+ where
+
+ is-torsorial-sim-is-extensional-Pseudometric-Space-WIP :
+ (x : type-Pseudometric-Space-WIP A) →
+ is-torsorial (sim-Pseudometric-Space-WIP A x)
+ is-torsorial-sim-is-extensional-Pseudometric-Space-WIP x =
+ is-proof-irrelevant-is-prop
+ ( E x)
+ ( x , refl-sim-Pseudometric-Space-WIP A x)
+
+ is-fiberwise-equiv-sim-eq-is-extensional-Pseudometric-Space-WIP :
+ (x y : type-Pseudometric-Space-WIP A) →
+ is-equiv (sim-eq-Pseudometric-Space-WIP A x y)
+ is-fiberwise-equiv-sim-eq-is-extensional-Pseudometric-Space-WIP x =
+ fundamental-theorem-id
+ ( is-torsorial-sim-is-extensional-Pseudometric-Space-WIP x)
+ ( sim-eq-Pseudometric-Space-WIP A x)
+
+ equiv-sim-eq-is-extensional-Pseudometric-Space-WIP :
+ (x y : type-Pseudometric-Space-WIP A) →
+ (x = y) ≃ (sim-Pseudometric-Space-WIP A x y)
+ equiv-sim-eq-is-extensional-Pseudometric-Space-WIP x y =
+ ( sim-eq-Pseudometric-Space-WIP A x y) ,
+ ( is-fiberwise-equiv-sim-eq-is-extensional-Pseudometric-Space-WIP x y)
+
+ eq-sim-is-extensional-Pseudometric-Space-WIP :
+ (x y : type-Pseudometric-Space-WIP A) →
+ sim-Pseudometric-Space-WIP A x y →
+ x = y
+ eq-sim-is-extensional-Pseudometric-Space-WIP x y =
+ map-inv-equiv (equiv-sim-eq-is-extensional-Pseudometric-Space-WIP x y)
+```
+
+### Any extensional pseudometric is tight
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ (E : is-extensional-Pseudometric-Space-WIP A)
+ where
+
+ is-tight-is-extensional-Pseudometric-Space-WIP :
+ is-tight-Pseudometric-Space-WIP A
+ is-tight-is-extensional-Pseudometric-Space-WIP =
+ eq-sim-is-extensional-Pseudometric-Space-WIP A E
+```
+
+### The carrier type of an extensional pseudometric space is a set
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ (E : is-extensional-Pseudometric-Space-WIP A)
+ where
+
+ is-set-type-is-extensional-Pseudometric-Space-WIP :
+ is-set (type-Pseudometric-Space-WIP A)
+ is-set-type-is-extensional-Pseudometric-Space-WIP x y =
+ is-prop-is-equiv
+ ( is-fiberwise-equiv-sim-eq-is-extensional-Pseudometric-Space-WIP
+ ( A)
+ ( E)
+ ( x)
+ ( y))
+ ( is-prop-sim-Pseudometric-Space-WIP A x y)
+```
+
+## See also
+
+- [metric spaces](metric-spaces.metric-spaces-WIP.md): the type of extensional
+ pseudometric spaces.
diff --git a/src/metric-spaces/isometries-metric-spaces-WIP.lagda.md b/src/metric-spaces/isometries-metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..f892cc239c
--- /dev/null
+++ b/src/metric-spaces/isometries-metric-spaces-WIP.lagda.md
@@ -0,0 +1,434 @@
+# Isometries between metric spaces (WIP)
+
+```agda
+module metric-spaces.isometries-metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.binary-transport
+open import foundation.dependent-pair-types
+open import foundation.embeddings
+open import foundation.equivalences
+open import foundation.function-extensionality
+open import foundation.function-types
+open import foundation.homotopies
+open import foundation.identity-types
+open import foundation.injective-maps
+open import foundation.logical-equivalences
+open import foundation.propositional-truncations
+open import foundation.propositions
+open import foundation.sequences
+open import foundation.sets
+open import foundation.subtypes
+open import foundation.univalence
+open import foundation.universe-levels
+
+open import metric-spaces.metric-spaces-WIP
+open import metric-spaces.preimage-rational-neighborhoods
+open import metric-spaces.rational-neighborhoods
+```
+
+
+
+## Idea
+
+A [function](metric-spaces.functions-metric-spaces.md) between
+[metric spaces](metric-spaces.metric-spaces.md) is an
+{{#concept "isometry" Disambiguation="between metric spaces" Agda=is-isometry-Metric-Space-WIP}}
+if the [rational neighborhood relation](metric-spaces.rational-neighborhoods.md)
+on `A` is equivalent to the
+[preimage](metric-spaces.preimage-rational-neighborhoods.md) by `f` of the
+rational neighborhood relation on `B`. I.e., upper bounds on the distance
+between two points in `A` are exactly the upper bounds of the distance between
+their images in `B`.
+
+## Definitions
+
+### The property of being a isometry between metric spaces
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (f : type-function-Metric-Space-WIP A B)
+ where
+
+ is-isometry-prop-Metric-Space-WIP : Prop (l1 ⊔ l2 ⊔ l2')
+ is-isometry-prop-Metric-Space-WIP =
+ Eq-prop-Rational-Neighborhood-Relation
+ ( neighborhood-prop-Metric-Space-WIP A)
+ ( preimage-Rational-Neighborhood-Relation
+ ( f)
+ ( neighborhood-prop-Metric-Space-WIP B))
+
+ is-isometry-Metric-Space-WIP : UU (l1 ⊔ l2 ⊔ l2')
+ is-isometry-Metric-Space-WIP =
+ type-Prop is-isometry-prop-Metric-Space-WIP
+
+ is-prop-is-isometry-Metric-Space-WIP :
+ is-prop is-isometry-Metric-Space-WIP
+ is-prop-is-isometry-Metric-Space-WIP =
+ is-prop-type-Prop is-isometry-prop-Metric-Space-WIP
+```
+
+### The set of isometries between metric spaces
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ where
+
+ set-isometry-Metric-Space-WIP : Set (l1 ⊔ l2 ⊔ l1' ⊔ l2')
+ set-isometry-Metric-Space-WIP =
+ set-subset
+ ( set-function-Metric-Space-WIP A B)
+ ( is-isometry-prop-Metric-Space-WIP A B)
+
+ isometry-Metric-Space-WIP : UU (l1 ⊔ l2 ⊔ l1' ⊔ l2')
+ isometry-Metric-Space-WIP = type-Set set-isometry-Metric-Space-WIP
+
+ is-set-isometry-Metric-Space-WIP : is-set isometry-Metric-Space-WIP
+ is-set-isometry-Metric-Space-WIP =
+ is-set-type-Set set-isometry-Metric-Space-WIP
+
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (f : isometry-Metric-Space-WIP A B)
+ where
+
+ map-isometry-Metric-Space-WIP : type-function-Metric-Space-WIP A B
+ map-isometry-Metric-Space-WIP = pr1 f
+
+ is-isometry-map-isometry-Metric-Space-WIP :
+ is-isometry-Metric-Space-WIP A B map-isometry-Metric-Space-WIP
+ is-isometry-map-isometry-Metric-Space-WIP = pr2 f
+```
+
+## Properties
+
+### The identity function on a metric space is an isometry
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ where
+
+ is-isometry-id-Metric-Space-WIP :
+ is-isometry-Metric-Space-WIP A A (λ x → x)
+ is-isometry-id-Metric-Space-WIP d x y = id-iff
+
+ isometry-id-Metric-Space-WIP : isometry-Metric-Space-WIP A A
+ isometry-id-Metric-Space-WIP =
+ (λ x → x) , is-isometry-id-Metric-Space-WIP
+```
+
+### Equality of isometries in metric spaces is equivalent to homotopies between their carrier maps
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (f g : isometry-Metric-Space-WIP A B)
+ where
+
+ equiv-eq-htpy-map-isometry-Metric-Space-WIP :
+ (f = g) ≃
+ (map-isometry-Metric-Space-WIP A B f ~ map-isometry-Metric-Space-WIP A B g)
+ equiv-eq-htpy-map-isometry-Metric-Space-WIP =
+ equiv-funext ∘e
+ extensionality-type-subtype'
+ ( is-isometry-prop-Metric-Space-WIP A B)
+ ( f)
+ ( g)
+
+ htpy-eq-map-isometry-Metric-Space-WIP :
+ (f = g) →
+ (map-isometry-Metric-Space-WIP A B f ~ map-isometry-Metric-Space-WIP A B g)
+ htpy-eq-map-isometry-Metric-Space-WIP =
+ map-equiv equiv-eq-htpy-map-isometry-Metric-Space-WIP
+
+ eq-htpy-map-isometry-Metric-Space-WIP :
+ ( map-isometry-Metric-Space-WIP A B f ~
+ map-isometry-Metric-Space-WIP A B g) →
+ (f = g)
+ eq-htpy-map-isometry-Metric-Space-WIP =
+ map-inv-equiv equiv-eq-htpy-map-isometry-Metric-Space-WIP
+```
+
+### An isometry preserves and reflects neighborhoods
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (f : isometry-Metric-Space-WIP A B)
+ where
+
+ preserves-neighborhood-map-isometry-Metric-Space-WIP :
+ (d : ℚ⁺) (x y : type-Metric-Space-WIP A) →
+ neighborhood-Metric-Space-WIP A d x y →
+ neighborhood-Metric-Space-WIP
+ ( B)
+ ( d)
+ ( map-isometry-Metric-Space-WIP A B f x)
+ ( map-isometry-Metric-Space-WIP A B f y)
+ preserves-neighborhood-map-isometry-Metric-Space-WIP d x y =
+ forward-implication
+ ( is-isometry-map-isometry-Metric-Space-WIP A B f d x y)
+
+ reflects-neighborhood-map-isometry-Metric-Space-WIP :
+ (d : ℚ⁺) (x y : type-Metric-Space-WIP A) →
+ neighborhood-Metric-Space-WIP
+ ( B)
+ ( d)
+ ( map-isometry-Metric-Space-WIP A B f x)
+ ( map-isometry-Metric-Space-WIP A B f y) →
+ neighborhood-Metric-Space-WIP A d x y
+ reflects-neighborhood-map-isometry-Metric-Space-WIP d x y =
+ backward-implication
+ ( is-isometry-map-isometry-Metric-Space-WIP A B f d x y)
+```
+
+### Composition of isometries
+
+```agda
+module _
+ {l1a l2a l1b l2b l1c l2c : Level}
+ (A : Metric-Space-WIP l1a l2a)
+ (B : Metric-Space-WIP l1b l2b)
+ (C : Metric-Space-WIP l1c l2c)
+ where
+
+ is-isometry-comp-is-isometry-Metric-Space-WIP :
+ (g : type-function-Metric-Space-WIP B C) →
+ (f : type-function-Metric-Space-WIP A B) →
+ is-isometry-Metric-Space-WIP B C g →
+ is-isometry-Metric-Space-WIP A B f →
+ is-isometry-Metric-Space-WIP A C (g ∘ f)
+ is-isometry-comp-is-isometry-Metric-Space-WIP g f H K d x y =
+ H d (f x) (f y) ∘iff K d x y
+
+ comp-isometry-Metric-Space-WIP :
+ isometry-Metric-Space-WIP B C →
+ isometry-Metric-Space-WIP A B →
+ isometry-Metric-Space-WIP A C
+ comp-isometry-Metric-Space-WIP g f =
+ ( map-isometry-Metric-Space-WIP B C g ∘
+ map-isometry-Metric-Space-WIP A B f) ,
+ ( is-isometry-comp-is-isometry-Metric-Space-WIP
+ ( map-isometry-Metric-Space-WIP B C g)
+ ( map-isometry-Metric-Space-WIP A B f)
+ ( is-isometry-map-isometry-Metric-Space-WIP B C g)
+ ( is-isometry-map-isometry-Metric-Space-WIP A B f))
+```
+
+### Unit laws for composition of isometries between metric spaces
+
+```agda
+module _
+ {l1a l2a l1b l2b : Level}
+ (A : Metric-Space-WIP l1a l2a)
+ (B : Metric-Space-WIP l1b l2b)
+ (f : isometry-Metric-Space-WIP A B)
+ where
+
+ left-unit-law-comp-isometry-Metric-Space-WIP :
+ ( comp-isometry-Metric-Space-WIP A B B
+ (isometry-id-Metric-Space-WIP B)
+ ( f)) =
+ ( f)
+ left-unit-law-comp-isometry-Metric-Space-WIP =
+ eq-htpy-map-isometry-Metric-Space-WIP
+ ( A)
+ ( B)
+ ( comp-isometry-Metric-Space-WIP
+ ( A)
+ ( B)
+ ( B)
+ (isometry-id-Metric-Space-WIP B)
+ ( f))
+ ( f)
+ ( λ x → refl)
+
+ right-unit-law-comp-isometry-Metric-Space-WIP :
+ ( comp-isometry-Metric-Space-WIP A A B
+ ( f)
+ ( isometry-id-Metric-Space-WIP A)) =
+ ( f)
+ right-unit-law-comp-isometry-Metric-Space-WIP =
+ eq-htpy-map-isometry-Metric-Space-WIP
+ ( A)
+ ( B)
+ ( f)
+ ( comp-isometry-Metric-Space-WIP
+ ( A)
+ ( A)
+ ( B)
+ ( f)
+ ( isometry-id-Metric-Space-WIP A))
+ ( λ x → refl)
+```
+
+### Associativity of composition of isometries between metric spaces
+
+```agda
+module _
+ {l1a l2a l1b l2b l1c l2c l1d l2d : Level}
+ (A : Metric-Space-WIP l1a l2a)
+ (B : Metric-Space-WIP l1b l2b)
+ (C : Metric-Space-WIP l1c l2c)
+ (D : Metric-Space-WIP l1d l2d)
+ (h : isometry-Metric-Space-WIP C D)
+ (g : isometry-Metric-Space-WIP B C)
+ (f : isometry-Metric-Space-WIP A B)
+ where
+
+ associative-comp-isometry-Metric-Space-WIP :
+ ( comp-isometry-Metric-Space-WIP A B D
+ ( comp-isometry-Metric-Space-WIP B C D h g)
+ ( f)) =
+ ( comp-isometry-Metric-Space-WIP A C D
+ ( h)
+ ( comp-isometry-Metric-Space-WIP A B C g f))
+ associative-comp-isometry-Metric-Space-WIP =
+ eq-htpy-map-isometry-Metric-Space-WIP
+ ( A)
+ ( D)
+ ( comp-isometry-Metric-Space-WIP A B D
+ ( comp-isometry-Metric-Space-WIP B C D h g)
+ ( f))
+ ( comp-isometry-Metric-Space-WIP A C D
+ ( h)
+ ( comp-isometry-Metric-Space-WIP A B C g f))
+ ( λ x → refl)
+```
+
+### The inverse of an isometric equivalence is an isometry
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ where
+
+ is-isometry-map-inv-is-equiv-is-isometry-Metric-Space-WIP :
+ (f : type-function-Metric-Space-WIP A B) →
+ is-isometry-Metric-Space-WIP A B f →
+ (E : is-equiv f) →
+ is-isometry-Metric-Space-WIP B A (map-inv-is-equiv E)
+ is-isometry-map-inv-is-equiv-is-isometry-Metric-Space-WIP f I E d x y =
+ logical-equivalence-reasoning
+ ( neighborhood-Metric-Space-WIP B d x y)
+ ↔ ( neighborhood-Metric-Space-WIP B d
+ ( f (map-inv-is-equiv E x))
+ ( f (map-inv-is-equiv E y)))
+ by
+ binary-tr
+ ( λ u v →
+ ( neighborhood-Metric-Space-WIP B d x y) ↔
+ ( neighborhood-Metric-Space-WIP B d u v))
+ ( inv (is-section-map-inv-is-equiv E x))
+ ( inv (is-section-map-inv-is-equiv E y))
+ ( id-iff)
+ ↔ ( neighborhood-Metric-Space-WIP A d
+ ( map-inv-is-equiv E x)
+ ( map-inv-is-equiv E y))
+ by
+ inv-iff
+ ( I d (map-inv-is-equiv E x) (map-inv-is-equiv E y))
+
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (f : isometry-Metric-Space-WIP A B)
+ (E : is-equiv (map-isometry-Metric-Space-WIP A B f))
+ where
+
+ isometry-inv-is-equiv-isometry-Metric-Space-WIP :
+ isometry-Metric-Space-WIP B A
+ isometry-inv-is-equiv-isometry-Metric-Space-WIP =
+ ( map-inv-is-equiv E) ,
+ ( is-isometry-map-inv-is-equiv-is-isometry-Metric-Space-WIP
+ ( A)
+ ( B)
+ ( map-isometry-Metric-Space-WIP A B f)
+ ( is-isometry-map-isometry-Metric-Space-WIP A B f)
+ ( E))
+
+ is-section-isometry-inv-is-equiv-isometry-Metric-Space-WIP :
+ ( comp-isometry-Metric-Space-WIP
+ B
+ A
+ B
+ f
+ isometry-inv-is-equiv-isometry-Metric-Space-WIP) =
+ ( isometry-id-Metric-Space-WIP B)
+ is-section-isometry-inv-is-equiv-isometry-Metric-Space-WIP =
+ eq-htpy-map-isometry-Metric-Space-WIP
+ ( B)
+ ( B)
+ ( comp-isometry-Metric-Space-WIP
+ B
+ A
+ B
+ f
+ isometry-inv-is-equiv-isometry-Metric-Space-WIP)
+ ( isometry-id-Metric-Space-WIP B)
+ ( is-section-map-inv-is-equiv E)
+
+ is-retraction-isometry-inv-is-equiv-isometry-Metric-Space-WIP :
+ ( comp-isometry-Metric-Space-WIP
+ A
+ B
+ A
+ isometry-inv-is-equiv-isometry-Metric-Space-WIP
+ f) =
+ ( isometry-id-Metric-Space-WIP A)
+ is-retraction-isometry-inv-is-equiv-isometry-Metric-Space-WIP =
+ eq-htpy-map-isometry-Metric-Space-WIP
+ ( A)
+ ( A)
+ ( comp-isometry-Metric-Space-WIP
+ A
+ B
+ A
+ isometry-inv-is-equiv-isometry-Metric-Space-WIP
+ f)
+ ( isometry-id-Metric-Space-WIP A)
+ ( is-retraction-map-inv-is-equiv E)
+```
+
+### Any isometry between metric spaces is an embedding
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (f : isometry-Metric-Space-WIP A B)
+ where
+
+ is-injective-map-isometry-Metric-Space-WIP :
+ is-injective (map-isometry-Metric-Space-WIP A B f)
+ is-injective-map-isometry-Metric-Space-WIP H =
+ eq-sim-Metric-Space-WIP
+ ( A)
+ ( _)
+ ( _)
+ ( λ d →
+ backward-implication
+ ( is-isometry-map-isometry-Metric-Space-WIP A B f d _ _)
+ ( sim-eq-Metric-Space-WIP B _ _ H d))
+
+ is-emb-map-isometry-Metric-Space-WIP :
+ is-emb (map-isometry-Metric-Space-WIP A B f)
+ is-emb-map-isometry-Metric-Space-WIP =
+ is-emb-is-injective
+ ( is-set-type-Metric-Space-WIP B)
+ ( is-injective-map-isometry-Metric-Space-WIP)
+```
diff --git a/src/metric-spaces/limits-of-cauchy-approximations-metric-spaces-WIP.lagda.md b/src/metric-spaces/limits-of-cauchy-approximations-metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..d98457829f
--- /dev/null
+++ b/src/metric-spaces/limits-of-cauchy-approximations-metric-spaces-WIP.lagda.md
@@ -0,0 +1,144 @@
+# Limits of Cauchy approximations in metric spaces (WIP)
+
+```agda
+module metric-spaces.limits-of-cauchy-approximations-metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.subtypes
+open import foundation.transport-along-identifications
+open import foundation.universe-levels
+
+open import metric-spaces.cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.metric-spaces-WIP
+```
+
+
+
+## Idea
+
+A [Cauchy approximation](metric-spaces.cauchy-approximations-metric-spaces.md)
+`f : ℚ⁺ → A` in a [metric space](metric-spaces.metric-spaces.md) `A` has a
+{{#concept "limit" Disambiguation="of a Cauchy approximation in a metric space Agda=is-limit-cauchy-approximation-Metric-Space-WIP}}
+`x : A` if `f ε` is near `x` for small `ε : ℚ⁺`; more precisely, if `f ε` is in
+a `ε + δ`-[neighborhood](metric-spaces.rational-neighborhoods.md) of `x` for all
+`ε δ : ℚ⁺`.
+
+## Definitions
+
+### The property of having a limit in a metric space
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ (f : cauchy-approximation-Metric-Space-WIP A)
+ where
+
+ is-limit-cauchy-approximation-prop-Metric-Space-WIP :
+ type-Metric-Space-WIP A → Prop l2
+ is-limit-cauchy-approximation-prop-Metric-Space-WIP lim =
+ Π-Prop
+ ( ℚ⁺)
+ ( λ ε →
+ Π-Prop
+ ( ℚ⁺)
+ ( λ δ →
+ neighborhood-prop-Metric-Space-WIP
+ ( A)
+ ( ε +ℚ⁺ δ)
+ ( map-cauchy-approximation-Metric-Space-WIP A f ε)
+ ( lim)))
+
+ is-limit-cauchy-approximation-Metric-Space-WIP :
+ type-Metric-Space-WIP A → UU l2
+ is-limit-cauchy-approximation-Metric-Space-WIP =
+ type-Prop ∘ is-limit-cauchy-approximation-prop-Metric-Space-WIP
+```
+
+## Properties
+
+### Limits in a metric space are unique
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ (f : cauchy-approximation-Metric-Space-WIP A)
+ (x y : type-Metric-Space-WIP A)
+ where
+
+ all-sim-is-limit-cauchy-approximation-Metric-Space-WIP :
+ is-limit-cauchy-approximation-Metric-Space-WIP A f x →
+ is-limit-cauchy-approximation-Metric-Space-WIP A f y →
+ sim-Metric-Space-WIP A x y
+ all-sim-is-limit-cauchy-approximation-Metric-Space-WIP lim-x lim-y d =
+ let
+ (ε , δ , ε+δ=d) = split-ℚ⁺ d
+ θ = mediant-zero-min-ℚ⁺ ε δ
+ θ<ε = le-left-mediant-zero-min-ℚ⁺ ε δ
+ θ<δ = le-right-mediant-zero-min-ℚ⁺ ε δ
+ ε' = le-diff-ℚ⁺ θ ε θ<ε
+ δ' = le-diff-ℚ⁺ θ δ θ<δ
+ fθ = map-cauchy-approximation-Metric-Space-WIP A f θ
+
+ Nεx : neighborhood-Metric-Space-WIP A ε fθ x
+ Nεx =
+ tr
+ ( is-upper-bound-dist-Metric-Space-WIP A fθ x)
+ ( right-diff-law-add-ℚ⁺ θ ε θ<ε)
+ ( lim-x θ ε')
+
+ Nδy : neighborhood-Metric-Space-WIP A δ fθ y
+ Nδy =
+ tr
+ ( is-upper-bound-dist-Metric-Space-WIP A fθ y)
+ ( right-diff-law-add-ℚ⁺ θ δ θ<δ)
+ ( lim-y θ δ')
+
+ Nxy : neighborhood-Metric-Space-WIP A (ε +ℚ⁺ δ) x y
+ Nxy =
+ triangular-neighborhood-Metric-Space-WIP
+ ( A)
+ ( x)
+ ( fθ)
+ ( y)
+ ( ε)
+ ( δ)
+ ( Nδy)
+ ( symmetric-neighborhood-Metric-Space-WIP A ε fθ x Nεx)
+ in
+ tr
+ ( is-upper-bound-dist-Metric-Space-WIP A x y)
+ ( ε+δ=d)
+ ( Nxy)
+
+ all-eq-is-limit-cauchy-approximation-Metric-Space-WIP :
+ is-limit-cauchy-approximation-Metric-Space-WIP A f x →
+ is-limit-cauchy-approximation-Metric-Space-WIP A f y →
+ x = y
+ all-eq-is-limit-cauchy-approximation-Metric-Space-WIP lim-x lim-y =
+ eq-sim-Metric-Space-WIP
+ ( A)
+ ( x)
+ ( y)
+ ( all-sim-is-limit-cauchy-approximation-Metric-Space-WIP lim-x lim-y)
+```
+
+## See also
+
+- [convergent cauchy approximations](metric-spaces.convergent-cauchy-approximations-metric-spaces-WIP.md):
+ the type of Cauchy approximations with a limit.
+
+## References
+
+Our definition of limit of Cauchy approximation follows Definition 11.2.10 of
+{{#cite UF13}}.
+
+{{#bibliography}}
diff --git a/src/metric-spaces/limits-of-functions-metric-spaces.lagda.md b/src/metric-spaces/limits-of-functions-metric-spaces.lagda.md
new file mode 100644
index 0000000000..af4cc8d527
--- /dev/null
+++ b/src/metric-spaces/limits-of-functions-metric-spaces.lagda.md
@@ -0,0 +1,71 @@
+# Limits of functions between metric spaces
+
+```agda
+module metric-spaces.limits-of-functions-metric-spaces where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.existential-quantification
+open import foundation.inhabited-subtypes
+open import foundation.propositional-truncations
+open import foundation.propositions
+open import foundation.subtypes
+open import foundation.universe-levels
+
+open import metric-spaces.metric-spaces-WIP
+```
+
+
+
+## Idea
+
+A [function](metric-spaces.functions-metric-spaces.md) `f` between
+[metric spaces](metric-spaces.metric-spaces.md) `X` and `Y` has a
+{{#concept "limit" Disambiguation="of function between metric spaces at a point" Agda=is-pt-limit-function-Metric-Space-WIP}}
+`y : Y` at a point `x : X` if there exists a function `m : ℚ⁺ → ℚ⁺` such that
+whenever `x'` is in an `m ε`-neighborhood of `x`, `f x'` is in an
+`ε`-neighborhood of `y`. `m` is called a limit modulus of `f` at `x`.
+
+## Definitions
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level}
+ (X : Metric-Space-WIP l1 l2)
+ (Y : Metric-Space-WIP l3 l4)
+ (f : type-function-Metric-Space-WIP X Y)
+ (x : type-Metric-Space-WIP X)
+ (y : type-Metric-Space-WIP Y)
+ where
+
+ is-modulus-of-pt-limit-prop-function-Metric-Space-WIP :
+ (ℚ⁺ → ℚ⁺) → Prop (l1 ⊔ l2 ⊔ l4)
+ is-modulus-of-pt-limit-prop-function-Metric-Space-WIP m =
+ Π-Prop
+ ( ℚ⁺)
+ ( λ ε →
+ Π-Prop
+ ( type-Metric-Space-WIP X)
+ ( λ x' →
+ neighborhood-prop-Metric-Space-WIP X (m ε) x x' ⇒
+ neighborhood-prop-Metric-Space-WIP Y ε y (f x')))
+
+ is-modulus-of-pt-limit-function-Metric-Space-WIP :
+ (ℚ⁺ → ℚ⁺) → UU (l1 ⊔ l2 ⊔ l4)
+ is-modulus-of-pt-limit-function-Metric-Space-WIP m =
+ type-Prop (is-modulus-of-pt-limit-prop-function-Metric-Space-WIP m)
+
+ is-pt-limit-prop-function-Metric-Space-WIP : Prop (l1 ⊔ l2 ⊔ l4)
+ is-pt-limit-prop-function-Metric-Space-WIP =
+ is-inhabited-subtype-Prop
+ is-modulus-of-pt-limit-prop-function-Metric-Space-WIP
+
+ is-pt-limit-function-Metric-Space-WIP : UU (l1 ⊔ l2 ⊔ l4)
+ is-pt-limit-function-Metric-Space-WIP =
+ type-Prop is-pt-limit-prop-function-Metric-Space-WIP
+```
diff --git a/src/metric-spaces/metric-space-of-rational-numbers-WIP.lagda.md b/src/metric-spaces/metric-space-of-rational-numbers-WIP.lagda.md
new file mode 100644
index 0000000000..506eecbe30
--- /dev/null
+++ b/src/metric-spaces/metric-space-of-rational-numbers-WIP.lagda.md
@@ -0,0 +1,459 @@
+# The standard metric space of the rational numbers (WIP)
+
+```agda
+{-# OPTIONS --lossy-unification #-}
+
+module metric-spaces.metric-space-of-rational-numbers-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.absolute-value-rational-numbers
+open import elementary-number-theory.addition-rational-numbers
+open import elementary-number-theory.difference-rational-numbers
+open import elementary-number-theory.distance-rational-numbers
+open import elementary-number-theory.inequality-rational-numbers
+open import elementary-number-theory.multiplication-rational-numbers
+open import elementary-number-theory.nonnegative-rational-numbers
+open import elementary-number-theory.positive-rational-numbers
+open import elementary-number-theory.rational-numbers
+open import elementary-number-theory.strict-inequality-rational-numbers
+
+open import foundation.action-on-identifications-functions
+open import foundation.binary-transport
+open import foundation.cartesian-product-types
+open import foundation.dependent-pair-types
+open import foundation.diagonal-maps-cartesian-products-of-types
+open import foundation.empty-types
+open import foundation.equivalences
+open import foundation.function-types
+open import foundation.functoriality-cartesian-product-types
+open import foundation.identity-types
+open import foundation.logical-equivalences
+open import foundation.propositional-truncations
+open import foundation.propositions
+open import foundation.transport-along-identifications
+open import foundation.universe-levels
+
+open import metric-spaces.cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.convergent-cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.extensional-pseudometric-spaces-WIP
+open import metric-spaces.isometries-metric-spaces-WIP
+open import metric-spaces.limits-of-cauchy-approximations-metric-spaces-WIP
+open import metric-spaces.metric-spaces-WIP
+open import metric-spaces.monotonic-rational-neighborhoods
+open import metric-spaces.pseudometric-spaces-WIP
+open import metric-spaces.rational-neighborhoods
+open import metric-spaces.reflexive-rational-neighborhoods
+open import metric-spaces.saturated-rational-neighborhoods
+open import metric-spaces.short-functions-metric-spaces-WIP
+open import metric-spaces.symmetric-rational-neighborhoods
+open import metric-spaces.triangular-rational-neighborhoods
+```
+
+
+
+## Idea
+
+[Inequality](elementary-number-theory.inequality-rational-numbers.md) on the
+[rational numbers](elementary-number-theory.rational-numbers.md) induces a
+[premetric](metric-spaces.premetric-structures.md) on `ℚ` where `x y : ℚ` are in
+a `d`-neighborhood when `y ≤ x + d` and `x ≤ y + d`, i.e. upper bounds on the
+distance between `x` and `y` are upper bounds of both `y - x` and `x - y`. This
+is a [metric structure](metric-spaces.metric-structures.md) on `ℚ` that defines
+the
+{{#concept "standard metric space of rational numbers" Agda=metric-space-ℚ}}.
+
+## Definitions
+
+### The standard saturated saturated neighborhood relation on the rational numbers
+
+```agda
+lower-neighborhood-prop-ℚ : (d : ℚ⁺) (x y : ℚ) → Prop lzero
+lower-neighborhood-prop-ℚ d x y =
+ leq-ℚ-Prop y (x +ℚ (rational-ℚ⁺ d))
+
+lower-neighborhood-ℚ : (d : ℚ⁺) (x y : ℚ) → UU lzero
+lower-neighborhood-ℚ d x y = type-Prop (lower-neighborhood-prop-ℚ d x y)
+
+is-prop-lower-neighborhood-ℚ :
+ (d : ℚ⁺) (x y : ℚ) → is-prop (lower-neighborhood-ℚ d x y)
+is-prop-lower-neighborhood-ℚ d x y =
+ is-prop-type-Prop (lower-neighborhood-prop-ℚ d x y)
+
+neighborhood-prop-ℚ : Rational-Neighborhood-Relation lzero ℚ
+neighborhood-prop-ℚ d x y =
+ product-Prop
+ ( lower-neighborhood-prop-ℚ d x y)
+ ( lower-neighborhood-prop-ℚ d y x)
+
+neighborhood-ℚ : (d : ℚ⁺) (x y : ℚ) → UU lzero
+neighborhood-ℚ d x y = type-Prop (neighborhood-prop-ℚ d x y)
+```
+
+## Properties
+
+### The standard premetric on the rational numbers is a metric
+
+```agda
+is-reflexive-neighborhood-ℚ :
+ is-reflexive-Rational-Neighborhood-Relation neighborhood-prop-ℚ
+is-reflexive-neighborhood-ℚ d x =
+ diagonal-product
+ ( leq-ℚ x (x +ℚ (rational-ℚ⁺ d)))
+ ( leq-le-ℚ {x} {x +ℚ (rational-ℚ⁺ d)} (le-right-add-rational-ℚ⁺ x d))
+
+is-symmetric-neighborhood-ℚ :
+ is-symmetric-Rational-Neighborhood-Relation neighborhood-prop-ℚ
+is-symmetric-neighborhood-ℚ d x y (H , K) = (K , H)
+
+is-triangular-neighborhood-ℚ :
+ is-triangular-Rational-Neighborhood-Relation neighborhood-prop-ℚ
+pr1 (is-triangular-neighborhood-ℚ x y z d₁ d₂ Hyz Hxy) =
+ tr
+ ( leq-ℚ z)
+ ( associative-add-ℚ x (rational-ℚ⁺ d₁) (rational-ℚ⁺ d₂))
+ ( transitive-leq-ℚ
+ ( z)
+ ( y +ℚ ( rational-ℚ⁺ d₂))
+ ( x +ℚ (rational-ℚ⁺ d₁) +ℚ (rational-ℚ⁺ d₂))
+ ( preserves-leq-left-add-ℚ
+ ( rational-ℚ⁺ d₂)
+ ( y)
+ ( x +ℚ (rational-ℚ⁺ d₁))
+ ( pr1 Hxy))
+ ( pr1 Hyz))
+pr2 (is-triangular-neighborhood-ℚ x y z d₁ d₂ Hyz Hxy) =
+ tr
+ ( leq-ℚ x)
+ ( ap (z +ℚ_) (commutative-add-ℚ (rational-ℚ⁺ d₂) (rational-ℚ⁺ d₁)))
+ ( tr
+ ( leq-ℚ x)
+ ( associative-add-ℚ z (rational-ℚ⁺ d₂) (rational-ℚ⁺ d₁))
+ ( transitive-leq-ℚ
+ ( x)
+ ( y +ℚ (rational-ℚ⁺ d₁))
+ ( z +ℚ (rational-ℚ⁺ d₂) +ℚ (rational-ℚ⁺ d₁))
+ ( ( preserves-leq-left-add-ℚ
+ ( rational-ℚ⁺ d₁)
+ ( y)
+ ( z +ℚ (rational-ℚ⁺ d₂))
+ ( pr2 Hyz)))
+ ( pr2 Hxy)))
+
+is-saturated-neighborhood-ℚ :
+ is-saturated-Rational-Neighborhood-Relation neighborhood-prop-ℚ
+is-saturated-neighborhood-ℚ ε x y H =
+ map-inv-equiv
+ ( equiv-leq-leq-add-positive-ℚ y (x +ℚ rational-ℚ⁺ ε))
+ ( λ δ →
+ inv-tr
+ ( leq-ℚ y)
+ ( associative-add-ℚ x (rational-ℚ⁺ ε) (rational-ℚ⁺ δ))
+ ( pr1 (H δ))) ,
+ map-inv-equiv
+ ( equiv-leq-leq-add-positive-ℚ x (y +ℚ rational-ℚ⁺ ε))
+ ( λ δ →
+ inv-tr
+ ( leq-ℚ x)
+ ( associative-add-ℚ y (rational-ℚ⁺ ε) (rational-ℚ⁺ δ))
+ ( pr2 (H δ)))
+
+pseudometric-space-ℚ : Pseudometric-Space-WIP lzero lzero
+pr1 pseudometric-space-ℚ = ℚ
+pr2 pseudometric-space-ℚ =
+ neighborhood-prop-ℚ ,
+ is-reflexive-neighborhood-ℚ ,
+ is-symmetric-neighborhood-ℚ ,
+ is-triangular-neighborhood-ℚ ,
+ is-saturated-neighborhood-ℚ
+
+is-tight-pseudometric-space-ℚ :
+ is-tight-Pseudometric-Space-WIP pseudometric-space-ℚ
+is-tight-pseudometric-space-ℚ x y H =
+ antisymmetric-leq-ℚ
+ ( x)
+ ( y)
+ ( map-inv-equiv (equiv-leq-leq-add-positive-ℚ x y) (pr2 ∘ H))
+ ( map-inv-equiv (equiv-leq-leq-add-positive-ℚ y x) (pr1 ∘ H))
+
+is-extensional-pseudometric-space-ℚ :
+ is-extensional-Pseudometric-Space-WIP pseudometric-space-ℚ
+is-extensional-pseudometric-space-ℚ =
+ is-extensional-is-tight-Pseudometric-Space
+ pseudometric-space-ℚ
+ is-tight-pseudometric-space-ℚ
+```
+
+### The standard metric space of rational numbers
+
+```agda
+metric-space-ℚ : Metric-Space-WIP lzero lzero
+metric-space-ℚ =
+ make-Metric-Space-WIP
+ ℚ
+ neighborhood-prop-ℚ
+ is-reflexive-neighborhood-ℚ
+ is-symmetric-neighborhood-ℚ
+ is-triangular-neighborhood-ℚ
+ is-saturated-neighborhood-ℚ
+ is-extensional-pseudometric-space-ℚ
+```
+
+## Properties
+
+### Relationship to the distance on rational numbers
+
+```agda
+abstract
+ leq-dist-neighborhood-ℚ :
+ (ε : ℚ⁺) (p q : ℚ) →
+ neighborhood-ℚ ε p q →
+ leq-ℚ (rational-dist-ℚ p q) (rational-ℚ⁺ ε)
+ leq-dist-neighborhood-ℚ ε⁺@(ε , _) p q (H , K) =
+ leq-dist-leq-diff-ℚ
+ ( p)
+ ( q)
+ ( ε)
+ ( swap-right-diff-leq-ℚ p ε q (leq-transpose-right-add-ℚ p q ε K))
+ ( swap-right-diff-leq-ℚ q ε p (leq-transpose-right-add-ℚ q p ε H))
+
+ neighborhood-leq-dist-ℚ :
+ (ε : ℚ⁺) (p q : ℚ) →
+ leq-ℚ (rational-dist-ℚ p q) (rational-ℚ⁺ ε) →
+ neighborhood-ℚ ε p q
+ neighborhood-leq-dist-ℚ ε⁺@(ε , _) p q |p-q|≤ε =
+ ( leq-transpose-left-diff-ℚ
+ ( q)
+ ( ε)
+ ( p)
+ ( swap-right-diff-leq-ℚ
+ ( q)
+ ( p)
+ ( ε)
+ ( transitive-leq-ℚ
+ ( q -ℚ p)
+ ( rational-dist-ℚ p q)
+ ( ε)
+ ( |p-q|≤ε)
+ ( leq-reversed-diff-dist-ℚ p q)))) ,
+ ( leq-transpose-left-diff-ℚ
+ ( p)
+ ( ε)
+ ( q)
+ ( swap-right-diff-leq-ℚ
+ ( p)
+ ( q)
+ ( ε)
+ ( transitive-leq-ℚ
+ ( p -ℚ q)
+ ( rational-dist-ℚ p q)
+ ( ε)
+ ( |p-q|≤ε)
+ ( leq-diff-dist-ℚ p q))))
+
+leq-dist-iff-neighborhood-ℚ :
+ (ε : ℚ⁺) (p q : ℚ) →
+ leq-ℚ (rational-dist-ℚ p q) (rational-ℚ⁺ ε) ↔
+ neighborhood-ℚ ε p q
+pr1 (leq-dist-iff-neighborhood-ℚ ε p q) = neighborhood-leq-dist-ℚ ε p q
+pr2 (leq-dist-iff-neighborhood-ℚ ε p q) = leq-dist-neighborhood-ℚ ε p q
+```
+
+### Addition of rational numbers is an isometry
+
+```agda
+module _
+ (x u v : ℚ) (d : ℚ⁺)
+ where
+
+ -- preserves-lower-neighborhood-add-ℚ :
+ -- lower-neighborhood-ℚ d u v →
+ -- lower-neighborhood-ℚ d (x +ℚ u) (x +ℚ v)
+ -- preserves-lower-neighborhood-add-ℚ H =
+ -- inv-tr
+ -- ( leq-ℚ (x +ℚ v))
+ -- ( associative-add-ℚ x u (rational-ℚ⁺ d))
+ -- ( preserves-leq-right-add-ℚ
+ -- ( x)
+ -- ( v)
+ -- ( u +ℚ rational-ℚ⁺ d)
+ -- ( H))
+
+ -- reflects-lower-neighborhood-add-ℚ :
+ -- lower-neighborhood-ℚ d (x +ℚ u) (x +ℚ v) →
+ -- lower-neighborhood-ℚ d u v
+ -- reflects-lower-neighborhood-add-ℚ =
+ -- ( reflects-leq-right-add-ℚ x v (u +ℚ rational-ℚ⁺ d)) ∘
+ -- ( tr (leq-ℚ (x +ℚ v)) (associative-add-ℚ x u (rational-ℚ⁺ d)))
+```
+
+```agda
+module _
+ (x : ℚ)
+ where
+
+ -- is-isometry-add-ℚ :
+ -- is-isometry-Metric-Space-WIP
+ -- ( metric-space-ℚ)
+ -- ( metric-space-ℚ)
+ -- ( add-ℚ x)
+ -- is-isometry-add-ℚ d y z =
+ -- pair
+ -- ( map-product
+ -- ( preserves-lower-neighborhood-add-ℚ x y z d)
+ -- ( preserves-lower-neighborhood-add-ℚ x z y d))
+ -- ( map-product
+ -- ( reflects-lower-neighborhood-add-ℚ x y z d)
+ -- ( reflects-lower-neighborhood-add-ℚ x z y d))
+
+ -- is-isometry-add-ℚ' :
+ -- is-isometry-Metric-Space-WIP
+ -- ( metric-space-ℚ)
+ -- ( metric-space-ℚ)
+ -- ( add-ℚ' x)
+ -- is-isometry-add-ℚ' d y z =
+ -- binary-tr
+ -- ( λ u v → neighborhood-ℚ d y z ↔ neighborhood-ℚ d u v)
+ -- ( commutative-add-ℚ x y)
+ -- ( commutative-add-ℚ x z)
+ -- ( is-isometry-add-ℚ d y z)
+```
+
+### Multiplication of rational numbers is Lipschitz
+
+```agda
+module _
+ (x : ℚ)
+ where
+
+ -- abstract
+ -- is-lipschitz-constant-succ-abs-mul-ℚ :
+ -- is-lipschitz-constant-function-Metric-Space
+ -- ( metric-space-leq-ℚ)
+ -- ( metric-space-leq-ℚ)
+ -- ( mul-ℚ x)
+ -- ( positive-succ-ℚ⁰⁺ (abs-ℚ x))
+ -- is-lipschitz-constant-succ-abs-mul-ℚ d y z H =
+ -- neighborhood-leq-leq-dist-ℚ
+ -- ( positive-succ-ℚ⁰⁺ (abs-ℚ x) *ℚ⁺ d)
+ -- ( x *ℚ y)
+ -- ( x *ℚ z)
+ -- ( tr
+ -- ( λ q →
+ -- leq-ℚ
+ -- ( rational-ℚ⁰⁺ q)
+ -- ( rational-ℚ⁺ (positive-succ-ℚ⁰⁺ (abs-ℚ x) *ℚ⁺ d)))
+ -- ( left-distributive-abs-mul-dist-ℚ x y z)
+ -- ( transitive-leq-ℚ
+ -- ( rational-ℚ⁰⁺ (abs-ℚ x *ℚ⁰⁺ dist-ℚ y z))
+ -- ( (succ-ℚ (rational-abs-ℚ x)) *ℚ (rational-dist-ℚ y z))
+ -- ( rational-ℚ⁺ (positive-succ-ℚ⁰⁺ (abs-ℚ x) *ℚ⁺ d))
+ -- ( preserves-leq-left-mul-ℚ⁺
+ -- ( positive-succ-ℚ⁰⁺ (abs-ℚ x))
+ -- ( rational-dist-ℚ y z)
+ -- ( rational-ℚ⁺ d)
+ -- ( leq-dist-neighborhood-leq-ℚ d y z H))
+ -- ( preserves-leq-right-mul-ℚ⁰⁺
+ -- ( dist-ℚ y z)
+ -- ( rational-abs-ℚ x)
+ -- ( succ-ℚ (rational-abs-ℚ x))
+ -- ( succ-leq-ℚ (rational-abs-ℚ x)))))
+
+ -- lipschitz-constant-succ-abs-mul-ℚ :
+ -- lipschitz-constant-function-Metric-Space
+ -- ( metric-space-leq-ℚ)
+ -- ( metric-space-leq-ℚ)
+ -- ( mul-ℚ x)
+ -- lipschitz-constant-succ-abs-mul-ℚ =
+ -- ( positive-succ-ℚ⁰⁺ (abs-ℚ x)) ,
+ -- ( is-lipschitz-constant-succ-abs-mul-ℚ)
+
+ -- is-lipschitz-left-mul-ℚ :
+ -- ( is-lipschitz-function-Metric-Space
+ -- ( metric-space-leq-ℚ)
+ -- ( metric-space-leq-ℚ)
+ -- ( mul-ℚ x))
+ -- is-lipschitz-left-mul-ℚ =
+ -- unit-trunc-Prop lipschitz-constant-succ-abs-mul-ℚ
+
+ -- is-lipschitz-right-mul-ℚ :
+ -- ( is-lipschitz-function-Metric-Space
+ -- ( metric-space-leq-ℚ)
+ -- ( metric-space-leq-ℚ)
+ -- ( mul-ℚ' x))
+ -- is-lipschitz-right-mul-ℚ =
+ -- is-lipschitz-htpy-function-Metric-Space
+ -- ( metric-space-leq-ℚ)
+ -- ( metric-space-leq-ℚ)
+ -- ( mul-ℚ x)
+ -- ( mul-ℚ' x)
+ -- ( commutative-mul-ℚ x)
+ -- ( is-lipschitz-left-mul-ℚ)
+```
+
+### The convergent Cauchy approximation of the canonical inclusion of positive rational numbers into the rational numbers
+
+```agda
+-- is-cauchy-approximation-rational-ℚ⁺ :
+-- is-cauchy-approximation-Metric-Space-WIP
+-- metric-space-ℚ
+-- rational-ℚ⁺
+-- is-cauchy-approximation-rational-ℚ⁺ ε δ =
+-- ( leq-le-ℚ
+-- { rational-ℚ⁺ δ}
+-- { rational-ℚ⁺ ε +ℚ (rational-ℚ⁺ (ε +ℚ⁺ δ))}
+-- ( transitive-le-ℚ
+-- ( rational-ℚ⁺ δ)
+-- ( rational-ℚ⁺ (ε +ℚ⁺ δ))
+-- ( rational-ℚ⁺ ε +ℚ (rational-ℚ⁺ (ε +ℚ⁺ δ)))
+-- ( le-right-add-ℚ⁺
+-- ( ε)
+-- ( ε +ℚ⁺ δ))
+-- ( le-right-add-ℚ⁺ ε δ))) ,
+-- ( leq-le-ℚ
+-- { rational-ℚ⁺ ε}
+-- { rational-ℚ⁺ δ +ℚ (rational-ℚ⁺ (ε +ℚ⁺ δ))}
+-- ( transitive-le-ℚ
+-- ( rational-ℚ⁺ ε)
+-- ( rational-ℚ⁺ (ε +ℚ⁺ δ))
+-- ( rational-ℚ⁺ δ +ℚ (rational-ℚ⁺ (ε +ℚ⁺ δ)))
+-- ( le-right-add-ℚ⁺
+-- ( δ)
+-- ( ε +ℚ⁺ δ))
+-- ( le-left-add-ℚ⁺ ε δ)))
+
+-- cauchy-approximation-rational-ℚ⁺ :
+-- cauchy-approximation-Metric-Space-WIP metric-space-ℚ
+-- cauchy-approximation-rational-ℚ⁺ =
+-- rational-ℚ⁺ , is-cauchy-approximation-rational-ℚ⁺
+
+-- is-zero-limit-rational-ℚ⁺ :
+-- is-limit-cauchy-approximation-Metric-Space-WIP
+-- ( metric-space-ℚ)
+-- ( cauchy-approximation-rational-ℚ⁺)
+-- ( zero-ℚ)
+-- is-zero-limit-rational-ℚ⁺ ε δ =
+-- ( leq-le-ℚ
+-- { zero-ℚ}
+-- { rational-ℚ⁺ (ε +ℚ⁺ (ε +ℚ⁺ δ))}
+-- ( le-zero-is-positive-ℚ
+-- ( rational-ℚ⁺ (ε +ℚ⁺ (ε +ℚ⁺ δ)))
+-- ( is-positive-rational-ℚ⁺
+-- (ε +ℚ⁺ (ε +ℚ⁺ δ))))) ,
+-- ( leq-le-ℚ
+-- { rational-ℚ⁺ ε}
+-- { zero-ℚ +ℚ rational-ℚ⁺ (ε +ℚ⁺ δ)}
+-- ( inv-tr
+-- ( le-ℚ (rational-ℚ⁺ ε))
+-- ( left-unit-law-add-ℚ (rational-ℚ⁺ (ε +ℚ⁺ δ)))
+-- ( le-left-add-ℚ⁺ ε δ)))
+
+-- convergent-rational-ℚ⁺ :
+-- convergent-cauchy-approximation-Metric-Space-WIP metric-space-ℚ
+-- convergent-rational-ℚ⁺ =
+-- cauchy-approximation-rational-ℚ⁺ ,
+-- zero-ℚ ,
+-- is-zero-limit-rational-ℚ⁺
+```
diff --git a/src/metric-spaces/metric-spaces-WIP.lagda.md b/src/metric-spaces/metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..e56db06a47
--- /dev/null
+++ b/src/metric-spaces/metric-spaces-WIP.lagda.md
@@ -0,0 +1,411 @@
+# Metric spaces (WIP)
+
+```agda
+module metric-spaces.metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.binary-relations
+open import foundation.dependent-pair-types
+open import foundation.equivalence-relations
+open import foundation.equivalences
+open import foundation.function-types
+open import foundation.functoriality-dependent-pair-types
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.sets
+open import foundation.subtypes
+open import foundation.transport-along-identifications
+open import foundation.type-arithmetic-dependent-pair-types
+open import foundation.univalence
+open import foundation.universe-levels
+
+open import metric-spaces.extensional-pseudometric-spaces-WIP
+open import metric-spaces.preimage-rational-neighborhoods
+open import metric-spaces.pseudometric-spaces-WIP
+open import metric-spaces.rational-neighborhoods
+open import metric-spaces.reflexive-rational-neighborhoods
+open import metric-spaces.saturated-rational-neighborhoods
+open import metric-spaces.similarity-of-elements-pseudometric-spaces
+open import metric-spaces.symmetric-rational-neighborhoods
+open import metric-spaces.triangular-rational-neighborhoods
+```
+
+
+
+## Idea
+
+A
+{{#concept "metric space" Agda=Metric-Space-WIP WD="metric space" WDID=Q180953}}
+is a type [structured](foundation.structure.md) with a concept of distance on
+its elements.
+
+Since we operate in a constructive setting, the concept of distance is captured
+by considering upper bounds on the distance between points, rather than by a
+distance function as in the classical approach. Thus, a metric space `A` is
+defined by a family of _neighborhood_
+[relations](foundation.binary-relations.md) on it indexed by the
+[positive rational numbers](elementary-number-theory.positive-rational-numbers.md)
+`ℚ⁺`, a
+[rational neighborhood relation](metric-spaces.rational-neighborhoods.md):
+
+```text
+ N : ℚ⁺ → A → A → Prop l
+```
+
+that satisfies certain axioms. Constructing a proof of `N d x y` amounts to
+saying that _`d` is an upper bound on the distance from `x` to `y`_.
+
+The neighborhood relation on a metric space must satisfy the following axioms:
+
+- [**Reflexivity.**](metric-spaces.reflexive-rational-neighborhoods.md) Every
+ positive rational `d` is an upper bound on the distance from `x` to itself.
+- [**Symmetry.**](metric-spaces.symmetric-rational-neighborhoods.md) Any upper
+ bound on the distance from `x` to `y` is an upper bound on the distance from
+ `y` to `x`.
+- [**Triangularity.**](metric-spaces.triangular-rational-neighborhoods.md) If
+ `d` is an upper bound on the distance from `x` to `y`, and `d'` is an upper
+ bound on the distance from `y` to `z`, then `d + d'` is an upper bound on the
+ distance from `x` to `z`.
+- [**Saturation.**](metric-spaces.saturated-rational-neighborhoods.md): any
+ neighborhood `N d x y` contains the intersection of all `N d' x y` for
+ `d < d'`.
+
+This gives `A` the structure of a
+[**pseudometric space**](metric-spaces.pseudometric-spaces-WIP.md); finally, we
+ask that our metric spaces are
+[**extensional**](metric-spaces.extensional-pseudometric-spaces-WIP.md):
+[similar](metric-spaces.similarity-of-elements-pseudometric-spaces.md) elements
+are [equal](foundation-core.identity-types.md):
+
+- If every positive rational `d` is an upper bound on the distance from `x` to
+ `y`, then `x = y`.
+
+Similarity of elements in a metric space characterizes their equality so any
+metric space is a [set](foundation.sets.md).
+
+NB: When working with actual distance functions, the _saturation_ condition
+always holds, defining `N d x y` as `dist(x , y) ≤ d`. Since we're working with
+_upper bounds on distances_, we add this axiom to ensure that the subsets of
+upper bounds on distances between elements is closed on the left.
+
+## Definitions
+
+### Metric Structures on a type
+
+```agda
+module _
+ {l1 : Level} (A : UU l1) {l2 : Level}
+ (B : Rational-Neighborhood-Relation l2 A)
+ where
+
+ is-metric-prop-Rational-Neighborhood-Relation : Prop (l1 ⊔ l2)
+ is-metric-prop-Rational-Neighborhood-Relation =
+ Σ-Prop
+ ( is-pseudometric-prop-Rational-Neighborhood-Relation A B)
+ ( λ H →
+ is-extensional-prop-Pseudometric-Space-WIP (A , B , H))
+
+ is-metric-Rational-Neighborhood-Relation : UU (l1 ⊔ l2)
+ is-metric-Rational-Neighborhood-Relation =
+ type-Prop is-metric-prop-Rational-Neighborhood-Relation
+
+ is-prop-is-metric-Rational-Neighborhood-Relation :
+ is-prop is-metric-Rational-Neighborhood-Relation
+ is-prop-is-metric-Rational-Neighborhood-Relation =
+ is-prop-type-Prop (is-metric-prop-Rational-Neighborhood-Relation)
+
+Metric-Structure-WIP :
+ {l1 : Level} (l2 : Level) (A : UU l1) → UU (l1 ⊔ lsuc l2)
+Metric-Structure-WIP l2 A =
+ type-subtype (is-metric-prop-Rational-Neighborhood-Relation A {l2})
+```
+
+### The type of metric spaces
+
+```agda
+Metric-Space-WIP : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2)
+Metric-Space-WIP l1 l2 =
+ Σ (UU l1) (Metric-Structure-WIP l2)
+
+make-Metric-Space-WIP :
+ { l1 l2 : Level} →
+ ( A : UU l1) →
+ ( B : Rational-Neighborhood-Relation l2 A) →
+ ( refl-B : is-reflexive-Rational-Neighborhood-Relation B) →
+ ( symmetric-B : is-symmetric-Rational-Neighborhood-Relation B) →
+ ( triangular-B : is-triangular-Rational-Neighborhood-Relation B) →
+ ( saturated-B : is-saturated-Rational-Neighborhood-Relation B) →
+ ( extensional-B :
+ is-extensional-Pseudometric-Space-WIP
+ (A , B , refl-B , symmetric-B , triangular-B , saturated-B)) →
+ Metric-Space-WIP l1 l2
+make-Metric-Space-WIP
+ A B refl-B symmetric-B triangular-B saturated-B extensional-B =
+ ( A) ,
+ ( ( B) ,
+ ( refl-B , symmetric-B , triangular-B , saturated-B) ,
+ ( extensional-B))
+
+module _
+ {l1 l2 : Level} (M : Metric-Space-WIP l1 l2)
+ where
+
+ type-Metric-Space-WIP : UU l1
+ type-Metric-Space-WIP =
+ pr1 M
+
+ structure-Metric-Space-WIP : Metric-Structure-WIP l2 type-Metric-Space-WIP
+ structure-Metric-Space-WIP = pr2 M
+
+ pseudometric-Metric-Space-WIP : Pseudometric-Space-WIP l1 l2
+ pseudometric-Metric-Space-WIP =
+ ( type-Metric-Space-WIP) ,
+ ( pr1 structure-Metric-Space-WIP) ,
+ ( pr1 (pr2 structure-Metric-Space-WIP))
+
+ is-extensional-pseudometric-Metric-Space-WIP :
+ is-extensional-Pseudometric-Space-WIP pseudometric-Metric-Space-WIP
+ is-extensional-pseudometric-Metric-Space-WIP =
+ pr2 (pr2 structure-Metric-Space-WIP)
+
+ pseudometric-structure-Metric-Space-WIP :
+ Pseudometric-Structure l2 type-Metric-Space-WIP
+ pseudometric-structure-Metric-Space-WIP =
+ structure-Pseudometric-Space-WIP pseudometric-Metric-Space-WIP
+
+ neighborhood-prop-Metric-Space-WIP :
+ ℚ⁺ → Relation-Prop l2 type-Metric-Space-WIP
+ neighborhood-prop-Metric-Space-WIP =
+ neighborhood-prop-Pseudometric-Space-WIP pseudometric-Metric-Space-WIP
+
+ neighborhood-Metric-Space-WIP : ℚ⁺ → Relation l2 type-Metric-Space-WIP
+ neighborhood-Metric-Space-WIP =
+ neighborhood-Pseudometric-Space-WIP pseudometric-Metric-Space-WIP
+
+ is-prop-neighborhood-Metric-Space-WIP :
+ (d : ℚ⁺) (x y : type-Metric-Space-WIP) →
+ is-prop (neighborhood-Metric-Space-WIP d x y)
+ is-prop-neighborhood-Metric-Space-WIP =
+ is-prop-neighborhood-Pseudometric-Space-WIP pseudometric-Metric-Space-WIP
+
+ is-upper-bound-dist-prop-Metric-Space-WIP :
+ (x y : type-Metric-Space-WIP) → ℚ⁺ → Prop l2
+ is-upper-bound-dist-prop-Metric-Space-WIP x y d =
+ neighborhood-prop-Metric-Space-WIP d x y
+
+ is-upper-bound-dist-Metric-Space-WIP :
+ (x y : type-Metric-Space-WIP) → ℚ⁺ → UU l2
+ is-upper-bound-dist-Metric-Space-WIP x y d =
+ neighborhood-Metric-Space-WIP d x y
+
+ is-prop-is-upper-bound-dist-Metric-Space-WIP :
+ (x y : type-Metric-Space-WIP) (d : ℚ⁺) →
+ is-prop (is-upper-bound-dist-Metric-Space-WIP x y d)
+ is-prop-is-upper-bound-dist-Metric-Space-WIP x y d =
+ is-prop-neighborhood-Metric-Space-WIP d x y
+
+ is-pseudometric-neighborhood-Metric-Space-WIP :
+ is-pseudometric-Rational-Neighborhood-Relation
+ type-Metric-Space-WIP
+ neighborhood-prop-Metric-Space-WIP
+ is-pseudometric-neighborhood-Metric-Space-WIP =
+ is-pseudometric-neighborhood-Pseudometric-Space-WIP
+ pseudometric-Metric-Space-WIP
+
+ refl-neighborhood-Metric-Space-WIP :
+ (d : ℚ⁺) (x : type-Metric-Space-WIP) →
+ neighborhood-Metric-Space-WIP d x x
+ refl-neighborhood-Metric-Space-WIP =
+ refl-neighborhood-Pseudometric-Space-WIP pseudometric-Metric-Space-WIP
+
+ symmetric-neighborhood-Metric-Space-WIP :
+ (d : ℚ⁺) (x y : type-Metric-Space-WIP) →
+ neighborhood-Metric-Space-WIP d x y →
+ neighborhood-Metric-Space-WIP d y x
+ symmetric-neighborhood-Metric-Space-WIP =
+ symmetric-neighborhood-Pseudometric-Space-WIP pseudometric-Metric-Space-WIP
+
+ inv-neighborhood-Metric-Space-WIP :
+ {d : ℚ⁺} {x y : type-Metric-Space-WIP} →
+ neighborhood-Metric-Space-WIP d x y →
+ neighborhood-Metric-Space-WIP d y x
+ inv-neighborhood-Metric-Space-WIP =
+ inv-neighborhood-Pseudometric-Space-WIP pseudometric-Metric-Space-WIP
+
+ triangular-neighborhood-Metric-Space-WIP :
+ (x y z : type-Metric-Space-WIP) (d₁ d₂ : ℚ⁺) →
+ neighborhood-Metric-Space-WIP d₂ y z →
+ neighborhood-Metric-Space-WIP d₁ x y →
+ neighborhood-Metric-Space-WIP (d₁ +ℚ⁺ d₂) x z
+ triangular-neighborhood-Metric-Space-WIP =
+ triangular-neighborhood-Pseudometric-Space-WIP pseudometric-Metric-Space-WIP
+
+ monotonic-neighborhood-Metric-Space-WIP :
+ (x y : type-Metric-Space-WIP) (d₁ d₂ : ℚ⁺) →
+ le-ℚ⁺ d₁ d₂ →
+ neighborhood-Metric-Space-WIP d₁ x y →
+ neighborhood-Metric-Space-WIP d₂ x y
+ monotonic-neighborhood-Metric-Space-WIP =
+ monotonic-neighborhood-Pseudometric-Space-WIP pseudometric-Metric-Space-WIP
+
+ saturated-neighborhood-Metric-Space-WIP :
+ (ε : ℚ⁺) (x y : type-Metric-Space-WIP) →
+ ((δ : ℚ⁺) → neighborhood-Metric-Space-WIP (ε +ℚ⁺ δ) x y) →
+ neighborhood-Metric-Space-WIP ε x y
+ saturated-neighborhood-Metric-Space-WIP =
+ saturated-neighborhood-Pseudometric-Space-WIP pseudometric-Metric-Space-WIP
+```
+
+### Similarity of elements in a metric space
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ where
+
+ sim-prop-Metric-Space-WIP : Relation-Prop l2 (type-Metric-Space-WIP A)
+ sim-prop-Metric-Space-WIP =
+ sim-prop-Pseudometric-Space-WIP (pseudometric-Metric-Space-WIP A)
+
+ sim-Metric-Space-WIP : Relation l2 (type-Metric-Space-WIP A)
+ sim-Metric-Space-WIP =
+ sim-Pseudometric-Space-WIP (pseudometric-Metric-Space-WIP A)
+
+ is-prop-sim-Metric-Space-WIP :
+ (x y : type-Metric-Space-WIP A) →
+ is-prop (sim-Metric-Space-WIP x y)
+ is-prop-sim-Metric-Space-WIP =
+ is-prop-sim-Pseudometric-Space-WIP (pseudometric-Metric-Space-WIP A)
+
+ refl-sim-Metric-Space-WIP :
+ (x : type-Metric-Space-WIP A) →
+ sim-Metric-Space-WIP x x
+ refl-sim-Metric-Space-WIP =
+ refl-sim-Pseudometric-Space-WIP (pseudometric-Metric-Space-WIP A)
+
+ sim-eq-Metric-Space-WIP :
+ (x y : type-Metric-Space-WIP A) →
+ x = y →
+ sim-Metric-Space-WIP x y
+ sim-eq-Metric-Space-WIP =
+ sim-eq-Pseudometric-Space-WIP (pseudometric-Metric-Space-WIP A)
+
+ symmetric-sim-Metric-Space-WIP :
+ (x y : type-Metric-Space-WIP A) →
+ sim-Metric-Space-WIP x y →
+ sim-Metric-Space-WIP y x
+ symmetric-sim-Metric-Space-WIP =
+ symmetric-sim-Pseudometric-Space-WIP (pseudometric-Metric-Space-WIP A)
+
+ inv-sim-Metric-Space-WIP :
+ {x y : type-Metric-Space-WIP A} →
+ sim-Metric-Space-WIP x y →
+ sim-Metric-Space-WIP y x
+ inv-sim-Metric-Space-WIP {x} {y} =
+ inv-sim-Pseudometric-Space-WIP (pseudometric-Metric-Space-WIP A)
+
+ transitive-sim-Metric-Space-WIP :
+ (x y z : type-Metric-Space-WIP A) →
+ sim-Metric-Space-WIP y z →
+ sim-Metric-Space-WIP x y →
+ sim-Metric-Space-WIP x z
+ transitive-sim-Metric-Space-WIP =
+ transitive-sim-Pseudometric-Space-WIP (pseudometric-Metric-Space-WIP A)
+
+ equivalence-sim-Metric-Space-WIP :
+ equivalence-relation l2 (type-Metric-Space-WIP A)
+ equivalence-sim-Metric-Space-WIP =
+ equivalence-sim-Pseudometric-Space-WIP (pseudometric-Metric-Space-WIP A)
+```
+
+## Properties
+
+### The carrier type of a metric space is a set
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ where
+
+ is-set-type-Metric-Space-WIP : is-set (type-Metric-Space-WIP A)
+ is-set-type-Metric-Space-WIP =
+ is-set-type-is-extensional-Pseudometric-Space-WIP
+ ( pseudometric-Metric-Space-WIP A)
+ ( is-extensional-pseudometric-Metric-Space-WIP A)
+
+ set-Metric-Space-WIP : Set l1
+ set-Metric-Space-WIP =
+ (type-Metric-Space-WIP A , is-set-type-Metric-Space-WIP)
+```
+
+### The set of functions between metric spaces
+
+```agda
+module _
+ {lx lx' ly ly' : Level}
+ (X : Metric-Space-WIP lx lx') (Y : Metric-Space-WIP ly ly')
+ where
+
+ set-function-Metric-Space-WIP : Set (lx ⊔ ly)
+ set-function-Metric-Space-WIP =
+ hom-set-Set (set-Metric-Space-WIP X) (set-Metric-Space-WIP Y)
+
+ type-function-Metric-Space-WIP : UU (lx ⊔ ly)
+ type-function-Metric-Space-WIP =
+ type-Metric-Space-WIP X → type-Metric-Space-WIP Y
+```
+
+### Similarity of elements in a metric space is equivalent to equality
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ where
+
+ equiv-sim-eq-Metric-Space-WIP :
+ (x y : type-Metric-Space-WIP A) →
+ (x = y) ≃ sim-Metric-Space-WIP A x y
+ equiv-sim-eq-Metric-Space-WIP =
+ equiv-sim-eq-is-extensional-Pseudometric-Space-WIP
+ ( pseudometric-Metric-Space-WIP A)
+ ( is-extensional-pseudometric-Metric-Space-WIP A)
+
+ eq-sim-Metric-Space-WIP :
+ (x y : type-Metric-Space-WIP A) →
+ sim-Metric-Space-WIP A x y →
+ x = y
+ eq-sim-Metric-Space-WIP x y =
+ map-inv-equiv (equiv-sim-eq-Metric-Space-WIP x y)
+```
+
+### Characterization of the transport of metric structures along equalities
+
+```agda
+equiv-Eq-tr-Metric-Structure :
+ {l1 l2 : Level} (A B : UU l1) →
+ (P : Metric-Structure-WIP l2 A) →
+ (Q : Metric-Structure-WIP l2 B) →
+ (e : A = B) →
+ (tr (Metric-Structure-WIP l2) e P = Q) ≃
+ (Eq-Rational-Neighborhood-Relation
+ ( pr1 P)
+ ( preimage-Rational-Neighborhood-Relation (map-eq e) (pr1 Q)))
+equiv-Eq-tr-Metric-Structure A .A P Q refl =
+ ( equiv-Eq-eq-Rational-Neighborhood-Relation (pr1 P) (pr1 Q)) ∘e
+ ( extensionality-type-subtype'
+ ( is-metric-prop-Rational-Neighborhood-Relation A)
+ ( P)
+ ( Q))
+```
+
+## External links
+
+- [`MetricSpaces.Type`](https://www.cs.bham.ac.uk/~mhe/TypeTopology/MetricSpaces.Type.html)
+ at TypeTopology
+- [metric space](https://ncatlab.org/nlab/show/metric+space) at $n$Lab
+- [Metric spaces](https://en.wikipedia.org/wiki/Metric_space) at Wikipedia
diff --git a/src/metric-spaces/monotonic-rational-neighborhoods.lagda.md b/src/metric-spaces/monotonic-rational-neighborhoods.lagda.md
new file mode 100644
index 0000000000..ab7117e855
--- /dev/null
+++ b/src/metric-spaces/monotonic-rational-neighborhoods.lagda.md
@@ -0,0 +1,62 @@
+# Monotonic rational neighborhoods on types
+
+```agda
+module metric-spaces.monotonic-rational-neighborhoods where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.propositions
+open import foundation.universe-levels
+
+open import metric-spaces.rational-neighborhoods
+```
+
+
+
+## Idea
+
+A [rational neighborhood relation](metric-spaces.rational-neighborhoods.md) is
+{{#concept "monotonic" Disambiguation="rational neighborhood relation" Agda=is-monotonic-Rational-Neighborhood-Relation}}
+if any `d₁`-neighborhoods are `d₂`-neighborhoods for `d₁ < d₂`.
+
+## Definitions
+
+### The property of being a monotonic rational neighborhood relation
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (B : Rational-Neighborhood-Relation l2 A)
+ where
+
+ is-monotonic-prop-Rational-Neighborhood-Relation : Prop (l1 ⊔ l2)
+ is-monotonic-prop-Rational-Neighborhood-Relation =
+ Π-Prop
+ ( A)
+ ( λ x →
+ ( Π-Prop
+ ( A)
+ ( λ y →
+ ( Π-Prop
+ ( ℚ⁺)
+ ( λ d₁ →
+ ( Π-Prop
+ ( ℚ⁺)
+ ( λ d₂ →
+ ( Π-Prop
+ ( le-ℚ⁺ d₁ d₂)
+ ( λ H →
+ hom-Prop (B d₁ x y) (B d₂ x y))))))))))
+
+ is-monotonic-Rational-Neighborhood-Relation : UU (l1 ⊔ l2)
+ is-monotonic-Rational-Neighborhood-Relation =
+ type-Prop is-monotonic-prop-Rational-Neighborhood-Relation
+
+ is-prop-is-monotonic-Rational-Neighborhood-Relation :
+ is-prop is-monotonic-Rational-Neighborhood-Relation
+ is-prop-is-monotonic-Rational-Neighborhood-Relation =
+ is-prop-type-Prop is-monotonic-prop-Rational-Neighborhood-Relation
+```
diff --git a/src/metric-spaces/ordering-rational-neighborhoods.lagda.md b/src/metric-spaces/ordering-rational-neighborhoods.lagda.md
new file mode 100644
index 0000000000..77213c10b8
--- /dev/null
+++ b/src/metric-spaces/ordering-rational-neighborhoods.lagda.md
@@ -0,0 +1,145 @@
+# The poset of rational neighborhood relations on a type
+
+```agda
+module metric-spaces.ordering-rational-neighborhoods where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.binary-relations
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.universe-levels
+
+open import metric-spaces.rational-neighborhoods
+
+open import order-theory.posets
+open import order-theory.preorders
+```
+
+
+
+## Idea
+
+A [rational neighborhood relation](metric-spaces.rational-neighborhoods.md) `U`
+on a type `A` is
+{{#concept "finer" Disambiguation="rational neighborhood relation on a type" Agda=leq-Rational-Neighborhood-Relation}}
+than another rational neighborhood relation `V` if `(U d)`-neighborhoods are
+`(V d)`-neighborhoods for any
+[positive rational](elementary-number-theory.positive-rational-numbers.md) `d`,
+i.e., if any upper bound on the distance between two points in `U` also bounds
+their distance in `V`. This is a [partial order](order-theory.posets.md) on the
+type of rational neighborhood relations on `A`.
+
+## Definitions
+
+```agda
+module _
+ {l1 l2 l2' : Level} {A : UU l1}
+ (U : Rational-Neighborhood-Relation l2 A)
+ (V : Rational-Neighborhood-Relation l2' A)
+ where
+
+ leq-prop-Rational-Neighborhood-Relation : Prop (l1 ⊔ l2 ⊔ l2')
+ leq-prop-Rational-Neighborhood-Relation =
+ Π-Prop
+ ( ℚ⁺)
+ ( λ d →
+ Π-Prop
+ ( A)
+ ( λ x →
+ Π-Prop
+ ( A)
+ ( λ y → hom-Prop (U d x y) (V d x y))))
+
+ leq-Rational-Neighborhood-Relation : UU (l1 ⊔ l2 ⊔ l2')
+ leq-Rational-Neighborhood-Relation =
+ type-Prop leq-prop-Rational-Neighborhood-Relation
+
+ is-prop-leq-Rational-Neighborhood-Relation :
+ is-prop leq-Rational-Neighborhood-Relation
+ is-prop-leq-Rational-Neighborhood-Relation =
+ is-prop-type-Prop leq-prop-Rational-Neighborhood-Relation
+```
+
+## Properties
+
+### The ordering on rational neighborhood relations is reflexive
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (U : Rational-Neighborhood-Relation l2 A)
+ where
+
+ refl-leq-Rational-Neighborhood-Relation :
+ leq-Rational-Neighborhood-Relation U U
+ refl-leq-Rational-Neighborhood-Relation d x y H = H
+
+ leq-eq-Rational-Neighborhood-Relation :
+ (V : Rational-Neighborhood-Relation l2 A) →
+ (U = V) →
+ leq-Rational-Neighborhood-Relation U V
+ leq-eq-Rational-Neighborhood-Relation .U refl =
+ refl-leq-Rational-Neighborhood-Relation
+```
+
+### The ordering on rational neighborhood relations is transitive
+
+```agda
+module _
+ {l lu lv lw : Level} {A : UU l}
+ (U : Rational-Neighborhood-Relation lu A)
+ (V : Rational-Neighborhood-Relation lv A)
+ (W : Rational-Neighborhood-Relation lw A)
+ where
+
+ transitive-leq-Rational-Neighborhood-Relation :
+ leq-Rational-Neighborhood-Relation V W →
+ leq-Rational-Neighborhood-Relation U V →
+ leq-Rational-Neighborhood-Relation U W
+ transitive-leq-Rational-Neighborhood-Relation H K d x y = H d x y ∘ K d x y
+```
+
+### The ordering on rational neighborhood relations is antisymmetric
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (U V : Rational-Neighborhood-Relation l2 A)
+ where
+
+ antisymmetric-leq-Rational-Neighborhood-Relation :
+ leq-Rational-Neighborhood-Relation U V →
+ leq-Rational-Neighborhood-Relation V U →
+ U = V
+ antisymmetric-leq-Rational-Neighborhood-Relation I J =
+ eq-Eq-Rational-Neighborhood-Relation
+ ( U)
+ ( V)
+ ( λ d x y → (I d x y , J d x y))
+```
+
+### The poset of rational neighborhood relations on a type
+
+```agda
+module _
+ {l1 l2 : Level} (A : UU l1)
+ where
+
+ preorder-Rational-Neighborhood-Relation : Preorder (l1 ⊔ lsuc l2) (l1 ⊔ l2)
+ pr1 preorder-Rational-Neighborhood-Relation =
+ Rational-Neighborhood-Relation l2 A
+ pr2 preorder-Rational-Neighborhood-Relation =
+ leq-prop-Rational-Neighborhood-Relation ,
+ refl-leq-Rational-Neighborhood-Relation ,
+ transitive-leq-Rational-Neighborhood-Relation
+
+ poset-Rational-Neighborhood-Relation : Poset (l1 ⊔ lsuc l2) (l1 ⊔ l2)
+ poset-Rational-Neighborhood-Relation =
+ preorder-Rational-Neighborhood-Relation ,
+ antisymmetric-leq-Rational-Neighborhood-Relation
+```
diff --git a/src/metric-spaces/preimage-rational-neighborhoods.lagda.md b/src/metric-spaces/preimage-rational-neighborhoods.lagda.md
new file mode 100644
index 0000000000..5958af3217
--- /dev/null
+++ b/src/metric-spaces/preimage-rational-neighborhoods.lagda.md
@@ -0,0 +1,139 @@
+# Preimage of rational neighborhood relations along maps
+
+```agda
+module metric-spaces.preimage-rational-neighborhoods where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.function-types
+open import foundation.identity-types
+open import foundation.injective-maps
+open import foundation.universe-levels
+
+open import metric-spaces.monotonic-rational-neighborhoods
+open import metric-spaces.rational-neighborhoods
+open import metric-spaces.reflexive-rational-neighborhoods
+open import metric-spaces.symmetric-rational-neighborhoods
+open import metric-spaces.triangular-rational-neighborhoods
+```
+
+
+
+## Idea
+
+Any [rational neighborhood relation](metric-spaces.rational-neighborhoods.md)
+`U` on a type `B` and map `f : A → B` defines a rational neighborhood relation
+on `A` where `x y : A` are `d`-neighbors if `f x` and `f y` are `d`-neighbors in
+`U`. This is the
+{{#concept "preimage" Disambiguation="rational neighborhood relation" Agda=preimage-Rational-Neighborhood-Relation}}
+of `U` by `f`.
+
+## Definitions
+
+### The induced rational neighborhood relation on the preimage of a map
+
+```agda
+module _
+ {l1 l1' l2 : Level} {A : UU l1} {B : UU l1'} (f : A → B)
+ (V : Rational-Neighborhood-Relation l2 B)
+ where
+
+ preimage-Rational-Neighborhood-Relation : Rational-Neighborhood-Relation l2 A
+ preimage-Rational-Neighborhood-Relation d x y = V d (f x) (f y)
+```
+
+## Properties
+
+### The preimage of a reflexive rational neighborhood relation is reflexive
+
+```agda
+module _
+ {l1 l1' l2 : Level} {A : UU l1} {B : UU l1'} (f : A → B)
+ (V : Rational-Neighborhood-Relation l2 B)
+ (R : is-reflexive-Rational-Neighborhood-Relation V)
+ where
+
+ preserves-reflexive-preimage-Rational-Neighborhood-Relation :
+ is-reflexive-Rational-Neighborhood-Relation
+ (preimage-Rational-Neighborhood-Relation f V)
+ preserves-reflexive-preimage-Rational-Neighborhood-Relation d x = R d (f x)
+```
+
+### The preimage of a symmetric rational neighborhood relation is symmetric
+
+```agda
+module _
+ {l1 l1' l2 : Level} {A : UU l1} {B : UU l1'} (f : A → B)
+ (V : Rational-Neighborhood-Relation l2 B)
+ (S : is-symmetric-Rational-Neighborhood-Relation V)
+ where
+
+ preserves-symmetric-preimage-Rational-Neighborhood-Relation :
+ is-symmetric-Rational-Neighborhood-Relation
+ (preimage-Rational-Neighborhood-Relation f V)
+ preserves-symmetric-preimage-Rational-Neighborhood-Relation d x y =
+ S d (f x) (f y)
+```
+
+### The preimage of a monotonic rational neighborhood relation is monotonic
+
+```agda
+module _
+ {l1 l1' l2 : Level} {A : UU l1} {B : UU l1'} (f : A → B)
+ (V : Rational-Neighborhood-Relation l2 B)
+ (I : is-monotonic-Rational-Neighborhood-Relation V)
+ where
+
+ preserves-monotonic-preimage-Rational-Neighborhood-Relation :
+ is-monotonic-Rational-Neighborhood-Relation
+ (preimage-Rational-Neighborhood-Relation f V)
+ preserves-monotonic-preimage-Rational-Neighborhood-Relation x y =
+ I (f x) (f y)
+```
+
+### The preimage of a triangular rational neighborhood relation is triangular
+
+```agda
+module _
+ {l1 l1' l2 : Level} {A : UU l1} {B : UU l1'} (f : A → B)
+ (V : Rational-Neighborhood-Relation l2 B)
+ (T : is-triangular-Rational-Neighborhood-Relation V)
+ where
+
+ preserves-triangular-preimage-Rational-Neighborhood-Relation :
+ is-triangular-Rational-Neighborhood-Relation
+ (preimage-Rational-Neighborhood-Relation f V)
+ preserves-triangular-preimage-Rational-Neighborhood-Relation x y z =
+ T (f x) (f y) (f z)
+```
+
+### The preimage along the identity is the identity
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (U : Rational-Neighborhood-Relation l2 A)
+ where
+
+ eq-preimage-id-Rational-Neighborhood-Relation :
+ preimage-Rational-Neighborhood-Relation id U = U
+ eq-preimage-id-Rational-Neighborhood-Relation = refl
+```
+
+### The preimage of rational neighborhood relations is contravariant
+
+```agda
+module _
+ {la lb lc l : Level} {A : UU la} {B : UU lb} {C : UU lc}
+ (g : B → C) (f : A → B) (W : Rational-Neighborhood-Relation l C)
+ where
+
+ eq-preimage-comp-Rational-Neighborhood-Relation :
+ ( preimage-Rational-Neighborhood-Relation f
+ (preimage-Rational-Neighborhood-Relation g W)) =
+ ( preimage-Rational-Neighborhood-Relation (g ∘ f) W)
+ eq-preimage-comp-Rational-Neighborhood-Relation = refl
+```
diff --git a/src/metric-spaces/pseudometric-spaces-WIP.lagda.md b/src/metric-spaces/pseudometric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..ee31c0264b
--- /dev/null
+++ b/src/metric-spaces/pseudometric-spaces-WIP.lagda.md
@@ -0,0 +1,213 @@
+# Pseudometric spaces (WIP)
+
+```agda
+module metric-spaces.pseudometric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.binary-relations
+open import foundation.cartesian-product-types
+open import foundation.dependent-pair-types
+open import foundation.empty-types
+open import foundation.equivalences
+open import foundation.existential-quantification
+open import foundation.function-extensionality
+open import foundation.function-types
+open import foundation.fundamental-theorem-of-identity-types
+open import foundation.identity-types
+open import foundation.logical-equivalences
+open import foundation.negation
+open import foundation.propositional-extensionality
+open import foundation.propositions
+open import foundation.sets
+open import foundation.subtypes
+open import foundation.torsorial-type-families
+open import foundation.transport-along-identifications
+open import foundation.univalence
+open import foundation.universe-levels
+
+open import metric-spaces.monotonic-rational-neighborhoods
+open import metric-spaces.rational-neighborhoods
+open import metric-spaces.reflexive-rational-neighborhoods
+open import metric-spaces.saturated-rational-neighborhoods
+open import metric-spaces.symmetric-rational-neighborhoods
+open import metric-spaces.triangular-rational-neighborhoods
+```
+
+
+
+## Idea
+
+A {{#concept "pseudometric space" Agda=Pseudometric-Space-WIP}} is a type
+equipped with a
+{{concept "pseudometric structure" Agda=Pseudometric-Structure}}: a
+[reflexive](metric-spaces.reflexive-rational-neighborhoods.md),
+[symmetric](metric-spaces.symmetric-rational-neighborhoods.md),
+[triangular](metric-spaces.triangular-rational-neighborhoods.md) and
+[saturated](metric-spaces.saturated-rational-neighborhoods.md)
+[rational neighborhood relation](metric-spaces.rational-neighborhoods.md)
+
+Given a pseudometric structure `B` on `A` and some positive rational number
+`d : ℚ⁺` such that `B d x y` holds for some pair of points `x y : A`, we
+interpret `d` as an
+{{#concept "upper bound" Disambiguation="on distance in a pseudometric space" Agda=is-upper-bound-dist-Pseudometric-Space-WIP}}
+on the distance between `x` and `y` in the pseudometric space.
+
+## Definitions
+
+### The property of being a premetric structure
+
+```agda
+module _
+ {l1 : Level} (A : UU l1) {l2 : Level}
+ (B : Rational-Neighborhood-Relation l2 A)
+ where
+
+ is-pseudometric-prop-Rational-Neighborhood-Relation : Prop (l1 ⊔ l2)
+ is-pseudometric-prop-Rational-Neighborhood-Relation =
+ product-Prop
+ ( is-reflexive-prop-Rational-Neighborhood-Relation B)
+ ( product-Prop
+ ( is-symmetric-prop-Rational-Neighborhood-Relation B)
+ ( product-Prop
+ ( is-triangular-prop-Rational-Neighborhood-Relation B)
+ ( is-saturated-prop-Rational-Neighborhood-Relation B)))
+
+ is-pseudometric-Rational-Neighborhood-Relation : UU (l1 ⊔ l2)
+ is-pseudometric-Rational-Neighborhood-Relation =
+ type-Prop is-pseudometric-prop-Rational-Neighborhood-Relation
+
+ is-prop-is-pseudometric-Rational-Neighborhood-Relation :
+ is-prop is-pseudometric-Rational-Neighborhood-Relation
+ is-prop-is-pseudometric-Rational-Neighborhood-Relation =
+ is-prop-type-Prop (is-pseudometric-prop-Rational-Neighborhood-Relation)
+
+Pseudometric-Structure :
+ {l1 : Level} (l2 : Level) (A : UU l1) → UU (l1 ⊔ lsuc l2)
+Pseudometric-Structure l2 A =
+ type-subtype (is-pseudometric-prop-Rational-Neighborhood-Relation A {l2})
+```
+
+### Pseudometric spaces
+
+```agda
+Pseudometric-Space-WIP : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2)
+Pseudometric-Space-WIP l1 l2 = Σ (UU l1) (Pseudometric-Structure l2)
+
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ where
+
+ type-Pseudometric-Space-WIP : UU l1
+ type-Pseudometric-Space-WIP = pr1 A
+
+ structure-Pseudometric-Space-WIP :
+ Pseudometric-Structure l2 type-Pseudometric-Space-WIP
+ structure-Pseudometric-Space-WIP = pr2 A
+
+ neighborhood-prop-Pseudometric-Space-WIP :
+ ℚ⁺ → Relation-Prop l2 type-Pseudometric-Space-WIP
+ neighborhood-prop-Pseudometric-Space-WIP =
+ pr1 structure-Pseudometric-Space-WIP
+
+ neighborhood-Pseudometric-Space-WIP :
+ ℚ⁺ → Relation l2 type-Pseudometric-Space-WIP
+ neighborhood-Pseudometric-Space-WIP =
+ neighborhood-Rational-Neighborhood-Relation
+ neighborhood-prop-Pseudometric-Space-WIP
+
+ is-prop-neighborhood-Pseudometric-Space-WIP :
+ (d : ℚ⁺) (x y : type-Pseudometric-Space-WIP) →
+ is-prop (neighborhood-Pseudometric-Space-WIP d x y)
+ is-prop-neighborhood-Pseudometric-Space-WIP =
+ is-prop-neighborhood-Rational-Neighborhood-Relation
+ neighborhood-prop-Pseudometric-Space-WIP
+
+ is-upper-bound-dist-prop-Pseudometric-Space-WIP :
+ (x y : type-Pseudometric-Space-WIP) → ℚ⁺ → Prop l2
+ is-upper-bound-dist-prop-Pseudometric-Space-WIP x y d =
+ neighborhood-prop-Pseudometric-Space-WIP d x y
+
+ is-upper-bound-dist-Pseudometric-Space-WIP :
+ (x y : type-Pseudometric-Space-WIP) → ℚ⁺ → UU l2
+ is-upper-bound-dist-Pseudometric-Space-WIP x y d =
+ neighborhood-Pseudometric-Space-WIP d x y
+
+ is-prop-is-upper-bound-dist-Pseudometric-Space-WIP :
+ (x y : type-Pseudometric-Space-WIP) (d : ℚ⁺) →
+ is-prop (is-upper-bound-dist-Pseudometric-Space-WIP x y d)
+ is-prop-is-upper-bound-dist-Pseudometric-Space-WIP x y d =
+ is-prop-neighborhood-Pseudometric-Space-WIP d x y
+
+ is-pseudometric-neighborhood-Pseudometric-Space-WIP :
+ is-pseudometric-Rational-Neighborhood-Relation
+ type-Pseudometric-Space-WIP
+ neighborhood-prop-Pseudometric-Space-WIP
+ is-pseudometric-neighborhood-Pseudometric-Space-WIP =
+ pr2 structure-Pseudometric-Space-WIP
+
+ refl-neighborhood-Pseudometric-Space-WIP :
+ (d : ℚ⁺) (x : type-Pseudometric-Space-WIP) →
+ neighborhood-Pseudometric-Space-WIP d x x
+ refl-neighborhood-Pseudometric-Space-WIP =
+ pr1 is-pseudometric-neighborhood-Pseudometric-Space-WIP
+
+ symmetric-neighborhood-Pseudometric-Space-WIP :
+ (d : ℚ⁺) (x y : type-Pseudometric-Space-WIP) →
+ neighborhood-Pseudometric-Space-WIP d x y →
+ neighborhood-Pseudometric-Space-WIP d y x
+ symmetric-neighborhood-Pseudometric-Space-WIP =
+ pr1 (pr2 is-pseudometric-neighborhood-Pseudometric-Space-WIP)
+
+ inv-neighborhood-Pseudometric-Space-WIP :
+ {d : ℚ⁺} {x y : type-Pseudometric-Space-WIP} →
+ neighborhood-Pseudometric-Space-WIP d x y →
+ neighborhood-Pseudometric-Space-WIP d y x
+ inv-neighborhood-Pseudometric-Space-WIP {d} {x} {y} =
+ symmetric-neighborhood-Pseudometric-Space-WIP d x y
+
+ triangular-neighborhood-Pseudometric-Space-WIP :
+ (x y z : type-Pseudometric-Space-WIP) (d₁ d₂ : ℚ⁺) →
+ neighborhood-Pseudometric-Space-WIP d₂ y z →
+ neighborhood-Pseudometric-Space-WIP d₁ x y →
+ neighborhood-Pseudometric-Space-WIP (d₁ +ℚ⁺ d₂) x z
+ triangular-neighborhood-Pseudometric-Space-WIP =
+ pr1 (pr2 (pr2 is-pseudometric-neighborhood-Pseudometric-Space-WIP))
+
+ saturated-neighborhood-Pseudometric-Space-WIP :
+ (ε : ℚ⁺) (x y : type-Pseudometric-Space-WIP) →
+ ((δ : ℚ⁺) → neighborhood-Pseudometric-Space-WIP (ε +ℚ⁺ δ) x y) →
+ neighborhood-Pseudometric-Space-WIP ε x y
+ saturated-neighborhood-Pseudometric-Space-WIP =
+ pr2 (pr2 (pr2 is-pseudometric-neighborhood-Pseudometric-Space-WIP))
+
+ monotonic-neighborhood-Pseudometric-Space-WIP :
+ (x y : type-Pseudometric-Space-WIP) (d₁ d₂ : ℚ⁺) →
+ le-ℚ⁺ d₁ d₂ →
+ neighborhood-Pseudometric-Space-WIP d₁ x y →
+ neighborhood-Pseudometric-Space-WIP d₂ x y
+ monotonic-neighborhood-Pseudometric-Space-WIP =
+ is-monotonic-is-reflexive-triangular-Rational-Neighborhood-Relation
+ neighborhood-prop-Pseudometric-Space-WIP
+ refl-neighborhood-Pseudometric-Space-WIP
+ triangular-neighborhood-Pseudometric-Space-WIP
+
+ iff-le-neighborhood-Pseudometric-Space-WIP :
+ ( ε : ℚ⁺) (x y : type-Pseudometric-Space-WIP) →
+ ( neighborhood-Pseudometric-Space-WIP ε x y) ↔
+ ( (δ : ℚ⁺) → le-ℚ⁺ ε δ → neighborhood-Pseudometric-Space-WIP δ x y)
+ iff-le-neighborhood-Pseudometric-Space-WIP =
+ iff-le-neighborhood-saturated-monotonic-Rational-Neighborhood-Relation
+ neighborhood-prop-Pseudometric-Space-WIP
+ monotonic-neighborhood-Pseudometric-Space-WIP
+ saturated-neighborhood-Pseudometric-Space-WIP
+```
+
+## External links
+
+- [Pseudometric spaces](https://en.wikipedia.org/wiki/Pseudometric_space) at
+ Wikipedia
diff --git a/src/metric-spaces/rational-neighborhoods.lagda.md b/src/metric-spaces/rational-neighborhoods.lagda.md
new file mode 100644
index 0000000000..070ea3a62e
--- /dev/null
+++ b/src/metric-spaces/rational-neighborhoods.lagda.md
@@ -0,0 +1,340 @@
+# Rational neighborhood relations on types
+
+```agda
+module metric-spaces.rational-neighborhoods where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.binary-relations
+open import foundation.dependent-pair-types
+open import foundation.empty-types
+open import foundation.equivalence-relations
+open import foundation.equivalences
+open import foundation.existential-quantification
+open import foundation.function-extensionality
+open import foundation.function-types
+open import foundation.fundamental-theorem-of-identity-types
+open import foundation.identity-types
+open import foundation.logical-equivalences
+open import foundation.negation
+open import foundation.propositional-extensionality
+open import foundation.propositions
+open import foundation.sets
+open import foundation.subtypes
+open import foundation.torsorial-type-families
+open import foundation.transport-along-identifications
+open import foundation.univalence
+open import foundation.universe-levels
+```
+
+
+
+## Idea
+
+A
+{{#concept "rational neighborhood relation" Agda=Rational-Neighborhood-Relation}}
+is a type family of
+[proposition-valued binary relations](foundation.binary-relations.md) indexed by
+the
+[positive rational numbers](elementary-number-theory.positive-rational-numbers.md).
+
+Given a rational neighborhood relation `N` on `A` and some positive rational
+number `d : ℚ⁺` such that `N d x y` holds for some pair of points `x y : A`, we
+interpret `d` as an
+{{#concept "upper bound" Disambiguation="on the distance with respect to a rational neighborhood relation" Agda=is-upper-bound-dist-Rational-Neighborhood-Relation}}
+on the distance between `x` and `y` with respect to the rational neighborhood
+relation.
+
+## Definitions
+
+### Rational neighborhood relation on a type
+
+```agda
+module _
+ {l1 : Level} (l2 : Level) (A : UU l1)
+ where
+
+ Rational-Neighborhood-Relation : UU (l1 ⊔ lsuc l2)
+ Rational-Neighborhood-Relation = ℚ⁺ → Relation-Prop l2 A
+
+module _
+ {l1 l2 : Level} {A : UU l1} (B : Rational-Neighborhood-Relation l2 A)
+ where
+
+ neighborhood-Rational-Neighborhood-Relation :
+ ℚ⁺ → Relation l2 A
+ neighborhood-Rational-Neighborhood-Relation d x y =
+ type-Prop (B d x y)
+
+ is-prop-neighborhood-Rational-Neighborhood-Relation :
+ (d : ℚ⁺) (x y : A) →
+ is-prop (neighborhood-Rational-Neighborhood-Relation d x y)
+ is-prop-neighborhood-Rational-Neighborhood-Relation d x y =
+ is-prop-type-Prop (B d x y)
+
+ is-upper-bound-dist-prop-Rational-Neighborhood-Relation :
+ A → A → ℚ⁺ → Prop l2
+ is-upper-bound-dist-prop-Rational-Neighborhood-Relation x y d = B d x y
+
+ is-upper-bound-dist-Rational-Neighborhood-Relation :
+ A → A → ℚ⁺ → UU l2
+ is-upper-bound-dist-Rational-Neighborhood-Relation x y d =
+ neighborhood-Rational-Neighborhood-Relation d x y
+
+ is-prop-is-upper-bound-dist-Rational-Neighborhood-Relation :
+ (x y : A) (d : ℚ⁺) →
+ is-prop (is-upper-bound-dist-Rational-Neighborhood-Relation x y d)
+ is-prop-is-upper-bound-dist-Rational-Neighborhood-Relation x y d =
+ is-prop-neighborhood-Rational-Neighborhood-Relation d x y
+```
+
+## Properties
+
+### Equality of rational neighborhood relations
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
+ {l2' : Level} (N' : Rational-Neighborhood-Relation l2' A)
+ where
+
+ Eq-prop-Rational-Neighborhood-Relation : Prop (l1 ⊔ l2 ⊔ l2')
+ Eq-prop-Rational-Neighborhood-Relation =
+ Π-Prop
+ ( ℚ⁺)
+ ( λ d →
+ Π-Prop
+ ( A)
+ ( λ x →
+ Π-Prop
+ ( A)
+ ( λ y → N d x y ⇔ N' d x y)))
+
+ Eq-Rational-Neighborhood-Relation : UU (l1 ⊔ l2 ⊔ l2')
+ Eq-Rational-Neighborhood-Relation =
+ type-Prop Eq-prop-Rational-Neighborhood-Relation
+
+ is-prop-Eq-Rational-Neighborhood-Relation :
+ is-prop Eq-Rational-Neighborhood-Relation
+ is-prop-Eq-Rational-Neighborhood-Relation =
+ is-prop-type-Prop Eq-prop-Rational-Neighborhood-Relation
+```
+
+### Identity principle for rational neighborhood relations
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
+ where
+
+ refl-Eq-Rational-Neighborhood-Relation : Eq-Rational-Neighborhood-Relation N N
+ refl-Eq-Rational-Neighborhood-Relation d x y = id-iff
+
+ Eq-eq-Rational-Neighborhood-Relation :
+ (N' : Rational-Neighborhood-Relation l2 A) →
+ N = N' →
+ Eq-Rational-Neighborhood-Relation N N'
+ Eq-eq-Rational-Neighborhood-Relation .N refl =
+ refl-Eq-Rational-Neighborhood-Relation
+
+ eq-Eq-Rational-Neighborhood-Relation :
+ (N' : Rational-Neighborhood-Relation l2 A) →
+ Eq-Rational-Neighborhood-Relation N N' →
+ N = N'
+ eq-Eq-Rational-Neighborhood-Relation N' H =
+ eq-htpy
+ ( λ d →
+ eq-htpy
+ ( λ x →
+ eq-htpy
+ ( λ y →
+ eq-iff' (N d x y) (N' d x y) (H d x y))))
+
+ is-torsorial-Eq-Rational-Neighborhood-Relation :
+ is-torsorial (Eq-Rational-Neighborhood-Relation N)
+ is-torsorial-Eq-Rational-Neighborhood-Relation =
+ ( N , refl-Eq-Rational-Neighborhood-Relation) ,
+ ( λ (N' , e) →
+ eq-type-subtype
+ ( Eq-prop-Rational-Neighborhood-Relation N)
+ ( eq-Eq-Rational-Neighborhood-Relation N' e))
+
+ is-fiberwise-equiv-Eq-eq-Rational-Neighborhood-Relation :
+ (N' : Rational-Neighborhood-Relation l2 A) →
+ is-equiv (Eq-eq-Rational-Neighborhood-Relation N')
+ is-fiberwise-equiv-Eq-eq-Rational-Neighborhood-Relation =
+ fundamental-theorem-id
+ is-torsorial-Eq-Rational-Neighborhood-Relation
+ Eq-eq-Rational-Neighborhood-Relation
+
+ equiv-Eq-eq-Rational-Neighborhood-Relation :
+ (N' : Rational-Neighborhood-Relation l2 A) →
+ (N = N') ≃ (Eq-Rational-Neighborhood-Relation N N')
+ equiv-Eq-eq-Rational-Neighborhood-Relation N' =
+ Eq-eq-Rational-Neighborhood-Relation N' ,
+ is-fiberwise-equiv-Eq-eq-Rational-Neighborhood-Relation N'
+```
+
+### Characterization of the transport of rational neighborhood relations along equality of types
+
+```agda
+module _
+ {l1 l2 : Level} (A : UU l1)
+ where
+
+ Eq-map-eq-tr-Rational-Neighborhood-Relation :
+ (B : UU l1) (e : A = B) (S : Rational-Neighborhood-Relation l2 A) →
+ Eq-Rational-Neighborhood-Relation
+ ( S)
+ ( λ d x y →
+ tr (Rational-Neighborhood-Relation l2) e S d (map-eq e x) (map-eq e y))
+ Eq-map-eq-tr-Rational-Neighborhood-Relation .A refl S =
+ refl-Eq-Rational-Neighborhood-Relation S
+
+ eq-map-eq-tr-Rational-Neighborhood-Relation :
+ (B : UU l1) (e : A = B) (S : Rational-Neighborhood-Relation l2 A) →
+ Id
+ ( S)
+ ( λ d x y →
+ tr (Rational-Neighborhood-Relation l2) e S d (map-eq e x) (map-eq e y))
+ eq-map-eq-tr-Rational-Neighborhood-Relation B e S =
+ eq-Eq-Rational-Neighborhood-Relation
+ ( S)
+ ( λ d x y →
+ tr (Rational-Neighborhood-Relation l2) e S d (map-eq e x) (map-eq e y))
+ ( Eq-map-eq-tr-Rational-Neighborhood-Relation B e S)
+
+ Eq-map-inv-eq-tr-Rational-Neighborhood-Relation :
+ (B : UU l1) (e : A = B) (S : Rational-Neighborhood-Relation l2 A) →
+ Eq-Rational-Neighborhood-Relation
+ ( tr (Rational-Neighborhood-Relation l2) e S)
+ ( λ d x y → S d (map-inv-eq e x) (map-inv-eq e y))
+ Eq-map-inv-eq-tr-Rational-Neighborhood-Relation .A refl S =
+ refl-Eq-Rational-Neighborhood-Relation S
+
+ eq-map-inv-eq-tr-Rational-Neighborhood-Relation :
+ (B : UU l1) (e : A = B) (S : Rational-Neighborhood-Relation l2 A) →
+ Id
+ ( tr (Rational-Neighborhood-Relation l2) e S)
+ ( λ d x y → S d (map-inv-eq e x) (map-inv-eq e y))
+ eq-map-inv-eq-tr-Rational-Neighborhood-Relation B e S =
+ eq-Eq-Rational-Neighborhood-Relation
+ ( tr (Rational-Neighborhood-Relation l2) e S)
+ ( λ d x y → S d (map-inv-eq e x) (map-inv-eq e y))
+ ( Eq-map-inv-eq-tr-Rational-Neighborhood-Relation B e S)
+```
+
+### The similarity relation induced by a rational neighborhood relation
+
+```agda
+module _ {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
+ where
+
+ sim-prop-Rational-Neighborhood-Relation : Relation-Prop (l1 ⊔ l2) A
+ sim-prop-Rational-Neighborhood-Relation x y =
+ Π-Prop
+ ( ℚ⁺)
+ ( λ d →
+ Π-Prop
+ ( A)
+ ( λ z →
+ product-Prop
+ ( N d x z ⇔ N d y z)
+ ( N d z x ⇔ N d z y)))
+
+ sim-Rational-Neighborhood-Relation : Relation (l1 ⊔ l2) A
+ sim-Rational-Neighborhood-Relation x y =
+ type-Prop (sim-prop-Rational-Neighborhood-Relation x y)
+
+ is-prop-sim-Rational-Neighborhood-Relatiion :
+ (x y : A) → is-prop (sim-Rational-Neighborhood-Relation x y)
+ is-prop-sim-Rational-Neighborhood-Relatiion x y =
+ is-prop-type-Prop (sim-prop-Rational-Neighborhood-Relation x y)
+
+ iff-left-neighbor-sim-Rational-Neighborhood-Relation :
+ {x y : A} →
+ sim-Rational-Neighborhood-Relation x y →
+ (d : ℚ⁺) (z : A) →
+ neighborhood-Rational-Neighborhood-Relation N d x z ↔
+ neighborhood-Rational-Neighborhood-Relation N d y z
+ iff-left-neighbor-sim-Rational-Neighborhood-Relation x≍y d z =
+ pr1 (x≍y d z)
+
+ iff-right-neighbor-sim-Rational-Neighborhood-Relation :
+ {x y : A} →
+ sim-Rational-Neighborhood-Relation x y →
+ (d : ℚ⁺) (z : A) →
+ neighborhood-Rational-Neighborhood-Relation N d z x ↔
+ neighborhood-Rational-Neighborhood-Relation N d z y
+ iff-right-neighbor-sim-Rational-Neighborhood-Relation x≍y d z =
+ pr2 (x≍y d z)
+
+ refl-sim-Rational-Neighborhood-Relation :
+ (x : A) → sim-Rational-Neighborhood-Relation x x
+ refl-sim-Rational-Neighborhood-Relation x d z = id-iff , id-iff
+
+ sim-eq-Rational-Neighborhood-Relation :
+ (x y : A) → x = y → sim-Rational-Neighborhood-Relation x y
+ sim-eq-Rational-Neighborhood-Relation x .x refl =
+ refl-sim-Rational-Neighborhood-Relation x
+
+ symmetric-sim-Rational-Neighborhood-Relation :
+ (x y : A) →
+ sim-Rational-Neighborhood-Relation x y →
+ sim-Rational-Neighborhood-Relation y x
+ symmetric-sim-Rational-Neighborhood-Relation x y x≍y d z =
+ ( inv-iff (iff-left-neighbor-sim-Rational-Neighborhood-Relation x≍y d z)) ,
+ ( inv-iff (iff-right-neighbor-sim-Rational-Neighborhood-Relation x≍y d z))
+
+ inv-sim-Rational-Neighborhood-Relation :
+ {x y : A} →
+ sim-Rational-Neighborhood-Relation x y →
+ sim-Rational-Neighborhood-Relation y x
+ inv-sim-Rational-Neighborhood-Relation {x} {y} =
+ symmetric-sim-Rational-Neighborhood-Relation x y
+
+ transitive-sim-Rational-Neighborhood-Relation :
+ (x y z : A) →
+ sim-Rational-Neighborhood-Relation y z →
+ sim-Rational-Neighborhood-Relation x y →
+ sim-Rational-Neighborhood-Relation x z
+ transitive-sim-Rational-Neighborhood-Relation x y z y≍z x≍y d w =
+ ( ( iff-left-neighbor-sim-Rational-Neighborhood-Relation y≍z d w) ∘iff
+ ( iff-left-neighbor-sim-Rational-Neighborhood-Relation x≍y d w)) ,
+ ( ( iff-right-neighbor-sim-Rational-Neighborhood-Relation y≍z d w) ∘iff
+ ( iff-right-neighbor-sim-Rational-Neighborhood-Relation x≍y d w))
+
+ is-equivalence-relation-sim-Rational-Neighborhood-Relation :
+ is-equivalence-relation (sim-prop-Rational-Neighborhood-Relation)
+ is-equivalence-relation-sim-Rational-Neighborhood-Relation =
+ refl-sim-Rational-Neighborhood-Relation ,
+ symmetric-sim-Rational-Neighborhood-Relation ,
+ transitive-sim-Rational-Neighborhood-Relation
+
+ equivalence-sim-Rational-Neighborhood-Relation :
+ equivalence-relation (l1 ⊔ l2) A
+ equivalence-sim-Rational-Neighborhood-Relation =
+ sim-prop-Rational-Neighborhood-Relation ,
+ is-equivalence-relation-sim-Rational-Neighborhood-Relation
+```
+
+### Similar elements have equivalent self-neighborhoods
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
+ where
+
+ iff-self-neighborhood-sim-Rational-Neighborhood-Relation :
+ (d : ℚ⁺) (x y : A) →
+ sim-Rational-Neighborhood-Relation N x y →
+ neighborhood-Rational-Neighborhood-Relation N d x x ↔
+ neighborhood-Rational-Neighborhood-Relation N d y y
+ iff-self-neighborhood-sim-Rational-Neighborhood-Relation d x y x≍y =
+ ( iff-right-neighbor-sim-Rational-Neighborhood-Relation N x≍y d y) ∘iff
+ ( iff-left-neighbor-sim-Rational-Neighborhood-Relation N x≍y d x)
+```
diff --git a/src/metric-spaces/reflexive-rational-neighborhoods.lagda.md b/src/metric-spaces/reflexive-rational-neighborhoods.lagda.md
new file mode 100644
index 0000000000..1fc82e1c0b
--- /dev/null
+++ b/src/metric-spaces/reflexive-rational-neighborhoods.lagda.md
@@ -0,0 +1,49 @@
+# Reflexive rational neighborhoods on types
+
+```agda
+module metric-spaces.reflexive-rational-neighborhoods where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.binary-relations
+open import foundation.function-types
+open import foundation.propositions
+open import foundation.universe-levels
+
+open import metric-spaces.rational-neighborhoods
+```
+
+
+
+## Idea
+
+A [rational neighborhood](metric-spaces.rational-neighborhoods.md) is
+{{#concept "reflexive" Disambiguation="rational neighborhood relation" Agda=is-reflexive-Rational-Neighborhood-Relation}}
+if any element is in all neighborhoods of itself.
+
+## Definitions
+
+### The property of being a reflexive rational neighborhood relation
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (B : Rational-Neighborhood-Relation l2 A)
+ where
+
+ is-reflexive-prop-Rational-Neighborhood-Relation : Prop (l1 ⊔ l2)
+ is-reflexive-prop-Rational-Neighborhood-Relation =
+ Π-Prop ℚ⁺ (is-reflexive-prop-Relation-Prop ∘ B)
+
+ is-reflexive-Rational-Neighborhood-Relation : UU (l1 ⊔ l2)
+ is-reflexive-Rational-Neighborhood-Relation =
+ type-Prop is-reflexive-prop-Rational-Neighborhood-Relation
+
+ is-prop-is-reflexive-Rational-Neighborhood-Relation :
+ is-prop is-reflexive-Rational-Neighborhood-Relation
+ is-prop-is-reflexive-Rational-Neighborhood-Relation =
+ is-prop-type-Prop is-reflexive-prop-Rational-Neighborhood-Relation
+```
diff --git a/src/metric-spaces/saturated-rational-neighborhoods.lagda.md b/src/metric-spaces/saturated-rational-neighborhoods.lagda.md
new file mode 100644
index 0000000000..b3875fbe99
--- /dev/null
+++ b/src/metric-spaces/saturated-rational-neighborhoods.lagda.md
@@ -0,0 +1,145 @@
+# Saturated rational neighborhood relations
+
+```agda
+module metric-spaces.saturated-rational-neighborhoods where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.addition-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-functions
+open import foundation.binary-relations
+open import foundation.dependent-pair-types
+open import foundation.equivalences
+open import foundation.function-extensionality
+open import foundation.function-types
+open import foundation.fundamental-theorem-of-identity-types
+open import foundation.identity-types
+open import foundation.logical-equivalences
+open import foundation.propositional-extensionality
+open import foundation.propositions
+open import foundation.sets
+open import foundation.subtypes
+open import foundation.torsorial-type-families
+open import foundation.transport-along-identifications
+open import foundation.univalence
+open import foundation.universe-levels
+
+open import metric-spaces.monotonic-rational-neighborhoods
+open import metric-spaces.rational-neighborhoods
+```
+
+
+
+## Idea
+
+A [rational neighborhood relation](metric-spaces.rational-neighborhoods.md) on a
+type `A` is
+{{#concept "saturated" Disambiguation="rational neighborhood relation" Agda=is-saturated-Rational-Neighborhood-Relation}}
+if `ε`-neighborhoods satisfy the following condition:
+
+- For any `x y : A`, if `x` and `y` are in a `(ε + δ)`-neighborhood for all
+ [positive rational numbers](elementary-number-theory.positive-rational-numbers.md)
+ `δ`, then they are in a `ε`-neighborhood.
+
+Or, equivalently if for any `(x y : A)`, the subset of
+[upper bounds](metric-spaces.rational-neighborhoods.md) on the distance between
+`x` and `y` is closed on the left:
+
+- For any `ε : ℚ⁺`, if `ε + δ` is an upper bound of the distance between `x` and
+ `y` for all `(δ : ℚ⁺)`, then so is `ε`.
+
+## Definitions
+
+### The property of being a saturated rational neighborhood relation
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
+ where
+
+ is-saturated-prop-Rational-Neighborhood-Relation : Prop (l1 ⊔ l2)
+ is-saturated-prop-Rational-Neighborhood-Relation =
+ Π-Prop
+ ( ℚ⁺)
+ ( λ ε →
+ Π-Prop
+ ( A)
+ ( λ x →
+ Π-Prop
+ ( A)
+ ( λ y →
+ hom-Prop
+ ( Π-Prop
+ ( ℚ⁺)
+ ( λ δ → N (ε +ℚ⁺ δ) x y))
+ ( N ε x y))))
+
+ is-saturated-Rational-Neighborhood-Relation : UU (l1 ⊔ l2)
+ is-saturated-Rational-Neighborhood-Relation =
+ type-Prop is-saturated-prop-Rational-Neighborhood-Relation
+
+ is-prop-is-saturated-Rational-Neighborhood-Relation :
+ is-prop is-saturated-Rational-Neighborhood-Relation
+ is-prop-is-saturated-Rational-Neighborhood-Relation =
+ is-prop-type-Prop is-saturated-prop-Rational-Neighborhood-Relation
+```
+
+### The saturation of a rational neighborhood relation
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
+ where
+
+ saturate-Rational-Neighborhood-Relation : Rational-Neighborhood-Relation l2 A
+ saturate-Rational-Neighborhood-Relation ε x y =
+ Π-Prop ℚ⁺ (λ δ → N (ε +ℚ⁺ δ) x y)
+```
+
+## Properties
+
+### The saturation of a rational neighborhood relation is saturated
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
+ where
+
+ is-saturated-saturate-Rational-Neighborhood-Relation :
+ is-saturated-Rational-Neighborhood-Relation
+ ( saturate-Rational-Neighborhood-Relation N)
+ is-saturated-saturate-Rational-Neighborhood-Relation ε x y H δ =
+ tr
+ ( is-upper-bound-dist-Rational-Neighborhood-Relation N x y)
+ ( ( associative-add-ℚ⁺
+ ( ε)
+ ( left-summand-split-ℚ⁺ δ)
+ ( right-summand-split-ℚ⁺ δ)) ∙
+ ( ap (add-ℚ⁺ ε) (eq-add-split-ℚ⁺ δ)))
+ ( H (left-summand-split-ℚ⁺ δ) (right-summand-split-ℚ⁺ δ))
+```
+
+### In a monotonic saturated rational neighborhood relation, `N ε x y ⇔ (∀ δ → ε < δ → N δ x y)`
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (N : Rational-Neighborhood-Relation l2 A)
+ (monotonic-N : is-monotonic-Rational-Neighborhood-Relation N)
+ (saturated-N : is-saturated-Rational-Neighborhood-Relation N)
+ where
+
+ iff-le-neighborhood-saturated-monotonic-Rational-Neighborhood-Relation :
+ ( ε : ℚ⁺) (x y : A) →
+ ( neighborhood-Rational-Neighborhood-Relation N ε x y) ↔
+ ( (δ : ℚ⁺) →
+ le-ℚ⁺ ε δ →
+ neighborhood-Rational-Neighborhood-Relation N δ x y)
+ iff-le-neighborhood-saturated-monotonic-Rational-Neighborhood-Relation ε x y =
+ ( λ Nxy δ ε<δ → monotonic-N x y ε δ ε<δ Nxy) ,
+ ( λ H → saturated-N ε x y λ δ → H (ε +ℚ⁺ δ) (le-left-add-ℚ⁺ ε δ))
+```
diff --git a/src/metric-spaces/short-functions-metric-spaces-WIP.lagda.md b/src/metric-spaces/short-functions-metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..bedf0d9902
--- /dev/null
+++ b/src/metric-spaces/short-functions-metric-spaces-WIP.lagda.md
@@ -0,0 +1,345 @@
+# Short functions between metric spaces (WIP)
+
+```agda
+module metric-spaces.short-functions-metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.embeddings
+open import foundation.equivalences
+open import foundation.existential-quantification
+open import foundation.function-extensionality
+open import foundation.function-types
+open import foundation.homotopies
+open import foundation.identity-types
+open import foundation.propositional-truncations
+open import foundation.propositions
+open import foundation.sequences
+open import foundation.sets
+open import foundation.subtypes
+open import foundation.universe-levels
+
+open import metric-spaces.isometries-metric-spaces-WIP
+open import metric-spaces.metric-spaces-WIP
+open import metric-spaces.ordering-rational-neighborhoods
+open import metric-spaces.preimage-rational-neighborhoods
+```
+
+
+
+## Idea
+
+A [function](metric-spaces.functions-metric-spaces.md) `f` between two
+[metric spaces](metric-spaces.metric-spaces.md) `A` and `B` is
+{{#concept "short" Disambiguation="function between metric spaces" Agda=is-short-function-Metric-Space-WIP WD="metric map" WDID=Q2713824}}
+if the [rational neighborhood relation](metric-spaces.rational-neighborhoods.md)
+on `A` is [finer](metric-spaces.ordering-rational-neighborhoods.md) than the
+[preimage](metric-spaces.preimage-rational-neighborhoods.md) by `f` of the
+rational neighborhood relation on `B`. I.e., upper bounds on the distance
+between two points in `A` are upper bounds of the distance between their images
+in `B`.
+
+## Definitions
+
+### The property of being a short function between metric spaces
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (f : type-function-Metric-Space-WIP A B)
+ where
+
+ is-short-function-prop-Metric-Space-WIP : Prop (l1 ⊔ l2 ⊔ l2')
+ is-short-function-prop-Metric-Space-WIP =
+ leq-prop-Rational-Neighborhood-Relation
+ ( neighborhood-prop-Metric-Space-WIP A)
+ ( preimage-Rational-Neighborhood-Relation
+ ( f)
+ ( neighborhood-prop-Metric-Space-WIP B))
+
+ is-short-function-Metric-Space-WIP : UU (l1 ⊔ l2 ⊔ l2')
+ is-short-function-Metric-Space-WIP =
+ type-Prop is-short-function-prop-Metric-Space-WIP
+
+ is-prop-is-short-function-Metric-Space-WIP :
+ is-prop is-short-function-Metric-Space-WIP
+ is-prop-is-short-function-Metric-Space-WIP =
+ is-prop-type-Prop is-short-function-prop-Metric-Space-WIP
+```
+
+### The set of short functions between metric spaces
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ where
+
+ set-short-function-Metric-Space-WIP : Set (l1 ⊔ l2 ⊔ l1' ⊔ l2')
+ set-short-function-Metric-Space-WIP =
+ set-subset
+ ( set-function-Metric-Space-WIP A B)
+ ( is-short-function-prop-Metric-Space-WIP A B)
+
+ short-function-Metric-Space-WIP : UU (l1 ⊔ l2 ⊔ l1' ⊔ l2')
+ short-function-Metric-Space-WIP = type-Set set-short-function-Metric-Space-WIP
+
+ is-set-short-function-Metric-Space-WIP :
+ is-set short-function-Metric-Space-WIP
+ is-set-short-function-Metric-Space-WIP =
+ is-set-type-Set set-short-function-Metric-Space-WIP
+
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (f : short-function-Metric-Space-WIP A B)
+ where
+
+ map-short-function-Metric-Space-WIP : type-function-Metric-Space-WIP A B
+ map-short-function-Metric-Space-WIP = pr1 f
+
+ is-short-map-short-function-Metric-Space-WIP :
+ is-short-function-Metric-Space-WIP A B map-short-function-Metric-Space-WIP
+ is-short-map-short-function-Metric-Space-WIP = pr2 f
+```
+
+## Properties
+
+### The identity function on a metric space is short
+
+```agda
+module _
+ {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ where
+
+ is-short-id-Metric-Space-WIP :
+ is-short-function-Metric-Space-WIP A A (λ x → x)
+ is-short-id-Metric-Space-WIP d x y H = H
+
+ short-id-Metric-Space-WIP : short-function-Metric-Space-WIP A A
+ short-id-Metric-Space-WIP =
+ (λ x → x) , is-short-id-Metric-Space-WIP
+```
+
+### Equality of short functions between metric spaces is characterized by homotopy of their carrier maps
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (f g : short-function-Metric-Space-WIP A B)
+ where
+
+ equiv-eq-htpy-map-short-function-Metric-Space-WIP :
+ ( f = g) ≃
+ ( map-short-function-Metric-Space-WIP A B f ~
+ map-short-function-Metric-Space-WIP A B g)
+ equiv-eq-htpy-map-short-function-Metric-Space-WIP =
+ equiv-funext ∘e
+ extensionality-type-subtype'
+ ( is-short-function-prop-Metric-Space-WIP A B) f g
+
+ eq-htpy-map-short-function-Metric-Space-WIP :
+ ( map-short-function-Metric-Space-WIP A B f ~
+ map-short-function-Metric-Space-WIP A B g) →
+ ( f = g)
+ eq-htpy-map-short-function-Metric-Space-WIP =
+ map-inv-equiv equiv-eq-htpy-map-short-function-Metric-Space-WIP
+```
+
+### Composition of short functions
+
+```agda
+module _
+ {l1a l2a l1b l2b l1c l2c : Level}
+ (A : Metric-Space-WIP l1a l2a)
+ (B : Metric-Space-WIP l1b l2b)
+ (C : Metric-Space-WIP l1c l2c)
+ where
+
+ is-short-comp-is-short-function-Metric-Space-WIP :
+ (g : type-function-Metric-Space-WIP B C) →
+ (f : type-function-Metric-Space-WIP A B) →
+ is-short-function-Metric-Space-WIP B C g →
+ is-short-function-Metric-Space-WIP A B f →
+ is-short-function-Metric-Space-WIP A C (g ∘ f)
+ is-short-comp-is-short-function-Metric-Space-WIP g f H K d x y =
+ H d (f x) (f y) ∘ K d x y
+
+ comp-short-function-Metric-Space-WIP :
+ short-function-Metric-Space-WIP B C →
+ short-function-Metric-Space-WIP A B →
+ short-function-Metric-Space-WIP A C
+ comp-short-function-Metric-Space-WIP g f =
+ ( map-short-function-Metric-Space-WIP B C g ∘
+ map-short-function-Metric-Space-WIP A B f) ,
+ ( is-short-comp-is-short-function-Metric-Space-WIP
+ ( map-short-function-Metric-Space-WIP B C g)
+ ( map-short-function-Metric-Space-WIP A B f)
+ ( is-short-map-short-function-Metric-Space-WIP B C g)
+ ( is-short-map-short-function-Metric-Space-WIP A B f))
+```
+
+### Unit laws for composition of short maps between metric spaces
+
+```agda
+module _
+ {l1a l2a l1b l2b : Level}
+ (A : Metric-Space-WIP l1a l2a)
+ (B : Metric-Space-WIP l1b l2b)
+ (f : short-function-Metric-Space-WIP A B)
+ where
+
+ left-unit-law-comp-short-function-Metric-Space-WIP :
+ ( comp-short-function-Metric-Space-WIP A B B
+ ( short-id-Metric-Space-WIP B)
+ ( f)) =
+ ( f)
+ left-unit-law-comp-short-function-Metric-Space-WIP =
+ eq-htpy-map-short-function-Metric-Space-WIP
+ ( A)
+ ( B)
+ ( comp-short-function-Metric-Space-WIP
+ ( A)
+ ( B)
+ ( B)
+ ( short-id-Metric-Space-WIP B)
+ ( f))
+ ( f)
+ ( λ x → refl)
+
+ right-unit-law-comp-short-function-Metric-Space-WIP :
+ ( comp-short-function-Metric-Space-WIP A A B
+ ( f)
+ ( short-id-Metric-Space-WIP A)) =
+ ( f)
+ right-unit-law-comp-short-function-Metric-Space-WIP =
+ eq-htpy-map-short-function-Metric-Space-WIP
+ ( A)
+ ( B)
+ ( f)
+ ( comp-short-function-Metric-Space-WIP
+ ( A)
+ ( A)
+ ( B)
+ ( f)
+ ( short-id-Metric-Space-WIP A))
+ ( λ x → refl)
+```
+
+### Associativity of composition of short maps between metric spaces
+
+```agda
+module _
+ {l1a l2a l1b l2b l1c l2c l1d l2d : Level}
+ (A : Metric-Space-WIP l1a l2a)
+ (B : Metric-Space-WIP l1b l2b)
+ (C : Metric-Space-WIP l1c l2c)
+ (D : Metric-Space-WIP l1d l2d)
+ (h : short-function-Metric-Space-WIP C D)
+ (g : short-function-Metric-Space-WIP B C)
+ (f : short-function-Metric-Space-WIP A B)
+ where
+
+ associative-comp-short-function-Metric-Space-WIP :
+ ( comp-short-function-Metric-Space-WIP A B D
+ ( comp-short-function-Metric-Space-WIP B C D h g)
+ ( f)) =
+ ( comp-short-function-Metric-Space-WIP A C D
+ ( h)
+ ( comp-short-function-Metric-Space-WIP A B C g f))
+ associative-comp-short-function-Metric-Space-WIP =
+ eq-htpy-map-short-function-Metric-Space-WIP
+ ( A)
+ ( D)
+ ( comp-short-function-Metric-Space-WIP A B D
+ ( comp-short-function-Metric-Space-WIP B C D h g)
+ ( f))
+ ( comp-short-function-Metric-Space-WIP A C D
+ ( h)
+ ( comp-short-function-Metric-Space-WIP A B C g f))
+ ( λ x → refl)
+```
+
+### Constant functions between metric spaces are short
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (b : type-Metric-Space-WIP B)
+ where
+
+ is-short-constant-function-Metric-Space-WIP :
+ is-short-function-Metric-Space-WIP A B (λ _ → b)
+ is-short-constant-function-Metric-Space-WIP ε x y H =
+ refl-neighborhood-Metric-Space-WIP B ε b
+```
+
+### Any isometry between metric spaces is short
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ (f : type-function-Metric-Space-WIP A B)
+ where
+
+ is-short-is-isometry-Metric-Space-WIP :
+ is-isometry-Metric-Space-WIP A B f →
+ is-short-function-Metric-Space-WIP A B f
+ is-short-is-isometry-Metric-Space-WIP I =
+ preserves-neighborhood-map-isometry-Metric-Space-WIP A B (f , I)
+```
+
+### The embedding of isometries of metric spaces into short maps
+
+```agda
+module _
+ {l1 l2 l1' l2' : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l1' l2')
+ where
+
+ short-isometry-Metric-Space-WIP :
+ isometry-Metric-Space-WIP A B → short-function-Metric-Space-WIP A B
+ short-isometry-Metric-Space-WIP f =
+ map-isometry-Metric-Space-WIP A B f ,
+ is-short-is-isometry-Metric-Space-WIP
+ ( A)
+ ( B)
+ ( map-isometry-Metric-Space-WIP A B f)
+ ( is-isometry-map-isometry-Metric-Space-WIP A B f)
+
+ is-emb-short-isometry-Metric-Space-WIP :
+ is-emb short-isometry-Metric-Space-WIP
+ is-emb-short-isometry-Metric-Space-WIP =
+ is-emb-right-factor
+ ( map-short-function-Metric-Space-WIP A B)
+ ( short-isometry-Metric-Space-WIP)
+ ( is-emb-inclusion-subtype (is-short-function-prop-Metric-Space-WIP A B))
+ ( is-emb-htpy
+ ( λ f → refl)
+ ( is-emb-inclusion-subtype (is-isometry-prop-Metric-Space-WIP A B)))
+
+ emb-short-isometry-Metric-Space :
+ isometry-Metric-Space-WIP A B ↪ short-function-Metric-Space-WIP A B
+ emb-short-isometry-Metric-Space =
+ short-isometry-Metric-Space-WIP ,
+ is-emb-short-isometry-Metric-Space-WIP
+```
+
+## See also
+
+- The
+ [category of short functions on metric spaces](metric-spaces.category-of-metric-spaces-and-short-functions.md)
+
+## External links
+
+- [Short maps](https://ncatlab.org/nlab/show/short+map) at $n$Lab
+- [Metric maps](https://en.wikipedia.org/wiki/Metric_map) at Wikipedia
diff --git a/src/metric-spaces/short-functions-metric-spaces.lagda.md b/src/metric-spaces/short-functions-metric-spaces.lagda.md
index 566e76808f..ed1f20ba8c 100644
--- a/src/metric-spaces/short-functions-metric-spaces.lagda.md
+++ b/src/metric-spaces/short-functions-metric-spaces.lagda.md
@@ -228,7 +228,7 @@ module _
( λ x → refl)
```
-### Associatity of composition of short maps between metric spaces
+### Associativity of composition of short maps between metric spaces
```agda
module _
diff --git a/src/metric-spaces/similarity-of-elements-pseudometric-spaces.lagda.md b/src/metric-spaces/similarity-of-elements-pseudometric-spaces.lagda.md
new file mode 100644
index 0000000000..976a9cbffe
--- /dev/null
+++ b/src/metric-spaces/similarity-of-elements-pseudometric-spaces.lagda.md
@@ -0,0 +1,257 @@
+# Similarity of elements in pseudometric spaces
+
+```agda
+module metric-spaces.similarity-of-elements-pseudometric-spaces where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.binary-relations
+open import foundation.dependent-pair-types
+open import foundation.equivalence-relations
+open import foundation.function-types
+open import foundation.identity-types
+open import foundation.logical-equivalences
+open import foundation.propositions
+open import foundation.transport-along-identifications
+open import foundation.universe-levels
+
+open import metric-spaces.pseudometric-spaces-WIP
+open import metric-spaces.rational-neighborhoods
+```
+
+
+
+## Idea
+
+Two elements `x y` of a
+[pseudometric space](metric-spaces.pseudometric-spaces-WIP.md) are
+{{#concept "similar" Disambiguation="elements of a pseudometric space" Agda=sim-Pseudometric-Space-WIP}}
+if any of the following equivalent propositions holds:
+
+- they are similar w.r.t the underlying
+ [rational neighborhood relation](metric-spaces.rational-neighborhoods.md);
+- they have the same neighbors: `∀ δ z → N δ x z ↔ N δ y z`;
+- they share all neighborhoods: `∀ δ → N δ x y`.
+
+Similarity in a pseudometric space is an
+[equivalence relation](foundation.equivalence-relations.md).
+
+## Definitions
+
+### Neighborhood similarity relation in pseudometric spaces
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ where
+
+ sim-prop-Pseudometric-Space-WIP :
+ Relation-Prop l2 (type-Pseudometric-Space-WIP A)
+ sim-prop-Pseudometric-Space-WIP x y =
+ Π-Prop ℚ⁺ (is-upper-bound-dist-prop-Pseudometric-Space-WIP A x y)
+
+ sim-Pseudometric-Space-WIP :
+ Relation l2 (type-Pseudometric-Space-WIP A)
+ sim-Pseudometric-Space-WIP =
+ type-Relation-Prop sim-prop-Pseudometric-Space-WIP
+
+ is-prop-sim-Pseudometric-Space-WIP :
+ (x y : type-Pseudometric-Space-WIP A) →
+ is-prop (sim-Pseudometric-Space-WIP x y)
+ is-prop-sim-Pseudometric-Space-WIP =
+ is-prop-type-Relation-Prop sim-prop-Pseudometric-Space-WIP
+```
+
+## Properties
+
+### Similarity in pseudometric spaces is reflexive
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ where
+
+ refl-sim-Pseudometric-Space-WIP :
+ (x : type-Pseudometric-Space-WIP A) →
+ sim-Pseudometric-Space-WIP A x x
+ refl-sim-Pseudometric-Space-WIP x d =
+ refl-neighborhood-Pseudometric-Space-WIP A d x
+
+ sim-eq-Pseudometric-Space-WIP :
+ (x y : type-Pseudometric-Space-WIP A) →
+ x = y →
+ sim-Pseudometric-Space-WIP A x y
+ sim-eq-Pseudometric-Space-WIP x .x refl =
+ refl-sim-Pseudometric-Space-WIP x
+```
+
+### Similarity in pseudometric spaces is symmetric
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ where
+
+ symmetric-sim-Pseudometric-Space-WIP :
+ (x y : type-Pseudometric-Space-WIP A) →
+ sim-Pseudometric-Space-WIP A x y →
+ sim-Pseudometric-Space-WIP A y x
+ symmetric-sim-Pseudometric-Space-WIP x y Nxy d =
+ symmetric-neighborhood-Pseudometric-Space-WIP A d x y (Nxy d)
+
+ inv-sim-Pseudometric-Space-WIP :
+ {x y : type-Pseudometric-Space-WIP A} →
+ sim-Pseudometric-Space-WIP A x y →
+ sim-Pseudometric-Space-WIP A y x
+ inv-sim-Pseudometric-Space-WIP {x} {y} =
+ symmetric-sim-Pseudometric-Space-WIP x y
+```
+
+### Similarity in pseudometric spaces is transitive
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ where
+
+ transitive-sim-Pseudometric-Space-WIP :
+ (x y z : type-Pseudometric-Space-WIP A) →
+ sim-Pseudometric-Space-WIP A y z →
+ sim-Pseudometric-Space-WIP A x y →
+ sim-Pseudometric-Space-WIP A x z
+ transitive-sim-Pseudometric-Space-WIP x y z Nyz Nxy d =
+ tr
+ ( is-upper-bound-dist-Pseudometric-Space-WIP A x z)
+ ( eq-add-split-ℚ⁺ d)
+ ( triangular-neighborhood-Pseudometric-Space-WIP
+ ( A)
+ ( x)
+ ( y)
+ ( z)
+ ( left-summand-split-ℚ⁺ d)
+ ( right-summand-split-ℚ⁺ d)
+ ( Nyz (right-summand-split-ℚ⁺ d))
+ ( Nxy (left-summand-split-ℚ⁺ d)))
+```
+
+### Similarity in pseudometric spaces is an equivalence relation
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ where
+
+ is-equivalence-relation-sim-Pseudometric-Space-WIP :
+ is-equivalence-relation (sim-prop-Pseudometric-Space-WIP A)
+ is-equivalence-relation-sim-Pseudometric-Space-WIP =
+ ( refl-sim-Pseudometric-Space-WIP A) ,
+ ( symmetric-sim-Pseudometric-Space-WIP A) ,
+ ( transitive-sim-Pseudometric-Space-WIP A)
+
+ equivalence-sim-Pseudometric-Space-WIP :
+ equivalence-relation l2 (type-Pseudometric-Space-WIP A)
+ equivalence-sim-Pseudometric-Space-WIP =
+ ( sim-prop-Pseudometric-Space-WIP A) ,
+ ( is-equivalence-relation-sim-Pseudometric-Space-WIP)
+```
+
+### Similar elements are elements with the same neighbors
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ where
+
+ preserves-neighborhood-sim-Pseudometric-Space :
+ { x y : type-Pseudometric-Space-WIP A} →
+ ( sim-Pseudometric-Space-WIP A x y) →
+ ( d : ℚ⁺) (z : type-Pseudometric-Space-WIP A) →
+ neighborhood-Pseudometric-Space-WIP A d x z →
+ neighborhood-Pseudometric-Space-WIP A d y z
+ preserves-neighborhood-sim-Pseudometric-Space {x} {y} x≍y d z Nxz =
+ saturated-neighborhood-Pseudometric-Space-WIP
+ ( A)
+ ( d)
+ ( y)
+ ( z)
+ ( λ δ →
+ tr
+ ( is-upper-bound-dist-Pseudometric-Space-WIP A y z)
+ ( commutative-add-ℚ⁺ δ d)
+ ( triangular-neighborhood-Pseudometric-Space-WIP
+ ( A)
+ ( y)
+ ( x)
+ ( z)
+ ( δ)
+ ( d)
+ ( Nxz)
+ ( symmetric-neighborhood-Pseudometric-Space-WIP
+ ( A)
+ ( δ)
+ ( x)
+ ( y)
+ ( x≍y δ))))
+
+ iff-same-neighbors-sim-Pseudometric-Space :
+ { x y : type-Pseudometric-Space-WIP A} →
+ ( sim-Pseudometric-Space-WIP A x y) ↔
+ ( (d : ℚ⁺) (z : type-Pseudometric-Space-WIP A) →
+ neighborhood-Pseudometric-Space-WIP A d x z ↔
+ neighborhood-Pseudometric-Space-WIP 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-WIP A x≍y)
+ ( d)
+ ( z))) ,
+ ( λ same-neighbors d →
+ backward-implication
+ ( same-neighbors d _)
+ ( refl-sim-Pseudometric-Space-WIP A _ d))
+```
+
+### Similar elements are elements similar w.r.t the underlying rational neighborhood relation
+
+```agda
+module _
+ {l1 l2 : Level} (A : Pseudometric-Space-WIP l1 l2)
+ where
+
+ iff-same-neighbors-same-neighborhood-Pseudometric-Space :
+ {x y : type-Pseudometric-Space-WIP A} →
+ ( (d : ℚ⁺) (z : type-Pseudometric-Space-WIP A) →
+ neighborhood-Pseudometric-Space-WIP A d x z ↔
+ neighborhood-Pseudometric-Space-WIP A d y z) ↔
+ ( sim-Rational-Neighborhood-Relation
+ ( neighborhood-prop-Pseudometric-Space-WIP A)
+ ( x)
+ ( y))
+ iff-same-neighbors-same-neighborhood-Pseudometric-Space =
+ ( λ H d z →
+ ( H d z) ,
+ ( inv-neighborhood-Pseudometric-Space-WIP A ∘
+ pr1 (H d z) ∘
+ inv-neighborhood-Pseudometric-Space-WIP A) ,
+ ( inv-neighborhood-Pseudometric-Space-WIP A ∘
+ pr2 (H d z) ∘
+ inv-neighborhood-Pseudometric-Space-WIP A)) ,
+ ( iff-left-neighbor-sim-Rational-Neighborhood-Relation
+ ( neighborhood-prop-Pseudometric-Space-WIP A))
+
+ iff-same-neighborhood-sim-Pseudometric-Space :
+ { x y : type-Pseudometric-Space-WIP A} →
+ ( sim-Pseudometric-Space-WIP A x y) ↔
+ ( sim-Rational-Neighborhood-Relation
+ ( neighborhood-prop-Pseudometric-Space-WIP A)
+ ( x)
+ ( y))
+ iff-same-neighborhood-sim-Pseudometric-Space =
+ ( iff-same-neighbors-same-neighborhood-Pseudometric-Space) ∘iff
+ ( iff-same-neighbors-sim-Pseudometric-Space A)
+```
diff --git a/src/metric-spaces/subspaces-metric-spaces-WIP.lagda.md b/src/metric-spaces/subspaces-metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..268c6de0b9
--- /dev/null
+++ b/src/metric-spaces/subspaces-metric-spaces-WIP.lagda.md
@@ -0,0 +1,165 @@
+# Subspaces of metric spaces (WIP)
+
+```agda
+module metric-spaces.subspaces-metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import foundation.dependent-pair-types
+open import foundation.function-types
+open import foundation.logical-equivalences
+open import foundation.subtypes
+open import foundation.universe-levels
+
+open import metric-spaces.extensional-pseudometric-spaces-WIP
+open import metric-spaces.isometries-metric-spaces-WIP
+open import metric-spaces.metric-spaces-WIP
+open import metric-spaces.pseudometric-spaces-WIP
+open import metric-spaces.rational-neighborhoods
+open import metric-spaces.reflexive-rational-neighborhoods
+open import metric-spaces.saturated-rational-neighborhoods
+open import metric-spaces.symmetric-rational-neighborhoods
+open import metric-spaces.triangular-rational-neighborhoods
+```
+
+
+
+## Idea
+
+[Subsets](foundation.subtypes.md) of
+[metric spaces](metric-spaces.metric-spaces.md) inherit the metric structure of
+their ambient space; these are
+{{#concept "metric subspaces" Agda=subspace-Metric-Space-WIP}} of metric spaces.
+
+The natural inclusion of subspace into its ambient space is an
+[isometry](metric-spaces.isometries-metric-spaces.md).
+
+## Definitions
+
+### Subsets of metric spaces
+
+```agda
+module _
+ (l : Level) {l1 l2 : Level} (A : Metric-Space-WIP l1 l2)
+ where
+
+ subset-Metric-Space-WIP : UU (lsuc l ⊔ l1)
+ subset-Metric-Space-WIP = subtype l (type-Metric-Space-WIP A)
+```
+
+### Metric subspace of a metric space
+
+```agda
+module _
+ {l l1 l2 : Level}
+ (A : Metric-Space-WIP l1 l2)
+ (S : subset-Metric-Space-WIP l A)
+ where
+
+ neighborhood-prop-subset-Metric-Space-WIP :
+ Rational-Neighborhood-Relation l2 (type-subtype S)
+ neighborhood-prop-subset-Metric-Space-WIP d x y =
+ neighborhood-prop-Metric-Space-WIP A d (pr1 x) (pr1 y)
+
+ is-reflexive-neighborhood-subset-Metric-Space-WIP :
+ is-reflexive-Rational-Neighborhood-Relation
+ neighborhood-prop-subset-Metric-Space-WIP
+ is-reflexive-neighborhood-subset-Metric-Space-WIP d x =
+ refl-neighborhood-Metric-Space-WIP A d (pr1 x)
+
+ is-symmetric-neighborhood-subset-Metric-Space-WIP :
+ is-symmetric-Rational-Neighborhood-Relation
+ neighborhood-prop-subset-Metric-Space-WIP
+ is-symmetric-neighborhood-subset-Metric-Space-WIP d x y =
+ symmetric-neighborhood-Metric-Space-WIP A d (pr1 x) (pr1 y)
+
+ is-triangular-neighborhood-subset-Metric-Space-WIP :
+ is-triangular-Rational-Neighborhood-Relation
+ neighborhood-prop-subset-Metric-Space-WIP
+ is-triangular-neighborhood-subset-Metric-Space-WIP x y z =
+ triangular-neighborhood-Metric-Space-WIP A (pr1 x) (pr1 y) (pr1 z)
+
+ is-saturated-neighborhood-subset-Metric-Space-WIP :
+ is-saturated-Rational-Neighborhood-Relation
+ neighborhood-prop-subset-Metric-Space-WIP
+ is-saturated-neighborhood-subset-Metric-Space-WIP ε x y =
+ saturated-neighborhood-Metric-Space-WIP
+ ( A)
+ ( ε)
+ ( pr1 x)
+ ( pr1 y)
+
+ pseudometric-subspace-Metric-Space-WIP :
+ Pseudometric-Space-WIP (l ⊔ l1) l2
+ pseudometric-subspace-Metric-Space-WIP =
+ ( type-subtype S) ,
+ ( neighborhood-prop-subset-Metric-Space-WIP ,
+ is-reflexive-neighborhood-subset-Metric-Space-WIP ,
+ is-symmetric-neighborhood-subset-Metric-Space-WIP ,
+ is-triangular-neighborhood-subset-Metric-Space-WIP ,
+ is-saturated-neighborhood-subset-Metric-Space-WIP)
+
+ is-extensional-pseudometric-subspace-Metric-Space-WIP :
+ is-extensional-Pseudometric-Space-WIP
+ pseudometric-subspace-Metric-Space-WIP
+ is-extensional-pseudometric-subspace-Metric-Space-WIP =
+ is-extensional-is-tight-Pseudometric-Space
+ ( pseudometric-subspace-Metric-Space-WIP)
+ ( λ x y →
+ eq-type-subtype S ∘
+ eq-sim-Metric-Space-WIP A (pr1 x) (pr1 y))
+
+ subspace-Metric-Space-WIP : Metric-Space-WIP (l ⊔ l1) l2
+ subspace-Metric-Space-WIP =
+ make-Metric-Space-WIP
+ ( type-subtype S)
+ ( neighborhood-prop-subset-Metric-Space-WIP)
+ ( is-reflexive-neighborhood-subset-Metric-Space-WIP)
+ ( is-symmetric-neighborhood-subset-Metric-Space-WIP)
+ ( is-triangular-neighborhood-subset-Metric-Space-WIP)
+ ( is-saturated-neighborhood-subset-Metric-Space-WIP)
+ ( is-extensional-pseudometric-subspace-Metric-Space-WIP)
+```
+
+### Inclusion of a metric subspace into its ambient space
+
+```agda
+module _
+ {l l1 l2 : Level}
+ (A : Metric-Space-WIP l1 l2)
+ (S : subset-Metric-Space-WIP l A)
+ where
+
+ inclusion-subspace-Metric-Space-WIP :
+ type-function-Metric-Space-WIP
+ ( subspace-Metric-Space-WIP A S)
+ ( A)
+ inclusion-subspace-Metric-Space-WIP = inclusion-subtype S
+```
+
+## Properties
+
+### The inclusion of a subspace into its ambient space is an isometry
+
+```agda
+module _
+ {l l1 l2 : Level}
+ (A : Metric-Space-WIP l1 l2)
+ (S : subset-Metric-Space-WIP l A)
+ where
+
+ is-isometry-inclusion-subspace-Metric-Space-WIP :
+ is-isometry-Metric-Space-WIP
+ (subspace-Metric-Space-WIP A S)
+ (A)
+ (inclusion-subspace-Metric-Space-WIP A S)
+ is-isometry-inclusion-subspace-Metric-Space-WIP d x y = id-iff
+
+ isometry-inclusion-subspace-Metric-Space-WIP :
+ isometry-Metric-Space-WIP (subspace-Metric-Space-WIP A S) A
+ isometry-inclusion-subspace-Metric-Space-WIP =
+ inclusion-subspace-Metric-Space-WIP A S ,
+ is-isometry-inclusion-subspace-Metric-Space-WIP
+```
diff --git a/src/metric-spaces/symmetric-rational-neighborhoods.lagda.md b/src/metric-spaces/symmetric-rational-neighborhoods.lagda.md
new file mode 100644
index 0000000000..c23e85b6b4
--- /dev/null
+++ b/src/metric-spaces/symmetric-rational-neighborhoods.lagda.md
@@ -0,0 +1,49 @@
+# Symmetric rational neighborhoods on types
+
+```agda
+module metric-spaces.symmetric-rational-neighborhoods where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.binary-relations
+open import foundation.function-types
+open import foundation.propositions
+open import foundation.universe-levels
+
+open import metric-spaces.rational-neighborhoods
+```
+
+
+
+## Idea
+
+A [rational neighborhood](metric-spaces.rational-neighborhoods.md) is
+{{#concept "symmetric" Disambiguation="rational neighborhood relation" Agda=is-symmetric-Rational-Neighborhood-Relation}}
+if all neighborhoods are symmetric.
+
+## Definitions
+
+### The property of being a symmetric rational neighborhood relation
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (B : Rational-Neighborhood-Relation l2 A)
+ where
+
+ is-symmetric-prop-Rational-Neighborhood-Relation : Prop (l1 ⊔ l2)
+ is-symmetric-prop-Rational-Neighborhood-Relation =
+ Π-Prop ℚ⁺ (is-symmetric-prop-Relation-Prop ∘ B)
+
+ is-symmetric-Rational-Neighborhood-Relation : UU (l1 ⊔ l2)
+ is-symmetric-Rational-Neighborhood-Relation =
+ type-Prop is-symmetric-prop-Rational-Neighborhood-Relation
+
+ is-prop-is-symmetric-Rational-Neighborhood-Relation :
+ is-prop is-symmetric-Rational-Neighborhood-Relation
+ is-prop-is-symmetric-Rational-Neighborhood-Relation =
+ is-prop-type-Prop is-symmetric-prop-Rational-Neighborhood-Relation
+```
diff --git a/src/metric-spaces/triangular-rational-neighborhoods.lagda.md b/src/metric-spaces/triangular-rational-neighborhoods.lagda.md
new file mode 100644
index 0000000000..df7ce99b3c
--- /dev/null
+++ b/src/metric-spaces/triangular-rational-neighborhoods.lagda.md
@@ -0,0 +1,94 @@
+# Triangular rational neighborhood relations on types
+
+```agda
+module metric-spaces.triangular-rational-neighborhoods where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.binary-relations
+open import foundation.function-types
+open import foundation.identity-types
+open import foundation.propositions
+open import foundation.transport-along-identifications
+open import foundation.universe-levels
+
+open import metric-spaces.monotonic-rational-neighborhoods
+open import metric-spaces.rational-neighborhoods
+open import metric-spaces.reflexive-rational-neighborhoods
+```
+
+
+
+## Idea
+
+A [rational neighborhood relation](metric-spaces.premetric-structures.md) is
+{{#concept "triangular" Disambiguation="rational neighborhood relation" agda=is-triangular-Rational-Neighborhood-Relation}}
+if it is additively transitive, i.e., if any `d₂`-neighbor of a `d₁`-neighbor of
+an element is its `d₁ + d₂`-neighbor.
+
+## Definitions
+
+### The property of being a triangular rational neighborhood relation
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (B : Rational-Neighborhood-Relation l2 A)
+ where
+
+ is-triangular-prop-Rational-Neighborhood-Relation : Prop (l1 ⊔ l2)
+ is-triangular-prop-Rational-Neighborhood-Relation =
+ Π-Prop
+ ( A)
+ ( λ x →
+ ( Π-Prop
+ ( A)
+ ( λ y →
+ ( Π-Prop
+ ( A)
+ ( λ z →
+ Π-Prop
+ ( ℚ⁺)
+ ( λ d₁ →
+ ( Π-Prop
+ ( ℚ⁺)
+ ( λ d₂ →
+ hom-Prop
+ ( B d₂ y z)
+ ( hom-Prop
+ ( B d₁ x y)
+ ( B (d₁ +ℚ⁺ d₂) x z))))))))))
+
+ is-triangular-Rational-Neighborhood-Relation : UU (l1 ⊔ l2)
+ is-triangular-Rational-Neighborhood-Relation =
+ type-Prop is-triangular-prop-Rational-Neighborhood-Relation
+
+ is-prop-is-triangular-Rational-Neighborhood-Relation :
+ is-prop is-triangular-Rational-Neighborhood-Relation
+ is-prop-is-triangular-Rational-Neighborhood-Relation =
+ is-prop-type-Prop is-triangular-prop-Rational-Neighborhood-Relation
+```
+
+## Properties
+
+### Any triangular reflexive rational neighborhood relation is monotonic
+
+```agda
+module _
+ {l1 l2 : Level} {A : UU l1} (B : Rational-Neighborhood-Relation l2 A)
+ (R : is-reflexive-Rational-Neighborhood-Relation B)
+ (T : is-triangular-Rational-Neighborhood-Relation B)
+ where
+
+ is-monotonic-is-reflexive-triangular-Rational-Neighborhood-Relation :
+ is-monotonic-Rational-Neighborhood-Relation B
+ is-monotonic-is-reflexive-triangular-Rational-Neighborhood-Relation
+ x y d₁ d₂ I H₁ =
+ tr
+ ( λ d → neighborhood-Rational-Neighborhood-Relation B d x y)
+ ( right-diff-law-add-ℚ⁺ d₁ d₂ I)
+ ( T x y y d₁ (le-diff-ℚ⁺ d₁ d₂ I) (R (le-diff-ℚ⁺ d₁ d₂ I) y) H₁)
+```
diff --git a/src/metric-spaces/uniformly-continuous-functions-metric-spaces-WIP.lagda.md b/src/metric-spaces/uniformly-continuous-functions-metric-spaces-WIP.lagda.md
new file mode 100644
index 0000000000..cb443ea946
--- /dev/null
+++ b/src/metric-spaces/uniformly-continuous-functions-metric-spaces-WIP.lagda.md
@@ -0,0 +1,238 @@
+# Uniformly continuous functions between metric spaces (WIP)
+
+```agda
+module metric-spaces.uniformly-continuous-functions-metric-spaces-WIP where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.existential-quantification
+open import foundation.function-types
+open import foundation.functoriality-dependent-pair-types
+open import foundation.inhabited-subtypes
+open import foundation.propositional-truncations
+open import foundation.propositions
+open import foundation.subtypes
+open import foundation.universe-levels
+
+open import logic.functoriality-existential-quantification
+
+open import metric-spaces.continuous-functions-metric-spaces-WIP
+open import metric-spaces.isometries-metric-spaces-WIP
+open import metric-spaces.metric-spaces-WIP
+open import metric-spaces.short-functions-metric-spaces-WIP
+```
+
+
+
+## Idea
+
+A [function](metric-spaces.functions-metric-spaces.md) `f` between
+[metric spaces](metric-spaces.metric-spaces.md) `X` and `Y` is
+{{#concept "uniformly continuous" Disambiguation="function between metric spaces" WDID=Q741865 WD="uniform continuity" Agda=is-uniformly-continuous-function-Metric-Space-WIP}}
+if there exists a function `m : ℚ⁺ → ℚ⁺` such that for any `x : X`, whenever
+`x'` is in an `m ε`-neighborhood of `x`, `f x'` is in an `ε`-neighborhood of
+`f x`. The function `m` is called a modulus of uniform continuity of `f`.
+
+## Definitions
+
+### The property of being a uniformly continuous function
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level}
+ (X : Metric-Space-WIP l1 l2)
+ (Y : Metric-Space-WIP l3 l4)
+ (f : type-function-Metric-Space-WIP X Y)
+ where
+
+ is-modulus-of-uniform-continuity-prop-function-Metric-Space-WIP :
+ (ℚ⁺ → ℚ⁺) → Prop (l1 ⊔ l2 ⊔ l4)
+ is-modulus-of-uniform-continuity-prop-function-Metric-Space-WIP m =
+ Π-Prop
+ ( type-Metric-Space-WIP X)
+ ( λ x →
+ is-modulus-of-continuity-at-point-prop-function-Metric-Space-WIP
+ X
+ Y
+ f
+ x
+ m)
+
+ modulus-of-uniform-continuity-function-Metric-Space-WIP : UU (l1 ⊔ l2 ⊔ l4)
+ modulus-of-uniform-continuity-function-Metric-Space-WIP =
+ type-subtype is-modulus-of-uniform-continuity-prop-function-Metric-Space-WIP
+
+ is-uniformly-continuous-prop-function-Metric-Space-WIP : Prop (l1 ⊔ l2 ⊔ l4)
+ is-uniformly-continuous-prop-function-Metric-Space-WIP =
+ is-inhabited-subtype-Prop
+ is-modulus-of-uniform-continuity-prop-function-Metric-Space-WIP
+
+ is-uniformly-continuous-function-Metric-Space-WIP : UU (l1 ⊔ l2 ⊔ l4)
+ is-uniformly-continuous-function-Metric-Space-WIP =
+ type-Prop is-uniformly-continuous-prop-function-Metric-Space-WIP
+```
+
+### The type of uniformly continuous functions between metric spaces
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level}
+ (X : Metric-Space-WIP l1 l2)
+ (Y : Metric-Space-WIP l3 l4)
+ where
+
+ uniformly-continuous-function-Metric-Space-WIP : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4)
+ uniformly-continuous-function-Metric-Space-WIP =
+ type-subtype (is-uniformly-continuous-prop-function-Metric-Space-WIP X Y)
+
+ map-uniformly-continuous-function-Metric-Space-WIP :
+ uniformly-continuous-function-Metric-Space-WIP →
+ type-function-Metric-Space-WIP X Y
+ map-uniformly-continuous-function-Metric-Space-WIP = pr1
+
+ is-uniformly-continuous-map-uniformly-continuous-function-Metric-Space-WIP :
+ (f : uniformly-continuous-function-Metric-Space-WIP) →
+ is-uniformly-continuous-function-Metric-Space-WIP
+ ( X)
+ ( Y)
+ ( map-uniformly-continuous-function-Metric-Space-WIP f)
+ is-uniformly-continuous-map-uniformly-continuous-function-Metric-Space-WIP =
+ pr2
+```
+
+## Properties
+
+### Uniformly continuous functions are continuous at all points
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level}
+ (X : Metric-Space-WIP l1 l2)
+ (Y : Metric-Space-WIP l3 l4)
+ (f : type-function-Metric-Space-WIP X Y)
+ where
+
+ is-continuous-at-point-is-uniformly-continuous-function-Metric-Space-WIP :
+ is-uniformly-continuous-function-Metric-Space-WIP X Y f →
+ (x : type-Metric-Space-WIP X) →
+ is-continuous-at-point-function-Metric-Space-WIP X Y f x
+ is-continuous-at-point-is-uniformly-continuous-function-Metric-Space-WIP H x =
+ elim-exists
+ ( is-continuous-at-point-prop-function-Metric-Space-WIP X Y f x)
+ ( λ m K → intro-exists m (K x))
+ ( H)
+```
+
+### The identity function is uniformly continuous
+
+```agda
+module _
+ {l1 l2 : Level} (X : Metric-Space-WIP l1 l2)
+ where
+
+ is-uniformly-continuous-id-Metric-Space-WIP :
+ is-uniformly-continuous-function-Metric-Space-WIP X X id
+ is-uniformly-continuous-id-Metric-Space-WIP =
+ intro-exists id (λ _ _ _ → id)
+```
+
+### The composition of uniformly continuous functions is uniformly continuous
+
+```agda
+module _
+ {l1 l2 l3 l4 l5 l6 : Level}
+ (X : Metric-Space-WIP l1 l2)
+ (Y : Metric-Space-WIP l3 l4)
+ (Z : Metric-Space-WIP l5 l6)
+ where
+
+ is-uniformly-continuous-comp-function-Metric-Space-WIP :
+ (g : type-function-Metric-Space-WIP Y Z) →
+ (f : type-function-Metric-Space-WIP X Y) →
+ is-uniformly-continuous-function-Metric-Space-WIP Y Z g →
+ is-uniformly-continuous-function-Metric-Space-WIP X Y f →
+ is-uniformly-continuous-function-Metric-Space-WIP X Z (g ∘ f)
+ is-uniformly-continuous-comp-function-Metric-Space-WIP g f H K =
+ do
+ mg , is-modulus-uniform-mg ← H
+ mf , is-modulus-uniform-mf ← K
+ intro-exists
+ ( mf ∘ mg)
+ ( λ x ε x' →
+ is-modulus-uniform-mg (f x) ε (f x') ∘
+ is-modulus-uniform-mf x (mg ε) x')
+ where
+ open
+ do-syntax-trunc-Prop
+ ( is-uniformly-continuous-prop-function-Metric-Space-WIP X Z (g ∘ f))
+
+ comp-uniformly-continuous-function-Metric-Space-WIP :
+ uniformly-continuous-function-Metric-Space-WIP Y Z →
+ uniformly-continuous-function-Metric-Space-WIP X Y →
+ uniformly-continuous-function-Metric-Space-WIP X Z
+ comp-uniformly-continuous-function-Metric-Space-WIP g f =
+ ( map-uniformly-continuous-function-Metric-Space-WIP Y Z g ∘
+ map-uniformly-continuous-function-Metric-Space-WIP X Y f) ,
+ ( is-uniformly-continuous-comp-function-Metric-Space-WIP
+ ( map-uniformly-continuous-function-Metric-Space-WIP Y Z g)
+ ( map-uniformly-continuous-function-Metric-Space-WIP X Y f)
+ ( is-uniformly-continuous-map-uniformly-continuous-function-Metric-Space-WIP
+ ( Y)
+ ( Z)
+ ( g))
+ ( is-uniformly-continuous-map-uniformly-continuous-function-Metric-Space-WIP
+ ( X)
+ ( Y)
+ ( f)))
+```
+
+### Short maps are uniformly continuous
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level}
+ (A : Metric-Space-WIP l1 l2)
+ (B : Metric-Space-WIP l3 l4)
+ where
+
+ is-uniformly-continuous-is-short-function-Metric-Space-WIP :
+ (f : type-function-Metric-Space-WIP A B) →
+ is-short-function-Metric-Space-WIP A B f →
+ is-uniformly-continuous-function-Metric-Space-WIP A B f
+ is-uniformly-continuous-is-short-function-Metric-Space-WIP f H =
+ intro-exists id (λ x d → H d x)
+
+ uniformly-continuous-short-function-Metric-Space :
+ short-function-Metric-Space-WIP A B →
+ uniformly-continuous-function-Metric-Space-WIP A B
+ uniformly-continuous-short-function-Metric-Space =
+ tot is-uniformly-continuous-is-short-function-Metric-Space-WIP
+```
+
+### Isometries are uniformly continuous
+
+```agda
+module _
+ {l1 l2 l3 l4 : Level}
+ (A : Metric-Space-WIP l1 l2) (B : Metric-Space-WIP l3 l4)
+ where
+
+ is-uniformly-continuous-is-isometry-Metric-Space-WIP :
+ (f : type-function-Metric-Space-WIP A B) →
+ is-isometry-Metric-Space-WIP A B f →
+ is-uniformly-continuous-function-Metric-Space-WIP A B f
+ is-uniformly-continuous-is-isometry-Metric-Space-WIP f =
+ is-uniformly-continuous-is-short-function-Metric-Space-WIP A B f ∘
+ is-short-is-isometry-Metric-Space-WIP A B f
+
+ uniformly-continuous-isometry-Metric-Space :
+ isometry-Metric-Space-WIP A B →
+ uniformly-continuous-function-Metric-Space-WIP A B
+ uniformly-continuous-isometry-Metric-Space =
+ tot is-uniformly-continuous-is-isometry-Metric-Space-WIP
+```