Andrew Sneap, Jan-July 2021
This file defines addition of rational numbers, and proves various properties of
addition.
\begin{code}
{-# OPTIONS --safe --without-K --lossy-unification #-}
open import MLTT.Spartan renaming (_+_ to _∔_)
open import UF.Base hiding (_≈_)
open import Integers.Type
open import Integers.Addition renaming (_+_ to _ℤ+_)
open import Rationals.Fractions
open import Rationals.FractionsOperations renaming (_+_ to _𝔽+_)
open import Rationals.Type
module Rationals.Addition where
_+_ : ℚ → ℚ → ℚ
(p , _) + (q , _) = toℚ (p 𝔽+ q)
infixl 32 _+_
ℚ+-comm : (p q : ℚ) → p + q = q + p
ℚ+-comm (p , _) (q , _) = ap toℚ I
where
I : p 𝔽+ q = q 𝔽+ p
I = 𝔽+-comm p q
toℚ-+ : (p q : 𝔽) → toℚ (p 𝔽+ q) = toℚ p + toℚ q
toℚ-+ p q = equiv→equality (p 𝔽+ q) (p' 𝔽+ q') conclusion
where
p-ℚ = toℚ p
q-ℚ = toℚ q
p' = to𝔽 p-ℚ
q' = to𝔽 q-ℚ
I : p ≈ p'
I = ≈-toℚ p
II : q ≈ q'
II = ≈-toℚ q
III : p 𝔽+ q ≈ p' 𝔽+ q
III = ≈-addition p p' q I
IV : q 𝔽+ p' ≈ q' 𝔽+ p'
IV = ≈-addition q q' p' II
V : p' 𝔽+ q ≈ p' 𝔽+ q'
V = transport₂ _≈_ (𝔽+-comm q p') (𝔽+-comm q' p') IV
conclusion : p 𝔽+ q ≈ p' 𝔽+ q'
conclusion = ≈-trans (p 𝔽+ q) (p' 𝔽+ q) (p' 𝔽+ q') III V
ℚ+-assoc : (p q r : ℚ) → p + q + r = p + (q + r)
ℚ+-assoc (p , α) (q , β) (r , δ) = γ
where
γ : (p , α) + (q , β) + (r , δ) = (p , α) + ((q , β) + (r , δ))
γ = (p , α) + (q , β) + (r , δ) =⟨ refl ⟩
toℚ (p 𝔽+ q) + (r , δ) =⟨ i ⟩
toℚ (p 𝔽+ q) + toℚ r =⟨ ii ⟩
toℚ (p 𝔽+ q 𝔽+ r) =⟨ iii ⟩
toℚ (p 𝔽+ (q 𝔽+ r)) =⟨ iv ⟩
toℚ p + toℚ (q 𝔽+ r) =⟨ v ⟩
(p , α) + toℚ (q 𝔽+ r) =⟨ refl ⟩
(p , α) + ((q , β) + (r , δ)) ∎
where
i = ap (toℚ (p 𝔽+ q) +_) (toℚ-to𝔽 (r , δ))
ii = toℚ-+ (p 𝔽+ q) r ⁻¹
iii = ap toℚ (𝔽+-assoc p q r)
iv = toℚ-+ p (q 𝔽+ r)
v = ap (_+ toℚ (q 𝔽+ r)) (toℚ-to𝔽 (p , α) ⁻¹)
ℚ+-rearrange : (x y z : ℚ) → x + y + z = x + z + y
ℚ+-rearrange x y z = x + y + z =⟨ ℚ+-assoc x y z ⟩
x + (y + z) =⟨ ap (x +_) (ℚ+-comm y z) ⟩
x + (z + y) =⟨ ℚ+-assoc x z y ⁻¹ ⟩
x + z + y ∎
ℚ+-rearrange' : (x y z : ℚ) → x + y + z = z + x + y
ℚ+-rearrange' x y z = x + y + z =⟨ ℚ+-comm (x + y) z ⟩
z + (x + y) =⟨ ℚ+-assoc z x y ⁻¹ ⟩
z + x + y ∎
ℚ-zero-right-neutral : (q : ℚ) → q + 0ℚ = q
ℚ-zero-right-neutral (q , α) = γ
where
γ : (q , α) + 0ℚ = (q , α)
γ = (q , α) + 0ℚ =⟨ refl ⟩
toℚ (q 𝔽+ (pos 0 , 0)) =⟨ ap toℚ (𝔽-zero-right-neutral q) ⟩
toℚ q =⟨ toℚ-to𝔽 (q , α) ⁻¹ ⟩
q , α ∎
ℚ-zero-left-neutral : (q : ℚ) → 0ℚ + q = q
ℚ-zero-left-neutral q = ℚ+-comm 0ℚ q ∙ ℚ-zero-right-neutral q
add-same-denom : ((x , a) (y , a) : 𝔽)
→ toℚ (x , a) + toℚ (y , a) = toℚ (x ℤ+ y , a)
add-same-denom (x , a) (y , b) = γ
where
I : ((x , b) 𝔽+ (y , b)) ≈ (x ℤ+ y , b)
→ toℚ ((x , b) 𝔽+ (y , b)) = toℚ (x ℤ+ y , b)
I = equiv→equality ((x , b) 𝔽+ (y , b)) (x ℤ+ y , b)
II : (x , b) 𝔽+ (y , b) ≈ (x ℤ+ y , b)
II = 𝔽-add-same-denom (x , b) (y , b)
γ : toℚ (x , b) + toℚ (y , b) = toℚ (x ℤ+ y , b)
γ = toℚ (x , b) + toℚ (y , b) =⟨ toℚ-+ (x , b) (y , b) ⁻¹ ⟩
toℚ ((x , b) 𝔽+ (y , b)) =⟨ I II ⟩
toℚ (x ℤ+ y , b) ∎
1/3+1/3 : 1/3 + 1/3 = 2/3
1/3+1/3 = refl
1/4+1/4 : 1/4 + 1/4 = 1/2
1/4+1/4 = refl
1/2+1/4 : 1/2 + 1/4 = 3/4
1/2+1/4 = refl
1/4+3/4 : 1/4 + 3/4 = 1ℚ
1/4+3/4 = refl
1/3+2/3 : 1/3 + 2/3 = 1ℚ
1/3+2/3 = refl
2/3+1/3 : 2/3 + 1/3 = 1ℚ
2/3+1/3 = refl
1/2+1/2 : 1/2 + 1/2 = 1ℚ
1/2+1/2 = refl
1/5+1/5 : 1/5 + 1/5 = 2/5
1/5+1/5 = refl
1/5+2/5 : 1/5 + 2/5 = 3/5
1/5+2/5 = refl
2/5+1/5 : 2/5 + 1/5 = 3/5
2/5+1/5 = refl
2/5+3/5 : 2/5 + 3/5 = 1ℚ
2/5+3/5 = refl
\end{code}