diff --git a/config/codespell-dictionary.txt b/config/codespell-dictionary.txt
index 42eb42d013..67d1419ed8 100644
--- a/config/codespell-dictionary.txt
+++ b/config/codespell-dictionary.txt
@@ -79,3 +79,4 @@ morphsims->morphisms
outout->output
ringr->ring
ringrs->rings
+semiorm->seminorm
diff --git a/src/linear-algebra.lagda.md b/src/linear-algebra.lagda.md
index 240d62913f..59e8798cf4 100644
--- a/src/linear-algebra.lagda.md
+++ b/src/linear-algebra.lagda.md
@@ -34,16 +34,19 @@ open import linear-algebra.linear-spans-left-modules-rings public
open import linear-algebra.matrices public
open import linear-algebra.matrices-on-rings public
open import linear-algebra.multiplication-matrices public
+open import linear-algebra.normed-real-vector-spaces public
open import linear-algebra.orthogonality-bilinear-forms-real-vector-spaces public
open import linear-algebra.orthogonality-real-inner-product-spaces public
open import linear-algebra.preimages-of-left-module-structures-along-homomorphisms-of-rings public
open import linear-algebra.rational-modules public
+open import linear-algebra.real-banach-spaces public
open import linear-algebra.real-inner-product-spaces public
open import linear-algebra.real-vector-spaces public
open import linear-algebra.right-modules-rings public
open import linear-algebra.scalar-multiplication-matrices public
open import linear-algebra.scalar-multiplication-tuples public
open import linear-algebra.scalar-multiplication-tuples-on-rings public
+open import linear-algebra.seminormed-real-vector-spaces public
open import linear-algebra.subsets-left-modules-rings public
open import linear-algebra.symmetric-bilinear-forms-real-vector-spaces public
open import linear-algebra.transposition-matrices public
diff --git a/src/linear-algebra/normed-real-vector-spaces.lagda.md b/src/linear-algebra/normed-real-vector-spaces.lagda.md
new file mode 100644
index 0000000000..de825ec122
--- /dev/null
+++ b/src/linear-algebra/normed-real-vector-spaces.lagda.md
@@ -0,0 +1,253 @@
+# Normed real vector spaces
+
+```agda
+module linear-algebra.normed-real-vector-spaces where
+```
+
+Imports
+
+```agda
+open import foundation.dependent-pair-types
+open import foundation.identity-types
+open import foundation.logical-equivalences
+open import foundation.propositions
+open import foundation.sets
+open import foundation.subtypes
+open import foundation.transport-along-identifications
+open import foundation.universe-levels
+
+open import group-theory.abelian-groups
+
+open import linear-algebra.real-vector-spaces
+open import linear-algebra.seminormed-real-vector-spaces
+
+open import metric-spaces.equality-of-metric-spaces
+open import metric-spaces.located-metric-spaces
+open import metric-spaces.metric-spaces
+open import metric-spaces.metrics
+
+open import real-numbers.absolute-value-real-numbers
+open import real-numbers.dedekind-real-numbers
+open import real-numbers.distance-real-numbers
+open import real-numbers.metric-space-of-real-numbers
+open import real-numbers.nonnegative-real-numbers
+open import real-numbers.raising-universe-levels-real-numbers
+open import real-numbers.rational-real-numbers
+open import real-numbers.saturation-inequality-nonnegative-real-numbers
+open import real-numbers.similarity-real-numbers
+```
+
+
+
+## Idea
+
+A
+{{#concept "norm" WDID=Q956437 WD="norm" Disambiguation="on a real vector space" Agda=norm-ℝ-Vector-Space}}
+on a [real vector space](linear-algebra.real-vector-spaces.md) `V` is a
+[seminorm](linear-algebra.seminormed-real-vector-spaces.md) `p` on `V` that is
+**extensional**: if `p(v) = 0`, then `v` is the zero vector.
+
+A real vector space equipped with such a norm is called a
+{{#concept "normed vector space" Disambiguation="normed real vector space" WDID=Q726210 WD="normed vector space" Agda=Normed-ℝ-Vector-Space}}.
+
+A norm on a real vector space induces a
+[located](metric-spaces.located-metric-spaces.md)
+[metric space](metric-spaces.metric-spaces.md) on the vector space, defined by
+the neighborhood relation that `v` and `w` are in an `ε`-neighborhood of each
+other if `p(v - w) ≤ ε`.
+
+## Definition
+
+```agda
+module _
+ {l1 l2 : Level} (V : ℝ-Vector-Space l1 l2) (p : seminorm-ℝ-Vector-Space V)
+ where
+
+ is-norm-prop-seminorm-ℝ-Vector-Space : Prop (lsuc l1 ⊔ l2)
+ is-norm-prop-seminorm-ℝ-Vector-Space =
+ Π-Prop
+ ( type-ℝ-Vector-Space V)
+ ( λ v →
+ hom-Prop
+ ( Id-Prop (ℝ-Set l1) (pr1 p v) (raise-ℝ l1 zero-ℝ))
+ ( is-zero-prop-ℝ-Vector-Space V v))
+
+ is-norm-seminorm-ℝ-Vector-Space : UU (lsuc l1 ⊔ l2)
+ is-norm-seminorm-ℝ-Vector-Space =
+ type-Prop is-norm-prop-seminorm-ℝ-Vector-Space
+
+norm-ℝ-Vector-Space : {l1 l2 : Level} → ℝ-Vector-Space l1 l2 → UU (lsuc l1 ⊔ l2)
+norm-ℝ-Vector-Space V = type-subtype (is-norm-prop-seminorm-ℝ-Vector-Space V)
+
+Normed-ℝ-Vector-Space : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2)
+Normed-ℝ-Vector-Space l1 l2 = Σ (ℝ-Vector-Space l1 l2) norm-ℝ-Vector-Space
+```
+
+## Properties
+
+```agda
+module _
+ {l1 l2 : Level} (V : Normed-ℝ-Vector-Space l1 l2)
+ where
+
+ vector-space-Normed-ℝ-Vector-Space : ℝ-Vector-Space l1 l2
+ vector-space-Normed-ℝ-Vector-Space = pr1 V
+
+ norm-Normed-ℝ-Vector-Space :
+ norm-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space
+ norm-Normed-ℝ-Vector-Space = pr2 V
+
+ seminorm-Normed-ℝ-Vector-Space :
+ seminorm-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space
+ seminorm-Normed-ℝ-Vector-Space = pr1 norm-Normed-ℝ-Vector-Space
+
+ seminormed-vector-space-Normed-ℝ-Vector-Space :
+ Seminormed-ℝ-Vector-Space l1 l2
+ seminormed-vector-space-Normed-ℝ-Vector-Space =
+ ( vector-space-Normed-ℝ-Vector-Space , seminorm-Normed-ℝ-Vector-Space)
+
+ set-Normed-ℝ-Vector-Space : Set l2
+ set-Normed-ℝ-Vector-Space =
+ set-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space
+
+ type-Normed-ℝ-Vector-Space : UU l2
+ type-Normed-ℝ-Vector-Space =
+ type-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space
+
+ add-Normed-ℝ-Vector-Space :
+ type-Normed-ℝ-Vector-Space → type-Normed-ℝ-Vector-Space →
+ type-Normed-ℝ-Vector-Space
+ add-Normed-ℝ-Vector-Space =
+ add-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space
+
+ diff-Normed-ℝ-Vector-Space :
+ type-Normed-ℝ-Vector-Space → type-Normed-ℝ-Vector-Space →
+ type-Normed-ℝ-Vector-Space
+ diff-Normed-ℝ-Vector-Space =
+ diff-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space
+
+ zero-Normed-ℝ-Vector-Space : type-Normed-ℝ-Vector-Space
+ zero-Normed-ℝ-Vector-Space =
+ zero-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space
+
+ map-norm-Normed-ℝ-Vector-Space : type-Normed-ℝ-Vector-Space → ℝ l1
+ map-norm-Normed-ℝ-Vector-Space = pr1 (pr1 norm-Normed-ℝ-Vector-Space)
+
+ nonnegative-norm-Normed-ℝ-Vector-Space : type-Normed-ℝ-Vector-Space → ℝ⁰⁺ l1
+ nonnegative-norm-Normed-ℝ-Vector-Space =
+ nonnegative-seminorm-Seminormed-ℝ-Vector-Space
+ ( seminormed-vector-space-Normed-ℝ-Vector-Space)
+
+ dist-Normed-ℝ-Vector-Space :
+ type-Normed-ℝ-Vector-Space → type-Normed-ℝ-Vector-Space → ℝ l1
+ dist-Normed-ℝ-Vector-Space =
+ dist-Seminormed-ℝ-Vector-Space seminormed-vector-space-Normed-ℝ-Vector-Space
+
+ nonnegative-dist-Normed-ℝ-Vector-Space :
+ type-Normed-ℝ-Vector-Space → type-Normed-ℝ-Vector-Space → ℝ⁰⁺ l1
+ nonnegative-dist-Normed-ℝ-Vector-Space =
+ nonnegative-dist-Seminormed-ℝ-Vector-Space
+ ( seminormed-vector-space-Normed-ℝ-Vector-Space)
+
+ is-extensional-norm-Normed-ℝ-Metric-Space :
+ (v : type-Normed-ℝ-Vector-Space) →
+ map-norm-Normed-ℝ-Vector-Space v = raise-ℝ l1 zero-ℝ →
+ v = zero-Normed-ℝ-Vector-Space
+ is-extensional-norm-Normed-ℝ-Metric-Space = pr2 norm-Normed-ℝ-Vector-Space
+
+ is-extensional-dist-Normed-ℝ-Metric-Space :
+ (v w : type-Normed-ℝ-Vector-Space) →
+ dist-Normed-ℝ-Vector-Space v w = raise-ℝ l1 zero-ℝ →
+ v = w
+ is-extensional-dist-Normed-ℝ-Metric-Space v w |v-w|=0 =
+ eq-is-zero-right-subtraction-Ab
+ ( ab-ℝ-Vector-Space vector-space-Normed-ℝ-Vector-Space)
+ ( is-extensional-norm-Normed-ℝ-Metric-Space
+ ( diff-Normed-ℝ-Vector-Space v w)
+ ( |v-w|=0))
+
+ commutative-dist-Normed-ℝ-Vector-Space :
+ (v w : type-Normed-ℝ-Vector-Space) →
+ dist-Normed-ℝ-Vector-Space v w = dist-Normed-ℝ-Vector-Space w v
+ commutative-dist-Normed-ℝ-Vector-Space =
+ commutative-dist-Seminormed-ℝ-Vector-Space
+ ( seminormed-vector-space-Normed-ℝ-Vector-Space)
+```
+
+### The metric space of a normed vector space
+
+```agda
+module _
+ {l1 l2 : Level} (V : Normed-ℝ-Vector-Space l1 l2)
+ where
+
+ refl-norm-Normed-ℝ-Vector-Space :
+ (v : type-Normed-ℝ-Vector-Space V) →
+ sim-ℝ zero-ℝ (dist-Normed-ℝ-Vector-Space V v v)
+ refl-norm-Normed-ℝ-Vector-Space v =
+ inv-tr
+ ( sim-ℝ zero-ℝ)
+ ( is-zero-diagonal-dist-Seminormed-ℝ-Vector-Space
+ ( seminormed-vector-space-Normed-ℝ-Vector-Space V)
+ ( v))
+ ( sim-raise-ℝ l1 zero-ℝ)
+
+ metric-Normed-ℝ-Vector-Space : Metric l1 (set-Normed-ℝ-Vector-Space V)
+ metric-Normed-ℝ-Vector-Space =
+ ( nonnegative-dist-Normed-ℝ-Vector-Space V ,
+ refl-norm-Normed-ℝ-Vector-Space ,
+ ( λ v w → eq-ℝ⁰⁺ _ _ (commutative-dist-Normed-ℝ-Vector-Space V v w)) ,
+ triangular-dist-Seminormed-ℝ-Vector-Space
+ ( seminormed-vector-space-Normed-ℝ-Vector-Space V) ,
+ ( λ v w 0~dvw →
+ is-extensional-dist-Normed-ℝ-Metric-Space V v w
+ ( eq-sim-ℝ
+ ( transitive-sim-ℝ _ _ _
+ ( sim-raise-ℝ l1 zero-ℝ)
+ ( symmetric-sim-ℝ 0~dvw)))))
+
+ metric-space-Normed-ℝ-Vector-Space : Metric-Space l2 l1
+ metric-space-Normed-ℝ-Vector-Space =
+ metric-space-Metric
+ ( set-Normed-ℝ-Vector-Space V)
+ ( metric-Normed-ℝ-Vector-Space)
+
+ located-metric-space-Normed-ℝ-Vector-Space : Located-Metric-Space l2 l1
+ located-metric-space-Normed-ℝ-Vector-Space =
+ located-metric-space-Metric
+ ( set-Normed-ℝ-Vector-Space V)
+ ( metric-Normed-ℝ-Vector-Space)
+```
+
+## Properties
+
+### The real numbers are a normed vector space over themselves with norm `x ↦ |x|`
+
+```agda
+normed-real-vector-space-ℝ :
+ (l : Level) → Normed-ℝ-Vector-Space l (lsuc l)
+normed-real-vector-space-ℝ l =
+ ( real-vector-space-ℝ l ,
+ ( abs-ℝ , triangle-inequality-abs-ℝ , abs-mul-ℝ) ,
+ eq-raise-zero-eq-raise-zero-abs-ℝ)
+
+abstract
+ eq-metric-space-normed-real-vector-space-metric-space-ℝ :
+ (l : Level) →
+ metric-space-Normed-ℝ-Vector-Space (normed-real-vector-space-ℝ l) =
+ metric-space-ℝ l
+ eq-metric-space-normed-real-vector-space-metric-space-ℝ l =
+ eq-isometric-eq-Metric-Space _ _
+ ( refl , λ d x y → inv-iff (neighborhood-iff-leq-dist-ℝ d x y))
+```
+
+## See also
+
+- [Real Banach spaces](linear-algebra.real-banach-spaces.md), normed real vector
+ spaces for which the induced metric space is
+ [complete](metric-spaces.complete-metric-spaces.md)
+
+## External links
+
+- [Normed vector space](https://en.wikipedia.org/wiki/Normed_vector_space) on
+ Wikipedia
diff --git a/src/linear-algebra/real-banach-spaces.lagda.md b/src/linear-algebra/real-banach-spaces.lagda.md
new file mode 100644
index 0000000000..1ed7c36a32
--- /dev/null
+++ b/src/linear-algebra/real-banach-spaces.lagda.md
@@ -0,0 +1,77 @@
+# Real Banach spaces
+
+```agda
+{-# OPTIONS --lossy-unification #-}
+
+module linear-algebra.real-banach-spaces where
+```
+
+Imports
+
+```agda
+open import foundation.dependent-pair-types
+open import foundation.propositions
+open import foundation.subtypes
+open import foundation.transport-along-identifications
+open import foundation.universe-levels
+
+open import linear-algebra.normed-real-vector-spaces
+
+open import metric-spaces.complete-metric-spaces
+
+open import real-numbers.cauchy-completeness-dedekind-real-numbers
+```
+
+
+
+## Idea
+
+A
+{{#concept "real Banach space" WDID=Q194397 WD="Banach space" Agda=ℝ-Banach-Space}}
+is a [normed](linear-algebra.normed-real-vector-spaces.md)
+[real vector space](linear-algebra.real-vector-spaces.md) such that the
+[metric space](metric-spaces.metric-spaces.md) induced by the norm is
+[complete](metric-spaces.complete-metric-spaces.md).
+
+## Definition
+
+```agda
+is-banach-prop-Normed-ℝ-Vector-Space :
+ {l1 l2 : Level} (V : Normed-ℝ-Vector-Space l1 l2) → Prop (l1 ⊔ l2)
+is-banach-prop-Normed-ℝ-Vector-Space V =
+ is-complete-prop-Metric-Space (metric-space-Normed-ℝ-Vector-Space V)
+
+is-banach-Normed-ℝ-Vector-Space :
+ {l1 l2 : Level} (V : Normed-ℝ-Vector-Space l1 l2) → UU (l1 ⊔ l2)
+is-banach-Normed-ℝ-Vector-Space V =
+ type-Prop (is-banach-prop-Normed-ℝ-Vector-Space V)
+
+ℝ-Banach-Space : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2)
+ℝ-Banach-Space l1 l2 =
+ type-subtype (is-banach-prop-Normed-ℝ-Vector-Space {l1} {l2})
+```
+
+## Properties
+
+### The real numbers are a real Banach space with norm `x ↦ |x|`
+
+```agda
+abstract
+ is-banach-normed-real-vector-space-ℝ :
+ (l : Level) →
+ is-banach-Normed-ℝ-Vector-Space (normed-real-vector-space-ℝ l)
+ is-banach-normed-real-vector-space-ℝ l =
+ inv-tr
+ ( is-complete-Metric-Space)
+ ( eq-metric-space-normed-real-vector-space-metric-space-ℝ l)
+ ( is-complete-metric-space-ℝ l)
+
+real-banach-space-ℝ : (l : Level) → ℝ-Banach-Space l (lsuc l)
+real-banach-space-ℝ l =
+ ( normed-real-vector-space-ℝ l ,
+ is-banach-normed-real-vector-space-ℝ l)
+```
+
+## External links
+
+- [Banach space](https://en.wikipedia.org/wiki/Banach_space) on Wikipedia
diff --git a/src/linear-algebra/real-vector-spaces.lagda.md b/src/linear-algebra/real-vector-spaces.lagda.md
index 62eeac6439..526b466b41 100644
--- a/src/linear-algebra/real-vector-spaces.lagda.md
+++ b/src/linear-algebra/real-vector-spaces.lagda.md
@@ -250,3 +250,4 @@ real-vector-space-ℝ l =
## See also
- [Vector spaces](linear-algebra.vector-spaces.md)
+- [Normed real vector spaces](linear-algebra.normed-real-vector-spaces.md)
diff --git a/src/linear-algebra/seminormed-real-vector-spaces.lagda.md b/src/linear-algebra/seminormed-real-vector-spaces.lagda.md
new file mode 100644
index 0000000000..487eebac05
--- /dev/null
+++ b/src/linear-algebra/seminormed-real-vector-spaces.lagda.md
@@ -0,0 +1,596 @@
+# Seminormed real vector spaces
+
+```agda
+{-# OPTIONS --lossy-unification #-}
+
+module linear-algebra.seminormed-real-vector-spaces where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.addition-positive-rational-numbers
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.action-on-identifications-functions
+open import foundation.binary-relations
+open import foundation.conjunction
+open import foundation.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.universe-levels
+
+open import group-theory.abelian-groups
+
+open import linear-algebra.real-vector-spaces
+
+open import metric-spaces.pseudometric-spaces
+
+open import order-theory.large-posets
+
+open import real-numbers.absolute-value-real-numbers
+open import real-numbers.addition-real-numbers
+open import real-numbers.dedekind-real-numbers
+open import real-numbers.inequalities-addition-and-subtraction-real-numbers
+open import real-numbers.inequality-real-numbers
+open import real-numbers.multiplication-positive-real-numbers
+open import real-numbers.multiplication-real-numbers
+open import real-numbers.negation-real-numbers
+open import real-numbers.nonnegative-real-numbers
+open import real-numbers.positive-real-numbers
+open import real-numbers.raising-universe-levels-real-numbers
+open import real-numbers.rational-real-numbers
+open import real-numbers.saturation-inequality-nonnegative-real-numbers
+open import real-numbers.similarity-real-numbers
+open import real-numbers.strict-inequality-real-numbers
+```
+
+
+
+## Idea
+
+A
+{{#concept "seminorm" WDID=Q1416088 WD="seminorm" Disambiguation="on a real vector space" Agda=seminorm-ℝ-Vector-Space}}
+on a [real vector space](linear-algebra.real-vector-spaces.md) `V` is a
+[real](real-numbers.dedekind-real-numbers.md)-valued function `p` on the vector
+space which is
+
+- **Triangular.** `p(x + y) ≤ p(x) + p(y)` for all `x` and `y` in `V`, and
+- **Absolutely homogeneous.** `p(c * x) = |c| * p(x)` for all real numbers `c`
+ and `x` in `V`.
+
+These conditions together imply that `p(x) ≥ 0` for any `x`, and `p(0) = 0`.
+
+A real vector space equipped with such a seminorm is called a
+{{#concept "seminormed space" WD="seminormed space" WDID=Q63793693 Agda=Seminormed-ℝ-Vector-Space}}.
+A seminormed space has an induced
+[pseudometric structure](metric-spaces.pseudometric-spaces.md) defined by the
+neighborhood relation that `v` and `w` are in an `ε`-neighborhood of each other
+if `p(v - w) ≤ ε`.
+
+**Terminology.** The term _absolute homogeneity_ comes from the more general
+concept of
+[homogeneous functions](https://en.wikipedia.org/wiki/Homogeneous_function). A
+multivariable function `f` on real vector spaces is said to be _homogeneous of
+degree `k`_ if for every scalar `s` we have that
+`f(sx₀,sx₁,…,sxₙ) = sᵏf(x₀,x₁,…,xₙ)`. In particular, you may note that any
+homogeneous bilinear form must be homogeneous of degree one.
+
+## Definition
+
+```agda
+module _
+ {l1 l2 : Level}
+ (V : ℝ-Vector-Space l1 l2)
+ (p : type-ℝ-Vector-Space V → ℝ l1)
+ where
+
+ is-triangular-prop-seminorm-ℝ-Vector-Space : Prop (l1 ⊔ l2)
+ is-triangular-prop-seminorm-ℝ-Vector-Space =
+ Π-Prop
+ ( type-ℝ-Vector-Space V)
+ ( λ x →
+ Π-Prop
+ ( type-ℝ-Vector-Space V)
+ ( λ y → leq-prop-ℝ (p (add-ℝ-Vector-Space V x y)) (p x +ℝ p y)))
+
+ is-triangular-seminorm-ℝ-Vector-Space : UU (l1 ⊔ l2)
+ is-triangular-seminorm-ℝ-Vector-Space =
+ type-Prop is-triangular-prop-seminorm-ℝ-Vector-Space
+
+ is-absolutely-homogeneous-prop-seminorm-ℝ-Vector-Space : Prop (lsuc l1 ⊔ l2)
+ is-absolutely-homogeneous-prop-seminorm-ℝ-Vector-Space =
+ Π-Prop
+ ( ℝ l1)
+ ( λ c →
+ Π-Prop
+ ( type-ℝ-Vector-Space V)
+ ( λ x →
+ Id-Prop
+ ( ℝ-Set l1)
+ ( p (mul-ℝ-Vector-Space V c x))
+ ( abs-ℝ c *ℝ p x)))
+
+ is-absolutely-homogeneous-seminorm-ℝ-Vector-Space : UU (lsuc l1 ⊔ l2)
+ is-absolutely-homogeneous-seminorm-ℝ-Vector-Space =
+ type-Prop is-absolutely-homogeneous-prop-seminorm-ℝ-Vector-Space
+
+ is-seminorm-prop-ℝ-Vector-Space : Prop (lsuc l1 ⊔ l2)
+ is-seminorm-prop-ℝ-Vector-Space =
+ is-triangular-prop-seminorm-ℝ-Vector-Space ∧
+ is-absolutely-homogeneous-prop-seminorm-ℝ-Vector-Space
+
+ is-seminorm-ℝ-Vector-Space : UU (lsuc l1 ⊔ l2)
+ is-seminorm-ℝ-Vector-Space = type-Prop is-seminorm-prop-ℝ-Vector-Space
+
+seminorm-ℝ-Vector-Space :
+ {l1 l2 : Level} → ℝ-Vector-Space l1 l2 → UU (lsuc l1 ⊔ l2)
+seminorm-ℝ-Vector-Space V =
+ type-subtype (is-seminorm-prop-ℝ-Vector-Space V)
+
+Seminormed-ℝ-Vector-Space : (l1 l2 : Level) → UU (lsuc l1 ⊔ lsuc l2)
+Seminormed-ℝ-Vector-Space l1 l2 =
+ Σ (ℝ-Vector-Space l1 l2) seminorm-ℝ-Vector-Space
+```
+
+## Properties
+
+### Vector space properties
+
+```agda
+module _
+ {l1 l2 : Level}
+ (V : Seminormed-ℝ-Vector-Space l1 l2)
+ where
+
+ vector-space-Seminormed-ℝ-Vector-Space : ℝ-Vector-Space l1 l2
+ vector-space-Seminormed-ℝ-Vector-Space = pr1 V
+
+ set-Seminormed-ℝ-Vector-Space : Set l2
+ set-Seminormed-ℝ-Vector-Space =
+ set-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ type-Seminormed-ℝ-Vector-Space : UU l2
+ type-Seminormed-ℝ-Vector-Space =
+ type-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ seminorm-Seminormed-ℝ-Vector-Space :
+ seminorm-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+ seminorm-Seminormed-ℝ-Vector-Space = pr2 V
+
+ map-seminorm-Seminormed-ℝ-Vector-Space :
+ type-Seminormed-ℝ-Vector-Space → ℝ l1
+ map-seminorm-Seminormed-ℝ-Vector-Space =
+ pr1 seminorm-Seminormed-ℝ-Vector-Space
+
+ zero-Seminormed-ℝ-Vector-Space : type-Seminormed-ℝ-Vector-Space
+ zero-Seminormed-ℝ-Vector-Space =
+ zero-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ is-zero-prop-Seminormed-ℝ-Vector-Space :
+ subtype l2 type-Seminormed-ℝ-Vector-Space
+ is-zero-prop-Seminormed-ℝ-Vector-Space =
+ is-zero-prop-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ is-zero-Seminormed-ℝ-Vector-Space : type-Seminormed-ℝ-Vector-Space → UU l2
+ is-zero-Seminormed-ℝ-Vector-Space =
+ is-zero-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ add-Seminormed-ℝ-Vector-Space :
+ type-Seminormed-ℝ-Vector-Space → type-Seminormed-ℝ-Vector-Space →
+ type-Seminormed-ℝ-Vector-Space
+ add-Seminormed-ℝ-Vector-Space =
+ add-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ mul-Seminormed-ℝ-Vector-Space :
+ ℝ l1 → type-Seminormed-ℝ-Vector-Space → type-Seminormed-ℝ-Vector-Space
+ mul-Seminormed-ℝ-Vector-Space =
+ mul-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ neg-Seminormed-ℝ-Vector-Space :
+ type-Seminormed-ℝ-Vector-Space → type-Seminormed-ℝ-Vector-Space
+ neg-Seminormed-ℝ-Vector-Space =
+ neg-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ diff-Seminormed-ℝ-Vector-Space :
+ type-Seminormed-ℝ-Vector-Space → type-Seminormed-ℝ-Vector-Space →
+ type-Seminormed-ℝ-Vector-Space
+ diff-Seminormed-ℝ-Vector-Space v w =
+ add-Seminormed-ℝ-Vector-Space v (neg-Seminormed-ℝ-Vector-Space w)
+
+ right-inverse-law-add-Seminormed-ℝ-Vector-Space :
+ (v : type-Seminormed-ℝ-Vector-Space) →
+ add-Seminormed-ℝ-Vector-Space v (neg-Seminormed-ℝ-Vector-Space v) =
+ zero-Seminormed-ℝ-Vector-Space
+ right-inverse-law-add-Seminormed-ℝ-Vector-Space =
+ right-inverse-law-add-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ add-diff-Seminormed-ℝ-Vector-Space :
+ (v w x : type-Seminormed-ℝ-Vector-Space) →
+ add-Seminormed-ℝ-Vector-Space
+ ( diff-Seminormed-ℝ-Vector-Space v w)
+ ( diff-Seminormed-ℝ-Vector-Space w x) =
+ diff-Seminormed-ℝ-Vector-Space v x
+ add-diff-Seminormed-ℝ-Vector-Space =
+ add-diff-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ neg-neg-Seminormed-ℝ-Vector-Space :
+ (v : type-Seminormed-ℝ-Vector-Space) →
+ neg-Seminormed-ℝ-Vector-Space (neg-Seminormed-ℝ-Vector-Space v) = v
+ neg-neg-Seminormed-ℝ-Vector-Space =
+ neg-neg-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ left-zero-law-mul-Seminormed-ℝ-Vector-Space :
+ (v : type-Seminormed-ℝ-Vector-Space) →
+ mul-Seminormed-ℝ-Vector-Space (raise-ℝ l1 zero-ℝ) v =
+ zero-Seminormed-ℝ-Vector-Space
+ left-zero-law-mul-Seminormed-ℝ-Vector-Space =
+ left-zero-law-mul-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ mul-neg-one-Seminormed-ℝ-Vector-Space :
+ (v : type-Seminormed-ℝ-Vector-Space) →
+ mul-Seminormed-ℝ-Vector-Space (neg-ℝ (raise-ℝ l1 one-ℝ)) v =
+ neg-Seminormed-ℝ-Vector-Space v
+ mul-neg-one-Seminormed-ℝ-Vector-Space =
+ mul-neg-one-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space
+
+ distributive-neg-diff-Seminormed-ℝ-Vector-Space :
+ (v w : type-Seminormed-ℝ-Vector-Space) →
+ neg-Seminormed-ℝ-Vector-Space (diff-Seminormed-ℝ-Vector-Space v w) =
+ diff-Seminormed-ℝ-Vector-Space w v
+ distributive-neg-diff-Seminormed-ℝ-Vector-Space =
+ neg-right-subtraction-Ab
+ ( ab-ℝ-Vector-Space vector-space-Seminormed-ℝ-Vector-Space)
+
+ triangular-seminorm-Seminormed-ℝ-Vector-Space :
+ (v w : type-Seminormed-ℝ-Vector-Space) →
+ leq-ℝ
+ ( map-seminorm-Seminormed-ℝ-Vector-Space
+ ( add-Seminormed-ℝ-Vector-Space v w))
+ ( map-seminorm-Seminormed-ℝ-Vector-Space v +ℝ
+ map-seminorm-Seminormed-ℝ-Vector-Space w)
+ triangular-seminorm-Seminormed-ℝ-Vector-Space =
+ pr1 (pr2 seminorm-Seminormed-ℝ-Vector-Space)
+
+ is-absolutely-homogeneous-seminorm-Seminormed-ℝ-Vector-Space :
+ (c : ℝ l1) (v : type-Seminormed-ℝ-Vector-Space) →
+ map-seminorm-Seminormed-ℝ-Vector-Space
+ ( mul-Seminormed-ℝ-Vector-Space c v) =
+ abs-ℝ c *ℝ map-seminorm-Seminormed-ℝ-Vector-Space v
+ is-absolutely-homogeneous-seminorm-Seminormed-ℝ-Vector-Space =
+ pr2 (pr2 seminorm-Seminormed-ℝ-Vector-Space)
+
+ dist-Seminormed-ℝ-Vector-Space :
+ type-Seminormed-ℝ-Vector-Space → type-Seminormed-ℝ-Vector-Space → ℝ l1
+ dist-Seminormed-ℝ-Vector-Space v w =
+ map-seminorm-Seminormed-ℝ-Vector-Space
+ ( diff-Seminormed-ℝ-Vector-Space v w)
+```
+
+### The seminorm of the zero vector is zero
+
+```agda
+module _
+ {l1 l2 : Level}
+ (V : Seminormed-ℝ-Vector-Space l1 l2)
+ where
+
+ abstract
+ is-zero-seminorm-zero-Seminormed-ℝ-Vector-Space :
+ map-seminorm-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( zero-Seminormed-ℝ-Vector-Space V) =
+ raise-ℝ l1 zero-ℝ
+ is-zero-seminorm-zero-Seminormed-ℝ-Vector-Space =
+ equational-reasoning
+ map-seminorm-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( zero-Seminormed-ℝ-Vector-Space V)
+ =
+ map-seminorm-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( mul-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( raise-ℝ l1 zero-ℝ)
+ ( zero-Seminormed-ℝ-Vector-Space V))
+ by
+ ap
+ ( map-seminorm-Seminormed-ℝ-Vector-Space V)
+ ( inv (left-zero-law-mul-Seminormed-ℝ-Vector-Space V _))
+ =
+ ( abs-ℝ (raise-ℝ l1 zero-ℝ)) *ℝ
+ ( map-seminorm-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( zero-Seminormed-ℝ-Vector-Space V))
+ by is-absolutely-homogeneous-seminorm-Seminormed-ℝ-Vector-Space V _ _
+ =
+ ( raise-ℝ l1 (abs-ℝ zero-ℝ)) *ℝ
+ ( map-seminorm-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( zero-Seminormed-ℝ-Vector-Space V))
+ by ap-mul-ℝ (abs-raise-ℝ l1 _) refl
+ =
+ ( raise-zero-ℝ l1) *ℝ
+ ( map-seminorm-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( zero-Seminormed-ℝ-Vector-Space V))
+ by ap-mul-ℝ (ap (raise-ℝ l1) abs-zero-ℝ) refl
+ = raise-zero-ℝ l1
+ by left-raise-zero-law-mul-ℝ _
+
+ is-zero-diagonal-dist-Seminormed-ℝ-Vector-Space :
+ (v : type-Seminormed-ℝ-Vector-Space V) →
+ dist-Seminormed-ℝ-Vector-Space V v v = raise-ℝ l1 zero-ℝ
+ is-zero-diagonal-dist-Seminormed-ℝ-Vector-Space v =
+ ( ap
+ ( map-seminorm-Seminormed-ℝ-Vector-Space V)
+ ( right-inverse-law-add-Seminormed-ℝ-Vector-Space V v)) ∙
+ ( is-zero-seminorm-zero-Seminormed-ℝ-Vector-Space)
+
+ sim-zero-diagonal-dist-Seminormed-ℝ-Vector-Space :
+ (v : type-Seminormed-ℝ-Vector-Space V) →
+ sim-ℝ (dist-Seminormed-ℝ-Vector-Space V v v) zero-ℝ
+ sim-zero-diagonal-dist-Seminormed-ℝ-Vector-Space v =
+ inv-tr
+ ( λ x → sim-ℝ x zero-ℝ)
+ ( is-zero-diagonal-dist-Seminormed-ℝ-Vector-Space v)
+ ( sim-raise-ℝ' l1 zero-ℝ)
+```
+
+### The seminorm of the negation of a vector is equal to the seminorm of the vector
+
+```agda
+module _
+ {l1 l2 : Level}
+ (V : Seminormed-ℝ-Vector-Space l1 l2)
+ where
+
+ abstract
+ seminorm-neg-Seminormed-ℝ-Vector-Space :
+ (v : type-Seminormed-ℝ-Vector-Space V) →
+ map-seminorm-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( neg-Seminormed-ℝ-Vector-Space V v) =
+ map-seminorm-Seminormed-ℝ-Vector-Space V v
+ seminorm-neg-Seminormed-ℝ-Vector-Space v =
+ equational-reasoning
+ map-seminorm-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( neg-Seminormed-ℝ-Vector-Space V v)
+ =
+ map-seminorm-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( mul-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( neg-ℝ (raise-ℝ l1 one-ℝ))
+ ( v))
+ by
+ ap
+ ( map-seminorm-Seminormed-ℝ-Vector-Space V)
+ ( inv (mul-neg-one-Seminormed-ℝ-Vector-Space V v))
+ =
+ ( abs-ℝ (neg-ℝ (raise-ℝ l1 one-ℝ))) *ℝ
+ ( map-seminorm-Seminormed-ℝ-Vector-Space V v)
+ by is-absolutely-homogeneous-seminorm-Seminormed-ℝ-Vector-Space V _ _
+ =
+ ( abs-ℝ (raise-ℝ l1 one-ℝ)) *ℝ
+ ( map-seminorm-Seminormed-ℝ-Vector-Space V v)
+ by ap-mul-ℝ (abs-neg-ℝ _) refl
+ = abs-ℝ one-ℝ *ℝ map-seminorm-Seminormed-ℝ-Vector-Space V v
+ by
+ eq-sim-ℝ
+ ( preserves-sim-right-mul-ℝ _ _ _
+ ( preserves-sim-abs-ℝ (sim-raise-ℝ' l1 one-ℝ)))
+ = one-ℝ *ℝ map-seminorm-Seminormed-ℝ-Vector-Space V v
+ by ap-mul-ℝ (abs-real-ℝ⁺ one-ℝ⁺) refl
+ = map-seminorm-Seminormed-ℝ-Vector-Space V v
+ by left-unit-law-mul-ℝ _
+
+ commutative-dist-Seminormed-ℝ-Vector-Space :
+ (v w : type-Seminormed-ℝ-Vector-Space V) →
+ dist-Seminormed-ℝ-Vector-Space V v w =
+ dist-Seminormed-ℝ-Vector-Space V w v
+ commutative-dist-Seminormed-ℝ-Vector-Space v w =
+ ( inv
+ ( ap
+ ( map-seminorm-Seminormed-ℝ-Vector-Space V)
+ ( distributive-neg-diff-Seminormed-ℝ-Vector-Space V w v))) ∙
+ ( seminorm-neg-Seminormed-ℝ-Vector-Space _)
+```
+
+### The distance function on a seminormed vector space satisfies the triangle inequality
+
+```agda
+module _
+ {l1 l2 : Level}
+ (V : Seminormed-ℝ-Vector-Space l1 l2)
+ where
+
+ abstract
+ triangular-dist-Seminormed-ℝ-Vector-Space :
+ (v w x : type-Seminormed-ℝ-Vector-Space V) →
+ leq-ℝ
+ ( dist-Seminormed-ℝ-Vector-Space V v x)
+ ( dist-Seminormed-ℝ-Vector-Space V v w +ℝ
+ dist-Seminormed-ℝ-Vector-Space V w x)
+ triangular-dist-Seminormed-ℝ-Vector-Space v w x =
+ let
+ open inequality-reasoning-Large-Poset ℝ-Large-Poset
+ in
+ chain-of-inequalities
+ dist-Seminormed-ℝ-Vector-Space V v x
+ ≤ map-seminorm-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( add-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( diff-Seminormed-ℝ-Vector-Space V v w)
+ ( diff-Seminormed-ℝ-Vector-Space V w x))
+ by
+ leq-eq-ℝ
+ ( ap
+ ( map-seminorm-Seminormed-ℝ-Vector-Space V)
+ ( inv (add-diff-Seminormed-ℝ-Vector-Space V v w x)))
+ ≤ ( dist-Seminormed-ℝ-Vector-Space V v w) +ℝ
+ ( dist-Seminormed-ℝ-Vector-Space V w x)
+ by triangular-seminorm-Seminormed-ℝ-Vector-Space V _ _
+```
+
+### The seminorm of a vector is nonnegative
+
+```agda
+module _
+ {l1 l2 : Level}
+ (V : Seminormed-ℝ-Vector-Space l1 l2)
+ where
+
+ abstract
+ is-nonnegative-seminorm-Seminormed-ℝ-Vector-Space :
+ (v : type-Seminormed-ℝ-Vector-Space V) →
+ is-nonnegative-ℝ (map-seminorm-Seminormed-ℝ-Vector-Space V v)
+ is-nonnegative-seminorm-Seminormed-ℝ-Vector-Space v =
+ let
+ open inequality-reasoning-Large-Poset ℝ-Large-Poset
+ in
+ reflects-leq-left-mul-ℝ⁺
+ ( positive-real-ℕ⁺ (2 , λ ()))
+ ( zero-ℝ)
+ ( map-seminorm-Seminormed-ℝ-Vector-Space V v)
+ ( chain-of-inequalities
+ real-ℕ 2 *ℝ zero-ℝ
+ ≤ zero-ℝ
+ by leq-sim-ℝ (right-zero-law-mul-ℝ _)
+ ≤ dist-Seminormed-ℝ-Vector-Space V v v
+ by
+ leq-sim-ℝ
+ ( symmetric-sim-ℝ
+ ( sim-zero-diagonal-dist-Seminormed-ℝ-Vector-Space V v))
+ ≤ ( map-seminorm-Seminormed-ℝ-Vector-Space V v) +ℝ
+ ( map-seminorm-Seminormed-ℝ-Vector-Space
+ ( V)
+ ( neg-Seminormed-ℝ-Vector-Space V v))
+ by triangular-seminorm-Seminormed-ℝ-Vector-Space V _ _
+ ≤ ( map-seminorm-Seminormed-ℝ-Vector-Space V v) +ℝ
+ ( map-seminorm-Seminormed-ℝ-Vector-Space V v)
+ by
+ leq-eq-ℝ
+ ( ap-add-ℝ
+ ( refl)
+ ( seminorm-neg-Seminormed-ℝ-Vector-Space V v))
+ ≤ real-ℕ 2 *ℝ map-seminorm-Seminormed-ℝ-Vector-Space V v
+ by leq-eq-ℝ (inv (left-mul-real-ℕ 2 _)))
+
+ nonnegative-seminorm-Seminormed-ℝ-Vector-Space :
+ type-Seminormed-ℝ-Vector-Space V → ℝ⁰⁺ l1
+ nonnegative-seminorm-Seminormed-ℝ-Vector-Space v =
+ ( map-seminorm-Seminormed-ℝ-Vector-Space V v ,
+ is-nonnegative-seminorm-Seminormed-ℝ-Vector-Space v)
+```
+
+### The pseudometric space induced by a seminorm
+
+```agda
+module _
+ {l1 l2 : Level} (V : Seminormed-ℝ-Vector-Space l1 l2)
+ where
+
+ nonnegative-dist-Seminormed-ℝ-Vector-Space :
+ type-Seminormed-ℝ-Vector-Space V → type-Seminormed-ℝ-Vector-Space V → ℝ⁰⁺ l1
+ nonnegative-dist-Seminormed-ℝ-Vector-Space v w =
+ ( dist-Seminormed-ℝ-Vector-Space V v w ,
+ is-nonnegative-seminorm-Seminormed-ℝ-Vector-Space V _)
+
+ neighborhood-prop-Seminormed-ℝ-Vector-Space :
+ ℚ⁺ → Relation-Prop l1 (type-Seminormed-ℝ-Vector-Space V)
+ neighborhood-prop-Seminormed-ℝ-Vector-Space ε v w =
+ leq-prop-ℝ
+ ( dist-Seminormed-ℝ-Vector-Space V v w)
+ ( real-ℚ⁺ ε)
+
+ neighborhood-Seminormed-ℝ-Vector-Space :
+ ℚ⁺ → Relation l1 (type-Seminormed-ℝ-Vector-Space V)
+ neighborhood-Seminormed-ℝ-Vector-Space d =
+ type-Relation-Prop (neighborhood-prop-Seminormed-ℝ-Vector-Space d)
+
+ abstract
+ refl-neighborhood-Seminormed-ℝ-Vector-Space :
+ (ε : ℚ⁺) (v : type-Seminormed-ℝ-Vector-Space V) →
+ neighborhood-Seminormed-ℝ-Vector-Space ε v v
+ refl-neighborhood-Seminormed-ℝ-Vector-Space ε v =
+ leq-le-ℝ
+ ( preserves-le-left-sim-ℝ
+ ( real-ℚ⁺ ε)
+ ( zero-ℝ)
+ ( dist-Seminormed-ℝ-Vector-Space V v v)
+ ( symmetric-sim-ℝ
+ ( sim-zero-diagonal-dist-Seminormed-ℝ-Vector-Space V v))
+ ( preserves-is-positive-real-ℚ (is-positive-rational-ℚ⁺ ε)))
+
+ symmetric-neighborhood-Seminormed-ℝ-Vector-Space :
+ (d : ℚ⁺) (v w : type-Seminormed-ℝ-Vector-Space V) →
+ neighborhood-Seminormed-ℝ-Vector-Space d v w →
+ neighborhood-Seminormed-ℝ-Vector-Space d w v
+ symmetric-neighborhood-Seminormed-ℝ-Vector-Space d v w =
+ tr
+ ( λ z → leq-ℝ z (real-ℚ⁺ d))
+ ( commutative-dist-Seminormed-ℝ-Vector-Space V v w)
+
+ triangular-neighborhood-Seminormed-ℝ-Vector-Space :
+ (v w x : type-Seminormed-ℝ-Vector-Space V) (d1 d2 : ℚ⁺) →
+ neighborhood-Seminormed-ℝ-Vector-Space d2 w x →
+ neighborhood-Seminormed-ℝ-Vector-Space d1 v w →
+ neighborhood-Seminormed-ℝ-Vector-Space (d1 +ℚ⁺ d2) v x
+ triangular-neighborhood-Seminormed-ℝ-Vector-Space
+ v w x d1 d2 Nd2wx Nd1vw =
+ let
+ open inequality-reasoning-Large-Poset ℝ-Large-Poset
+ in
+ chain-of-inequalities
+ dist-Seminormed-ℝ-Vector-Space V v x
+ ≤ ( dist-Seminormed-ℝ-Vector-Space V v w) +ℝ
+ ( dist-Seminormed-ℝ-Vector-Space V w x)
+ by triangular-dist-Seminormed-ℝ-Vector-Space V v w x
+ ≤ real-ℚ⁺ d1 +ℝ real-ℚ⁺ d2
+ by preserves-leq-add-ℝ Nd1vw Nd2wx
+ ≤ real-ℚ⁺ (d1 +ℚ⁺ d2)
+ by leq-eq-ℝ (add-real-ℚ _ _)
+
+ saturated-neighborhood-Seminormed-ℝ-Vector-Space :
+ (d : ℚ⁺) (v w : type-Seminormed-ℝ-Vector-Space V) →
+ ((δ : ℚ⁺) → neighborhood-Seminormed-ℝ-Vector-Space (d +ℚ⁺ δ) v w) →
+ neighborhood-Seminormed-ℝ-Vector-Space d v w
+ saturated-neighborhood-Seminormed-ℝ-Vector-Space d v w H =
+ saturated-leq-ℝ⁰⁺
+ ( nonnegative-dist-Seminormed-ℝ-Vector-Space v w)
+ ( nonnegative-real-ℚ⁺ d)
+ ( λ δ →
+ inv-tr
+ ( leq-ℝ (dist-Seminormed-ℝ-Vector-Space V v w))
+ ( add-real-ℚ _ _)
+ ( H δ))
+
+ pseudometric-structure-Seminormed-ℝ-Vector-Space :
+ Pseudometric-Structure l1 (type-Seminormed-ℝ-Vector-Space V)
+ pseudometric-structure-Seminormed-ℝ-Vector-Space =
+ ( neighborhood-prop-Seminormed-ℝ-Vector-Space ,
+ refl-neighborhood-Seminormed-ℝ-Vector-Space ,
+ symmetric-neighborhood-Seminormed-ℝ-Vector-Space ,
+ triangular-neighborhood-Seminormed-ℝ-Vector-Space ,
+ saturated-neighborhood-Seminormed-ℝ-Vector-Space)
+
+ pseudometric-space-Seminormed-ℝ-Vector-Space : Pseudometric-Space l2 l1
+ pseudometric-space-Seminormed-ℝ-Vector-Space =
+ ( type-Seminormed-ℝ-Vector-Space V ,
+ pseudometric-structure-Seminormed-ℝ-Vector-Space)
+```
+
+### The real numbers are a seminormed vector space over themselves with seminorm `x ↦ |x|`
+
+```agda
+seminormed-real-vector-space-ℝ :
+ (l : Level) → Seminormed-ℝ-Vector-Space l (lsuc l)
+seminormed-real-vector-space-ℝ l =
+ ( real-vector-space-ℝ l , abs-ℝ , triangle-inequality-abs-ℝ , abs-mul-ℝ)
+```
diff --git a/src/metric-spaces/metrics-of-metric-spaces.lagda.md b/src/metric-spaces/metrics-of-metric-spaces.lagda.md
index ea6ba29759..a918f42c78 100644
--- a/src/metric-spaces/metrics-of-metric-spaces.lagda.md
+++ b/src/metric-spaces/metrics-of-metric-spaces.lagda.md
@@ -109,7 +109,7 @@ module _
is-reflexive-is-metric-of-Metric-Space :
is-reflexive-distance-function (set-Metric-Space M) ρ
is-reflexive-is-metric-of-Metric-Space x =
- sim-zero-le-positive-rational-ℝ⁰⁺
+ sim-zero-leq-positive-rational-ℝ⁰⁺
( ρ x x)
( λ ε →
forward-implication
diff --git a/src/metric-spaces/metrics.lagda.md b/src/metric-spaces/metrics.lagda.md
index 6ed22735b3..67cc1c541a 100644
--- a/src/metric-spaces/metrics.lagda.md
+++ b/src/metric-spaces/metrics.lagda.md
@@ -297,7 +297,7 @@ module _
is-tight-Pseudometric-Space (pseudometric-space-Metric X μ)
is-tight-pseudometric-space-Metric x y H =
is-extensional-dist-Metric X μ x y
- ( sim-zero-le-positive-rational-ℝ⁰⁺ (dist-Metric X μ x y) H)
+ ( sim-zero-leq-positive-rational-ℝ⁰⁺ (dist-Metric X μ x y) H)
```
### The pseudometric space induced by a metric is extensional
diff --git a/src/real-numbers/absolute-value-real-numbers.lagda.md b/src/real-numbers/absolute-value-real-numbers.lagda.md
index 371e592c16..120e455dd4 100644
--- a/src/real-numbers/absolute-value-real-numbers.lagda.md
+++ b/src/real-numbers/absolute-value-real-numbers.lagda.md
@@ -218,6 +218,18 @@ module _
( neg-leq-ℝ
( transitive-leq-ℝ _ _ _ (leq-sim-ℝ |x|~0) (neg-leq-abs-ℝ x))))
+abstract
+ eq-raise-zero-eq-raise-zero-abs-ℝ :
+ {l : Level} (x : ℝ l) → abs-ℝ x = raise-ℝ l zero-ℝ → x = raise-ℝ l zero-ℝ
+ eq-raise-zero-eq-raise-zero-abs-ℝ {l} x |x|=0 =
+ eq-sim-ℝ
+ ( transitive-sim-ℝ _ _ _
+ ( sim-raise-ℝ l zero-ℝ)
+ ( sim-zero-sim-zero-abs-ℝ x
+ ( transitive-sim-ℝ _ _ _
+ ( sim-raise-ℝ' l zero-ℝ)
+ ( sim-eq-ℝ |x|=0))))
+
module _
(x : ℝ lzero) (|x|=0 : abs-ℝ x = zero-ℝ)
where
diff --git a/src/real-numbers/multiplication-real-numbers.lagda.md b/src/real-numbers/multiplication-real-numbers.lagda.md
index a4d70e4bbd..002c926006 100644
--- a/src/real-numbers/multiplication-real-numbers.lagda.md
+++ b/src/real-numbers/multiplication-real-numbers.lagda.md
@@ -1038,33 +1038,6 @@ abstract
by ap-add-ℝ (commutative-mul-ℝ z x) (commutative-mul-ℝ z y)
```
-### Zero laws
-
-```agda
-module _
- {l : Level} (x : ℝ l)
- where
-
- abstract
- left-zero-law-mul-ℝ : sim-ℝ (zero-ℝ *ℝ x) zero-ℝ
- left-zero-law-mul-ℝ =
- inv-tr
- ( λ y → sim-ℝ y zero-ℝ)
- ( is-zero-is-idempotent-Ab
- ( ab-add-ℝ l)
- ( equational-reasoning
- zero-ℝ *ℝ x +ℝ zero-ℝ *ℝ x
- = (zero-ℝ +ℝ zero-ℝ) *ℝ x
- by inv (right-distributive-mul-add-ℝ zero-ℝ zero-ℝ x)
- = zero-ℝ *ℝ x
- by ap-mul-ℝ (left-unit-law-add-ℝ zero-ℝ) refl))
- ( symmetric-sim-ℝ (sim-raise-ℝ l zero-ℝ))
-
- right-zero-law-mul-ℝ : sim-ℝ (x *ℝ zero-ℝ) zero-ℝ
- right-zero-law-mul-ℝ =
- tr (λ y → sim-ℝ y zero-ℝ) (commutative-mul-ℝ _ _) left-zero-law-mul-ℝ
-```
-
### The inclusion of rational numbers preserves multiplication
```agda
@@ -1166,6 +1139,51 @@ abstract
( preserves-sim-left-mul-ℝ a b b' b~b')
```
+### Zero laws
+
+```agda
+module _
+ {l : Level} (x : ℝ l)
+ where
+
+ abstract
+ left-zero-law-mul-ℝ : sim-ℝ (zero-ℝ *ℝ x) zero-ℝ
+ left-zero-law-mul-ℝ =
+ inv-tr
+ ( λ y → sim-ℝ y zero-ℝ)
+ ( is-zero-is-idempotent-Ab
+ ( ab-add-ℝ l)
+ ( equational-reasoning
+ zero-ℝ *ℝ x +ℝ zero-ℝ *ℝ x
+ = (zero-ℝ +ℝ zero-ℝ) *ℝ x
+ by inv (right-distributive-mul-add-ℝ zero-ℝ zero-ℝ x)
+ = zero-ℝ *ℝ x
+ by ap-mul-ℝ (left-unit-law-add-ℝ zero-ℝ) refl))
+ ( symmetric-sim-ℝ (sim-raise-ℝ l zero-ℝ))
+
+ left-raise-zero-law-mul-ℝ :
+ raise-zero-ℝ l *ℝ x = raise-zero-ℝ l
+ left-raise-zero-law-mul-ℝ =
+ eq-sim-ℝ
+ ( similarity-reasoning-ℝ
+ raise-zero-ℝ l *ℝ x
+ ~ℝ zero-ℝ *ℝ x
+ by
+ preserves-sim-right-mul-ℝ
+ ( x)
+ ( raise-zero-ℝ l)
+ ( zero-ℝ)
+ ( sim-raise-ℝ' l zero-ℝ)
+ ~ℝ zero-ℝ
+ by left-zero-law-mul-ℝ
+ ~ℝ raise-zero-ℝ l
+ by sim-raise-ℝ l zero-ℝ)
+
+ right-zero-law-mul-ℝ : sim-ℝ (x *ℝ zero-ℝ) zero-ℝ
+ right-zero-law-mul-ℝ =
+ tr (λ y → sim-ℝ y zero-ℝ) (commutative-mul-ℝ _ _) left-zero-law-mul-ℝ
+```
+
### Swapping laws for multiplication on real numbers
```agda
diff --git a/src/real-numbers/positive-real-numbers.lagda.md b/src/real-numbers/positive-real-numbers.lagda.md
index d00d7fc4b6..b924f8f662 100644
--- a/src/real-numbers/positive-real-numbers.lagda.md
+++ b/src/real-numbers/positive-real-numbers.lagda.md
@@ -9,6 +9,10 @@ module real-numbers.positive-real-numbers where
Imports
```agda
+open import elementary-number-theory.integers
+open import elementary-number-theory.natural-numbers
+open import elementary-number-theory.nonzero-natural-numbers
+open import elementary-number-theory.positive-integers
open import elementary-number-theory.positive-rational-numbers
open import elementary-number-theory.rational-numbers
open import elementary-number-theory.strict-inequality-positive-rational-numbers
@@ -256,6 +260,32 @@ is-positive-one-ℝ : is-positive-ℝ one-ℝ
is-positive-one-ℝ = is-positive-real-ℝ⁺ one-ℝ⁺
```
+### The canonical embedding of integers preserves positivity
+
+```agda
+abstract
+ preserves-is-positive-real-ℤ :
+ {x : ℤ} → is-positive-ℤ x → is-positive-ℝ (real-ℤ x)
+ preserves-is-positive-real-ℤ pos-x =
+ preserves-is-positive-real-ℚ (is-positive-rational-ℤ pos-x)
+
+positive-real-ℤ⁺ : ℤ⁺ → ℝ⁺ lzero
+positive-real-ℤ⁺ (x , pos-x) = (real-ℤ x , preserves-is-positive-real-ℤ pos-x)
+```
+
+### The canonical embedding of a nonzero natural number is positive
+
+```agda
+abstract
+ is-positive-real-is-nonzero-ℕ :
+ {n : ℕ} → is-nonzero-ℕ n → is-positive-ℝ (real-ℕ n)
+ is-positive-real-is-nonzero-ℕ n≠0 =
+ preserves-is-positive-real-ℤ (is-positive-int-is-nonzero-ℕ _ n≠0)
+
+positive-real-ℕ⁺ : ℕ⁺ → ℝ⁺ lzero
+positive-real-ℕ⁺ (n , n≠0) = (real-ℕ n , is-positive-real-is-nonzero-ℕ n≠0)
+```
+
### `x` is positive if and only if there exists a positive rational number it is not less than or equal to
```agda
diff --git a/src/real-numbers/saturation-inequality-nonnegative-real-numbers.lagda.md b/src/real-numbers/saturation-inequality-nonnegative-real-numbers.lagda.md
index 69f3a5fb11..ef8ef84722 100644
--- a/src/real-numbers/saturation-inequality-nonnegative-real-numbers.lagda.md
+++ b/src/real-numbers/saturation-inequality-nonnegative-real-numbers.lagda.md
@@ -57,15 +57,16 @@ module _
### If a nonnegative real number is less than or equal to all positive rational numbers, it is similar to zero
```agda
-sim-zero-le-positive-rational-ℝ⁰⁺ :
- {l : Level} (x : ℝ⁰⁺ l) →
- ((ε : ℚ⁺) → leq-ℝ⁰⁺ x (nonnegative-real-ℚ⁺ ε)) →
- sim-zero-ℝ⁰⁺ x
-sim-zero-le-positive-rational-ℝ⁰⁺ x H =
- sim-sim-leq-ℝ
- ( leq-zero-ℝ⁰⁺ x ,
- saturated-leq-ℝ⁰⁺
- ( x)
- ( zero-ℝ⁰⁺)
- ( λ ε → inv-tr (leq-ℝ⁰⁺ x) (left-unit-law-add-ℝ⁰⁺ _) (H ε)))
+abstract
+ sim-zero-leq-positive-rational-ℝ⁰⁺ :
+ {l : Level} (x : ℝ⁰⁺ l) →
+ ((ε : ℚ⁺) → leq-ℝ⁰⁺ x (nonnegative-real-ℚ⁺ ε)) →
+ sim-zero-ℝ⁰⁺ x
+ sim-zero-leq-positive-rational-ℝ⁰⁺ x H =
+ sim-sim-leq-ℝ
+ ( leq-zero-ℝ⁰⁺ x ,
+ saturated-leq-ℝ⁰⁺
+ ( x)
+ ( zero-ℝ⁰⁺)
+ ( λ ε → inv-tr (leq-ℝ⁰⁺ x) (left-unit-law-add-ℝ⁰⁺ _) (H ε)))
```