Metric spaces
Content created by malarbol, Fredrik Bakke and Louis Wasserman.
Created on 2024-09-28.
Last modified on 2025-08-18.
module metric-spaces.metric-spaces where
Imports
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.extensionality-pseudometric-spaces open import metric-spaces.preimages-rational-neighborhood-relations open import metric-spaces.pseudometric-spaces open import metric-spaces.rational-neighborhood-relations open import metric-spaces.reflexive-rational-neighborhood-relations open import metric-spaces.saturated-rational-neighborhood-relations open import metric-spaces.similarity-of-elements-pseudometric-spaces open import metric-spaces.symmetric-rational-neighborhood-relations open import metric-spaces.triangular-rational-neighborhood-relations
Idea
A metric space¶ is a type structured 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 on it indexed by the
positive rational numbers
ℚ⁺
, a
rational neighborhood relation:
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.
Every positive rational
d
is an upper bound on the distance fromx
to itself. - Symmetry.
Any upper bound on the distance from
x
toy
is an upper bound on the distance fromy
tox
. - Triangularity.
If
d
is an upper bound on the distance fromx
toy
, andd'
is an upper bound on the distance fromy
toz
, thend + d'
is an upper bound on the distance fromx
toz
. - Saturation.:
any neighborhood
N d x y
contains the intersection of allN d' x y
ford < d'
.
This gives A
the structure of a
pseudometric space; finally, we ask
that our metric spaces are
extensional:
similar elements
are equal:
- If every positive rational
d
is an upper bound on the distance fromx
toy
, thenx = y
.
Similarity of elements in a metric space characterizes their equality so any metric space is a set.
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
The type of metric spaces
Metric-Space : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2) Metric-Space l1 l2 = Σ (Pseudometric-Space l1 l2) (is-extensional-Pseudometric-Space) module _ {l1 l2 : Level} ( A : UU l1) ( N : Rational-Neighborhood-Relation l2 A) ( refl-N : is-reflexive-Rational-Neighborhood-Relation N) ( symmetric-N : is-symmetric-Rational-Neighborhood-Relation N) ( triangular-N : is-triangular-Rational-Neighborhood-Relation N) ( saturated-N : is-saturated-Rational-Neighborhood-Relation N) ( extensional-N : is-extensional-Pseudometric-Space ( A , N , refl-N , symmetric-N , triangular-N , saturated-N)) where make-Metric-Space : Metric-Space l1 l2 pr1 make-Metric-Space = (A , N , refl-N , symmetric-N , triangular-N , saturated-N) pr2 make-Metric-Space = extensional-N module _ {l1 l2 : Level} (M : Metric-Space l1 l2) where pseudometric-Metric-Space : Pseudometric-Space l1 l2 pseudometric-Metric-Space = pr1 M type-Metric-Space : UU l1 type-Metric-Space = type-Pseudometric-Space pseudometric-Metric-Space is-extensional-pseudometric-Metric-Space : is-extensional-Pseudometric-Space pseudometric-Metric-Space is-extensional-pseudometric-Metric-Space = pr2 M pseudometric-structure-Metric-Space : Pseudometric-Structure l2 type-Metric-Space pseudometric-structure-Metric-Space = structure-Pseudometric-Space pseudometric-Metric-Space neighborhood-prop-Metric-Space : ℚ⁺ → Relation-Prop l2 type-Metric-Space neighborhood-prop-Metric-Space = neighborhood-prop-Pseudometric-Space pseudometric-Metric-Space neighborhood-Metric-Space : ℚ⁺ → Relation l2 type-Metric-Space neighborhood-Metric-Space = neighborhood-Pseudometric-Space pseudometric-Metric-Space is-prop-neighborhood-Metric-Space : (d : ℚ⁺) (x y : type-Metric-Space) → is-prop (neighborhood-Metric-Space d x y) is-prop-neighborhood-Metric-Space = is-prop-neighborhood-Pseudometric-Space pseudometric-Metric-Space is-upper-bound-dist-prop-Metric-Space : (x y : type-Metric-Space) → ℚ⁺ → Prop l2 is-upper-bound-dist-prop-Metric-Space x y d = neighborhood-prop-Metric-Space d x y is-upper-bound-dist-Metric-Space : (x y : type-Metric-Space) → ℚ⁺ → UU l2 is-upper-bound-dist-Metric-Space x y d = neighborhood-Metric-Space d x y is-prop-is-upper-bound-dist-Metric-Space : (x y : type-Metric-Space) (d : ℚ⁺) → is-prop (is-upper-bound-dist-Metric-Space x y d) is-prop-is-upper-bound-dist-Metric-Space x y d = is-prop-neighborhood-Metric-Space d x y is-pseudometric-neighborhood-Metric-Space : is-pseudometric-Rational-Neighborhood-Relation type-Metric-Space neighborhood-prop-Metric-Space is-pseudometric-neighborhood-Metric-Space = is-pseudometric-neighborhood-Pseudometric-Space pseudometric-Metric-Space refl-neighborhood-Metric-Space : (d : ℚ⁺) (x : type-Metric-Space) → neighborhood-Metric-Space d x x refl-neighborhood-Metric-Space = refl-neighborhood-Pseudometric-Space pseudometric-Metric-Space symmetric-neighborhood-Metric-Space : (d : ℚ⁺) (x y : type-Metric-Space) → neighborhood-Metric-Space d x y → neighborhood-Metric-Space d y x symmetric-neighborhood-Metric-Space = symmetric-neighborhood-Pseudometric-Space pseudometric-Metric-Space inv-neighborhood-Metric-Space : {d : ℚ⁺} {x y : type-Metric-Space} → neighborhood-Metric-Space d x y → neighborhood-Metric-Space d y x inv-neighborhood-Metric-Space = inv-neighborhood-Pseudometric-Space pseudometric-Metric-Space triangular-neighborhood-Metric-Space : (x y z : type-Metric-Space) (d₁ d₂ : ℚ⁺) → neighborhood-Metric-Space d₂ y z → neighborhood-Metric-Space d₁ x y → neighborhood-Metric-Space (d₁ +ℚ⁺ d₂) x z triangular-neighborhood-Metric-Space = triangular-neighborhood-Pseudometric-Space pseudometric-Metric-Space monotonic-neighborhood-Metric-Space : (x y : type-Metric-Space) (d₁ d₂ : ℚ⁺) → le-ℚ⁺ d₁ d₂ → neighborhood-Metric-Space d₁ x y → neighborhood-Metric-Space d₂ x y monotonic-neighborhood-Metric-Space = monotonic-neighborhood-Pseudometric-Space pseudometric-Metric-Space saturated-neighborhood-Metric-Space : (ε : ℚ⁺) (x y : type-Metric-Space) → ((δ : ℚ⁺) → neighborhood-Metric-Space (ε +ℚ⁺ δ) x y) → neighborhood-Metric-Space ε x y saturated-neighborhood-Metric-Space = saturated-neighborhood-Pseudometric-Space pseudometric-Metric-Space
Similarity of elements in a metric space
module _ {l1 l2 : Level} (A : Metric-Space l1 l2) where sim-prop-Metric-Space : Relation-Prop l2 (type-Metric-Space A) sim-prop-Metric-Space = sim-prop-Pseudometric-Space (pseudometric-Metric-Space A) sim-Metric-Space : Relation l2 (type-Metric-Space A) sim-Metric-Space = sim-Pseudometric-Space (pseudometric-Metric-Space A) is-prop-sim-Metric-Space : (x y : type-Metric-Space A) → is-prop (sim-Metric-Space x y) is-prop-sim-Metric-Space = is-prop-sim-Pseudometric-Space (pseudometric-Metric-Space A) refl-sim-Metric-Space : (x : type-Metric-Space A) → sim-Metric-Space x x refl-sim-Metric-Space = refl-sim-Pseudometric-Space (pseudometric-Metric-Space A) sim-eq-Metric-Space : (x y : type-Metric-Space A) → x = y → sim-Metric-Space x y sim-eq-Metric-Space = sim-eq-Pseudometric-Space (pseudometric-Metric-Space A) symmetric-sim-Metric-Space : (x y : type-Metric-Space A) → sim-Metric-Space x y → sim-Metric-Space y x symmetric-sim-Metric-Space = symmetric-sim-Pseudometric-Space (pseudometric-Metric-Space A) inv-sim-Metric-Space : {x y : type-Metric-Space A} → sim-Metric-Space x y → sim-Metric-Space y x inv-sim-Metric-Space {x} {y} = inv-sim-Pseudometric-Space (pseudometric-Metric-Space A) transitive-sim-Metric-Space : (x y z : type-Metric-Space A) → sim-Metric-Space y z → sim-Metric-Space x y → sim-Metric-Space x z transitive-sim-Metric-Space = transitive-sim-Pseudometric-Space (pseudometric-Metric-Space A) equivalence-relation-sim-Metric-Space : equivalence-relation l2 (type-Metric-Space A) equivalence-relation-sim-Metric-Space = equivalence-relation-sim-Pseudometric-Space (pseudometric-Metric-Space A)
Properties
The carrier type of a metric space is a set
module _ {l1 l2 : Level} (A : Metric-Space l1 l2) where is-set-type-Metric-Space : is-set (type-Metric-Space A) is-set-type-Metric-Space = is-set-type-is-extensional-Pseudometric-Space ( pseudometric-Metric-Space A) ( is-extensional-pseudometric-Metric-Space A) set-Metric-Space : Set l1 set-Metric-Space = (type-Metric-Space A , is-set-type-Metric-Space)
Similarity of elements in a metric space is equivalent to equality
module _ {l1 l2 : Level} (A : Metric-Space l1 l2) where equiv-sim-eq-Metric-Space : (x y : type-Metric-Space A) → (x = y) ≃ sim-Metric-Space A x y equiv-sim-eq-Metric-Space = equiv-sim-eq-is-extensional-Pseudometric-Space ( pseudometric-Metric-Space A) ( is-extensional-pseudometric-Metric-Space A) eq-sim-Metric-Space : (x y : type-Metric-Space A) → sim-Metric-Space A x y → x = y eq-sim-Metric-Space x y = map-inv-equiv (equiv-sim-eq-Metric-Space x y)
External links
- Metric space at Wikidata
MetricSpaces.Type
at TypeTopology- metric space at Lab
- Metric spaces at Wikipedia
Recent changes
- 2025-08-18. malarbol and Louis Wasserman. Refactor metric spaces (#1450).
- 2025-05-19. malarbol. Lipschitz-continuous functions between metric spaces (#1417).
- 2024-09-28. malarbol and Fredrik Bakke. Metric spaces (#1162).