diff --git a/src/elementary-number-theory.lagda.md b/src/elementary-number-theory.lagda.md index 815543ad14..8d04d1a4f3 100644 --- a/src/elementary-number-theory.lagda.md +++ b/src/elementary-number-theory.lagda.md @@ -10,6 +10,7 @@ module elementary-number-theory where 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 open import elementary-number-theory.addition-integer-fractions public open import elementary-number-theory.addition-integers public @@ -127,7 +128,9 @@ open import elementary-number-theory.natural-numbers public open import elementary-number-theory.negative-integer-fractions public open import elementary-number-theory.negative-integers public open import elementary-number-theory.negative-rational-numbers public +open import elementary-number-theory.nonnegative-integer-fractions public open import elementary-number-theory.nonnegative-integers public +open import elementary-number-theory.nonnegative-rational-numbers public open import elementary-number-theory.nonpositive-integers public open import elementary-number-theory.nonzero-integers public open import elementary-number-theory.nonzero-natural-numbers public diff --git a/src/elementary-number-theory/absolute-value-rational-numbers.lagda.md b/src/elementary-number-theory/absolute-value-rational-numbers.lagda.md new file mode 100644 index 0000000000..7c69ea4eac --- /dev/null +++ b/src/elementary-number-theory/absolute-value-rational-numbers.lagda.md @@ -0,0 +1,266 @@ +# The absolute value function on the rational numbers + +```agda +{-# OPTIONS --lossy-unification #-} + +module elementary-number-theory.absolute-value-rational-numbers where +``` + +
Imports + +```agda +open import elementary-number-theory.addition-rational-numbers +open import elementary-number-theory.inequality-rational-numbers +open import elementary-number-theory.maximum-rational-numbers +open import elementary-number-theory.multiplication-rational-numbers +open import elementary-number-theory.nonnegative-rational-numbers +open import elementary-number-theory.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.coproduct-types +open import foundation.dependent-pair-types +open import foundation.function-types +open import foundation.identity-types +open import foundation.transport-along-identifications +``` + +
+ +## Idea + +The +{{#concept "absolute value" Disambiguation="of a rational number" Agda=abs-ℚ WD="absolute value" WDID=Q120812}} +of a [rational number](elementary-number-theory.rational-numbers.md) is the +[greater](elementary-number-theory.maximum-rational-numbers.md) of itself and +its negation. + +## Definition + +```agda +rational-abs-ℚ : ℚ → ℚ +rational-abs-ℚ q = max-ℚ q (neg-ℚ q) + +abstract + is-nonnegative-rational-abs-ℚ : (q : ℚ) → is-nonnegative-ℚ (rational-abs-ℚ q) + is-nonnegative-rational-abs-ℚ q = + rec-coproduct + ( λ 0≤q → + inv-tr + ( is-nonnegative-ℚ) + ( right-leq-left-max-ℚ + ( q) + ( neg-ℚ q) + ( transitive-leq-ℚ (neg-ℚ q) zero-ℚ q 0≤q (neg-leq-ℚ zero-ℚ q 0≤q))) + ( is-nonnegative-leq-zero-ℚ q 0≤q)) + ( λ q≤0 → + inv-tr + ( is-nonnegative-ℚ) + ( left-leq-right-max-ℚ + ( q) + ( neg-ℚ q) + ( transitive-leq-ℚ q zero-ℚ (neg-ℚ q) (neg-leq-ℚ q zero-ℚ q≤0) q≤0)) + ( is-nonnegative-leq-zero-ℚ (neg-ℚ q) (neg-leq-ℚ q zero-ℚ q≤0))) + ( linear-leq-ℚ zero-ℚ q) + +abs-ℚ : ℚ → ℚ⁰⁺ +pr1 (abs-ℚ q) = rational-abs-ℚ q +pr2 (abs-ℚ q) = is-nonnegative-rational-abs-ℚ q +``` + +## Properties + +### The absolute value of a nonnegative rational number is the number itself + +```agda +abstract + abs-rational-ℚ⁰⁺ : (q : ℚ⁰⁺) → abs-ℚ (rational-ℚ⁰⁺ q) = q + abs-rational-ℚ⁰⁺ (q , nonneg-q) = + eq-ℚ⁰⁺ + ( right-leq-left-max-ℚ + ( q) + ( neg-ℚ q) + ( transitive-leq-ℚ + ( neg-ℚ q) + ( zero-ℚ) + ( q) + ( leq-zero-is-nonnegative-ℚ q nonneg-q) + ( neg-leq-ℚ zero-ℚ q (leq-zero-is-nonnegative-ℚ q nonneg-q)))) + + rational-abs-zero-leq-ℚ : (q : ℚ) → leq-ℚ zero-ℚ q → rational-abs-ℚ q = q + rational-abs-zero-leq-ℚ q 0≤q = + ap rational-ℚ⁰⁺ (abs-rational-ℚ⁰⁺ (q , is-nonnegative-leq-zero-ℚ q 0≤q)) + + rational-abs-leq-zero-ℚ : + (q : ℚ) → leq-ℚ q zero-ℚ → rational-abs-ℚ q = neg-ℚ q + rational-abs-leq-zero-ℚ q q≤0 = + left-leq-right-max-ℚ + ( q) + ( neg-ℚ q) + ( transitive-leq-ℚ + ( q) + ( zero-ℚ) + ( neg-ℚ q) + ( neg-leq-ℚ q zero-ℚ q≤0) + ( q≤0)) +``` + +### The absolute value of the negation of `q` is the absolute value of `q` + +```agda +abstract + abs-neg-ℚ : (q : ℚ) → abs-ℚ (neg-ℚ q) = abs-ℚ q + abs-neg-ℚ q = + eq-ℚ⁰⁺ + ( ap (max-ℚ (neg-ℚ q)) (neg-neg-ℚ q) ∙ commutative-max-ℚ _ _) +``` + +### `q` is less than or equal to `abs-ℚ q` + +```agda +abstract + leq-abs-ℚ : (q : ℚ) → leq-ℚ q (rational-abs-ℚ q) + leq-abs-ℚ q = leq-left-max-ℚ q (neg-ℚ q) + + neg-leq-abs-ℚ : (q : ℚ) → leq-ℚ (neg-ℚ q) (rational-abs-ℚ q) + neg-leq-abs-ℚ q = leq-right-max-ℚ q (neg-ℚ q) +``` + +### The absolute value of `q` is zero iff `q` is zero + +```agda +abstract + eq-zero-eq-abs-zero-ℚ : (q : ℚ) → abs-ℚ q = zero-ℚ⁰⁺ → q = zero-ℚ + eq-zero-eq-abs-zero-ℚ q abs=0 = + rec-coproduct + ( λ 0≤q → + antisymmetric-leq-ℚ + ( q) + ( zero-ℚ) + ( tr (leq-ℚ q) (ap rational-ℚ⁰⁺ abs=0) (leq-abs-ℚ q)) 0≤q) + ( λ q≤0 → + antisymmetric-leq-ℚ + ( q) + ( zero-ℚ) + ( q≤0) + ( tr + ( leq-ℚ zero-ℚ) + ( neg-neg-ℚ q) + ( neg-leq-ℚ + ( neg-ℚ q) + ( zero-ℚ) + ( tr + ( leq-ℚ (neg-ℚ q)) + ( ap rational-ℚ⁰⁺ abs=0) + ( neg-leq-abs-ℚ q))))) + ( linear-leq-ℚ zero-ℚ q) + + abs-zero-ℚ : abs-ℚ zero-ℚ = zero-ℚ⁰⁺ + abs-zero-ℚ = eq-ℚ⁰⁺ (left-leq-right-max-ℚ _ _ (refl-leq-ℚ zero-ℚ)) +``` + +### The triangle inequality + +```agda +abstract + triangle-inequality-abs-ℚ : + (p q : ℚ) → leq-ℚ⁰⁺ (abs-ℚ (p +ℚ q)) (abs-ℚ p +ℚ⁰⁺ abs-ℚ q) + triangle-inequality-abs-ℚ p q = + leq-max-leq-both-ℚ + ( rational-abs-ℚ p +ℚ rational-abs-ℚ q) + ( _) + ( _) + ( preserves-leq-add-ℚ + { p} + { rational-abs-ℚ p} + { q} + { rational-abs-ℚ q} + ( leq-abs-ℚ p) + ( leq-abs-ℚ q)) + ( inv-tr + ( λ r → leq-ℚ r (rational-abs-ℚ p +ℚ rational-abs-ℚ q)) + ( distributive-neg-add-ℚ p q) + ( preserves-leq-add-ℚ + { neg-ℚ p} + { rational-abs-ℚ p} + { neg-ℚ q} + { rational-abs-ℚ q} + ( neg-leq-abs-ℚ p) + ( neg-leq-abs-ℚ q))) +``` + +### `|ab| = |a||b|` + +```agda +abstract + abs-left-mul-nonnegative-ℚ : + (q : ℚ) (p : ℚ⁰⁺) → abs-ℚ (rational-ℚ⁰⁺ p *ℚ q) = p *ℚ⁰⁺ abs-ℚ q + abs-left-mul-nonnegative-ℚ q p⁰⁺@(p , nonneg-p) with linear-leq-ℚ zero-ℚ q + ... | inl 0≤q = + eq-ℚ⁰⁺ + ( equational-reasoning + rational-abs-ℚ (p *ℚ q) + = p *ℚ q + by + ap + ( rational-ℚ⁰⁺) + ( abs-rational-ℚ⁰⁺ + ( p⁰⁺ *ℚ⁰⁺ (q , is-nonnegative-leq-zero-ℚ q 0≤q))) + = p *ℚ rational-abs-ℚ q + by ap (p *ℚ_) (inv (rational-abs-zero-leq-ℚ q 0≤q))) + ... | inr q≤0 = + eq-ℚ⁰⁺ + ( equational-reasoning + rational-abs-ℚ (p *ℚ q) + = rational-abs-ℚ (neg-ℚ (p *ℚ q)) + by ap rational-ℚ⁰⁺ (inv (abs-neg-ℚ (p *ℚ q))) + = rational-abs-ℚ (p *ℚ neg-ℚ q) + by ap rational-abs-ℚ (inv (right-negative-law-mul-ℚ p q)) + = p *ℚ neg-ℚ q + by + ap + ( rational-ℚ⁰⁺) + ( abs-rational-ℚ⁰⁺ + ( p⁰⁺ *ℚ⁰⁺ + ( neg-ℚ q , + is-nonnegative-leq-zero-ℚ + ( neg-ℚ q) + ( neg-leq-ℚ q zero-ℚ q≤0)))) + = p *ℚ rational-abs-ℚ q + by ap (p *ℚ_) (inv (rational-abs-leq-zero-ℚ q q≤0))) + + abs-mul-ℚ : (p q : ℚ) → abs-ℚ (p *ℚ q) = abs-ℚ p *ℚ⁰⁺ abs-ℚ q + abs-mul-ℚ p q with linear-leq-ℚ zero-ℚ p + ... | inl 0≤p = + eq-ℚ⁰⁺ + ( equational-reasoning + rational-abs-ℚ (p *ℚ q) + = p *ℚ rational-abs-ℚ q + by + ap + ( rational-ℚ⁰⁺) + ( abs-left-mul-nonnegative-ℚ + ( q) + ( p , is-nonnegative-leq-zero-ℚ p 0≤p)) + = rational-abs-ℚ p *ℚ rational-abs-ℚ q + by ap (_*ℚ rational-abs-ℚ q) (inv (rational-abs-zero-leq-ℚ p 0≤p))) + ... | inr p≤0 = + eq-ℚ⁰⁺ + ( equational-reasoning + rational-abs-ℚ (p *ℚ q) + = rational-abs-ℚ (neg-ℚ (p *ℚ q)) + by ap rational-ℚ⁰⁺ (inv (abs-neg-ℚ (p *ℚ q))) + = rational-abs-ℚ (neg-ℚ p *ℚ q) + by ap rational-abs-ℚ (inv (left-negative-law-mul-ℚ p q)) + = neg-ℚ p *ℚ rational-abs-ℚ q + by + ap + ( rational-ℚ⁰⁺) + ( abs-left-mul-nonnegative-ℚ + ( q) + ( neg-ℚ p , + 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))) +``` diff --git a/src/elementary-number-theory/inequality-rational-numbers.lagda.md b/src/elementary-number-theory/inequality-rational-numbers.lagda.md index 4d2603dade..690b806b34 100644 --- a/src/elementary-number-theory/inequality-rational-numbers.lagda.md +++ b/src/elementary-number-theory/inequality-rational-numbers.lagda.md @@ -355,6 +355,13 @@ preserves-leq-add-ℚ {a} {b} {c} {d} H K = ( preserves-leq-left-add-ℚ c a b H) ``` +### Negation of rational numbers reverses inequality + +```agda +neg-leq-ℚ : (x y : ℚ) → leq-ℚ x y → leq-ℚ (neg-ℚ y) (neg-ℚ x) +neg-leq-ℚ x y = neg-leq-fraction-ℤ (fraction-ℚ x) (fraction-ℚ y) +``` + ### Transposing additions on inequalities of rational numbers ```agda @@ -415,13 +422,6 @@ pr1 (leq-iff-transpose-left-diff-ℚ x y z) = leq-transpose-left-diff-ℚ x y z pr2 (leq-iff-transpose-left-diff-ℚ x y z) = leq-transpose-right-add-ℚ x z y ``` -### Negation of rational numbers reverses inequality - -```agda -neg-leq-ℚ : (x y : ℚ) → leq-ℚ x y → leq-ℚ (neg-ℚ y) (neg-ℚ x) -neg-leq-ℚ x y = neg-leq-fraction-ℤ (fraction-ℚ x) (fraction-ℚ y) -``` - ## See also - The decidable total order on the rational numbers is defined in diff --git a/src/elementary-number-theory/maximum-rational-numbers.lagda.md b/src/elementary-number-theory/maximum-rational-numbers.lagda.md index 9bb3eab066..80cde98f19 100644 --- a/src/elementary-number-theory/maximum-rational-numbers.lagda.md +++ b/src/elementary-number-theory/maximum-rational-numbers.lagda.md @@ -13,7 +13,9 @@ open import elementary-number-theory.rational-numbers open import elementary-number-theory.strict-inequality-rational-numbers open import foundation.coproduct-types +open import foundation.dependent-pair-types open import foundation.identity-types +open import foundation.logical-equivalences open import foundation.transport-along-identifications open import order-theory.decidable-total-orders @@ -114,6 +116,16 @@ abstract ( y) ( y≤x)) ( xImports + +```agda +open import elementary-number-theory.addition-integer-fractions +open import elementary-number-theory.addition-positive-and-negative-integers +open import elementary-number-theory.integer-fractions +open import elementary-number-theory.integers +open import elementary-number-theory.multiplication-integer-fractions +open import elementary-number-theory.multiplication-integers +open import elementary-number-theory.multiplication-positive-and-negative-integers +open import elementary-number-theory.nonnegative-integers +open import elementary-number-theory.positive-and-negative-integers +open import elementary-number-theory.positive-integer-fractions +open import elementary-number-theory.positive-integers +open import elementary-number-theory.reduced-integer-fractions + +open import foundation.dependent-pair-types +open import foundation.identity-types +open import foundation.propositions +open import foundation.subtypes +open import foundation.transport-along-identifications +open import foundation.universe-levels +``` + + + +## Idea + +An [integer fraction](elementary-number-theory.integer-fractions.md) `x` is said +to be +{{#concept "nonnegative" Disambiguation="integer fraction" Agda=is-nonnegative-fraction-ℤ}} +if its numerator is a +[nonnegative integer](elementary-number-theory.nonnegative-integers.md). + +## Definitions + +### The property of being a nonnegative integer fraction + +```agda +module _ + (x : fraction-ℤ) + where + + is-nonnegative-fraction-ℤ : UU lzero + is-nonnegative-fraction-ℤ = is-nonnegative-ℤ (numerator-fraction-ℤ x) + + is-prop-is-nonnegative-fraction-ℤ : is-prop is-nonnegative-fraction-ℤ + is-prop-is-nonnegative-fraction-ℤ = + is-prop-is-nonnegative-ℤ (numerator-fraction-ℤ x) +``` + +## Properties + +### An integer fraction similar to a nonnegative integer fraction is nonnegative + +```agda +is-nonnegative-sim-fraction-ℤ : + (x y : fraction-ℤ) (S : sim-fraction-ℤ x y) → + is-nonnegative-fraction-ℤ x → + is-nonnegative-fraction-ℤ y +is-nonnegative-sim-fraction-ℤ x y S N = + is-nonnegative-left-factor-mul-ℤ + ( tr + ( is-nonnegative-ℤ) + ( S) + ( is-nonnegative-mul-nonnegative-positive-ℤ + ( N) + ( is-positive-denominator-fraction-ℤ y))) + ( is-positive-denominator-fraction-ℤ x) +``` + +### The reduced fraction of a nonnegative integer fraction is nonnegative + +```agda +is-nonnegative-reduce-fraction-ℤ : + {x : fraction-ℤ} (P : is-nonnegative-fraction-ℤ x) → + is-nonnegative-fraction-ℤ (reduce-fraction-ℤ x) +is-nonnegative-reduce-fraction-ℤ {x} = + is-nonnegative-sim-fraction-ℤ + ( x) + ( reduce-fraction-ℤ x) + ( sim-reduced-fraction-ℤ x) +``` + +### The sum of two nonnegative integer fractions is nonnegative + +```agda +is-nonnegative-add-fraction-ℤ : + {x y : fraction-ℤ} → + is-nonnegative-fraction-ℤ x → + is-nonnegative-fraction-ℤ y → + is-nonnegative-fraction-ℤ (add-fraction-ℤ x y) +is-nonnegative-add-fraction-ℤ {x} {y} P Q = + is-nonnegative-add-ℤ + ( is-nonnegative-mul-nonnegative-positive-ℤ + ( P) + ( is-positive-denominator-fraction-ℤ y)) + ( is-nonnegative-mul-nonnegative-positive-ℤ + ( Q) + ( is-positive-denominator-fraction-ℤ x)) +``` + +### The product of two nonnegative integer fractions is nonnegative + +```agda +is-nonnegative-mul-nonnegative-fraction-ℤ : + {x y : fraction-ℤ} → + is-nonnegative-fraction-ℤ x → + is-nonnegative-fraction-ℤ y → + is-nonnegative-fraction-ℤ (mul-fraction-ℤ x y) +is-nonnegative-mul-nonnegative-fraction-ℤ = is-nonnegative-mul-ℤ +``` diff --git a/src/elementary-number-theory/nonnegative-rational-numbers.lagda.md b/src/elementary-number-theory/nonnegative-rational-numbers.lagda.md new file mode 100644 index 0000000000..808366d930 --- /dev/null +++ b/src/elementary-number-theory/nonnegative-rational-numbers.lagda.md @@ -0,0 +1,336 @@ +# Nonnegative rational numbers + +```agda +{-# OPTIONS --lossy-unification #-} + +module elementary-number-theory.nonnegative-rational-numbers where +``` + +
Imports + +```agda +open import elementary-number-theory.addition-rational-numbers +open import elementary-number-theory.cross-multiplication-difference-integer-fractions +open import elementary-number-theory.decidable-total-order-rational-numbers +open import elementary-number-theory.difference-rational-numbers +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.multiplication-integer-fractions +open import elementary-number-theory.multiplication-integers +open import elementary-number-theory.multiplication-positive-and-negative-integers +open import elementary-number-theory.multiplication-rational-numbers +open import elementary-number-theory.nonnegative-integer-fractions +open import elementary-number-theory.nonnegative-integers +open import elementary-number-theory.nonzero-rational-numbers +open import elementary-number-theory.positive-and-negative-integers +open import elementary-number-theory.positive-integer-fractions +open import elementary-number-theory.positive-integers +open import elementary-number-theory.positive-rational-numbers +open import elementary-number-theory.rational-numbers +open import elementary-number-theory.reduced-integer-fractions +open import elementary-number-theory.strict-inequality-rational-numbers + +open import foundation.binary-transport +open import foundation.dependent-pair-types +open import foundation.identity-types +open import foundation.logical-equivalences +open import foundation.propositions +open import foundation.sets +open import foundation.subtypes +open import foundation.transport-along-identifications +open import foundation.universe-levels + +open import order-theory.inflationary-maps-posets +``` + +
+ +## Idea + +A [rational number](elementary-number-theory.rational-numbers.md) `x` is said to +be +{{#concept "nonnegative" Disambiguation="rational number" Agda=is-nonnegative-ℚ}} +if its numerator is a +[nonnegative integer](elementary-number-theory.nonnegative-integers.md). + +Nonnegative rational numbers are a [subsemigroup](group-theory.subsemigroups.md) +of the +[additive monoid of rational numbers](elementary-number-theory.additive-group-of-rational-numbers.md). + +## Definitions + +### The property of being a nonnegative rational number + +```agda +module _ + (q : ℚ) + where + + is-nonnegative-ℚ : UU lzero + is-nonnegative-ℚ = is-nonnegative-fraction-ℤ (fraction-ℚ q) + + is-prop-is-nonnegative-ℚ : is-prop is-nonnegative-ℚ + is-prop-is-nonnegative-ℚ = is-prop-is-nonnegative-fraction-ℤ (fraction-ℚ q) + + is-nonnegative-prop-ℚ : Prop lzero + pr1 is-nonnegative-prop-ℚ = is-nonnegative-ℚ + pr2 is-nonnegative-prop-ℚ = is-prop-is-nonnegative-ℚ +``` + +### The type of nonnegative rational numbers + +```agda +nonnegative-ℚ : UU lzero +nonnegative-ℚ = type-subtype is-nonnegative-prop-ℚ + +ℚ⁰⁺ : UU lzero +ℚ⁰⁺ = nonnegative-ℚ + +module _ + (x : nonnegative-ℚ) + where + + rational-ℚ⁰⁺ : ℚ + rational-ℚ⁰⁺ = pr1 x + + fraction-ℚ⁰⁺ : fraction-ℤ + fraction-ℚ⁰⁺ = fraction-ℚ rational-ℚ⁰⁺ + + numerator-ℚ⁰⁺ : ℤ + numerator-ℚ⁰⁺ = numerator-ℚ rational-ℚ⁰⁺ + + denominator-ℚ⁰⁺ : ℤ + denominator-ℚ⁰⁺ = denominator-ℚ rational-ℚ⁰⁺ + + is-nonnegative-rational-ℚ⁰⁺ : is-nonnegative-ℚ rational-ℚ⁰⁺ + is-nonnegative-rational-ℚ⁰⁺ = pr2 x + + is-nonnegative-fraction-ℚ⁰⁺ : is-nonnegative-fraction-ℤ fraction-ℚ⁰⁺ + is-nonnegative-fraction-ℚ⁰⁺ = pr2 x + + is-nonnegative-numerator-ℚ⁰⁺ : is-nonnegative-ℤ numerator-ℚ⁰⁺ + is-nonnegative-numerator-ℚ⁰⁺ = is-nonnegative-fraction-ℚ⁰⁺ + + is-positive-denominator-ℚ⁰⁺ : is-positive-ℤ denominator-ℚ⁰⁺ + is-positive-denominator-ℚ⁰⁺ = is-positive-denominator-ℚ rational-ℚ⁰⁺ + +abstract + eq-ℚ⁰⁺ : {x y : ℚ⁰⁺} → rational-ℚ⁰⁺ x = rational-ℚ⁰⁺ y → x = y + eq-ℚ⁰⁺ {x} {y} = eq-type-subtype is-nonnegative-prop-ℚ + +zero-ℚ⁰⁺ : ℚ⁰⁺ +zero-ℚ⁰⁺ = zero-ℚ , _ +``` + +## Properties + +### The nonnegative rational numbers form a set + +```agda +is-set-ℚ⁰⁺ : is-set ℚ⁰⁺ +is-set-ℚ⁰⁺ = is-set-type-subtype is-nonnegative-prop-ℚ is-set-ℚ +``` + +### The rational image of a nonnegative integer is nonnegative + +```agda +abstract + is-nonnegative-rational-ℤ : + (x : ℤ) → is-nonnegative-ℤ x → is-nonnegative-ℚ (rational-ℤ x) + is-nonnegative-rational-ℤ _ H = H + +nonnegative-rational-nonnegative-ℤ : nonnegative-ℤ → ℚ⁰⁺ +nonnegative-rational-nonnegative-ℤ (x , x-is-neg) = + ( rational-ℤ x , is-nonnegative-rational-ℤ x x-is-neg) +``` + +### The rational image of a nonnegative integer fraction is nonnegative + +```agda +abstract + is-nonnegative-rational-fraction-ℤ : + {x : fraction-ℤ} (P : is-nonnegative-fraction-ℤ x) → + is-nonnegative-ℚ (rational-fraction-ℤ x) + is-nonnegative-rational-fraction-ℤ {x} = + is-nonnegative-sim-fraction-ℤ + ( x) + ( reduce-fraction-ℤ x) + ( sim-reduced-fraction-ℤ x) +``` + +### A rational number `x` is nonnegative if and only if `0 ≤ x` + +```agda +module _ + (x : ℚ) + where + + abstract + leq-zero-is-nonnegative-ℚ : is-nonnegative-ℚ x → leq-ℚ zero-ℚ x + leq-zero-is-nonnegative-ℚ = + is-nonnegative-eq-ℤ (inv (cross-mul-diff-zero-fraction-ℤ (fraction-ℚ x))) + + is-nonnegative-leq-zero-ℚ : leq-ℚ zero-ℚ x → is-nonnegative-ℚ x + is-nonnegative-leq-zero-ℚ = + is-nonnegative-eq-ℤ (cross-mul-diff-zero-fraction-ℤ (fraction-ℚ x)) + + is-nonnegative-iff-leq-zero-ℚ : is-nonnegative-ℚ x ↔ leq-ℚ zero-ℚ x + is-nonnegative-iff-leq-zero-ℚ = + ( leq-zero-is-nonnegative-ℚ , + is-nonnegative-leq-zero-ℚ) +``` + +### The difference of a rational number with a rational number less than or equal to the first is nonnegative + +```agda +module _ + (x y : ℚ) (H : leq-ℚ x y) + where + + abstract + is-nonnegative-diff-leq-ℚ : is-nonnegative-ℚ (y -ℚ x) + is-nonnegative-diff-leq-ℚ = + is-nonnegative-leq-zero-ℚ + ( y -ℚ x) + ( backward-implication (iff-translate-diff-leq-zero-ℚ x y) H) + + nonnegative-diff-le-ℚ : ℚ⁰⁺ + nonnegative-diff-le-ℚ = (y -ℚ x , is-nonnegative-diff-leq-ℚ) +``` + +### The product of two nonnegative rational numbers is nonnegative + +```agda + is-nonnegative-mul-nonnegative-ℚ : + {x y : ℚ} → is-nonnegative-ℚ x → is-nonnegative-ℚ y → + is-nonnegative-ℚ (x *ℚ y) + is-nonnegative-mul-nonnegative-ℚ {x} {y} P Q = + is-nonnegative-rational-fraction-ℤ + ( is-nonnegative-mul-nonnegative-fraction-ℤ + { fraction-ℚ x} + { fraction-ℚ y} + ( P) + ( Q)) +``` + +### Multiplication by a nonnegative rational number preserves inequality + +```agda +abstract + preserves-leq-right-mul-ℚ⁰⁺ : + (p : ℚ⁰⁺) (q r : ℚ) → leq-ℚ q r → + leq-ℚ (q *ℚ rational-ℚ⁰⁺ p) (r *ℚ rational-ℚ⁰⁺ p) + preserves-leq-right-mul-ℚ⁰⁺ + p⁺@((p@(np , dp , pos-dp) , _) , nonneg-np) + (q@(nq , dq , _) , _) + (r@(nr , dr , _) , _) + q≤r = + preserves-leq-rational-fraction-ℤ + ( mul-fraction-ℤ q p) + ( mul-fraction-ℤ r p) + ( binary-tr + ( leq-ℤ) + ( interchange-law-mul-mul-ℤ _ _ _ _) + ( interchange-law-mul-mul-ℤ _ _ _ _) + ( preserves-leq-left-mul-nonnegative-ℤ + ( np *ℤ dp , + is-nonnegative-mul-nonnegative-positive-ℤ nonneg-np pos-dp) + ( nq *ℤ dr) + ( nr *ℤ dq) + ( q≤r))) + + preserves-leq-left-mul-ℚ⁰⁺ : + (p : ℚ⁰⁺) (q r : ℚ) → leq-ℚ q r → + leq-ℚ (rational-ℚ⁰⁺ p *ℚ q) (rational-ℚ⁰⁺ p *ℚ r) + preserves-leq-left-mul-ℚ⁰⁺ p q r q≤r = + binary-tr + ( leq-ℚ) + ( commutative-mul-ℚ q (rational-ℚ⁰⁺ p)) + ( commutative-mul-ℚ r (rational-ℚ⁰⁺ p)) + ( preserves-leq-right-mul-ℚ⁰⁺ p q r q≤r) +``` + +### Addition on nonnegative rational numbers + +```agda +abstract + is-nonnegative-add-ℚ : + (p q : ℚ) → is-nonnegative-ℚ p → is-nonnegative-ℚ q → + is-nonnegative-ℚ (p +ℚ q) + is-nonnegative-add-ℚ p q nonneg-p nonneg-q = + is-nonnegative-rational-fraction-ℤ + ( is-nonnegative-add-fraction-ℤ + { fraction-ℚ p} + { fraction-ℚ q} + ( nonneg-p) + ( nonneg-q)) + +add-ℚ⁰⁺ : ℚ⁰⁺ → ℚ⁰⁺ → ℚ⁰⁺ +add-ℚ⁰⁺ (p , nonneg-p) (q , nonneg-q) = + ( p +ℚ q , is-nonnegative-add-ℚ p q nonneg-p nonneg-q) + +infixl 35 _+ℚ⁰⁺_ +_+ℚ⁰⁺_ : ℚ⁰⁺ → ℚ⁰⁺ → ℚ⁰⁺ +_+ℚ⁰⁺_ = add-ℚ⁰⁺ +``` + +### Multiplication on nonnegative rational numbers + +```agda +abstract + is-nonnegative-mul-ℚ : + (p q : ℚ) → is-nonnegative-ℚ p → is-nonnegative-ℚ q → + is-nonnegative-ℚ (p *ℚ q) + is-nonnegative-mul-ℚ p q nonneg-p nonneg-q = + is-nonnegative-rational-fraction-ℤ + ( is-nonnegative-mul-nonnegative-fraction-ℤ + { fraction-ℚ p} + { fraction-ℚ q} + ( nonneg-p) + ( nonneg-q)) + +mul-ℚ⁰⁺ : ℚ⁰⁺ → ℚ⁰⁺ → ℚ⁰⁺ +mul-ℚ⁰⁺ (p , nonneg-p) (q , nonneg-q) = + ( p *ℚ q , is-nonnegative-mul-ℚ p q nonneg-p nonneg-q) + +infixl 35 _*ℚ⁰⁺_ +_*ℚ⁰⁺_ : ℚ⁰⁺ → ℚ⁰⁺ → ℚ⁰⁺ +_*ℚ⁰⁺_ = mul-ℚ⁰⁺ +``` + +### Inequality on nonnegative rational numbers + +```agda +leq-ℚ⁰⁺-Prop : ℚ⁰⁺ → ℚ⁰⁺ → Prop lzero +leq-ℚ⁰⁺-Prop (p , _) (q , _) = leq-ℚ-Prop p q + +leq-ℚ⁰⁺ : ℚ⁰⁺ → ℚ⁰⁺ → UU lzero +leq-ℚ⁰⁺ (p , _) (q , _) = leq-ℚ p q +``` + +### Addition of a nonnegative rational number is an increasing map + +```agda +abstract + is-inflationary-map-left-add-rational-ℚ⁰⁺ : + (p : ℚ⁰⁺) → is-inflationary-map-Poset ℚ-Poset (rational-ℚ⁰⁺ p +ℚ_) + is-inflationary-map-left-add-rational-ℚ⁰⁺ (p , nonneg-p) q = + tr + ( λ r → leq-ℚ r (p +ℚ q)) + ( left-unit-law-add-ℚ q) + ( preserves-leq-left-add-ℚ + ( q) + ( zero-ℚ) + ( p) + ( leq-zero-is-nonnegative-ℚ p nonneg-p)) + + is-inflationary-map-right-add-rational-ℚ⁰⁺ : + (p : ℚ⁰⁺) → is-inflationary-map-Poset ℚ-Poset (_+ℚ rational-ℚ⁰⁺ p) + is-inflationary-map-right-add-rational-ℚ⁰⁺ p q = + tr + ( leq-ℚ q) + ( commutative-add-ℚ (rational-ℚ⁰⁺ p) q) + ( is-inflationary-map-left-add-rational-ℚ⁰⁺ p q) +```