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