Skip to content

Commit 05c0c4f

Browse files
authored
Multiplication of real numbers (#1384)
Work-in-progress, not ready for review, but at least putting this here to show how the parts fit together. Will complete #1353 .
1 parent 69eb286 commit 05c0c4f

20 files changed

+2371
-27
lines changed

src/elementary-number-theory.lagda.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
```agda
1010
module elementary-number-theory where
1111
12+
open import elementary-number-theory.absolute-value-closed-intervals-rational-numbers public
1213
open import elementary-number-theory.absolute-value-integers public
1314
open import elementary-number-theory.absolute-value-rational-numbers public
1415
open import elementary-number-theory.ackermann-function public
@@ -115,6 +116,7 @@ open import elementary-number-theory.kolakoski-sequence public
115116
open import elementary-number-theory.legendre-symbol public
116117
open import elementary-number-theory.lower-bounds-natural-numbers public
117118
open import elementary-number-theory.maximum-natural-numbers public
119+
open import elementary-number-theory.maximum-nonnegative-rational-numbers public
118120
open import elementary-number-theory.maximum-positive-rational-numbers public
119121
open import elementary-number-theory.maximum-rational-numbers public
120122
open import elementary-number-theory.maximum-standard-finite-types public
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Absolute value on closed intervals in the rational numbers
2+
3+
```agda
4+
module elementary-number-theory.absolute-value-closed-intervals-rational-numbers where
5+
```
6+
7+
<details><summary>Imports</summary>
8+
9+
```agda
10+
open import elementary-number-theory.absolute-value-rational-numbers
11+
open import elementary-number-theory.closed-intervals-rational-numbers
12+
open import elementary-number-theory.inequality-nonnegative-rational-numbers
13+
open import elementary-number-theory.inequality-rational-numbers
14+
open import elementary-number-theory.maximum-nonnegative-rational-numbers
15+
open import elementary-number-theory.maximum-rational-numbers
16+
open import elementary-number-theory.nonnegative-rational-numbers
17+
open import elementary-number-theory.rational-numbers
18+
19+
open import foundation.binary-transport
20+
open import foundation.coproduct-types
21+
open import foundation.dependent-pair-types
22+
open import foundation.identity-types
23+
```
24+
25+
</details>
26+
27+
## Idea
28+
29+
The
30+
[absolute value](elementary-number-theory.absolute-value-rational-numbers.md) of
31+
an element of a
32+
[closed interval](elementary-number-theory.closed-intervals-rational-numbers.md)
33+
`[a, b]` of [rational numbers](elementary-number-theory.rational-numbers.md) is
34+
bounded by `max(|a|, |b|)`.
35+
36+
## Definition
37+
38+
```agda
39+
max-abs-closed-interval-ℚ : closed-interval-ℚ → ℚ⁰⁺
40+
max-abs-closed-interval-ℚ ((p , q) , p≤q) = max-ℚ⁰⁺ (abs-ℚ p) (abs-ℚ q)
41+
42+
rational-max-abs-closed-interval-ℚ : closed-interval-ℚ → ℚ
43+
rational-max-abs-closed-interval-ℚ [p,q] =
44+
rational-ℚ⁰⁺ (max-abs-closed-interval-ℚ [p,q])
45+
```
46+
47+
## Properties
48+
49+
### If `r ∈ [p,q]`, then `|r| ≤ max(|p|, |q|)`
50+
51+
```agda
52+
abstract
53+
leq-max-abs-is-in-closed-interval-ℚ :
54+
([p,q] : closed-interval-ℚ) (r : ℚ) → is-in-closed-interval-ℚ [p,q] r →
55+
leq-ℚ⁰⁺ (abs-ℚ r) (max-abs-closed-interval-ℚ [p,q])
56+
leq-max-abs-is-in-closed-interval-ℚ ((p , q) , p≤q) r (p≤r , r≤q) =
57+
rec-coproduct
58+
( λ r≤0 →
59+
transitive-leq-ℚ
60+
( rational-abs-ℚ r)
61+
( rational-abs-ℚ p)
62+
( max-ℚ (rational-abs-ℚ p) (rational-abs-ℚ q))
63+
( leq-left-max-ℚ _ _)
64+
( leq-abs-leq-leq-neg-ℚ
65+
( r)
66+
( rational-abs-ℚ p)
67+
( transitive-leq-ℚ r zero-ℚ (rational-abs-ℚ p)
68+
( leq-zero-rational-ℚ⁰⁺ (abs-ℚ p))
69+
( r≤0))
70+
( transitive-leq-ℚ (neg-ℚ r) (neg-ℚ p) (rational-abs-ℚ p)
71+
( neg-leq-abs-ℚ p)
72+
( neg-leq-ℚ _ _ p≤r))))
73+
( λ 0≤r →
74+
transitive-leq-ℚ
75+
( rational-abs-ℚ r)
76+
( rational-abs-ℚ q)
77+
( max-ℚ (rational-abs-ℚ p) (rational-abs-ℚ q))
78+
( leq-right-max-ℚ _ _)
79+
( binary-tr
80+
( leq-ℚ)
81+
( inv (rational-abs-zero-leq-ℚ r 0≤r))
82+
( inv
83+
( rational-abs-zero-leq-ℚ
84+
( q)
85+
( transitive-leq-ℚ zero-ℚ r q r≤q 0≤r)))
86+
( r≤q)))
87+
( linear-leq-ℚ r zero-ℚ)
88+
```

src/elementary-number-theory/absolute-value-rational-numbers.lagda.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ module elementary-number-theory.absolute-value-rational-numbers where
1111
```agda
1212
open import elementary-number-theory.addition-nonnegative-rational-numbers
1313
open import elementary-number-theory.addition-rational-numbers
14+
open import elementary-number-theory.difference-rational-numbers
1415
open import elementary-number-theory.inequality-nonnegative-rational-numbers
1516
open import elementary-number-theory.inequality-rational-numbers
1617
open import elementary-number-theory.maximum-rational-numbers
1718
open import elementary-number-theory.multiplication-nonnegative-rational-numbers
1819
open import elementary-number-theory.multiplication-rational-numbers
1920
open import elementary-number-theory.nonnegative-rational-numbers
21+
open import elementary-number-theory.positive-rational-numbers
2022
open import elementary-number-theory.rational-numbers
2123
open import elementary-number-theory.strict-inequality-rational-numbers
2224
@@ -127,6 +129,16 @@ opaque
127129
( q≤0))
128130
```
129131

132+
### The absolute value of a positive rational number is the number itself
133+
134+
```agda
135+
abstract
136+
rational-abs-rational-ℚ⁺ :
137+
(q : ℚ⁺) → rational-abs-ℚ (rational-ℚ⁺ q) = rational-ℚ⁺ q
138+
rational-abs-rational-ℚ⁺ q =
139+
ap rational-ℚ⁰⁺ (abs-rational-ℚ⁰⁺ (nonnegative-ℚ⁺ q))
140+
```
141+
130142
### The absolute value of the negation of `q` is the absolute value of `q`
131143

132144
```agda
@@ -211,6 +223,14 @@ abstract
211223
{ rational-abs-ℚ q}
212224
( neg-leq-abs-ℚ p)
213225
( neg-leq-abs-ℚ q)))
226+
227+
triangle-inequality-abs-diff-ℚ :
228+
(p q : ℚ) → leq-ℚ⁰⁺ (abs-ℚ (p -ℚ q)) (abs-ℚ p +ℚ⁰⁺ abs-ℚ q)
229+
triangle-inequality-abs-diff-ℚ p q =
230+
tr
231+
( leq-ℚ⁰⁺ (abs-ℚ (p -ℚ q)))
232+
( ap-binary add-ℚ⁰⁺ (refl {x = abs-ℚ p}) (abs-neg-ℚ q))
233+
( triangle-inequality-abs-ℚ p (neg-ℚ q))
214234
```
215235

216236
### `|ab| = |a||b|`
@@ -288,4 +308,9 @@ opaque
288308
is-nonnegative-leq-zero-ℚ (neg-ℚ p) (neg-leq-ℚ p zero-ℚ p≤0)))
289309
= rational-abs-ℚ p *ℚ rational-abs-ℚ q
290310
by ap (_*ℚ rational-abs-ℚ q) (inv (rational-abs-leq-zero-ℚ p p≤0)))
311+
312+
abstract
313+
rational-abs-mul-ℚ :
314+
(p q : ℚ) → rational-abs-ℚ (p *ℚ q) = rational-abs-ℚ p *ℚ rational-abs-ℚ q
315+
rational-abs-mul-ℚ p q = ap rational-ℚ⁰⁺ (abs-mul-ℚ p q)
291316
```

src/elementary-number-theory/addition-rational-numbers.lagda.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ module elementary-number-theory.addition-rational-numbers where
1111
```agda
1212
open import elementary-number-theory.addition-integer-fractions
1313
open import elementary-number-theory.addition-integers
14+
open import elementary-number-theory.addition-natural-numbers
1415
open import elementary-number-theory.integer-fractions
1516
open import elementary-number-theory.integers
1617
open import elementary-number-theory.natural-numbers
@@ -33,9 +34,9 @@ open import foundation.sections
3334
## Idea
3435

3536
We introduce
36-
{{#concept "addition" WDID=Q32043 WD="addition" Disambiguation="rational numbers" Agda=add-ℚ}}
37-
on the [rational numbers](elementary-number-theory.rational-numbers.md) and
38-
derive its basic properties.
37+
{{#concept "addition" Disambiguation="rational numbers" Agda=add-ℚ}} on the
38+
[rational numbers](elementary-number-theory.rational-numbers.md) and derive its
39+
basic properties.
3940

4041
## Definition
4142

@@ -304,6 +305,15 @@ abstract
304305
by is-retraction-rational-fraction-ℚ (rational-ℤ (x +ℤ y))
305306
```
306307

308+
### The inclusion of natural numbers preserves addition
309+
310+
```agda
311+
add-rational-ℕ :
312+
(m n : ℕ) → rational-ℕ m +ℚ rational-ℕ n = rational-ℕ (m +ℕ n)
313+
add-rational-ℕ m n =
314+
add-rational-ℤ _ _ ∙ ap rational-ℤ (add-int-ℕ m n)
315+
```
316+
307317
### The rational successor of an integer is the successor of the integer
308318

309319
```agda

src/elementary-number-theory/archimedean-property-rational-numbers.lagda.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,9 @@ open import foundation.dependent-pair-types
2525
open import foundation.existential-quantification
2626
open import foundation.identity-types
2727
open import foundation.propositional-truncations
28+
open import foundation.transport-along-identifications
29+
30+
open import logic.functoriality-existential-quantification
2831
```
2932

3033
</details>
@@ -75,3 +78,17 @@ abstract
7578
archimedean-property-ℚ x y pos-x =
7679
unit-trunc-Prop (bound-archimedean-property-ℚ x y pos-x)
7780
```
81+
82+
## Corollaries
83+
84+
### For any rational `q`, there exists a natural number `n` with `q < n`
85+
86+
```agda
87+
abstract
88+
exists-greater-natural-ℚ :
89+
(q : ℚ) → exists ℕ (λ n → le-ℚ-Prop q (rational-ℕ n))
90+
exists-greater-natural-ℚ q =
91+
map-tot-exists
92+
( λ _ → tr (le-ℚ q) (right-unit-law-mul-ℚ _))
93+
( archimedean-property-ℚ one-ℚ q _)
94+
```

src/elementary-number-theory/closed-intervals-rational-numbers.lagda.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ module elementary-number-theory.closed-intervals-rational-numbers where
88

99
```agda
1010
open import elementary-number-theory.decidable-total-order-rational-numbers
11+
open import elementary-number-theory.distance-rational-numbers
1112
open import elementary-number-theory.inequality-rational-numbers
1213
open import elementary-number-theory.maximum-rational-numbers
1314
open import elementary-number-theory.minimum-rational-numbers
@@ -83,9 +84,17 @@ is-below-prop-closed-interval-ℚ :
8384
closed-interval-ℚ → subtype lzero ℚ
8485
is-below-prop-closed-interval-ℚ ((a , _) , _) b = le-ℚ-Prop b a
8586
87+
is-below-closed-interval-ℚ : closed-interval-ℚ → ℚ → UU lzero
88+
is-below-closed-interval-ℚ [a,b] q =
89+
type-Prop (is-below-prop-closed-interval-ℚ [a,b] q)
90+
8691
is-above-prop-closed-interval-ℚ :
8792
closed-interval-ℚ → subtype lzero ℚ
8893
is-above-prop-closed-interval-ℚ ((_ , a) , _) b = le-ℚ-Prop a b
94+
95+
is-above-closed-interval-ℚ : closed-interval-ℚ → ℚ → UU lzero
96+
is-above-closed-interval-ℚ [a,b] q =
97+
type-Prop (is-above-prop-closed-interval-ℚ [a,b] q)
8998
```
9099

91100
### The width of a closed interval
@@ -177,3 +186,26 @@ upper-bound-is-in-closed-interval-ℚ :
177186
upper-bound-is-in-closed-interval-ℚ =
178187
upper-bound-is-in-closed-interval-Poset ℚ-Poset
179188
```
189+
190+
### The distance between the lower and upper bounds of a closed interval is its width
191+
192+
```agda
193+
abstract
194+
eq-width-dist-lower-upper-bounds-closed-interval-ℚ :
195+
([a,b] : closed-interval-ℚ) →
196+
rational-dist-ℚ
197+
( lower-bound-closed-interval-ℚ [a,b])
198+
( upper-bound-closed-interval-ℚ [a,b]) =
199+
width-closed-interval-ℚ [a,b]
200+
eq-width-dist-lower-upper-bounds-closed-interval-ℚ ((a , b) , a≤b) =
201+
eq-dist-diff-leq-ℚ a b a≤b
202+
203+
eq-width-dist-upper-lower-bounds-closed-interval-ℚ :
204+
([a,b] : closed-interval-ℚ) →
205+
rational-dist-ℚ
206+
( upper-bound-closed-interval-ℚ [a,b])
207+
( lower-bound-closed-interval-ℚ [a,b]) =
208+
width-closed-interval-ℚ [a,b]
209+
eq-width-dist-upper-lower-bounds-closed-interval-ℚ ((a , b) , a≤b) =
210+
eq-dist-diff-leq-ℚ' b a a≤b
211+
```

src/elementary-number-theory/distance-rational-numbers.lagda.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,18 @@ abstract
6464
inv (abs-neg-ℚ _) ∙ ap abs-ℚ (distributive-neg-diff-ℚ _ _)
6565
```
6666

67+
### A rational number's distance from itself is zero
68+
69+
```agda
70+
abstract
71+
dist-self-ℚ : (q : ℚ) → dist-ℚ q q = zero-ℚ⁰⁺
72+
dist-self-ℚ q =
73+
ap abs-ℚ (right-inverse-law-add-ℚ q) ∙ abs-rational-ℚ⁰⁺ zero-ℚ⁰⁺
74+
75+
rational-dist-self-ℚ : (q : ℚ) → rational-dist-ℚ q q = zero-ℚ
76+
rational-dist-self-ℚ q = ap rational-ℚ⁰⁺ (dist-self-ℚ q)
77+
```
78+
6779
### The differences of the arguments are less than or equal to their distance
6880

6981
```agda
@@ -225,6 +237,11 @@ abstract
225237
( q -ℚ p)
226238
( backward-implication (iff-translate-diff-leq-zero-ℚ p q) p≤q)
227239
240+
eq-dist-diff-leq-ℚ' : (p q : ℚ) → leq-ℚ q p → rational-dist-ℚ p q = p -ℚ q
241+
eq-dist-diff-leq-ℚ' p q q≤p =
242+
ap rational-ℚ⁰⁺ (commutative-dist-ℚ _ _) ∙
243+
eq-dist-diff-leq-ℚ q p q≤p
244+
228245
eq-dist-diff-max-min-ℚ :
229246
(p q : ℚ) → rational-dist-ℚ p q = max-ℚ p q -ℚ min-ℚ p q
230247
eq-dist-diff-max-min-ℚ p q =

src/elementary-number-theory/inequality-integers.lagda.md

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -215,20 +215,37 @@ reflects-leq-right-add-ℤ z x y =
215215
is-nonnegative-eq-ℤ (left-translation-diff-ℤ y x z)
216216
```
217217

218-
### The inclusion of ℕ into ℤ preserves inequality
218+
### The inclusion of ℕ into ℤ preserves and reflects inequality
219219

220220
```agda
221-
leq-int-ℕ : (x y : ℕ) → leq-ℕ x y → leq-ℤ (int-ℕ x) (int-ℕ y)
222-
leq-int-ℕ zero-ℕ y H =
223-
tr
224-
( is-nonnegative-ℤ)
225-
( inv (right-unit-law-add-ℤ (int-ℕ y)))
226-
( is-nonnegative-int-ℕ y)
227-
leq-int-ℕ (succ-ℕ x) (succ-ℕ y) H = tr (is-nonnegative-ℤ)
228-
( inv (diff-succ-ℤ (int-ℕ y) (int-ℕ x)) ∙
229-
( ap (_-ℤ (succ-ℤ (int-ℕ x))) (succ-int-ℕ y) ∙
230-
ap ((int-ℕ (succ-ℕ y)) -ℤ_) (succ-int-ℕ x)))
231-
( leq-int-ℕ x y H)
221+
abstract
222+
leq-int-ℕ : (x y : ℕ) → leq-ℕ x y → leq-ℤ (int-ℕ x) (int-ℕ y)
223+
leq-int-ℕ zero-ℕ y H =
224+
tr
225+
( is-nonnegative-ℤ)
226+
( inv (right-unit-law-add-ℤ (int-ℕ y)))
227+
( is-nonnegative-int-ℕ y)
228+
leq-int-ℕ (succ-ℕ x) (succ-ℕ y) H =
229+
tr
230+
( is-nonnegative-ℤ)
231+
( ( inv (diff-succ-ℤ (int-ℕ y) (int-ℕ x))) ∙
232+
( ap (_-ℤ (succ-ℤ (int-ℕ x))) (succ-int-ℕ y)) ∙
233+
( ap ((int-ℕ (succ-ℕ y)) -ℤ_) (succ-int-ℕ x)))
234+
( leq-int-ℕ x y H)
235+
236+
reflects-leq-int-ℕ : (x y : ℕ) → leq-ℤ (int-ℕ x) (int-ℕ y) → leq-ℕ x y
237+
reflects-leq-int-ℕ zero-ℕ y x≤y = star
238+
reflects-leq-int-ℕ (succ-ℕ x) (succ-ℕ y) x≤y =
239+
reflects-leq-int-ℕ x y
240+
( tr
241+
( is-nonnegative-ℤ)
242+
( ap-diff-ℤ (inv (succ-int-ℕ y)) (inv (succ-int-ℕ x)) ∙
243+
diff-succ-ℤ (int-ℕ y) (int-ℕ x))
244+
( x≤y))
245+
246+
iff-leq-int-ℕ : (x y : ℕ) → leq-ℕ x y ↔ leq-ℤ (int-ℕ x) (int-ℕ y)
247+
pr1 (iff-leq-int-ℕ x y) = leq-int-ℕ x y
248+
pr2 (iff-leq-int-ℕ x y) = reflects-leq-int-ℕ x y
232249
```
233250

234251
### An integer `x` is nonnegative if and only if `0 ≤ x`

src/elementary-number-theory/inequality-nonnegative-rational-numbers.lagda.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@ module elementary-number-theory.inequality-nonnegative-rational-numbers where
77
<details><summary>Imports</summary>
88

99
```agda
10+
open import elementary-number-theory.decidable-total-order-rational-numbers
1011
open import elementary-number-theory.inequality-rational-numbers
1112
open import elementary-number-theory.nonnegative-rational-numbers
1213

1314
open import foundation.dependent-pair-types
1415
open import foundation.propositions
1516
open import foundation.universe-levels
17+
18+
open import order-theory.decidable-total-orders
1619
```
1720

1821
</details>
@@ -36,3 +39,15 @@ leq-prop-ℚ⁰⁺ (p , _) (q , _) = leq-ℚ-Prop p q
3639
leq-ℚ⁰⁺ : ℚ⁰⁺ ℚ⁰⁺ UU lzero
3740
leq-ℚ⁰⁺ (p , _) (q , _) = leq-ℚ p q
3841
```
42+
43+
## Properties
44+
45+
### The decidable total order of nonnegative rational numbers
46+
47+
```agda
48+
decidable-total-order-ℚ⁰⁺ : Decidable-Total-Order lzero lzero
49+
decidable-total-order-ℚ⁰⁺ =
50+
decidable-total-order-Decidable-Total-Suborder
51+
ℚ-Decidable-Total-Order
52+
is-nonnegative-prop-ℚ
53+
```

0 commit comments

Comments
 (0)