diff --git a/src/elementary-number-theory.lagda.md b/src/elementary-number-theory.lagda.md
index 89aa81501e..662f2615dc 100644
--- a/src/elementary-number-theory.lagda.md
+++ b/src/elementary-number-theory.lagda.md
@@ -9,6 +9,7 @@
```agda
module elementary-number-theory where
+open import elementary-number-theory.absolute-value-closed-intervals-rational-numbers public
open import elementary-number-theory.absolute-value-integers public
open import elementary-number-theory.absolute-value-rational-numbers public
open import elementary-number-theory.ackermann-function public
@@ -115,6 +116,7 @@ open import elementary-number-theory.kolakoski-sequence public
open import elementary-number-theory.legendre-symbol public
open import elementary-number-theory.lower-bounds-natural-numbers public
open import elementary-number-theory.maximum-natural-numbers public
+open import elementary-number-theory.maximum-nonnegative-rational-numbers public
open import elementary-number-theory.maximum-positive-rational-numbers public
open import elementary-number-theory.maximum-rational-numbers public
open import elementary-number-theory.maximum-standard-finite-types public
diff --git a/src/elementary-number-theory/absolute-value-closed-intervals-rational-numbers.lagda.md b/src/elementary-number-theory/absolute-value-closed-intervals-rational-numbers.lagda.md
new file mode 100644
index 0000000000..21651d39f0
--- /dev/null
+++ b/src/elementary-number-theory/absolute-value-closed-intervals-rational-numbers.lagda.md
@@ -0,0 +1,88 @@
+# Absolute value on closed intervals in the rational numbers
+
+```agda
+module elementary-number-theory.absolute-value-closed-intervals-rational-numbers where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.absolute-value-rational-numbers
+open import elementary-number-theory.closed-intervals-rational-numbers
+open import elementary-number-theory.inequality-nonnegative-rational-numbers
+open import elementary-number-theory.inequality-rational-numbers
+open import elementary-number-theory.maximum-nonnegative-rational-numbers
+open import elementary-number-theory.maximum-rational-numbers
+open import elementary-number-theory.nonnegative-rational-numbers
+open import elementary-number-theory.rational-numbers
+
+open import foundation.binary-transport
+open import foundation.coproduct-types
+open import foundation.dependent-pair-types
+open import foundation.identity-types
+```
+
+
+
+## Idea
+
+The
+[absolute value](elementary-number-theory.absolute-value-rational-numbers.md) of
+an element of a
+[closed interval](elementary-number-theory.closed-intervals-rational-numbers.md)
+`[a, b]` of [rational numbers](elementary-number-theory.rational-numbers.md) is
+bounded by `max(|a|, |b|)`.
+
+## Definition
+
+```agda
+max-abs-closed-interval-ℚ : closed-interval-ℚ → ℚ⁰⁺
+max-abs-closed-interval-ℚ ((p , q) , p≤q) = max-ℚ⁰⁺ (abs-ℚ p) (abs-ℚ q)
+
+rational-max-abs-closed-interval-ℚ : closed-interval-ℚ → ℚ
+rational-max-abs-closed-interval-ℚ [p,q] =
+ rational-ℚ⁰⁺ (max-abs-closed-interval-ℚ [p,q])
+```
+
+## Properties
+
+### If `r ∈ [p,q]`, then `|r| ≤ max(|p|, |q|)`
+
+```agda
+abstract
+ leq-max-abs-is-in-closed-interval-ℚ :
+ ([p,q] : closed-interval-ℚ) (r : ℚ) → is-in-closed-interval-ℚ [p,q] r →
+ leq-ℚ⁰⁺ (abs-ℚ r) (max-abs-closed-interval-ℚ [p,q])
+ leq-max-abs-is-in-closed-interval-ℚ ((p , q) , p≤q) r (p≤r , r≤q) =
+ rec-coproduct
+ ( λ r≤0 →
+ transitive-leq-ℚ
+ ( rational-abs-ℚ r)
+ ( rational-abs-ℚ p)
+ ( max-ℚ (rational-abs-ℚ p) (rational-abs-ℚ q))
+ ( leq-left-max-ℚ _ _)
+ ( leq-abs-leq-leq-neg-ℚ
+ ( r)
+ ( rational-abs-ℚ p)
+ ( transitive-leq-ℚ r zero-ℚ (rational-abs-ℚ p)
+ ( leq-zero-rational-ℚ⁰⁺ (abs-ℚ p))
+ ( r≤0))
+ ( transitive-leq-ℚ (neg-ℚ r) (neg-ℚ p) (rational-abs-ℚ p)
+ ( neg-leq-abs-ℚ p)
+ ( neg-leq-ℚ _ _ p≤r))))
+ ( λ 0≤r →
+ transitive-leq-ℚ
+ ( rational-abs-ℚ r)
+ ( rational-abs-ℚ q)
+ ( max-ℚ (rational-abs-ℚ p) (rational-abs-ℚ q))
+ ( leq-right-max-ℚ _ _)
+ ( binary-tr
+ ( leq-ℚ)
+ ( inv (rational-abs-zero-leq-ℚ r 0≤r))
+ ( inv
+ ( rational-abs-zero-leq-ℚ
+ ( q)
+ ( transitive-leq-ℚ zero-ℚ r q r≤q 0≤r)))
+ ( r≤q)))
+ ( linear-leq-ℚ r zero-ℚ)
+```
diff --git a/src/elementary-number-theory/absolute-value-rational-numbers.lagda.md b/src/elementary-number-theory/absolute-value-rational-numbers.lagda.md
index bb3cf3e048..93b5e7586e 100644
--- a/src/elementary-number-theory/absolute-value-rational-numbers.lagda.md
+++ b/src/elementary-number-theory/absolute-value-rational-numbers.lagda.md
@@ -11,12 +11,14 @@ module elementary-number-theory.absolute-value-rational-numbers where
```agda
open import elementary-number-theory.addition-nonnegative-rational-numbers
open import elementary-number-theory.addition-rational-numbers
+open import elementary-number-theory.difference-rational-numbers
open import elementary-number-theory.inequality-nonnegative-rational-numbers
open import elementary-number-theory.inequality-rational-numbers
open import elementary-number-theory.maximum-rational-numbers
open import elementary-number-theory.multiplication-nonnegative-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
@@ -127,6 +129,16 @@ opaque
( q≤0))
```
+### The absolute value of a positive rational number is the number itself
+
+```agda
+abstract
+ rational-abs-rational-ℚ⁺ :
+ (q : ℚ⁺) → rational-abs-ℚ (rational-ℚ⁺ q) = rational-ℚ⁺ q
+ rational-abs-rational-ℚ⁺ q =
+ ap rational-ℚ⁰⁺ (abs-rational-ℚ⁰⁺ (nonnegative-ℚ⁺ q))
+```
+
### The absolute value of the negation of `q` is the absolute value of `q`
```agda
@@ -211,6 +223,14 @@ abstract
{ rational-abs-ℚ q}
( neg-leq-abs-ℚ p)
( neg-leq-abs-ℚ q)))
+
+ triangle-inequality-abs-diff-ℚ :
+ (p q : ℚ) → leq-ℚ⁰⁺ (abs-ℚ (p -ℚ q)) (abs-ℚ p +ℚ⁰⁺ abs-ℚ q)
+ triangle-inequality-abs-diff-ℚ p q =
+ tr
+ ( leq-ℚ⁰⁺ (abs-ℚ (p -ℚ q)))
+ ( ap-binary add-ℚ⁰⁺ (refl {x = abs-ℚ p}) (abs-neg-ℚ q))
+ ( triangle-inequality-abs-ℚ p (neg-ℚ q))
```
### `|ab| = |a||b|`
@@ -288,4 +308,9 @@ opaque
is-nonnegative-leq-zero-ℚ (neg-ℚ p) (neg-leq-ℚ p zero-ℚ p≤0)))
= rational-abs-ℚ p *ℚ rational-abs-ℚ q
by ap (_*ℚ rational-abs-ℚ q) (inv (rational-abs-leq-zero-ℚ p p≤0)))
+
+abstract
+ rational-abs-mul-ℚ :
+ (p q : ℚ) → rational-abs-ℚ (p *ℚ q) = rational-abs-ℚ p *ℚ rational-abs-ℚ q
+ rational-abs-mul-ℚ p q = ap rational-ℚ⁰⁺ (abs-mul-ℚ p q)
```
diff --git a/src/elementary-number-theory/addition-rational-numbers.lagda.md b/src/elementary-number-theory/addition-rational-numbers.lagda.md
index a36bedf713..8d887c25a6 100644
--- a/src/elementary-number-theory/addition-rational-numbers.lagda.md
+++ b/src/elementary-number-theory/addition-rational-numbers.lagda.md
@@ -11,6 +11,7 @@ module elementary-number-theory.addition-rational-numbers where
```agda
open import elementary-number-theory.addition-integer-fractions
open import elementary-number-theory.addition-integers
+open import elementary-number-theory.addition-natural-numbers
open import elementary-number-theory.integer-fractions
open import elementary-number-theory.integers
open import elementary-number-theory.natural-numbers
@@ -33,9 +34,9 @@ open import foundation.sections
## Idea
We introduce
-{{#concept "addition" WDID=Q32043 WD="addition" Disambiguation="rational numbers" Agda=add-ℚ}}
-on the [rational numbers](elementary-number-theory.rational-numbers.md) and
-derive its basic properties.
+{{#concept "addition" Disambiguation="rational numbers" Agda=add-ℚ}} on the
+[rational numbers](elementary-number-theory.rational-numbers.md) and derive its
+basic properties.
## Definition
@@ -304,6 +305,15 @@ abstract
by is-retraction-rational-fraction-ℚ (rational-ℤ (x +ℤ y))
```
+### The inclusion of natural numbers preserves addition
+
+```agda
+add-rational-ℕ :
+ (m n : ℕ) → rational-ℕ m +ℚ rational-ℕ n = rational-ℕ (m +ℕ n)
+add-rational-ℕ m n =
+ add-rational-ℤ _ _ ∙ ap rational-ℤ (add-int-ℕ m n)
+```
+
### The rational successor of an integer is the successor of the integer
```agda
diff --git a/src/elementary-number-theory/archimedean-property-rational-numbers.lagda.md b/src/elementary-number-theory/archimedean-property-rational-numbers.lagda.md
index dc4fd7b441..59ab924007 100644
--- a/src/elementary-number-theory/archimedean-property-rational-numbers.lagda.md
+++ b/src/elementary-number-theory/archimedean-property-rational-numbers.lagda.md
@@ -25,6 +25,9 @@ open import foundation.dependent-pair-types
open import foundation.existential-quantification
open import foundation.identity-types
open import foundation.propositional-truncations
+open import foundation.transport-along-identifications
+
+open import logic.functoriality-existential-quantification
```
@@ -75,3 +78,17 @@ abstract
archimedean-property-ℚ x y pos-x =
unit-trunc-Prop (bound-archimedean-property-ℚ x y pos-x)
```
+
+## Corollaries
+
+### For any rational `q`, there exists a natural number `n` with `q < n`
+
+```agda
+abstract
+ exists-greater-natural-ℚ :
+ (q : ℚ) → exists ℕ (λ n → le-ℚ-Prop q (rational-ℕ n))
+ exists-greater-natural-ℚ q =
+ map-tot-exists
+ ( λ _ → tr (le-ℚ q) (right-unit-law-mul-ℚ _))
+ ( archimedean-property-ℚ one-ℚ q _)
+```
diff --git a/src/elementary-number-theory/closed-intervals-rational-numbers.lagda.md b/src/elementary-number-theory/closed-intervals-rational-numbers.lagda.md
index 1dfb7131df..d2f510c051 100644
--- a/src/elementary-number-theory/closed-intervals-rational-numbers.lagda.md
+++ b/src/elementary-number-theory/closed-intervals-rational-numbers.lagda.md
@@ -8,6 +8,7 @@ module elementary-number-theory.closed-intervals-rational-numbers where
```agda
open import elementary-number-theory.decidable-total-order-rational-numbers
+open import elementary-number-theory.distance-rational-numbers
open import elementary-number-theory.inequality-rational-numbers
open import elementary-number-theory.maximum-rational-numbers
open import elementary-number-theory.minimum-rational-numbers
@@ -83,9 +84,17 @@ is-below-prop-closed-interval-ℚ :
closed-interval-ℚ → subtype lzero ℚ
is-below-prop-closed-interval-ℚ ((a , _) , _) b = le-ℚ-Prop b a
+is-below-closed-interval-ℚ : closed-interval-ℚ → ℚ → UU lzero
+is-below-closed-interval-ℚ [a,b] q =
+ type-Prop (is-below-prop-closed-interval-ℚ [a,b] q)
+
is-above-prop-closed-interval-ℚ :
closed-interval-ℚ → subtype lzero ℚ
is-above-prop-closed-interval-ℚ ((_ , a) , _) b = le-ℚ-Prop a b
+
+is-above-closed-interval-ℚ : closed-interval-ℚ → ℚ → UU lzero
+is-above-closed-interval-ℚ [a,b] q =
+ type-Prop (is-above-prop-closed-interval-ℚ [a,b] q)
```
### The width of a closed interval
@@ -177,3 +186,26 @@ upper-bound-is-in-closed-interval-ℚ :
upper-bound-is-in-closed-interval-ℚ =
upper-bound-is-in-closed-interval-Poset ℚ-Poset
```
+
+### The distance between the lower and upper bounds of a closed interval is its width
+
+```agda
+abstract
+ eq-width-dist-lower-upper-bounds-closed-interval-ℚ :
+ ([a,b] : closed-interval-ℚ) →
+ rational-dist-ℚ
+ ( lower-bound-closed-interval-ℚ [a,b])
+ ( upper-bound-closed-interval-ℚ [a,b]) =
+ width-closed-interval-ℚ [a,b]
+ eq-width-dist-lower-upper-bounds-closed-interval-ℚ ((a , b) , a≤b) =
+ eq-dist-diff-leq-ℚ a b a≤b
+
+ eq-width-dist-upper-lower-bounds-closed-interval-ℚ :
+ ([a,b] : closed-interval-ℚ) →
+ rational-dist-ℚ
+ ( upper-bound-closed-interval-ℚ [a,b])
+ ( lower-bound-closed-interval-ℚ [a,b]) =
+ width-closed-interval-ℚ [a,b]
+ eq-width-dist-upper-lower-bounds-closed-interval-ℚ ((a , b) , a≤b) =
+ eq-dist-diff-leq-ℚ' b a a≤b
+```
diff --git a/src/elementary-number-theory/distance-rational-numbers.lagda.md b/src/elementary-number-theory/distance-rational-numbers.lagda.md
index 8d41ac3325..8576576ca6 100644
--- a/src/elementary-number-theory/distance-rational-numbers.lagda.md
+++ b/src/elementary-number-theory/distance-rational-numbers.lagda.md
@@ -64,6 +64,18 @@ abstract
inv (abs-neg-ℚ _) ∙ ap abs-ℚ (distributive-neg-diff-ℚ _ _)
```
+### A rational number's distance from itself is zero
+
+```agda
+abstract
+ dist-self-ℚ : (q : ℚ) → dist-ℚ q q = zero-ℚ⁰⁺
+ dist-self-ℚ q =
+ ap abs-ℚ (right-inverse-law-add-ℚ q) ∙ abs-rational-ℚ⁰⁺ zero-ℚ⁰⁺
+
+ rational-dist-self-ℚ : (q : ℚ) → rational-dist-ℚ q q = zero-ℚ
+ rational-dist-self-ℚ q = ap rational-ℚ⁰⁺ (dist-self-ℚ q)
+```
+
### The differences of the arguments are less than or equal to their distance
```agda
@@ -225,6 +237,11 @@ abstract
( q -ℚ p)
( backward-implication (iff-translate-diff-leq-zero-ℚ p q) p≤q)
+ eq-dist-diff-leq-ℚ' : (p q : ℚ) → leq-ℚ q p → rational-dist-ℚ p q = p -ℚ q
+ eq-dist-diff-leq-ℚ' p q q≤p =
+ ap rational-ℚ⁰⁺ (commutative-dist-ℚ _ _) ∙
+ eq-dist-diff-leq-ℚ q p q≤p
+
eq-dist-diff-max-min-ℚ :
(p q : ℚ) → rational-dist-ℚ p q = max-ℚ p q -ℚ min-ℚ p q
eq-dist-diff-max-min-ℚ p q =
diff --git a/src/elementary-number-theory/inequality-integers.lagda.md b/src/elementary-number-theory/inequality-integers.lagda.md
index ebb650550e..5ebe72f523 100644
--- a/src/elementary-number-theory/inequality-integers.lagda.md
+++ b/src/elementary-number-theory/inequality-integers.lagda.md
@@ -215,20 +215,37 @@ reflects-leq-right-add-ℤ z x y =
is-nonnegative-eq-ℤ (left-translation-diff-ℤ y x z)
```
-### The inclusion of ℕ into ℤ preserves inequality
+### The inclusion of ℕ into ℤ preserves and reflects inequality
```agda
-leq-int-ℕ : (x y : ℕ) → leq-ℕ x y → leq-ℤ (int-ℕ x) (int-ℕ y)
-leq-int-ℕ zero-ℕ y H =
- tr
- ( is-nonnegative-ℤ)
- ( inv (right-unit-law-add-ℤ (int-ℕ y)))
- ( is-nonnegative-int-ℕ y)
-leq-int-ℕ (succ-ℕ x) (succ-ℕ y) H = tr (is-nonnegative-ℤ)
- ( inv (diff-succ-ℤ (int-ℕ y) (int-ℕ x)) ∙
- ( ap (_-ℤ (succ-ℤ (int-ℕ x))) (succ-int-ℕ y) ∙
- ap ((int-ℕ (succ-ℕ y)) -ℤ_) (succ-int-ℕ x)))
- ( leq-int-ℕ x y H)
+abstract
+ leq-int-ℕ : (x y : ℕ) → leq-ℕ x y → leq-ℤ (int-ℕ x) (int-ℕ y)
+ leq-int-ℕ zero-ℕ y H =
+ tr
+ ( is-nonnegative-ℤ)
+ ( inv (right-unit-law-add-ℤ (int-ℕ y)))
+ ( is-nonnegative-int-ℕ y)
+ leq-int-ℕ (succ-ℕ x) (succ-ℕ y) H =
+ tr
+ ( is-nonnegative-ℤ)
+ ( ( inv (diff-succ-ℤ (int-ℕ y) (int-ℕ x))) ∙
+ ( ap (_-ℤ (succ-ℤ (int-ℕ x))) (succ-int-ℕ y)) ∙
+ ( ap ((int-ℕ (succ-ℕ y)) -ℤ_) (succ-int-ℕ x)))
+ ( leq-int-ℕ x y H)
+
+ reflects-leq-int-ℕ : (x y : ℕ) → leq-ℤ (int-ℕ x) (int-ℕ y) → leq-ℕ x y
+ reflects-leq-int-ℕ zero-ℕ y x≤y = star
+ reflects-leq-int-ℕ (succ-ℕ x) (succ-ℕ y) x≤y =
+ reflects-leq-int-ℕ x y
+ ( tr
+ ( is-nonnegative-ℤ)
+ ( ap-diff-ℤ (inv (succ-int-ℕ y)) (inv (succ-int-ℕ x)) ∙
+ diff-succ-ℤ (int-ℕ y) (int-ℕ x))
+ ( x≤y))
+
+ iff-leq-int-ℕ : (x y : ℕ) → leq-ℕ x y ↔ leq-ℤ (int-ℕ x) (int-ℕ y)
+ pr1 (iff-leq-int-ℕ x y) = leq-int-ℕ x y
+ pr2 (iff-leq-int-ℕ x y) = reflects-leq-int-ℕ x y
```
### An integer `x` is nonnegative if and only if `0 ≤ x`
diff --git a/src/elementary-number-theory/inequality-nonnegative-rational-numbers.lagda.md b/src/elementary-number-theory/inequality-nonnegative-rational-numbers.lagda.md
index e6497b8261..7ec428e6cf 100644
--- a/src/elementary-number-theory/inequality-nonnegative-rational-numbers.lagda.md
+++ b/src/elementary-number-theory/inequality-nonnegative-rational-numbers.lagda.md
@@ -7,12 +7,15 @@ module elementary-number-theory.inequality-nonnegative-rational-numbers where
Imports
```agda
+open import elementary-number-theory.decidable-total-order-rational-numbers
open import elementary-number-theory.inequality-rational-numbers
open import elementary-number-theory.nonnegative-rational-numbers
open import foundation.dependent-pair-types
open import foundation.propositions
open import foundation.universe-levels
+
+open import order-theory.decidable-total-orders
```
@@ -36,3 +39,15 @@ leq-prop-ℚ⁰⁺ (p , _) (q , _) = leq-ℚ-Prop p q
leq-ℚ⁰⁺ : ℚ⁰⁺ → ℚ⁰⁺ → UU lzero
leq-ℚ⁰⁺ (p , _) (q , _) = leq-ℚ p q
```
+
+## Properties
+
+### The decidable total order of nonnegative rational numbers
+
+```agda
+decidable-total-order-ℚ⁰⁺ : Decidable-Total-Order lzero lzero
+decidable-total-order-ℚ⁰⁺ =
+ decidable-total-order-Decidable-Total-Suborder
+ ℚ-Decidable-Total-Order
+ is-nonnegative-prop-ℚ
+```
diff --git a/src/elementary-number-theory/inequality-rational-numbers.lagda.md b/src/elementary-number-theory/inequality-rational-numbers.lagda.md
index 91c19d01ae..39552d3082 100644
--- a/src/elementary-number-theory/inequality-rational-numbers.lagda.md
+++ b/src/elementary-number-theory/inequality-rational-numbers.lagda.md
@@ -17,9 +17,11 @@ open import elementary-number-theory.difference-integers
open import elementary-number-theory.difference-rational-numbers
open import elementary-number-theory.inequality-integer-fractions
open import elementary-number-theory.inequality-integers
+open import elementary-number-theory.inequality-natural-numbers
open import elementary-number-theory.integer-fractions
open import elementary-number-theory.integers
open import elementary-number-theory.multiplication-integers
+open import elementary-number-theory.natural-numbers
open import elementary-number-theory.nonnegative-integers
open import elementary-number-theory.nonpositive-integers
open import elementary-number-theory.positive-and-negative-integers
@@ -28,6 +30,7 @@ open import elementary-number-theory.rational-numbers
open import elementary-number-theory.reduced-integer-fractions
open import foundation.action-on-identifications-functions
+open import foundation.binary-transport
open import foundation.cartesian-product-types
open import foundation.conjunction
open import foundation.coproduct-types
@@ -284,6 +287,51 @@ module _
pr2 iff-leq-left-rational-fraction-ℤ = reflects-leq-left-rational-fraction-ℤ
```
+### The canonical map from integers to the rational numbers preserves and reflects inequality
+
+```agda
+opaque
+ unfolding leq-ℚ-Prop
+
+ preserves-leq-rational-ℤ :
+ (x y : ℤ) → leq-ℤ x y → leq-ℚ (rational-ℤ x) (rational-ℤ y)
+ preserves-leq-rational-ℤ x y =
+ binary-tr leq-ℤ
+ ( inv (right-unit-law-mul-ℤ x))
+ ( inv (right-unit-law-mul-ℤ y))
+
+ reflects-leq-rational-ℤ :
+ (x y : ℤ) → leq-ℚ (rational-ℤ x) (rational-ℤ y) → leq-ℤ x y
+ reflects-leq-rational-ℤ x y =
+ binary-tr leq-ℤ
+ ( right-unit-law-mul-ℤ x)
+ ( right-unit-law-mul-ℤ y)
+
+ iff-leq-rational-ℤ :
+ (x y : ℤ) → leq-ℤ x y ↔ leq-ℚ (rational-ℤ x) (rational-ℤ y)
+ pr1 (iff-leq-rational-ℤ x y) = preserves-leq-rational-ℤ x y
+ pr2 (iff-leq-rational-ℤ x y) = reflects-leq-rational-ℤ x y
+```
+
+### The canonical map from natural numbers to the rational numbers preserves and reflects inequality
+
+```agda
+abstract
+ iff-leq-rational-ℕ :
+ (x y : ℕ) → leq-ℕ x y ↔ leq-ℚ (rational-ℕ x) (rational-ℕ y)
+ iff-leq-rational-ℕ x y =
+ iff-leq-rational-ℤ (int-ℕ x) (int-ℕ y) ∘iff
+ iff-leq-int-ℕ x y
+
+ preserves-leq-rational-ℕ :
+ (x y : ℕ) → leq-ℕ x y → leq-ℚ (rational-ℕ x) (rational-ℕ y)
+ preserves-leq-rational-ℕ x y = forward-implication (iff-leq-rational-ℕ x y)
+
+ reflects-leq-rational-ℕ :
+ (x y : ℕ) → leq-ℚ (rational-ℕ x) (rational-ℕ y) → leq-ℕ x y
+ reflects-leq-rational-ℕ x y = backward-implication (iff-leq-rational-ℕ x y)
+```
+
### `x ≤ y` if and only if `0 ≤ y - x`
```agda
diff --git a/src/elementary-number-theory/maximum-nonnegative-rational-numbers.lagda.md b/src/elementary-number-theory/maximum-nonnegative-rational-numbers.lagda.md
new file mode 100644
index 0000000000..1bd6c1e4d2
--- /dev/null
+++ b/src/elementary-number-theory/maximum-nonnegative-rational-numbers.lagda.md
@@ -0,0 +1,87 @@
+# The maximum of nonnegative rational numbers
+
+```agda
+module elementary-number-theory.maximum-nonnegative-rational-numbers where
+```
+
+Imports
+
+```agda
+open import elementary-number-theory.inequality-nonnegative-rational-numbers
+open import elementary-number-theory.inequality-rational-numbers
+open import elementary-number-theory.maximum-rational-numbers
+open import elementary-number-theory.nonnegative-rational-numbers
+open import elementary-number-theory.rational-numbers
+
+open import foundation.dependent-pair-types
+open import foundation.identity-types
+```
+
+
+
+## Idea
+
+The
+{{#concept "maximum" Disambiguation="of two nonnegative rational numbers" Agda=max-ℚ⁰⁺}}
+of two
+[nonnegative rational numbers](elementary-number-theory.nonnegative-rational-numbers.md)
+is the
+[greatest](elementary-number-theory.inequality-nonnegative-rational-numbers.md)
+rational number of the two.
+
+## Definition
+
+```agda
+abstract
+ is-nonnegative-max-ℚ⁰⁺ :
+ (p q : ℚ⁰⁺) → is-nonnegative-ℚ (max-ℚ (rational-ℚ⁰⁺ p) (rational-ℚ⁰⁺ q))
+ is-nonnegative-max-ℚ⁰⁺ (p , is-nonneg-p) (q , is-nonneg-q) =
+ is-nonnegative-leq-zero-ℚ _
+ ( transitive-leq-ℚ
+ ( zero-ℚ)
+ ( p)
+ ( max-ℚ p q)
+ ( leq-left-max-ℚ p q)
+ ( leq-zero-is-nonnegative-ℚ p is-nonneg-p))
+
+max-ℚ⁰⁺ : ℚ⁰⁺ → ℚ⁰⁺ → ℚ⁰⁺
+max-ℚ⁰⁺ p⁰⁺@(p , _) q⁰⁺@(q , _) = (max-ℚ p q , is-nonnegative-max-ℚ⁰⁺ p⁰⁺ q⁰⁺)
+```
+
+## Properties
+
+### The binary maximum is associative
+
+```agda
+abstract
+ associative-max-ℚ⁰⁺ :
+ (x y z : ℚ⁰⁺) → max-ℚ⁰⁺ (max-ℚ⁰⁺ x y) z = max-ℚ⁰⁺ x (max-ℚ⁰⁺ y z)
+ associative-max-ℚ⁰⁺ (x , _) (y , _) (z , _) = eq-ℚ⁰⁺ (associative-max-ℚ x y z)
+```
+
+### The binary maximum is commutative
+
+```agda
+abstract
+ commutative-max-ℚ⁰⁺ : (x y : ℚ⁰⁺) → max-ℚ⁰⁺ x y = max-ℚ⁰⁺ y x
+ commutative-max-ℚ⁰⁺ (x , _) (y , _) = eq-ℚ⁰⁺ (commutative-max-ℚ x y)
+```
+
+### The binary maximum is idempotent
+
+```agda
+abstract
+ idempotent-max-ℚ⁰⁺ : (x : ℚ⁰⁺) → max-ℚ⁰⁺ x x = x
+ idempotent-max-ℚ⁰⁺ (x , _) = eq-ℚ⁰⁺ (idempotent-max-ℚ x)
+```
+
+### The binary maximum is an upper bound
+
+```agda
+abstract
+ leq-left-max-ℚ⁰⁺ : (x y : ℚ⁰⁺) → leq-ℚ⁰⁺ x (max-ℚ⁰⁺ x y)
+ leq-left-max-ℚ⁰⁺ _ _ = leq-left-max-ℚ _ _
+
+ leq-right-max-ℚ⁰⁺ : (x y : ℚ⁰⁺) → leq-ℚ⁰⁺ y (max-ℚ⁰⁺ x y)
+ leq-right-max-ℚ⁰⁺ _ _ = leq-right-max-ℚ _ _
+```
diff --git a/src/elementary-number-theory/multiplication-closed-intervals-rational-numbers.lagda.md b/src/elementary-number-theory/multiplication-closed-intervals-rational-numbers.lagda.md
index 0dac1bcf1e..761616c9dc 100644
--- a/src/elementary-number-theory/multiplication-closed-intervals-rational-numbers.lagda.md
+++ b/src/elementary-number-theory/multiplication-closed-intervals-rational-numbers.lagda.md
@@ -7,16 +7,23 @@ module elementary-number-theory.multiplication-closed-intervals-rational-numbers
Imports
```agda
+open import elementary-number-theory.absolute-value-closed-intervals-rational-numbers
+open import elementary-number-theory.absolute-value-rational-numbers
+open import elementary-number-theory.addition-closed-intervals-rational-numbers
+open import elementary-number-theory.addition-nonnegative-rational-numbers
open import elementary-number-theory.addition-rational-numbers
open import elementary-number-theory.additive-group-of-rational-numbers
open import elementary-number-theory.closed-interval-preserving-maps-rational-numbers
open import elementary-number-theory.closed-intervals-rational-numbers
open import elementary-number-theory.decidable-total-order-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.maximum-nonnegative-rational-numbers
open import elementary-number-theory.maximum-rational-numbers
open import elementary-number-theory.minima-and-maxima-rational-numbers
open import elementary-number-theory.minimum-rational-numbers
+open import elementary-number-theory.multiplication-nonnegative-rational-numbers
open import elementary-number-theory.multiplication-positive-rational-numbers
open import elementary-number-theory.multiplication-rational-numbers
open import elementary-number-theory.multiplicative-group-of-positive-rational-numbers
@@ -24,6 +31,7 @@ open import elementary-number-theory.multiplicative-group-of-rational-numbers
open import elementary-number-theory.multiplicative-monoid-of-rational-numbers
open import elementary-number-theory.negation-closed-intervals-rational-numbers
open import elementary-number-theory.negative-rational-numbers
+open import elementary-number-theory.nonnegative-rational-numbers
open import elementary-number-theory.poset-closed-intervals-rational-numbers
open import elementary-number-theory.positive-and-negative-rational-numbers
open import elementary-number-theory.positive-rational-numbers
@@ -31,6 +39,7 @@ open import elementary-number-theory.proper-closed-intervals-rational-numbers
open import elementary-number-theory.rational-numbers
open import elementary-number-theory.strict-inequality-rational-numbers
+open import foundation.action-on-identifications-binary-functions
open import foundation.action-on-identifications-functions
open import foundation.binary-transport
open import foundation.cartesian-product-types
@@ -50,12 +59,14 @@ open import foundation.transport-along-identifications
open import foundation.universe-levels
open import group-theory.commutative-monoids
+open import group-theory.groups
open import group-theory.minkowski-multiplication-commutative-monoids
open import group-theory.monoids
open import group-theory.semigroups
open import order-theory.closed-intervals-total-orders
open import order-theory.decidable-total-orders
+open import order-theory.posets
open import order-theory.total-orders
```
@@ -864,3 +875,374 @@ abstract
( neg-closed-interval-ℚ)
( commutative-mul-closed-interval-ℚ [c,d] [a,b])
```
+
+### Bounds on the width of the product of intervals
+
+We can bound the width of the interval $[a,b] ∙ [c,d]$:
+
+$$
+\max(a · c, a · d, b · c, b · d) - \min(a · c, a · d, b · c, b · d) ≤
+ (b - a) ·
+ \max(\left\lvert c\right\rvert , \left\lvert d\right\rvert ) +
+ (d - c) · \max(\left\lvert a\right\rvert , \left\lvert b\right\rvert )
+$$
+
+```agda
+abstract
+ bound-width-mul-closed-interval-ℚ :
+ ([a,b] [c,d] : closed-interval-ℚ) →
+ leq-ℚ
+ ( width-closed-interval-ℚ (mul-closed-interval-ℚ [a,b] [c,d]))
+ ( ( width-closed-interval-ℚ [a,b] *ℚ
+ rational-max-abs-closed-interval-ℚ [c,d]) +ℚ
+ ( width-closed-interval-ℚ [c,d] *ℚ
+ rational-max-abs-closed-interval-ℚ [a,b]))
+ bound-width-mul-closed-interval-ℚ
+ [a,b]@((a , b) , a≤b) [c,d]@((c , d) , c≤d) =
+ let
+ open inequality-reasoning-Poset ℚ-Poset
+ ⁰⁺ =
+ mul-ℚ⁰⁺
+ ( nonnegative-diff-leq-ℚ a b a≤b)
+ ( max-ℚ⁰⁺ (abs-ℚ c) (abs-ℚ d))
+ = rational-ℚ⁰⁺ ⁰⁺
+ ⁰⁺ =
+ mul-ℚ⁰⁺
+ ( nonnegative-diff-leq-ℚ c d c≤d)
+ ( max-ℚ⁰⁺ (abs-ℚ a) (abs-ℚ b))
+ = rational-ℚ⁰⁺ ⁰⁺
+ under-bound : ℚ → UU lzero
+ under-bound q = leq-ℚ q ( +ℚ )
+ |aq-bq|≤max|c||d| :
+ (q : ℚ) → is-in-closed-interval-ℚ [c,d] q →
+ leq-ℚ (rational-dist-ℚ (a *ℚ q) (b *ℚ q))
+ |aq-bq|≤max|c||d| q q∈[c,d] =
+ chain-of-inequalities
+ rational-dist-ℚ (a *ℚ q) (b *ℚ q)
+ ≤ rational-dist-ℚ a b *ℚ rational-abs-ℚ q
+ by
+ leq-eq-ℚ _ _
+ ( ( ap
+ ( rational-abs-ℚ)
+ ( inv (right-distributive-mul-diff-ℚ _ _ _))) ∙
+ ( rational-abs-mul-ℚ _ _))
+ ≤ rational-dist-ℚ a b *ℚ rational-max-abs-closed-interval-ℚ [c,d]
+ by
+ preserves-leq-left-mul-ℚ⁰⁺
+ ( dist-ℚ a b)
+ ( _)
+ ( _)
+ ( leq-max-abs-is-in-closed-interval-ℚ [c,d] q q∈[c,d])
+ ≤ width-closed-interval-ℚ [a,b] *ℚ
+ rational-max-abs-closed-interval-ℚ [c,d]
+ by
+ leq-eq-ℚ _ _
+ ( ap-mul-ℚ
+ ( eq-width-dist-lower-upper-bounds-closed-interval-ℚ [a,b])
+ ( refl))
+ |pc-pd|≤max|a||b| :
+ (p : ℚ) → is-in-closed-interval-ℚ [a,b] p →
+ leq-ℚ (rational-dist-ℚ (p *ℚ c) (p *ℚ d))
+ |pc-pd|≤max|a||b| p p∈[a,b] =
+ chain-of-inequalities
+ rational-dist-ℚ (p *ℚ c) (p *ℚ d)
+ ≤ rational-dist-ℚ c d *ℚ rational-abs-ℚ p
+ by
+ leq-eq-ℚ _ _
+ ( ( ap
+ ( rational-abs-ℚ)
+ ( inv (left-distributive-mul-diff-ℚ _ _ _))) ∙
+ ( rational-abs-mul-ℚ _ _) ∙
+ ( commutative-mul-ℚ _ _))
+ ≤ rational-dist-ℚ c d *ℚ rational-max-abs-closed-interval-ℚ [a,b]
+ by
+ preserves-leq-left-mul-ℚ⁰⁺
+ ( dist-ℚ c d)
+ ( _)
+ ( _)
+ ( leq-max-abs-is-in-closed-interval-ℚ [a,b] p p∈[a,b])
+ ≤ _
+ by
+ leq-eq-ℚ _ _
+ ( ap-mul-ℚ
+ ( eq-width-dist-lower-upper-bounds-closed-interval-ℚ [c,d])
+ ( refl))
+ |ac-bc|≤max|c||d| =
+ |aq-bq|≤max|c||d| c (lower-bound-is-in-closed-interval-ℚ [c,d])
+ |ad-bd|≤max|c||d| =
+ |aq-bq|≤max|c||d| d (upper-bound-is-in-closed-interval-ℚ [c,d])
+ |ac-ad|≤max|a||b| =
+ |pc-pd|≤max|a||b| a (lower-bound-is-in-closed-interval-ℚ [a,b])
+ |bc-bd|≤max|a||b| =
+ |pc-pd|≤max|a||b| b (upper-bound-is-in-closed-interval-ℚ [a,b])
+ under-bound-|ac-bd| =
+ chain-of-inequalities
+ rational-dist-ℚ (a *ℚ c) (b *ℚ d)
+ ≤ rational-abs-ℚ ((a *ℚ c -ℚ b *ℚ c) +ℚ (b *ℚ c -ℚ b *ℚ d))
+ by
+ leq-eq-ℚ _ _
+ ( ap
+ ( rational-abs-ℚ)
+ ( inv ( mul-right-div-Group group-add-ℚ _ _ _)))
+ ≤ _ +ℚ _
+ by triangle-inequality-abs-ℚ _ _
+ ≤ +ℚ
+ by preserves-leq-add-ℚ |ac-bc|≤max|c||d| |bc-bd|≤max|a||b|
+ under-bound-|ad-bc| =
+ chain-of-inequalities
+ rational-dist-ℚ (a *ℚ d) (b *ℚ c)
+ ≤ rational-abs-ℚ ((a *ℚ d -ℚ b *ℚ d) +ℚ (b *ℚ d -ℚ b *ℚ c))
+ by
+ leq-eq-ℚ _ _
+ ( ap
+ ( rational-abs-ℚ)
+ ( inv ( mul-right-div-Group group-add-ℚ _ _ _)))
+ ≤ rational-dist-ℚ (a *ℚ d) (b *ℚ d) +ℚ
+ rational-dist-ℚ (b *ℚ d) (b *ℚ c)
+ by triangle-inequality-abs-ℚ _ _
+ ≤ rational-dist-ℚ (a *ℚ d) (b *ℚ d) +ℚ
+ rational-dist-ℚ (b *ℚ c) (b *ℚ d)
+ by
+ leq-eq-ℚ _ _
+ ( ap-add-ℚ refl (ap rational-ℚ⁰⁺ (commutative-dist-ℚ _ _)))
+ ≤ +ℚ
+ by preserves-leq-add-ℚ |ad-bd|≤max|c||d| |bc-bd|≤max|a||b|
+ under-bound-|ac-bc| =
+ chain-of-inequalities
+ rational-dist-ℚ (a *ℚ c) (b *ℚ c)
+ ≤
+ by |ac-bc|≤max|c||d|
+ ≤ +ℚ
+ by is-inflationary-map-right-add-rational-ℚ⁰⁺ ⁰⁺ _
+ under-bound-|ad-bd| =
+ chain-of-inequalities
+ rational-dist-ℚ (a *ℚ d) (b *ℚ d)
+ ≤
+ by |ad-bd|≤max|c||d|
+ ≤ +ℚ
+ by is-inflationary-map-right-add-rational-ℚ⁰⁺ ⁰⁺ _
+ under-bound-|ac-ad| =
+ chain-of-inequalities
+ rational-dist-ℚ (a *ℚ c) (a *ℚ d)
+ ≤
+ by |ac-ad|≤max|a||b|
+ ≤ +ℚ
+ by is-inflationary-map-left-add-rational-ℚ⁰⁺ ⁰⁺ _
+ under-bound-|bc-bd| =
+ chain-of-inequalities
+ rational-dist-ℚ (b *ℚ c) (b *ℚ d)
+ ≤
+ by |bc-bd|≤max|a||b|
+ ≤ +ℚ
+ by is-inflationary-map-left-add-rational-ℚ⁰⁺ ⁰⁺ _
+ under-bound-|q-q| q =
+ chain-of-inequalities
+ rational-dist-ℚ q q
+ ≤ zero-ℚ
+ by leq-eq-ℚ _ _ (rational-dist-self-ℚ q)
+ ≤ +ℚ
+ by
+ leq-zero-rational-ℚ⁰⁺ (⁰⁺ +ℚ⁰⁺ ⁰⁺)
+ [a,b][c,d]@((min , max) , _) = mul-closed-interval-ℚ [a,b] [c,d]
+ case-1 :
+ {p q : ℚ} → (min = p) → under-bound (rational-dist-ℚ p q) →
+ (max = q) → under-bound (width-closed-interval-ℚ [a,b][c,d])
+ case-1 min=p bound-|p-q| max=q =
+ tr
+ ( under-bound)
+ ( ap-binary rational-dist-ℚ (inv min=p) (inv max=q) ∙
+ eq-width-dist-lower-upper-bounds-closed-interval-ℚ [a,b][c,d])
+ ( bound-|p-q|)
+ case-2 :
+ {p q : ℚ} → (min = p) → under-bound (rational-dist-ℚ q p) →
+ (max = q) → under-bound (width-closed-interval-ℚ [a,b][c,d])
+ case-2 min=p bound-|q-p| =
+ case-1
+ ( min=p)
+ ( tr
+ ( under-bound)
+ ( ap rational-ℚ⁰⁺ (commutative-dist-ℚ _ _))
+ ( bound-|q-p|))
+ case-eq :
+ {p : ℚ} → (min = p) → (max = p) →
+ under-bound (width-closed-interval-ℚ [a,b][c,d])
+ case-eq min=p = case-1 min=p (under-bound-|q-q| _)
+ motive =
+ leq-ℚ-Prop
+ ( width-closed-interval-ℚ [a,b][c,d])
+ ( +ℚ )
+ case-max =
+ eq-one-of-four-max-Total-Order
+ ( ℚ-Total-Order)
+ ( motive)
+ ( a *ℚ c)
+ ( a *ℚ d)
+ ( b *ℚ c)
+ ( b *ℚ d)
+ in
+ eq-one-of-four-min-Total-Order
+ ( ℚ-Total-Order)
+ ( motive)
+ ( a *ℚ c)
+ ( a *ℚ d)
+ ( b *ℚ c)
+ ( b *ℚ d)
+ ( λ min=ac →
+ case-max
+ ( case-eq min=ac)
+ ( case-1 min=ac under-bound-|ac-ad|)
+ ( case-1 min=ac under-bound-|ac-bc|)
+ ( case-1 min=ac under-bound-|ac-bd|))
+ ( λ min=ad →
+ case-max
+ ( case-2 min=ad under-bound-|ac-ad|)
+ ( case-eq min=ad)
+ ( case-1 min=ad under-bound-|ad-bc|)
+ ( case-1 min=ad under-bound-|ad-bd|))
+ ( λ min=bc →
+ case-max
+ ( case-2 min=bc under-bound-|ac-bc|)
+ ( case-2 min=bc under-bound-|ad-bc|)
+ ( case-eq min=bc)
+ ( case-1 min=bc under-bound-|bc-bd|))
+ ( λ min=bd →
+ case-max
+ ( case-2 min=bd under-bound-|ac-bd|)
+ ( case-2 min=bd under-bound-|ad-bd|)
+ ( case-2 min=bd under-bound-|bc-bd|)
+ ( case-eq min=bd))
+```
+
+### Multiplication of closed intervals is subdistributive
+
+```agda
+abstract
+ left-subdistributive-mul-add-closed-interval-ℚ :
+ ([a,b] [c,d] [e,f] : closed-interval-ℚ) →
+ leq-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [a,b] (add-closed-interval-ℚ [c,d] [e,f]))
+ ( add-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [a,b] [c,d])
+ ( mul-closed-interval-ℚ [a,b] [e,f]))
+ left-subdistributive-mul-add-closed-interval-ℚ [a,b] [c,d] [e,f] =
+ leq-closed-interval-leq-subtype-ℚ
+ ( mul-closed-interval-ℚ [a,b] (add-closed-interval-ℚ [c,d] [e,f]))
+ ( add-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [a,b] [c,d])
+ ( mul-closed-interval-ℚ [a,b] [e,f]))
+ ( λ q q∈[a,b]⟨[c,d]+[e,f]⟩ →
+ let
+ open
+ do-syntax-trunc-Prop
+ ( subtype-closed-interval-ℚ
+ ( add-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [a,b] [c,d])
+ ( mul-closed-interval-ℚ [a,b] [e,f]))
+ ( q))
+ in do
+ ((qab , qcdef) , qab∈[a,b] , qcdef∈[c,d]+[e,f] , q=qab*qcdef) ←
+ is-in-minkowski-product-is-in-mul-closed-interval-ℚ
+ ( [a,b])
+ ( add-closed-interval-ℚ [c,d] [e,f])
+ ( q)
+ ( q∈[a,b]⟨[c,d]+[e,f]⟩)
+ ((qcd , qef) , qcd∈[c,d] , qef∈[e,f] , qcdef=qcd+qef) ←
+ is-in-minkowski-sum-is-in-add-closed-interval-ℚ
+ ( [c,d])
+ ( [e,f])
+ ( qcdef)
+ ( qcdef∈[c,d]+[e,f])
+ inv-tr
+ ( is-in-closed-interval-ℚ
+ ( add-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [a,b] [c,d])
+ ( mul-closed-interval-ℚ [a,b] [e,f])))
+ ( ( q=qab*qcdef) ∙
+ ( ap-mul-ℚ refl qcdef=qcd+qef) ∙
+ ( left-distributive-mul-add-ℚ qab qcd qef))
+ ( is-in-add-interval-add-is-in-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [a,b] [c,d])
+ ( mul-closed-interval-ℚ [a,b] [e,f])
+ ( qab *ℚ qcd)
+ ( qab *ℚ qef)
+ ( is-in-mul-interval-mul-is-in-closed-interval-ℚ
+ ( [a,b])
+ ( [c,d])
+ ( qab)
+ ( qcd)
+ ( qab∈[a,b])
+ ( qcd∈[c,d]))
+ ( is-in-mul-interval-mul-is-in-closed-interval-ℚ
+ ( [a,b])
+ ( [e,f])
+ ( qab)
+ ( qef)
+ ( qab∈[a,b])
+ ( qef∈[e,f]))))
+```
+
+### Containment of intervals is preserved by multiplication
+
+```agda
+abstract
+ preserves-leq-left-mul-closed-interval-ℚ :
+ ([c,d] [a,b] [a',b'] : closed-interval-ℚ) →
+ leq-closed-interval-ℚ [a,b] [a',b'] →
+ leq-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [a,b] [c,d])
+ ( mul-closed-interval-ℚ [a',b'] [c,d])
+ preserves-leq-left-mul-closed-interval-ℚ [c,d] [a,b] [a',b'] [a,b]⊆[a',b'] =
+ leq-closed-interval-leq-subtype-ℚ
+ ( mul-closed-interval-ℚ [a,b] [c,d])
+ ( mul-closed-interval-ℚ [a',b'] [c,d])
+ ( binary-tr
+ ( _⊆_)
+ ( eq-minkowski-mul-closed-interval-ℚ [a,b] [c,d])
+ ( eq-minkowski-mul-closed-interval-ℚ [a',b'] [c,d])
+ ( preserves-leq-left-minkowski-mul-Commutative-Monoid
+ ( commutative-monoid-mul-ℚ)
+ ( subtype-closed-interval-ℚ [c,d])
+ ( subtype-closed-interval-ℚ [a,b])
+ ( subtype-closed-interval-ℚ [a',b'])
+ ( leq-subtype-leq-closed-interval-ℚ [a,b] [a',b'] [a,b]⊆[a',b'])))
+
+ preserves-leq-right-mul-closed-interval-ℚ :
+ ([a,b] [c,d] [c',d'] : closed-interval-ℚ) →
+ leq-closed-interval-ℚ [c,d] [c',d'] →
+ leq-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [a,b] [c,d])
+ ( mul-closed-interval-ℚ [a,b] [c',d'])
+ preserves-leq-right-mul-closed-interval-ℚ [a,b] [c,d] [c',d'] [c,d]⊆[c',d'] =
+ binary-tr
+ ( leq-closed-interval-ℚ)
+ ( commutative-mul-closed-interval-ℚ [c,d] [a,b])
+ ( commutative-mul-closed-interval-ℚ [c',d'] [a,b])
+ ( preserves-leq-left-mul-closed-interval-ℚ
+ ( [a,b])
+ ( [c,d])
+ ( [c',d'])
+ ( [c,d]⊆[c',d']))
+
+ preserves-leq-mul-closed-interval-ℚ :
+ ([a,b] [a',b'] [c,d] [c',d'] : closed-interval-ℚ) →
+ leq-closed-interval-ℚ [a,b] [a',b'] → leq-closed-interval-ℚ [c,d] [c',d'] →
+ leq-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [a,b] [c,d])
+ ( mul-closed-interval-ℚ [a',b'] [c',d'])
+ preserves-leq-mul-closed-interval-ℚ
+ [a,b] [a',b'] [c,d] [c',d'] [a,b]⊆[a',b'] [c,d]⊆[c',d'] =
+ transitive-leq-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [a,b] [c,d])
+ ( mul-closed-interval-ℚ [a,b] [c',d'])
+ ( mul-closed-interval-ℚ [a',b'] [c',d'])
+ ( preserves-leq-left-mul-closed-interval-ℚ
+ ( [c',d'])
+ ( [a,b])
+ ( [a',b'])
+ ( [a,b]⊆[a',b']))
+ ( preserves-leq-right-mul-closed-interval-ℚ
+ ( [a,b])
+ ( [c,d])
+ ( [c',d'])
+ ( [c,d]⊆[c',d']))
+```
diff --git a/src/elementary-number-theory/multiplication-nonnegative-rational-numbers.lagda.md b/src/elementary-number-theory/multiplication-nonnegative-rational-numbers.lagda.md
index 7c7e070d5f..203f33961f 100644
--- a/src/elementary-number-theory/multiplication-nonnegative-rational-numbers.lagda.md
+++ b/src/elementary-number-theory/multiplication-nonnegative-rational-numbers.lagda.md
@@ -10,6 +10,7 @@ module elementary-number-theory.multiplication-nonnegative-rational-numbers wher
```agda
open import elementary-number-theory.inequality-integers
+open import elementary-number-theory.inequality-nonnegative-rational-numbers
open import elementary-number-theory.inequality-rational-numbers
open import elementary-number-theory.multiplication-integer-fractions
open import elementary-number-theory.multiplication-integers
@@ -110,4 +111,15 @@ opaque
( commutative-mul-ℚ q (rational-ℚ⁰⁺ p))
( commutative-mul-ℚ r (rational-ℚ⁰⁺ p))
( preserves-leq-right-mul-ℚ⁰⁺ p q r q≤r)
+
+abstract
+ preserves-leq-mul-ℚ⁰⁺ :
+ (p q r s : ℚ⁰⁺) → leq-ℚ⁰⁺ p q → leq-ℚ⁰⁺ r s → leq-ℚ⁰⁺ (p *ℚ⁰⁺ r) (q *ℚ⁰⁺ s)
+ preserves-leq-mul-ℚ⁰⁺ p q r s p≤q r≤s =
+ transitive-leq-ℚ
+ ( rational-ℚ⁰⁺ (p *ℚ⁰⁺ r))
+ ( rational-ℚ⁰⁺ (p *ℚ⁰⁺ s))
+ ( rational-ℚ⁰⁺ (q *ℚ⁰⁺ s))
+ ( preserves-leq-right-mul-ℚ⁰⁺ s _ _ p≤q)
+ ( preserves-leq-left-mul-ℚ⁰⁺ p _ _ r≤s)
```
diff --git a/src/elementary-number-theory/multiplicative-group-of-positive-rational-numbers.lagda.md b/src/elementary-number-theory/multiplicative-group-of-positive-rational-numbers.lagda.md
index 70a33b9e29..855ae9e41f 100644
--- a/src/elementary-number-theory/multiplicative-group-of-positive-rational-numbers.lagda.md
+++ b/src/elementary-number-theory/multiplicative-group-of-positive-rational-numbers.lagda.md
@@ -170,3 +170,11 @@ module _
eq-denominator-inv-numerator-ℚ⁺ =
ind-Σ eq-denominator-inv-numerator-is-positive-ℚ x
```
+
+### Group laws on the positive rational numbers
+
+```agda
+abstract
+ is-section-right-mul-ℚ⁺ : (p q : ℚ⁺) → (q *ℚ⁺ inv-ℚ⁺ p) *ℚ⁺ p = q
+ is-section-right-mul-ℚ⁺ = is-section-right-div-Group group-mul-ℚ⁺
+```
diff --git a/src/elementary-number-theory/nonnegative-rational-numbers.lagda.md b/src/elementary-number-theory/nonnegative-rational-numbers.lagda.md
index 22352dc405..c7cd39a748 100644
--- a/src/elementary-number-theory/nonnegative-rational-numbers.lagda.md
+++ b/src/elementary-number-theory/nonnegative-rational-numbers.lagda.md
@@ -17,6 +17,7 @@ open import elementary-number-theory.inequality-integers
open import elementary-number-theory.inequality-rational-numbers
open import elementary-number-theory.integer-fractions
open import elementary-number-theory.integers
+open import elementary-number-theory.natural-numbers
open import elementary-number-theory.nonnegative-integer-fractions
open import elementary-number-theory.nonnegative-integers
open import elementary-number-theory.positive-and-negative-integers
@@ -155,6 +156,13 @@ nonnegative-rational-nonnegative-ℤ (x , x-is-neg) =
( rational-ℤ x , is-nonnegative-rational-ℤ x x-is-neg)
```
+### The images of natural numbers in the rationals are nonnegative
+
+```agda
+nonnegative-rational-ℕ : ℕ → ℚ⁰⁺
+nonnegative-rational-ℕ n = (rational-ℕ n , is-nonnegative-int-ℕ n)
+```
+
### The rational image of a nonnegative integer fraction is nonnegative
```agda
@@ -193,6 +201,11 @@ module _
is-nonnegative-iff-leq-zero-ℚ =
( leq-zero-is-nonnegative-ℚ ,
is-nonnegative-leq-zero-ℚ)
+
+abstract
+ leq-zero-rational-ℚ⁰⁺ : (p : ℚ⁰⁺) → leq-ℚ zero-ℚ (rational-ℚ⁰⁺ p)
+ leq-zero-rational-ℚ⁰⁺ (p , is-nonneg-p) =
+ leq-zero-is-nonnegative-ℚ p is-nonneg-p
```
### The successor of a nonnegative rational number is positive
diff --git a/src/real-numbers.lagda.md b/src/real-numbers.lagda.md
index aba3f11975..4736e4b7c7 100644
--- a/src/real-numbers.lagda.md
+++ b/src/real-numbers.lagda.md
@@ -17,6 +17,7 @@ open import real-numbers.cauchy-completeness-dedekind-real-numbers public
open import real-numbers.dedekind-real-numbers public
open import real-numbers.difference-real-numbers public
open import real-numbers.distance-real-numbers public
+open import real-numbers.enclosing-closed-rational-intervals-real-numbers public
open import real-numbers.finitely-enumerable-subsets-real-numbers public
open import real-numbers.inequality-lower-dedekind-real-numbers public
open import real-numbers.inequality-real-numbers public
@@ -36,6 +37,7 @@ open import real-numbers.minimum-finite-families-real-numbers public
open import real-numbers.minimum-inhabited-finitely-enumerable-subsets-real-numbers public
open import real-numbers.minimum-lower-dedekind-real-numbers public
open import real-numbers.minimum-upper-dedekind-real-numbers public
+open import real-numbers.multiplication-real-numbers public
open import real-numbers.negation-lower-upper-dedekind-real-numbers public
open import real-numbers.negation-real-numbers public
open import real-numbers.nonnegative-real-numbers public
diff --git a/src/real-numbers/arithmetically-located-dedekind-cuts.lagda.md b/src/real-numbers/arithmetically-located-dedekind-cuts.lagda.md
index 2c0bb2c41c..3fbc4ba1e4 100644
--- a/src/real-numbers/arithmetically-located-dedekind-cuts.lagda.md
+++ b/src/real-numbers/arithmetically-located-dedekind-cuts.lagda.md
@@ -9,6 +9,8 @@ module real-numbers.arithmetically-located-dedekind-cuts where
Imports
```agda
+open import elementary-number-theory.absolute-value-rational-numbers
+open import elementary-number-theory.addition-natural-numbers
open import elementary-number-theory.addition-positive-rational-numbers
open import elementary-number-theory.addition-rational-numbers
open import elementary-number-theory.additive-group-of-rational-numbers
@@ -16,10 +18,12 @@ open import elementary-number-theory.archimedean-property-rational-numbers
open import elementary-number-theory.difference-rational-numbers
open import elementary-number-theory.inequality-rational-numbers
open import elementary-number-theory.integers
+open import elementary-number-theory.maximum-rational-numbers
open import elementary-number-theory.multiplication-rational-numbers
open import elementary-number-theory.natural-numbers
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
open import elementary-number-theory.strict-inequality-rational-numbers
open import foundation.action-on-identifications-functions
@@ -31,6 +35,7 @@ open import foundation.dependent-pair-types
open import foundation.disjunction
open import foundation.empty-types
open import foundation.existential-quantification
+open import foundation.function-types
open import foundation.identity-types
open import foundation.logical-equivalences
open import foundation.propositional-truncations
@@ -41,6 +46,10 @@ open import foundation.universe-levels
open import group-theory.abelian-groups
+open import logic.functoriality-existential-quantification
+
+open import order-theory.posets
+
open import real-numbers.dedekind-real-numbers
open import real-numbers.lower-dedekind-real-numbers
open import real-numbers.upper-dedekind-real-numbers
@@ -84,10 +93,74 @@ module _
is-arithmetically-located-lower-upper-ℝ : UU (l1 ⊔ l2)
is-arithmetically-located-lower-upper-ℝ =
type-Prop is-arithmetically-located-prop-lower-upper-ℝ
+
+close-bounds-ℝ : {l : Level} (x : ℝ l) → ℚ⁺ → subtype l (ℚ × ℚ)
+close-bounds-ℝ x =
+ close-bounds-lower-upper-ℝ (lower-real-ℝ x) (upper-real-ℝ x)
+```
+
+### The predicate of being weakly arithmetically located
+
+```agda
+module _
+ {l1 l2 : Level} (x : lower-ℝ l1) (y : upper-ℝ l2)
+ where
+
+ weak-close-bounds-lower-upper-ℝ : ℚ⁺ → subtype (l1 ⊔ l2) (ℚ × ℚ)
+ weak-close-bounds-lower-upper-ℝ ε⁺ (p , q) =
+ leq-ℚ-Prop q (p +ℚ (rational-ℚ⁺ ε⁺)) ∧
+ cut-lower-ℝ x p ∧
+ cut-upper-ℝ y q
+
+ is-weakly-arithmetically-located-prop-lower-upper-ℝ : Prop (l1 ⊔ l2)
+ is-weakly-arithmetically-located-prop-lower-upper-ℝ =
+ Π-Prop ℚ⁺ (λ ε⁺ → ∃ (ℚ × ℚ) (weak-close-bounds-lower-upper-ℝ ε⁺))
+
+ is-weakly-arithmetically-located-lower-upper-ℝ : UU (l1 ⊔ l2)
+ is-weakly-arithmetically-located-lower-upper-ℝ =
+ type-Prop is-weakly-arithmetically-located-prop-lower-upper-ℝ
```
## Properties
+### A cut is weakly arithmetically located if and only if it is arithmetically located
+
+```agda
+module _
+ {l1 l2 : Level} (x : lower-ℝ l1) (y : upper-ℝ l2)
+ where
+
+ abstract
+ is-arithmetically-located-is-weakly-arithmetically-located-lower-upper-ℝ :
+ is-weakly-arithmetically-located-lower-upper-ℝ x y →
+ is-arithmetically-located-lower-upper-ℝ x y
+ is-arithmetically-located-is-weakly-arithmetically-located-lower-upper-ℝ
+ W ε =
+ let
+ ε' = mediant-zero-ℚ⁺ ε
+ in
+ map-tot-exists
+ ( λ (p , q) (q≤p+ε' , pImports
+
+```agda
+open import elementary-number-theory.closed-intervals-rational-numbers
+open import elementary-number-theory.inequality-rational-numbers
+open import elementary-number-theory.interior-closed-intervals-rational-numbers
+open import elementary-number-theory.intersections-closed-intervals-rational-numbers
+open import elementary-number-theory.maximum-rational-numbers
+open import elementary-number-theory.minimum-rational-numbers
+open import elementary-number-theory.rational-numbers
+
+open import foundation.conjunction
+open import foundation.coproduct-types
+open import foundation.dependent-pair-types
+open import foundation.existential-quantification
+open import foundation.inhabited-types
+open import foundation.logical-equivalences
+open import foundation.propositional-truncations
+open import foundation.propositions
+open import foundation.subtypes
+open import foundation.transport-along-identifications
+open import foundation.universe-levels
+
+open import real-numbers.dedekind-real-numbers
+```
+
+
+
+## Idea
+
+An enclosing
+[closed rational interval](elementary-number-theory.closed-intervals-rational-numbers.md)
+of a [Dedekind real number](real-numbers.dedekind-real-numbers.md) `x` is a
+closed interval of rational numbers whose lower bound is in the lower cut of `x`
+and whose upper count is in the upper cut of `x`.
+
+## Definition
+
+```agda
+module _
+ {l : Level} (x : ℝ l)
+ where
+
+ enclosing-closed-rational-interval-ℝ : subtype l closed-interval-ℚ
+ enclosing-closed-rational-interval-ℝ ((p , q) , _) =
+ lower-cut-ℝ x p ∧ upper-cut-ℝ x q
+
+ is-enclosing-closed-rational-interval-ℝ : closed-interval-ℚ → UU l
+ is-enclosing-closed-rational-interval-ℝ [p,q] =
+ type-Prop (enclosing-closed-rational-interval-ℝ [p,q])
+
+ type-enclosing-closed-rational-interval-ℝ : UU l
+ type-enclosing-closed-rational-interval-ℝ =
+ type-subtype enclosing-closed-rational-interval-ℝ
+```
+
+## Properties
+
+### There exists a rational enclosing interval around each real number
+
+```agda
+module _
+ {l : Level} (x : ℝ l)
+ where
+
+ abstract
+ is-inhabited-type-enclosing-closed-rational-interval-ℝ :
+ is-inhabited (type-enclosing-closed-rational-interval-ℝ x)
+ is-inhabited-type-enclosing-closed-rational-interval-ℝ =
+ let
+ open
+ do-syntax-trunc-Prop
+ ( is-inhabited-Prop (type-enclosing-closed-rational-interval-ℝ x))
+ in do
+ (p , pImports
+
+```agda
+open import elementary-number-theory.absolute-value-rational-numbers
+open import elementary-number-theory.addition-closed-intervals-rational-numbers
+open import elementary-number-theory.addition-positive-rational-numbers
+open import elementary-number-theory.addition-rational-numbers
+open import elementary-number-theory.closed-intervals-rational-numbers
+open import elementary-number-theory.difference-rational-numbers
+open import elementary-number-theory.inequality-natural-numbers
+open import elementary-number-theory.inequality-rational-numbers
+open import elementary-number-theory.intersections-closed-intervals-rational-numbers
+open import elementary-number-theory.maximum-natural-numbers
+open import elementary-number-theory.maximum-nonnegative-rational-numbers
+open import elementary-number-theory.maximum-rational-numbers
+open import elementary-number-theory.minimum-positive-rational-numbers
+open import elementary-number-theory.minimum-rational-numbers
+open import elementary-number-theory.multiplication-closed-intervals-rational-numbers
+open import elementary-number-theory.multiplication-interior-closed-intervals-rational-numbers
+open import elementary-number-theory.multiplication-nonnegative-rational-numbers
+open import elementary-number-theory.multiplication-positive-rational-numbers
+open import elementary-number-theory.multiplication-rational-numbers
+open import elementary-number-theory.multiplicative-group-of-positive-rational-numbers
+open import elementary-number-theory.natural-numbers
+open import elementary-number-theory.nonnegative-rational-numbers
+open import elementary-number-theory.nonzero-natural-numbers
+open import elementary-number-theory.poset-closed-intervals-rational-numbers
+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
+open import elementary-number-theory.strict-inequality-rational-numbers
+open import elementary-number-theory.unit-fractions-rational-numbers
+
+open import foundation.action-on-identifications-binary-functions
+open import foundation.action-on-identifications-functions
+open import foundation.binary-transport
+open import foundation.cartesian-product-types
+open import foundation.conjunction
+open import foundation.dependent-pair-types
+open import foundation.disjoint-subtypes
+open import foundation.empty-types
+open import foundation.existential-quantification
+open import foundation.identity-types
+open import foundation.inhabited-subtypes
+open import foundation.logical-equivalences
+open import foundation.powersets
+open import foundation.propositional-truncations
+open import foundation.subtypes
+open import foundation.transport-along-identifications
+open import foundation.univalence
+open import foundation.universe-levels
+
+open import logic.functoriality-existential-quantification
+
+open import order-theory.large-posets
+open import order-theory.posets
+
+open import real-numbers.addition-real-numbers
+open import real-numbers.arithmetically-located-dedekind-cuts
+open import real-numbers.dedekind-real-numbers
+open import real-numbers.enclosing-closed-rational-intervals-real-numbers
+open import real-numbers.inequality-real-numbers
+open import real-numbers.lower-dedekind-real-numbers
+open import real-numbers.rational-real-numbers
+open import real-numbers.similarity-real-numbers
+open import real-numbers.strict-inequality-real-numbers
+open import real-numbers.upper-dedekind-real-numbers
+```
+
+
+
+We introduce
+{{#concept "multiplication" Disambiguation="real numbers" Agda=mul-ℝ WDID=Q40276 WD="multiplication"}}
+on the [Dedekind real numbers](real-numbers.dedekind-real-numbers.md) and derive
+its basic properties.
+
+## Definition
+
+```agda
+module _
+ {l1 l2 : Level} (x : ℝ l1) (y : ℝ l2)
+ where
+
+ lower-cut-mul-ℝ : subtype (l1 ⊔ l2) ℚ
+ lower-cut-mul-ℝ q =
+ ∃ ( type-enclosing-closed-rational-interval-ℝ x ×
+ type-enclosing-closed-rational-interval-ℝ y)
+ ( λ (([ax,bx] , _ , _) , ([ay,by] , _ , _)) →
+ is-below-prop-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [ax,bx] [ay,by])
+ ( q))
+
+ upper-cut-mul-ℝ : subtype (l1 ⊔ l2) ℚ
+ upper-cut-mul-ℝ q =
+ ∃ ( type-enclosing-closed-rational-interval-ℝ x ×
+ type-enclosing-closed-rational-interval-ℝ y)
+ ( λ (([ax,bx] , _ , _) , ([ay,by] , _ , _)) →
+ is-above-prop-closed-interval-ℚ
+ ( mul-closed-interval-ℚ [ax,bx] [ay,by])
+ ( q))
+
+ lower-cut-mul-ℝ' : subtype (l1 ⊔ l2) ℚ
+ lower-cut-mul-ℝ' q =
+ ∃ ( type-enclosing-closed-rational-interval-ℝ x ×
+ type-enclosing-closed-rational-interval-ℝ y)
+ ( λ (([ax,bx] , _ , _) , ([ay,by] , _ , _)) →
+ leq-ℚ-Prop
+ ( q)
+ ( lower-bound-mul-closed-interval-ℚ [ax,bx] [ay,by]))
+
+ upper-cut-mul-ℝ' : subtype (l1 ⊔ l2) ℚ
+ upper-cut-mul-ℝ' q =
+ ∃ ( type-enclosing-closed-rational-interval-ℝ x ×
+ type-enclosing-closed-rational-interval-ℝ y)
+ ( λ (([ax,bx] , _ , _) , ([ay,by] , _ , _)) →
+ leq-ℚ-Prop
+ ( upper-bound-mul-closed-interval-ℚ [ax,bx] [ay,by])
+ ( q))
+
+ abstract
+ leq-lower-cut-mul-ℝ-lower-cut-mul-ℝ' : lower-cut-mul-ℝ ⊆ lower-cut-mul-ℝ'
+ leq-lower-cut-mul-ℝ-lower-cut-mul-ℝ' q = map-tot-exists ( λ _ → leq-le-ℚ)
+
+ leq-upper-cut-mul-ℝ-upper-cut-mul-ℝ' : upper-cut-mul-ℝ ⊆ upper-cut-mul-ℝ'
+ leq-upper-cut-mul-ℝ-upper-cut-mul-ℝ' q = map-tot-exists ( λ _ → leq-le-ℚ)
+
+ leq-lower-cut-mul-ℝ'-lower-cut-mul-ℝ : lower-cut-mul-ℝ' ⊆ lower-cut-mul-ℝ
+ leq-lower-cut-mul-ℝ'-lower-cut-mul-ℝ q q∈L' =
+ let open do-syntax-trunc-Prop (lower-cut-mul-ℝ q)
+ in do
+ ( ( ([a,b]@((a , b) , a≤b) , a