diff --git a/src/analysis.lagda.md b/src/analysis.lagda.md
index 99788b360c..c3893468cc 100644
--- a/src/analysis.lagda.md
+++ b/src/analysis.lagda.md
@@ -4,6 +4,7 @@
module analysis where
open import analysis.convergent-series-metric-abelian-groups public
+open import analysis.derivatives-of-real-functions-on-proper-closed-intervals public
open import analysis.metric-abelian-groups public
open import analysis.series-metric-abelian-groups public
```
diff --git a/src/analysis/derivatives-of-real-functions-on-proper-closed-intervals.lagda.md b/src/analysis/derivatives-of-real-functions-on-proper-closed-intervals.lagda.md
new file mode 100644
index 0000000000..106dc41df5
--- /dev/null
+++ b/src/analysis/derivatives-of-real-functions-on-proper-closed-intervals.lagda.md
@@ -0,0 +1,695 @@
+# Derivatives of real functions on proper closed intervals of ℝ
+
+```agda
+{-# OPTIONS --lossy-unification #-}
+
+module analysis.derivatives-of-real-functions-on-proper-closed-intervals where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.addition-positive-rational-numbers
+open import elementary-number-theory.minimum-positive-rational-numbers
+open import elementary-number-theory.multiplication-positive-rational-numbers
+open import elementary-number-theory.multiplicative-group-of-positive-rational-numbers
+open import elementary-number-theory.positive-rational-numbers
+
+open import foundation.action-on-identifications-binary-functions
+open import foundation.action-on-identifications-functions
+open import foundation.dependent-pair-types
+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.inhabited-subtypes
+open import foundation.propositional-truncations
+open import foundation.propositions
+open import foundation.sets
+open import foundation.subtypes
+open import foundation.universe-levels
+
+open import group-theory.abelian-groups
+
+open import lists.sequences
+
+open import logic.functoriality-existential-quantification
+
+open import metric-spaces.metric-spaces
+
+open import order-theory.large-posets
+
+open import real-numbers.absolute-value-real-numbers
+open import real-numbers.accumulation-points-subsets-real-numbers
+open import real-numbers.addition-real-numbers
+open import real-numbers.apartness-real-numbers
+open import real-numbers.dedekind-real-numbers
+open import real-numbers.difference-real-numbers
+open import real-numbers.distance-real-numbers
+open import real-numbers.inequalities-addition-and-subtraction-real-numbers
+open import real-numbers.inequality-real-numbers
+open import real-numbers.limits-sequences-real-numbers
+open import real-numbers.metric-space-of-real-numbers
+open import real-numbers.multiplication-nonnegative-real-numbers
+open import real-numbers.multiplication-real-numbers
+open import real-numbers.multiplicative-inverses-nonzero-real-numbers
+open import real-numbers.nonnegative-real-numbers
+open import real-numbers.nonzero-real-numbers
+open import real-numbers.proper-closed-intervals-real-numbers
+open import real-numbers.raising-universe-levels-real-numbers
+open import real-numbers.rational-real-numbers
+open import real-numbers.similarity-real-numbers
+open import real-numbers.strict-inequality-real-numbers
+```
+
+
+
+## Idea
+
+Given a function `f` from a
+[proper closed interval](real-numbers.proper-closed-intervals-real-numbers.md)
+`[a, b]` of [real numbers](real-numbers.dedekind-real-numbers.md) to the real
+numbers, `g` is a
+{{#concept "derivative" Disambiguation="of a real-valued function on a proper closed interval" WD="derivative" WDID=Q29175 Agda=is-derivative-real-function-proper-closed-interval-ℝ}}
+of `f` if there [exists](foundation.existential-quantification.md) a modulus
+function `μ` such that for `ε : ℚ⁺` and any `x` and `y` in `[a, b]` within a
+`μ(ε)`-[neighborhood](real-numbers.metric-space-of-real-numbers.md) of each
+other, we have $$|f(y) - f(x) - g(x)(y - x)| ≤ ε|y - x|.$$
+
+## Definition
+
+```agda
+module _
+ {l1 l2 : Level}
+ ([a,b] : proper-closed-interval-ℝ l1 l1)
+ (f : type-proper-closed-interval-ℝ l1 [a,b] → ℝ l2)
+ (g : type-proper-closed-interval-ℝ l1 [a,b] → ℝ (l1 ⊔ l2))
+ where
+
+ is-modulus-of-derivative-prop-real-function-proper-closed-interval-ℝ :
+ (ℚ⁺ → ℚ⁺) → Prop (lsuc l1 ⊔ l2)
+ is-modulus-of-derivative-prop-real-function-proper-closed-interval-ℝ μ =
+ Π-Prop
+ ( ℚ⁺)
+ ( λ ε →
+ Π-Prop
+ ( type-proper-closed-interval-ℝ l1 [a,b])
+ ( λ (x , x∈[a,b]) →
+ Π-Prop
+ ( type-proper-closed-interval-ℝ l1 [a,b])
+ ( λ (y , y∈[a,b]) →
+ hom-Prop
+ ( neighborhood-prop-ℝ l1 (μ ε) x y)
+ ( leq-prop-ℝ
+ ( dist-ℝ
+ ( f (y , y∈[a,b]) -ℝ f (x , x∈[a,b]))
+ ( g (x , x∈[a,b]) *ℝ (y -ℝ x)))
+ ( real-ℚ⁺ ε *ℝ dist-ℝ x y)))))
+
+ is-modulus-of-derivative-real-function-proper-closed-interval-ℝ :
+ (ℚ⁺ → ℚ⁺) → UU (lsuc l1 ⊔ l2)
+ is-modulus-of-derivative-real-function-proper-closed-interval-ℝ =
+ is-in-subtype
+ ( is-modulus-of-derivative-prop-real-function-proper-closed-interval-ℝ)
+
+ is-derivative-prop-real-function-proper-closed-interval-ℝ :
+ Prop (lsuc l1 ⊔ l2)
+ is-derivative-prop-real-function-proper-closed-interval-ℝ =
+ is-inhabited-subtype-Prop
+ ( is-modulus-of-derivative-prop-real-function-proper-closed-interval-ℝ)
+
+ is-derivative-real-function-proper-closed-interval-ℝ : UU (lsuc l1 ⊔ l2)
+ is-derivative-real-function-proper-closed-interval-ℝ =
+ type-Prop is-derivative-prop-real-function-proper-closed-interval-ℝ
+```
+
+## Properties
+
+### Proving the derivative of a function from a modulus
+
+```agda
+module _
+ {l1 l2 : Level}
+ ([a,b] : proper-closed-interval-ℝ l1 l1)
+ (f : type-proper-closed-interval-ℝ l1 [a,b] → ℝ l2)
+ (g : type-proper-closed-interval-ℝ l1 [a,b] → ℝ (l1 ⊔ l2))
+ where
+
+ is-derivative-modulus-of-real-function-proper-closed-interval-ℝ :
+ ( (ε : ℚ⁺) →
+ Σ ( ℚ⁺)
+ ( λ δ →
+ (x y : type-proper-closed-interval-ℝ l1 [a,b]) →
+ neighborhood-ℝ l1 δ (pr1 x) (pr1 y) →
+ leq-ℝ
+ ( dist-ℝ (f y -ℝ f x) (g x *ℝ (pr1 y -ℝ pr1 x)))
+ ( real-ℚ⁺ ε *ℝ dist-ℝ (pr1 x) (pr1 y)))) →
+ is-derivative-real-function-proper-closed-interval-ℝ [a,b] f g
+ is-derivative-modulus-of-real-function-proper-closed-interval-ℝ μ =
+ intro-exists (pr1 ∘ μ) (pr2 ∘ μ)
+```
+
+### If `g` is a derivative of `f`, and `aₙ` is a sequence accumulating to `x`, and the limit exists, then `g x` is equal to the limit of `(f aₙ - f x)/(aₙ - x)` as `n → ∞`
+
+```agda
+module _
+ {l1 l2 : Level}
+ ([a,b] : proper-closed-interval-ℝ l1 l1)
+ (f : type-proper-closed-interval-ℝ l1 [a,b] → ℝ l2)
+ (x : type-proper-closed-interval-ℝ l1 [a,b])
+ (y :
+ sequence-accumulating-to-point-subset-ℝ
+ ( subtype-proper-closed-interval-ℝ l1 [a,b])
+ ( pr1 x))
+ where
+
+ sequence-derivative-accumulating-to-point-proper-closed-interval-ℝ :
+ sequence (ℝ (l1 ⊔ l2))
+ sequence-derivative-accumulating-to-point-proper-closed-interval-ℝ n =
+ (f (pr1 y n) -ℝ f x) *ℝ
+ real-inv-nonzero-ℝ
+ ( nonzero-diff-apart-ℝ
+ ( real-sequence-accumulating-to-point-subset-ℝ
+ ( subtype-proper-closed-interval-ℝ l1 [a,b])
+ ( pr1 x)
+ ( y)
+ ( n))
+ ( pr1 x)
+ ( apart-sequence-accumulating-to-point-subset-ℝ
+ ( subtype-proper-closed-interval-ℝ l1 [a,b])
+ ( pr1 x)
+ ( y)
+ ( n)))
+
+module _
+ {l1 l2 : Level}
+ ([a,b] : proper-closed-interval-ℝ l1 l1)
+ (f : type-proper-closed-interval-ℝ l1 [a,b] → ℝ l2)
+ (g : type-proper-closed-interval-ℝ l1 [a,b] → ℝ (l1 ⊔ l2))
+ (x : type-proper-closed-interval-ℝ l1 [a,b])
+ (y :
+ sequence-accumulating-to-point-subset-ℝ
+ ( subtype-proper-closed-interval-ℝ l1 [a,b])
+ ( pr1 x))
+ where
+
+ abstract
+ is-limit-sequence-derivative-accumulating-to-point-proper-closed-interval-ℝ :
+ is-derivative-real-function-proper-closed-interval-ℝ [a,b] f g →
+ is-limit-sequence-ℝ
+ ( sequence-derivative-accumulating-to-point-proper-closed-interval-ℝ
+ ( [a,b])
+ ( f)
+ ( x)
+ ( y))
+ ( g x)
+ is-limit-sequence-derivative-accumulating-to-point-proper-closed-interval-ℝ
+ H =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( is-limit-prop-sequence-ℝ
+ ( sequence-derivative-accumulating-to-point-proper-closed-interval-ℝ
+ ( [a,b])
+ ( f)
+ ( x)
+ ( y))
+ ( g x))
+ open inequality-reasoning-Large-Poset ℝ-Large-Poset
+ seq-deriv =
+ sequence-derivative-accumulating-to-point-proper-closed-interval-ℝ
+ ( [a,b])
+ ( f)
+ ( x)
+ ( y)
+ nonzero-diff n =
+ nonzero-diff-apart-ℝ
+ ( real-sequence-accumulating-to-point-subset-ℝ
+ ( subtype-proper-closed-interval-ℝ l1 [a,b])
+ ( pr1 x)
+ ( y)
+ ( n))
+ ( pr1 x)
+ ( apart-sequence-accumulating-to-point-subset-ℝ
+ ( subtype-proper-closed-interval-ℝ l1 [a,b])
+ ( pr1 x)
+ ( y)
+ ( n))
+ real-nonzero-diff n = real-nonzero-ℝ (nonzero-diff n)
+ in do
+ (μ , is-mod-μ) ←
+ is-limit-sequence-accumulating-to-point-subset-ℝ
+ ( subtype-proper-closed-interval-ℝ l1 [a,b])
+ ( pr1 x)
+ ( y)
+ (ν , is-mod-ν) ← H
+ intro-exists
+ ( μ ∘ ν)
+ ( λ ε n N≤n →
+ neighborhood-dist-ℝ
+ ( ε)
+ ( seq-deriv n)
+ ( g x)
+ ( chain-of-inequalities
+ dist-ℝ (seq-deriv n) (g x)
+ ≤ dist-ℝ (seq-deriv n) (g x *ℝ one-ℝ)
+ by
+ leq-eq-ℝ (ap-dist-ℝ refl (inv (right-unit-law-mul-ℝ (g x))))
+ ≤ dist-ℝ
+ ( (f (pr1 y n) -ℝ f x) *ℝ
+ real-inv-nonzero-ℝ (nonzero-diff n))
+ ( g x *ℝ
+ ( real-nonzero-diff n *ℝ
+ real-inv-nonzero-ℝ (nonzero-diff n)))
+ by
+ leq-sim-ℝ
+ ( preserves-dist-right-sim-ℝ
+ ( preserves-sim-left-mul-ℝ _ _ _
+ ( symmetric-sim-ℝ
+ ( right-inverse-law-mul-nonzero-ℝ
+ ( nonzero-diff n)))))
+ ≤ dist-ℝ
+ ( (f (pr1 y n) -ℝ f x) *ℝ
+ real-inv-nonzero-ℝ (nonzero-diff n))
+ ( (g x *ℝ real-nonzero-diff n) *ℝ
+ real-inv-nonzero-ℝ (nonzero-diff n))
+ by leq-eq-ℝ (ap-dist-ℝ refl (inv (associative-mul-ℝ _ _ _)))
+ ≤ dist-ℝ
+ ( f (pr1 y n) -ℝ f x)
+ ( g x *ℝ (pr1 (pr1 y n) -ℝ pr1 x)) *ℝ
+ abs-ℝ (real-inv-nonzero-ℝ (nonzero-diff n))
+ by leq-eq-ℝ (inv (right-distributive-abs-mul-dist-ℝ _ _ _))
+ ≤ ( real-ℚ⁺ ε *ℝ dist-ℝ (pr1 x) (pr1 (pr1 y n))) *ℝ
+ ( abs-ℝ (real-inv-nonzero-ℝ (nonzero-diff n)))
+ by
+ preserves-leq-right-mul-ℝ⁰⁺
+ ( nonnegative-abs-ℝ _)
+ ( is-mod-ν
+ ( ε)
+ ( x)
+ ( pr1 y n)
+ ( is-symmetric-neighborhood-ℝ
+ ( ν ε)
+ ( pr1 (pr1 y n))
+ ( pr1 x)
+ ( is-mod-μ (ν ε) n N≤n)))
+ ≤ ( real-ℚ⁺ ε) *ℝ
+ ( ( abs-ℝ (pr1 x -ℝ pr1 (pr1 y n))) *ℝ
+ ( abs-ℝ (real-inv-nonzero-ℝ (nonzero-diff n))))
+ by leq-eq-ℝ (associative-mul-ℝ _ _ _)
+ ≤ ( real-ℚ⁺ ε) *ℝ
+ ( ( abs-ℝ (pr1 (pr1 y n) -ℝ pr1 x)) *ℝ
+ ( abs-ℝ (real-inv-nonzero-ℝ (nonzero-diff n))))
+ by
+ leq-eq-ℝ
+ ( ap-mul-ℝ refl (ap-mul-ℝ (commutative-dist-ℝ _ _) refl))
+ ≤ ( real-ℚ⁺ ε) *ℝ
+ ( abs-ℝ
+ ( ( pr1 (pr1 y n) -ℝ pr1 x) *ℝ
+ ( real-inv-nonzero-ℝ (nonzero-diff n))))
+ by leq-eq-ℝ (ap-mul-ℝ refl (inv (abs-mul-ℝ _ _)))
+ ≤ real-ℚ⁺ ε *ℝ abs-ℝ one-ℝ
+ by
+ leq-sim-ℝ
+ ( preserves-sim-left-mul-ℝ _ _ _
+ ( preserves-sim-abs-ℝ
+ ( right-inverse-law-mul-nonzero-ℝ (nonzero-diff n))))
+ ≤ real-ℚ⁺ ε *ℝ one-ℝ
+ by leq-eq-ℝ (ap-mul-ℝ refl (abs-real-ℝ⁰⁺ one-ℝ⁰⁺))
+ ≤ real-ℚ⁺ ε
+ by leq-eq-ℝ (right-unit-law-mul-ℝ _)))
+```
+
+### Any two derivatives of a function are homotopic
+
+```agda
+module _
+ {l1 l2 : Level}
+ ([a,b] : proper-closed-interval-ℝ l1 l1)
+ (f : type-proper-closed-interval-ℝ l1 [a,b] → ℝ l2)
+ (g : type-proper-closed-interval-ℝ l1 [a,b] → ℝ (l1 ⊔ l2))
+ (h : type-proper-closed-interval-ℝ l1 [a,b] → ℝ (l1 ⊔ l2))
+ where
+
+ abstract
+ htpy-is-derivative-real-function-proper-closed-interval-ℝ :
+ is-derivative-real-function-proper-closed-interval-ℝ [a,b] f g →
+ is-derivative-real-function-proper-closed-interval-ℝ [a,b] f h →
+ g ~ h
+ htpy-is-derivative-real-function-proper-closed-interval-ℝ
+ G H x'@(x , x∈[a,b]) =
+ let
+ open do-syntax-trunc-Prop (Id-Prop (ℝ-Set (l1 ⊔ l2)) (g x') (h x'))
+ in do
+ y ←
+ is-sequential-accumulation-point-is-accumulation-point-subset-ℝ
+ ( subtype-proper-closed-interval-ℝ l1 [a,b])
+ ( x)
+ ( is-accumulation-point-is-in-proper-closed-interval-ℝ
+ ( [a,b])
+ ( x)
+ ( x∈[a,b]))
+ eq-is-limit-sequence-ℝ
+ ( sequence-derivative-accumulating-to-point-proper-closed-interval-ℝ
+ ( [a,b])
+ ( f)
+ ( x')
+ ( y))
+ ( g x')
+ ( h x')
+ ( is-limit-sequence-derivative-accumulating-to-point-proper-closed-interval-ℝ
+ ( [a,b])
+ ( f)
+ ( g)
+ ( x')
+ ( y)
+ ( G))
+ ( is-limit-sequence-derivative-accumulating-to-point-proper-closed-interval-ℝ
+ ( [a,b])
+ ( f)
+ ( h)
+ ( x')
+ ( y)
+ ( H))
+```
+
+### Being differentiable is a proposition
+
+```agda
+module _
+ {l1 l2 : Level}
+ ([a,b] : proper-closed-interval-ℝ l1 l1)
+ (f : type-proper-closed-interval-ℝ l1 [a,b] → ℝ l2)
+ where
+
+ is-differentiable-real-function-proper-closed-interval-ℝ :
+ UU (lsuc l1 ⊔ lsuc l2)
+ is-differentiable-real-function-proper-closed-interval-ℝ =
+ Σ ( type-proper-closed-interval-ℝ l1 [a,b] → ℝ (l1 ⊔ l2))
+ ( is-derivative-real-function-proper-closed-interval-ℝ [a,b] f)
+
+ abstract
+ eq-is-derivative-real-function-proper-closed-interval-ℝ :
+ (g h : type-proper-closed-interval-ℝ l1 [a,b] → ℝ (l1 ⊔ l2)) →
+ is-derivative-real-function-proper-closed-interval-ℝ [a,b] f g →
+ is-derivative-real-function-proper-closed-interval-ℝ [a,b] f h →
+ g = h
+ eq-is-derivative-real-function-proper-closed-interval-ℝ g h G H =
+ eq-htpy
+ ( htpy-is-derivative-real-function-proper-closed-interval-ℝ
+ ( [a,b])
+ ( f)
+ ( g)
+ ( h)
+ ( G)
+ ( H))
+
+ all-elements-equal-is-differentiable-real-function-proper-closed-interval-ℝ :
+ all-elements-equal
+ ( is-differentiable-real-function-proper-closed-interval-ℝ)
+ all-elements-equal-is-differentiable-real-function-proper-closed-interval-ℝ
+ (g , G) (h , H) =
+ eq-type-subtype
+ ( is-derivative-prop-real-function-proper-closed-interval-ℝ [a,b] f)
+ ( eq-is-derivative-real-function-proper-closed-interval-ℝ g h G H)
+
+ is-prop-is-differentiable-real-function-proper-closed-interval-ℝ :
+ is-prop is-differentiable-real-function-proper-closed-interval-ℝ
+ is-prop-is-differentiable-real-function-proper-closed-interval-ℝ =
+ is-prop-all-elements-equal
+ all-elements-equal-is-differentiable-real-function-proper-closed-interval-ℝ
+
+ is-differentiable-prop-real-function-proper-closed-interval-ℝ :
+ Prop (lsuc l1 ⊔ lsuc l2)
+ is-differentiable-prop-real-function-proper-closed-interval-ℝ =
+ ( is-differentiable-real-function-proper-closed-interval-ℝ ,
+ is-prop-is-differentiable-real-function-proper-closed-interval-ℝ)
+```
+
+### The derivative of `f + g` is `f' + g'`
+
+```agda
+module _
+ {l1 l2 l3 : Level}
+ ([a,b] : proper-closed-interval-ℝ l1 l1)
+ (f : type-proper-closed-interval-ℝ l1 [a,b] → ℝ l2)
+ (g : type-proper-closed-interval-ℝ l1 [a,b] → ℝ l3)
+ (f' : type-proper-closed-interval-ℝ l1 [a,b] → ℝ (l1 ⊔ l2))
+ (g' : type-proper-closed-interval-ℝ l1 [a,b] → ℝ (l1 ⊔ l3))
+ (is-derivative-f-f' :
+ is-derivative-real-function-proper-closed-interval-ℝ [a,b] f f')
+ (is-derivative-g-g' :
+ is-derivative-real-function-proper-closed-interval-ℝ [a,b] g g')
+ where
+
+ abstract
+ is-derivative-add-real-function-proper-closed-interval-ℝ :
+ is-derivative-real-function-proper-closed-interval-ℝ
+ ( [a,b])
+ ( λ x → f x +ℝ g x)
+ ( λ x → f' x +ℝ g' x)
+ is-derivative-add-real-function-proper-closed-interval-ℝ =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( is-derivative-prop-real-function-proper-closed-interval-ℝ
+ ( [a,b])
+ ( λ x → f x +ℝ g x)
+ ( λ x → f' x +ℝ g' x))
+ open inequality-reasoning-Large-Poset ℝ-Large-Poset
+ in do
+ (μ , is-mod-μ) ← is-derivative-f-f'
+ (ν , is-mod-ν) ← is-derivative-g-g'
+ is-derivative-modulus-of-real-function-proper-closed-interval-ℝ [a,b]
+ ( _)
+ ( _)
+ ( λ ε →
+ let
+ (ε₁ , ε₂ , ε₁+ε₂=ε) = split-ℚ⁺ ε
+ in
+ ( min-ℚ⁺ (μ ε₁) (ν ε₂) ,
+ λ x y Nxy →
+ chain-of-inequalities
+ dist-ℝ
+ ( (f y +ℝ g y) -ℝ (f x +ℝ g x))
+ ( (f' x +ℝ g' x) *ℝ (pr1 y -ℝ pr1 x))
+ ≤ dist-ℝ
+ ( (f y -ℝ f x) +ℝ (g y -ℝ g x))
+ ( f' x *ℝ (pr1 y -ℝ pr1 x) +ℝ g' x *ℝ (pr1 y -ℝ pr1 x))
+ by
+ leq-eq-ℝ
+ ( ap-dist-ℝ
+ ( interchange-law-diff-add-ℝ _ _ _ _)
+ ( right-distributive-mul-add-ℝ _ _ _))
+ ≤ abs-ℝ
+ ( ( (f y -ℝ f x) -ℝ f' x *ℝ (pr1 y -ℝ pr1 x)) +ℝ
+ ( (g y -ℝ g x) -ℝ g' x *ℝ (pr1 y -ℝ pr1 x)))
+ by
+ leq-eq-ℝ (ap abs-ℝ (interchange-law-diff-add-ℝ _ _ _ _))
+ ≤ ( dist-ℝ (f y -ℝ f x) (f' x *ℝ (pr1 y -ℝ pr1 x))) +ℝ
+ ( dist-ℝ (g y -ℝ g x) (g' x *ℝ (pr1 y -ℝ pr1 x)))
+ by triangle-inequality-abs-ℝ _ _
+ ≤ ( real-ℚ⁺ ε₁ *ℝ dist-ℝ (pr1 x) (pr1 y)) +ℝ
+ ( real-ℚ⁺ ε₂ *ℝ dist-ℝ (pr1 x) (pr1 y))
+ by
+ preserves-leq-add-ℝ
+ ( is-mod-μ
+ ( ε₁)
+ ( x)
+ ( y)
+ ( weakly-monotonic-neighborhood-Metric-Space
+ ( metric-space-ℝ l1)
+ ( pr1 x)
+ ( pr1 y)
+ ( min-ℚ⁺ (μ ε₁) (ν ε₂))
+ ( μ ε₁)
+ ( leq-left-min-ℚ⁺ _ _)
+ ( Nxy)))
+ ( is-mod-ν
+ ( ε₂)
+ ( x)
+ ( y)
+ ( weakly-monotonic-neighborhood-Metric-Space
+ ( metric-space-ℝ l1)
+ ( pr1 x)
+ ( pr1 y)
+ ( min-ℚ⁺ (μ ε₁) (ν ε₂))
+ ( ν ε₂)
+ ( leq-right-min-ℚ⁺ _ _)
+ ( Nxy)))
+ ≤ (real-ℚ⁺ ε₁ +ℝ real-ℚ⁺ ε₂) *ℝ dist-ℝ (pr1 x) (pr1 y)
+ by leq-eq-ℝ (inv (right-distributive-mul-add-ℝ _ _ _))
+ ≤ real-ℚ⁺ (ε₁ +ℚ⁺ ε₂) *ℝ dist-ℝ (pr1 x) (pr1 y)
+ by leq-eq-ℝ (ap-mul-ℝ (add-real-ℚ _ _) refl)
+ ≤ real-ℚ⁺ ε *ℝ dist-ℝ (pr1 x) (pr1 y)
+ by leq-eq-ℝ (ap-mul-ℝ (ap real-ℚ⁺ ε₁+ε₂=ε) refl)))
+```
+
+### The derivative of `cf` is `cf'`
+
+```agda
+module _
+ {l1 l2 l3 : Level}
+ ([a,b] : proper-closed-interval-ℝ l1 l1)
+ (f : type-proper-closed-interval-ℝ l1 [a,b] → ℝ l2)
+ (f' : type-proper-closed-interval-ℝ l1 [a,b] → ℝ (l1 ⊔ l2))
+ (is-derivative-f-f' :
+ is-derivative-real-function-proper-closed-interval-ℝ [a,b] f f')
+ (c : ℝ l3)
+ where
+
+ abstract
+ is-derivative-scalar-mul-real-function-proper-closed-interval-ℝ :
+ is-derivative-real-function-proper-closed-interval-ℝ
+ ( [a,b])
+ ( λ x → c *ℝ f x)
+ ( λ x → c *ℝ f' x)
+ is-derivative-scalar-mul-real-function-proper-closed-interval-ℝ =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( is-derivative-prop-real-function-proper-closed-interval-ℝ
+ ( [a,b])
+ ( λ x → c *ℝ f x)
+ ( λ x → c *ℝ f' x))
+ open inequality-reasoning-Large-Poset ℝ-Large-Poset
+ in do
+ (μ , is-mod-μ) ← is-derivative-f-f'
+ (q , |c|Imports
```agda
+open import elementary-number-theory.natural-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.function-types
open import foundation.propositions
open import foundation.subtypes
open import foundation.universe-levels
@@ -15,7 +19,9 @@ open import lists.sequences
open import metric-spaces.accumulation-points-subsets-located-metric-spaces
+open import real-numbers.apartness-real-numbers
open import real-numbers.dedekind-real-numbers
+open import real-numbers.limits-sequences-real-numbers
open import real-numbers.located-metric-space-of-real-numbers
open import real-numbers.subsets-real-numbers
```
@@ -49,6 +55,66 @@ module _
is-accumulation-point-subset-ℝ x =
type-Prop (is-accumulation-point-prop-subset-ℝ x)
+ is-sequential-accumulation-point-subset-ℝ : ℝ l2 → UU (l1 ⊔ lsuc l2)
+ is-sequential-accumulation-point-subset-ℝ =
+ is-sequential-accumulation-point-subset-Located-Metric-Space
+ ( located-metric-space-ℝ l2)
+ ( S)
+
+ is-sequential-accumulation-point-is-accumulation-point-subset-ℝ :
+ (x : ℝ l2) → is-accumulation-point-subset-ℝ x →
+ is-sequential-accumulation-point-subset-ℝ x
+ is-sequential-accumulation-point-is-accumulation-point-subset-ℝ =
+ is-sequential-accumulation-point-is-accumulation-point-subset-Located-Metric-Space
+ ( located-metric-space-ℝ l2)
+ ( S)
+
+ is-sequence-accumulating-to-point-prop-subset-ℝ :
+ ℝ l2 → subtype l2 (sequence (type-subtype S))
+ is-sequence-accumulating-to-point-prop-subset-ℝ =
+ is-sequence-accumulating-to-point-prop-subset-Located-Metric-Space
+ ( located-metric-space-ℝ l2)
+ ( S)
+
+ is-sequence-accumulating-to-point-subset-ℝ :
+ ℝ l2 → sequence (type-subtype S) → UU l2
+ is-sequence-accumulating-to-point-subset-ℝ x =
+ is-in-subtype (is-sequence-accumulating-to-point-prop-subset-ℝ x)
+
+ sequence-accumulating-to-point-subset-ℝ : ℝ l2 → UU (l1 ⊔ lsuc l2)
+ sequence-accumulating-to-point-subset-ℝ x =
+ type-subtype (is-sequence-accumulating-to-point-prop-subset-ℝ x)
+
accumulation-point-subset-ℝ : UU (l1 ⊔ lsuc l2)
accumulation-point-subset-ℝ = type-subtype is-accumulation-point-prop-subset-ℝ
```
+
+## Properties
+
+### Properties of a sequence accumulating to a point
+
+```agda
+module _
+ {l1 l2 : Level}
+ (S : subset-ℝ l1 l2)
+ (x : ℝ l2)
+ (y : sequence-accumulating-to-point-subset-ℝ S x)
+ where
+
+ map-sequence-accumulating-to-point-subset-ℝ : sequence (type-subtype S)
+ map-sequence-accumulating-to-point-subset-ℝ = pr1 y
+
+ real-sequence-accumulating-to-point-subset-ℝ : sequence (ℝ l2)
+ real-sequence-accumulating-to-point-subset-ℝ = pr1 ∘ pr1 y
+
+ abstract
+ apart-sequence-accumulating-to-point-subset-ℝ :
+ (n : ℕ) → apart-ℝ (real-sequence-accumulating-to-point-subset-ℝ n) x
+ apart-sequence-accumulating-to-point-subset-ℝ n =
+ apart-apart-located-metric-space-ℝ _ _ (pr1 (pr2 y) n)
+
+ is-limit-sequence-accumulating-to-point-subset-ℝ :
+ is-limit-sequence-ℝ real-sequence-accumulating-to-point-subset-ℝ x
+ is-limit-sequence-accumulating-to-point-subset-ℝ =
+ pr2 (pr2 y)
+```
diff --git a/src/real-numbers/distance-real-numbers.lagda.md b/src/real-numbers/distance-real-numbers.lagda.md
index 8b9f67f22b..91f5380524 100644
--- a/src/real-numbers/distance-real-numbers.lagda.md
+++ b/src/real-numbers/distance-real-numbers.lagda.md
@@ -13,6 +13,7 @@ open import elementary-number-theory.additive-group-of-rational-numbers
open import elementary-number-theory.difference-rational-numbers
open import elementary-number-theory.positive-rational-numbers
+open import foundation.action-on-identifications-binary-functions
open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.identity-types
@@ -54,6 +55,11 @@ they are apart. It is the
```agda
dist-ℝ : {l1 l2 : Level} → ℝ l1 → ℝ l2 → ℝ (l1 ⊔ l2)
dist-ℝ x y = abs-ℝ (x -ℝ y)
+
+ap-dist-ℝ :
+ {l1 l2 : Level} {x x' : ℝ l1} → x = x' → {y y' : ℝ l2} → y = y' →
+ dist-ℝ x y = dist-ℝ x' y'
+ap-dist-ℝ = ap-binary dist-ℝ
```
### The distance function is commutative
@@ -359,3 +365,17 @@ abstract
( preserves-dist-right-sim-ℝ y~y')
( preserves-dist-left-sim-ℝ x~x')
```
+
+### The distance from a real number to itself is 0
+
+```agda
+abstract
+ diagonal-dist-ℝ : {l : Level} (x : ℝ l) → sim-ℝ (dist-ℝ x x) zero-ℝ
+ diagonal-dist-ℝ x =
+ similarity-reasoning-ℝ
+ dist-ℝ x x
+ ~ℝ abs-ℝ zero-ℝ
+ by preserves-sim-abs-ℝ (right-inverse-law-add-ℝ x)
+ ~ℝ zero-ℝ
+ by sim-eq-ℝ abs-zero-ℝ
+```
diff --git a/src/real-numbers/limits-sequences-real-numbers.lagda.md b/src/real-numbers/limits-sequences-real-numbers.lagda.md
index 4636b60dcd..2aaf9e43a0 100644
--- a/src/real-numbers/limits-sequences-real-numbers.lagda.md
+++ b/src/real-numbers/limits-sequences-real-numbers.lagda.md
@@ -10,6 +10,7 @@ module real-numbers.limits-sequences-real-numbers where
```agda
open import foundation.dependent-pair-types
+open import foundation.identity-types
open import foundation.propositional-truncations
open import foundation.propositions
open import foundation.universe-levels
@@ -47,6 +48,23 @@ is-limit-sequence-ℝ {l} = is-limit-sequence-Metric-Space (metric-space-ℝ l)
## Properties
+### Any two limits of a sequence of real numbers are equal
+
+```agda
+module _
+ {l : Level}
+ (σ : sequence (ℝ l))
+ where
+
+ abstract
+ eq-is-limit-sequence-ℝ :
+ (a b : ℝ l) → is-limit-sequence-ℝ σ a → is-limit-sequence-ℝ σ b → a = b
+ eq-is-limit-sequence-ℝ =
+ eq-limit-sequence-Metric-Space
+ ( metric-space-ℝ l)
+ ( σ)
+```
+
### If two sequences have a limit, their sum has a limit equal to the sum of the limits
```agda
diff --git a/src/real-numbers/nonnegative-real-numbers.lagda.md b/src/real-numbers/nonnegative-real-numbers.lagda.md
index fe4444a2b0..77ca8002be 100644
--- a/src/real-numbers/nonnegative-real-numbers.lagda.md
+++ b/src/real-numbers/nonnegative-real-numbers.lagda.md
@@ -32,6 +32,10 @@ open import foundation.subtypes
open import foundation.transport-along-identifications
open import foundation.universe-levels
+open import logic.functoriality-existential-quantification
+
+open import metric-spaces.metric-spaces
+
open import real-numbers.addition-real-numbers
open import real-numbers.dedekind-real-numbers
open import real-numbers.difference-real-numbers
@@ -215,6 +219,19 @@ abstract
( is-inhabited-upper-cut-ℝ⁰⁺ x)
```
+### Every nonnegative real number is less than some positive rational number
+
+```agda
+abstract
+ exists-ℚ⁺-le-ℝ⁰⁺ :
+ {l : Level} → (x : ℝ⁰⁺ l) →
+ exists ℚ⁺ (λ q → le-prop-ℝ (real-ℝ⁰⁺ x) (real-ℚ⁺ q))
+ exists-ℚ⁺-le-ℝ⁰⁺ x =
+ map-tot-exists
+ ( λ _ → le-real-is-in-upper-cut-ℚ (real-ℝ⁰⁺ x))
+ ( exists-ℚ⁺-in-upper-cut-ℝ⁰⁺ x)
+```
+
### Nonpositive rational numbers are not less than or equal to nonnegative real numbers
```agda