Skip to content

Multiplication of real numbers #1384

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 524 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
524 commits
Select commit Hold shift + click to select a range
51dcb2f
Apply suggestions from code review
lowasser Feb 14, 2025
4b9e12f
Merge branch 'master' into lower-upper-neg
lowasser Feb 14, 2025
82082cf
Use the established do syntax.
lowasser Feb 14, 2025
85ba02d
Merge branch 'lower-upper-neg' into located-implies-arithmetically-lo…
lowasser Feb 14, 2025
338e6b5
Fix up arithmetic location results to be about lower and upper reals
lowasser Feb 14, 2025
56d56d6
Merge remote-tracking branch 'origin/located-implies-arithmetically-l…
lowasser Feb 14, 2025
582f331
maybe name things better?
lowasser Feb 14, 2025
2c5d304
Merge branch 'lower-upper-neg' into add-lower-upper-reals
lowasser Feb 14, 2025
e981a15
Progress
lowasser Feb 14, 2025
24a67e7
Merge branch 'monad-existence' into add-lower-upper-reals
lowasser Feb 14, 2025
d90e459
Unit laws and simplifications
lowasser Feb 14, 2025
54f1668
Merge branch 'master' into lower-upper-neg
lowasser Feb 14, 2025
4f06d7d
Merge remote-tracking branch 'origin/lower-upper-neg' into lower-uppe…
lowasser Feb 14, 2025
517f36d
Merge branch 'master' into located-implies-arithmetically-located
lowasser Feb 14, 2025
d4dab07
Merge branch 'lower-upper-neg' into located-implies-arithmetically-lo…
lowasser Feb 14, 2025
1d4965b
make pre-commit
lowasser Feb 14, 2025
1d98b94
Progress
lowasser Feb 14, 2025
af03297
Merge branch 'located-implies-arithmetically-located' into add-reals-v2
lowasser Feb 14, 2025
c6e3ea0
Progress
lowasser Feb 14, 2025
848b271
Progress
lowasser Feb 14, 2025
b9a3d55
Finish
lowasser Feb 14, 2025
e88b6b2
Fixes
lowasser Feb 14, 2025
a8d3b47
Merge branch 'master' into inflattice
lowasser Feb 16, 2025
5ab121d
Merge branch 'master' into monad-existence
lowasser Feb 16, 2025
7c151c8
Merge branch 'master' into add-lower-upper-reals
lowasser Feb 16, 2025
c213682
Progress
lowasser Feb 18, 2025
2276510
Define minimum and maximum on real numbers
lowasser Feb 19, 2025
fff4eda
make pre-commit
lowasser Feb 19, 2025
e5861c3
Begin defining the absolute value.
lowasser Feb 19, 2025
89e5a16
Merge branch 'master' into min-max-lower-upper
lowasser Feb 19, 2025
e4ef49b
make pre-commit
lowasser Feb 19, 2025
7a1164e
Merge branch 'min-max-lower-upper' into abs-real
lowasser Feb 19, 2025
8e9b4c5
Prove the absolute value is nonnegative
lowasser Feb 19, 2025
f04c6fd
Fix links
lowasser Feb 19, 2025
73a6953
Merge branch 'min-max-lower-upper' into abs-real
lowasser Feb 19, 2025
681ab01
Back out do syntax
lowasser Feb 19, 2025
089282e
Merge branch 'master' into located-implies-arithmetically-located
lowasser Feb 19, 2025
4c313d1
Merge branch 'master' into located-implies-arithmetically-located
lowasser Feb 19, 2025
fa1ac2e
Rationalize names
lowasser Feb 19, 2025
a118fc6
Merge remote-tracking branch 'origin/located-implies-arithmetically-l…
lowasser Feb 19, 2025
10a7bd6
make pre-commit
lowasser Feb 19, 2025
2406ff7
Fix concept
lowasser Feb 19, 2025
77841fe
Merge branch 'located-implies-arithmetically-located' into add-reals-v2
lowasser Feb 19, 2025
20f0b97
Merge branch 'add-lower-upper-reals' into add-reals-v2
lowasser Feb 19, 2025
daa8d78
Reinstate do syntax
lowasser Feb 19, 2025
cb382aa
Define similarity in the real numbers without reference to inequality
lowasser Feb 19, 2025
eec2491
Merge branch 'add-reals-v2' into add-ineq-real
lowasser Feb 19, 2025
1128bd6
Define effects of addition on inequality
lowasser Feb 19, 2025
e051aa3
make pre-commit
lowasser Feb 19, 2025
031abb6
Merge branch 'add-reals-v2' into add-ineq-real
lowasser Feb 19, 2025
ca27b0d
make pre-commit
lowasser Feb 19, 2025
7d28427
Addition preserves strict inequality on real numbers
lowasser Feb 19, 2025
5c95806
Add the iff
lowasser Feb 19, 2025
9695b41
Fix concept link
lowasser Feb 19, 2025
139e0c9
Merge branch 'add-reals-v2' into add-ineq-real
lowasser Feb 19, 2025
1f4bd85
Define similarity of real numbers without reference to inequality, an…
lowasser Feb 19, 2025
adb5d0a
Merge branch 'add-reals-v2' into add-ineq-real
lowasser Feb 19, 2025
eaaa9c3
Merge branch 'master' into inflattice
lowasser Feb 19, 2025
9a54be1
Merge remote-tracking branch 'origin/inflattice' into inflattice
lowasser Feb 19, 2025
58d4bda
Merge branch 'inflattice' into min-max-lower-upper
lowasser Feb 19, 2025
b4fb302
Fix md links
lowasser Feb 19, 2025
368ac61
Line length
lowasser Feb 19, 2025
1db5bb7
Fix indentation
lowasser Feb 19, 2025
171a84b
Merge branch 'master' into monad-existence
lowasser Feb 19, 2025
c87de88
Addition respects rationals
lowasser Feb 20, 2025
85db7b9
Mark abstract
lowasser Feb 20, 2025
9f6f387
Merge relevant changes from Cauchy branch
lowasser Feb 21, 2025
38b4d5a
Merge branch 'master' into monad-existence
lowasser Feb 21, 2025
f95f03f
Truncate documentation.
lowasser Feb 21, 2025
4f64d85
Merge remote-tracking branch 'origin/monad-existence' into monad-exis…
lowasser Feb 21, 2025
b1233bf
Merge branch 'master' into monad-existence
lowasser Feb 21, 2025
385f10a
Cut more docs
lowasser Feb 21, 2025
63789a3
Cut docs more
lowasser Feb 21, 2025
539a1ac
Overhaul similarity of real numbers
lowasser Feb 21, 2025
681283a
Progress
lowasser Feb 21, 2025
5046f70
Start defining
lowasser Feb 21, 2025
d750489
Define the core idea
lowasser Feb 21, 2025
31cf14f
Transpositions for strict and nonstrict rational inequalities
lowasser Feb 21, 2025
d1fb935
Restart arithmetic location
lowasser Feb 21, 2025
5157b12
Merge branch 'monad-existence' into located-v2
lowasser Feb 21, 2025
4c126f2
Prove real numbers are arithmetically located
lowasser Feb 21, 2025
60d551e
Extract from previous drafts
lowasser Feb 21, 2025
2cfcbc7
Merge branch 'monad-existence' into add-lower-upper-reals
lowasser Feb 21, 2025
43e8811
Merge other changes
lowasser Feb 21, 2025
3ad5c8a
Identities for rational math derived from group properties
lowasser Feb 21, 2025
a91e6f0
Merge branch 'rational-identities' into transposing-inequalities-retr…
lowasser Feb 21, 2025
f124c2f
Use rational identities
lowasser Feb 21, 2025
a9e21cc
make pre-commit
lowasser Feb 21, 2025
0ef6ac4
Merge branch 'rational-identities' into add-lower-upper-reals
lowasser Feb 21, 2025
4f55756
Merge branch 'transposing-inequalities-retractions' into add-lower-up…
lowasser Feb 21, 2025
939f402
Use some identities.
lowasser Feb 21, 2025
b9a23b2
Use another identity
lowasser Feb 21, 2025
a4a37ea
Rename things
lowasser Feb 21, 2025
5d4ee70
Merge branch 'rework-similarity' into add-reals-v2
lowasser Feb 21, 2025
5abfc7b
Merge branch 'transposing-inequalities-retractions' into add-reals-v2
lowasser Feb 21, 2025
6fd2cc8
Merge branch 'located-v2' into add-reals-v2
lowasser Feb 21, 2025
3d941c2
Progress
lowasser Feb 22, 2025
3afd02d
Merge branch 'master' into add-reals-v2
lowasser Feb 22, 2025
9bf07df
Make opacity work!
lowasser Feb 22, 2025
268126d
Pull in opacity logic.
lowasser Feb 22, 2025
173c246
Merge branch 'master' into rework-similarity
lowasser Feb 22, 2025
3e9e272
Merge branch 'rework-similarity' into add-reals-v2
lowasser Feb 22, 2025
1be181f
Complete overhaul of addition
lowasser Feb 22, 2025
eea5a11
Merge branch 'master' into transposing-inequalities-retractions
lowasser Feb 22, 2025
d7281ed
Merge branch 'master' into add-lower-upper-reals
lowasser Feb 22, 2025
41c853a
Merge branch 'transposing-inequalities-retractions' into add-lower-up…
lowasser Feb 22, 2025
f700143
Merge branch 'add-lower-upper-reals' into add-reals-v2
lowasser Feb 22, 2025
4aa51dd
Use more identities
lowasser Feb 22, 2025
86a70b7
make pre-commit, revise doc
lowasser Feb 22, 2025
2a352be
Merge branch 'add-lower-upper-reals' into add-reals-v2
lowasser Feb 22, 2025
1bad7e2
make pre-commit
lowasser Feb 22, 2025
26c41ca
Simplifications
lowasser Feb 22, 2025
4f784e6
make pre-commit
lowasser Feb 22, 2025
87543f9
Add a bunch of stuff about reciprocals
lowasser Feb 23, 2025
a3cb818
Merge branch 'master' into inflattice
lowasser Feb 23, 2025
304e48b
Merge branch 'master' into inflattice
lowasser Feb 23, 2025
ac9be28
Merge remote-tracking branch 'origin/inflattice' into inflattice
lowasser Feb 23, 2025
95c75a3
Merge branch 'inflattice' into min-max-lower-upper
lowasser Feb 23, 2025
84d694e
Break out a section
lowasser Feb 23, 2025
a190827
make pre-commit
lowasser Feb 23, 2025
c8bbf3f
Make progress before realizing maybe we should start with interval ar…
lowasser Feb 24, 2025
7e17e0a
Factor out unit fractions file
lowasser Feb 25, 2025
bdb5085
make pre-commit
lowasser Feb 25, 2025
35ea4bf
Simplifications
lowasser Feb 25, 2025
a6136b8
make pre-commit
lowasser Feb 25, 2025
74efa30
Merge branch 'master' into reciprocals
lowasser Feb 25, 2025
54dd27b
Revert multiplicative group
lowasser Feb 26, 2025
afea9b6
Merge branch 'min-max-lower-upper' into interval-rational-multiplication
lowasser Feb 26, 2025
3940e6d
Beginnings
lowasser Feb 26, 2025
8d43bad
Progress
lowasser Feb 26, 2025
def2258
Merge branch 'reciprocals' into interval-rational-multiplication
lowasser Feb 26, 2025
2ddb2d6
Progress
lowasser Feb 26, 2025
acc5264
Progress
lowasser Feb 26, 2025
ed12bf8
Define negative integer fractions
lowasser Feb 26, 2025
ec218ba
Start on defining negative rationals
lowasser Feb 26, 2025
4f030cc
make pre-commit
lowasser Feb 26, 2025
8ee275f
Prove some results about negative rationals
lowasser Feb 26, 2025
b1fac84
Define negative rational numbers and important properties
lowasser Feb 26, 2025
b4520a1
make pre-commit
lowasser Feb 26, 2025
61a4880
Remove unused imports
lowasser Feb 26, 2025
97e43f5
Multiplication of closed intervals on the rational numbers
lowasser Feb 26, 2025
9961805
make pre-commit
lowasser Feb 26, 2025
70959e0
Merge branch 'master' into min-max-lower-upper
lowasser Feb 26, 2025
fa9738a
Apply suggestions from code review
lowasser Feb 28, 2025
8f059f3
Merge branch 'master' into min-max-lower-upper
lowasser Mar 4, 2025
ac06508
Minor formatting
lowasser Mar 5, 2025
bf5a08f
Merge branch 'master' into closed-interval-v2
lowasser Mar 17, 2025
995cf33
Fix merge
lowasser Mar 17, 2025
b1338cb
Merge remote-tracking branch 'origin/closed-interval-v2' into closed-…
lowasser Mar 17, 2025
a74f3be
Generalize functoriality of meets and joins
lowasser Mar 17, 2025
d6cafd1
make pre-commit
lowasser Mar 17, 2025
993f0c1
Fix missing function
lowasser Mar 17, 2025
69171a6
Apply suggestions from code review
lowasser Mar 22, 2025
ba351a6
Merge branch 'master' into min-max-lower-upper
lowasser Mar 22, 2025
8b3ad05
Respond to review comments
lowasser Mar 22, 2025
fad7de3
make pre-commit
lowasser Mar 22, 2025
dda8a69
Apply suggestions from code review
lowasser Mar 22, 2025
f727641
Progress
lowasser Mar 22, 2025
d919414
Merge remote-tracking branch 'origin/closed-interval-v2' into closed-…
lowasser Mar 22, 2025
ce3bf2f
Merge branch 'master' into closed-interval-v2
lowasser Mar 22, 2025
846914d
Merge branch 'master' into negative-rational-numbers
lowasser Mar 22, 2025
1595b14
nonnegative integer fractions
lowasser Mar 22, 2025
dd97d3b
Update src/real-numbers/maximum-real-numbers.lagda.md
fredrik-bakke Mar 23, 2025
3064497
Update src/real-numbers/minimum-upper-dedekind-real-numbers.lagda.md
fredrik-bakke Mar 23, 2025
2e2795e
Merge branch 'master' into min-max-lower-upper
fredrik-bakke Mar 23, 2025
5fb9a18
Simplify
lowasser Mar 23, 2025
8296d49
Merge branch 'master' into closed-interval-v2
lowasser Mar 23, 2025
3eb0a07
make pre-commit
lowasser Mar 23, 2025
3507f55
Pull over changes to min/max on rationals
lowasser Mar 23, 2025
e1e9c47
Merge remote-tracking branch 'origin/min-max-lower-upper' into min-ma…
lowasser Mar 23, 2025
b7de2a1
Progress
lowasser Mar 23, 2025
b890871
Merge branch 'master' into negative-rational-numbers
lowasser Mar 23, 2025
7d56914
Merge branch 'master' into add-reals-v2
lowasser Mar 23, 2025
7c6bdc5
make pre-commit
lowasser Mar 23, 2025
43f50b1
Minor simplification
lowasser Mar 23, 2025
7a9298a
Correct indentation
lowasser Mar 23, 2025
28c98fd
Merge branch 'master' into closed-interval-v2
lowasser Mar 23, 2025
7d98d25
Merge branch 'master' into min-max-lower-upper
lowasser Mar 24, 2025
cda12f9
Merge branch 'master' into negative-rational-numbers
lowasser Mar 24, 2025
cccf99f
make pre-commit
lowasser Mar 24, 2025
86bb507
Merge branch 'min-max-lower-upper' into negative-rational-numbers
lowasser Mar 24, 2025
af942b4
Pull over more necessary changes
lowasser Mar 24, 2025
d839b52
Progress
lowasser Mar 24, 2025
3f508b5
Merge branch 'min-max-lower-upper' into abs-rational
lowasser Mar 24, 2025
c37f6e3
edits `abstract`
fredrik-bakke Mar 24, 2025
abab1a8
Merge branch 'master' into closed-interval-v2
fredrik-bakke Mar 24, 2025
1eb2986
pre-commit
fredrik-bakke Mar 24, 2025
599b17f
Progress
lowasser Mar 24, 2025
18d4ce9
Merge branch 'master' into closed-interval-v2
lowasser Mar 25, 2025
1c6fddd
Progress
lowasser Mar 25, 2025
bc6826a
Merge remote-tracking branch 'origin/closed-interval-v2' into closed-…
lowasser Mar 25, 2025
28654b2
Progress
lowasser Mar 25, 2025
674b50d
Progress
lowasser Mar 25, 2025
23533b2
make pre-commit
lowasser Mar 25, 2025
94def9b
Merge branch 'closed-interval-v2' into abs-rational
lowasser Mar 25, 2025
c833e68
Merge branch 'abs-rational' into mul-reals
lowasser Mar 25, 2025
7c72c6d
Make abstract
lowasser Mar 25, 2025
558ffd2
Remove duplicate declaration
lowasser Mar 25, 2025
98a3a26
Merge branch 'abs-rational' into mul-reals
lowasser Mar 25, 2025
3652aac
Merge branch 'master' into abs-rational
lowasser Mar 25, 2025
04c5e46
Prove roundedness
lowasser Mar 26, 2025
7383280
Merge branch 'master' into mul-reals
lowasser Mar 26, 2025
8b7bd7a
Fix duplication
lowasser Mar 26, 2025
a277e96
Prove disjointness
lowasser Mar 26, 2025
d6702f5
Merge remote-tracking branch 'origin/abs-rational' into abs-rational
lowasser Mar 26, 2025
45fca9a
make pre-commit
lowasser Mar 26, 2025
9c046fd
Merge branch 'add-reals-v2' into mul-reals
lowasser Mar 26, 2025
4d8ea50
make pre-commit
lowasser Mar 26, 2025
ef02378
Merge branch 'master' into abs-real
lowasser Mar 26, 2025
5db467d
Progress
lowasser Mar 26, 2025
5b103eb
make pre-commit
lowasser Mar 26, 2025
759bf61
Revert
lowasser Mar 26, 2025
0715296
Merge branch 'abs-real' into mul-reals
lowasser Mar 26, 2025
45c2230
PRogress
lowasser Mar 26, 2025
de67304
Make abstract
lowasser Mar 26, 2025
ca79a2d
Merge branch 'add-reals-v2' into mul-reals
lowasser Mar 26, 2025
a59da65
Fix indentatino
lowasser Mar 26, 2025
e06b262
Merge branch 'add-reals-v2' into mul-reals
lowasser Mar 26, 2025
872c07e
Update src/order-theory/least-upper-bounds-large-posets.lagda.md
lowasser Mar 26, 2025
7a9522e
Progress
lowasser Mar 26, 2025
1760b08
Review comments
lowasser Mar 26, 2025
d6b5608
Review comments
lowasser Mar 26, 2025
d6788e8
Apply suggestions from code review
lowasser Mar 26, 2025
b03d63b
Review comments
lowasser Mar 26, 2025
8d4223f
Merge remote-tracking branch 'origin/add-reals-v2' into add-reals-v2
lowasser Mar 26, 2025
3c76d0b
Apply suggestions from code review
lowasser Mar 26, 2025
db9540c
Merge remote-tracking branch 'origin/add-reals-v2' into add-reals-v2
lowasser Mar 26, 2025
0c08027
make pre-commit
lowasser Mar 26, 2025
8b6e5d7
Apply suggestions from code review
lowasser Mar 26, 2025
70bd0b8
Apply suggestions from code review
lowasser Mar 26, 2025
bc28de4
Respond to review
lowasser Mar 26, 2025
333c711
Merge remote-tracking branch 'origin/add-reals-v2' into add-reals-v2
lowasser Mar 26, 2025
fe49786
make pre-commit
lowasser Mar 26, 2025
45e1d3b
Merge branch 'master' into add-reals-v2
lowasser Mar 26, 2025
b85db3d
Wrap line
lowasser Mar 26, 2025
96cc15a
Merge branch 'add-reals-v2' into mul-reals
lowasser Mar 26, 2025
07c6b56
Merge branch 'abs-real' into mul-reals
lowasser Mar 26, 2025
cef6c75
Apply suggestions from code review
lowasser Mar 27, 2025
4078ef9
Review coments
lowasser Mar 27, 2025
40877b9
Fix
lowasser Mar 27, 2025
cf84384
Merge remote-tracking branch 'origin/abs-real' into mul-reals
lowasser Mar 27, 2025
566538b
Merge branch 'master' into mul-reals
lowasser Mar 27, 2025
b8167af
Merge branch 'master' into abs-rational
lowasser Mar 27, 2025
f547f4e
Simplifications
lowasser Mar 27, 2025
8659440
Review comments
lowasser Mar 27, 2025
9ed1b76
Merge branch 'master' into abs-rational
lowasser Mar 27, 2025
3b096e1
Merge branch 'master' into mul-reals
lowasser Mar 27, 2025
d1c40c6
Progress
lowasser Mar 27, 2025
799838f
Merge branch 'abs-rational' into mul-reals
lowasser Mar 27, 2025
2ea5b92
Progress
lowasser Mar 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions src/elementary-number-theory.lagda.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down
324 changes: 324 additions & 0 deletions src/elementary-number-theory/absolute-value-rational-numbers.lagda.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,324 @@
# The absolute value function on the rational numbers

```agda
{-# OPTIONS --lossy-unification #-}

module elementary-number-theory.absolute-value-rational-numbers where
```

<details><summary>Imports</summary>

```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
```

</details>

## 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)

leq-neg-abs-ℚ : (q : ℚ) → leq-ℚ (neg-ℚ q) (rational-abs-ℚ q)
leq-neg-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)
( leq-neg-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-nonneg-abs-ℚ :
(p : ℚ⁰⁺) → (q : ℚ) →
leq-ℚ⁰⁺ (abs-ℚ (rational-ℚ⁰⁺ p +ℚ q)) (p +ℚ⁰⁺ abs-ℚ q)
triangle-inequality-nonneg-abs-ℚ p⁰⁺@(p , nonneg-p) q
with linear-leq-ℚ zero-ℚ q
... | inl 0≤q =
leq-eq-ℚ
( rational-abs-ℚ (p +ℚ q))
( p +ℚ rational-abs-ℚ q)
( rational-abs-zero-leq-ℚ
( p +ℚ q)
( tr
( λ r → leq-ℚ r (p +ℚ q))
( left-unit-law-add-ℚ zero-ℚ)
( preserves-leq-add-ℚ
{ zero-ℚ}
{ p}
{ zero-ℚ}
{ q}
( leq-zero-is-nonnegative-ℚ p nonneg-p)
( 0≤q))) ∙
ap-add-ℚ
( refl)
( inv (rational-abs-zero-leq-ℚ q 0≤q)))
... | inr q≤0 =
leq-max-leq-both-ℚ
( p +ℚ rational-abs-ℚ q)
( p +ℚ q)
( neg-ℚ (p +ℚ q))
( transitive-leq-ℚ
( p +ℚ q)
( p)
( p +ℚ rational-abs-ℚ q)
( is-inflationary-map-right-add-rational-ℚ⁰⁺ (abs-ℚ q) p)
( tr
( leq-ℚ (p +ℚ q))
( right-unit-law-add-ℚ p)
( preserves-leq-right-add-ℚ p q zero-ℚ q≤0)))
( transitive-leq-ℚ
( neg-ℚ (p +ℚ q))
( neg-ℚ q)
( p +ℚ rational-abs-ℚ q)
( inv-tr
( λ r → leq-ℚ (neg-ℚ q) (p +ℚ r))
( rational-abs-leq-zero-ℚ q q≤0)
( is-inflationary-map-left-add-rational-ℚ⁰⁺ p⁰⁺ (neg-ℚ q)))
( binary-tr
( leq-ℚ)
( inv (distributive-neg-add-ℚ p q))
( left-unit-law-add-ℚ (neg-ℚ q))
( preserves-leq-left-add-ℚ
( neg-ℚ q)
( neg-ℚ p)
( zero-ℚ)
( neg-leq-ℚ zero-ℚ p (leq-zero-is-nonnegative-ℚ p nonneg-p)))))

triangle-inequality-abs-ℚ :
(p q : ℚ) → leq-ℚ⁰⁺ (abs-ℚ (p +ℚ q)) (abs-ℚ p +ℚ⁰⁺ abs-ℚ q)
triangle-inequality-abs-ℚ p q
with linear-leq-ℚ zero-ℚ p
... | inl 0≤p =
let
p⁰⁺ = p , is-nonnegative-leq-zero-ℚ p 0≤p
in
inv-tr
( λ r → leq-ℚ⁰⁺ (abs-ℚ (p +ℚ q)) (r +ℚ⁰⁺ abs-ℚ q))
( abs-rational-ℚ⁰⁺ p⁰⁺)
( triangle-inequality-nonneg-abs-ℚ p⁰⁺ q)
... | inr p≤0 =
binary-tr
( leq-ℚ)
( ap
( rational-ℚ⁰⁺)
( ap abs-ℚ (inv (distributive-neg-add-ℚ p q)) ∙
abs-neg-ℚ (p +ℚ q)))
( ap-add-ℚ
( inv (rational-abs-leq-zero-ℚ p p≤0))
( ap rational-ℚ⁰⁺ (abs-neg-ℚ q)))
( triangle-inequality-nonneg-abs-ℚ
( neg-ℚ p ,
is-nonnegative-leq-zero-ℚ (neg-ℚ p) (neg-leq-ℚ p zero-ℚ p≤0))
( neg-ℚ 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)))
```
Original file line number Diff line number Diff line change
Expand Up @@ -224,4 +224,39 @@ abstract
( pu≤max-ps-pt)
( qu≤max-qs-qt))
( ru≤max-pu-qu)

leq-lower-upper-bounds-mul-closed-interval-ℚ :
(p q r s p' q' r' s' : ℚ) →
(p ≤-ℚ q) → (r ≤-ℚ s) → (p' ≤-ℚ q') → (r' ≤-ℚ s') →
(p ≤-ℚ q') → (p' ≤-ℚ q) → (r ≤-ℚ s') → (r' ≤-ℚ s) →
min-ℚ (min-ℚ (p *ℚ r) (p *ℚ s)) (min-ℚ (q *ℚ r) (q *ℚ s)) ≤-ℚ
max-ℚ (max-ℚ (p' *ℚ r') (p' *ℚ s')) (max-ℚ (q' *ℚ r') (q' *ℚ s'))
leq-lower-upper-bounds-mul-closed-interval-ℚ
p q r s p' q' r' s' p≤q r≤s p'≤q' r'≤s' p≤q' p'≤q r≤s' r'≤s =
let
p'' = max-ℚ p p'
r'' = max-ℚ r r'
min = min-ℚ (min-ℚ (p *ℚ r) (p *ℚ s)) (min-ℚ (q *ℚ r) (q *ℚ s))
max = max-ℚ (max-ℚ (p' *ℚ r') (p' *ℚ s')) (max-ℚ (q' *ℚ r') (q' *ℚ s'))
(min≤p''r'' , _) =
mul-closed-interval-closed-interval-ℚ
( p)
( q)
( p'')
( r)
( s)
( r'')
( leq-left-max-ℚ p p' , leq-max-leq-both-ℚ q p p' p≤q p'≤q)
( leq-left-max-ℚ r r' , leq-max-leq-both-ℚ s r r' r≤s r'≤s)
(_ , p''r''≤max) =
mul-closed-interval-closed-interval-ℚ
( p')
( q')
( p'')
( r')
( s')
( r'')
( leq-right-max-ℚ p p' , leq-max-leq-both-ℚ q' p p' p≤q' p'≤q')
( leq-right-max-ℚ r r' , leq-max-leq-both-ℚ s' r r' r≤s' r'≤s')
in transitive-leq-ℚ min (p'' *ℚ r'') max p''r''≤max min≤p''r''
```
Loading