Andrew Sneap, January-March 2021
In this file I define negation of real numbers.
\begin{code}
{-# OPTIONS --safe --without-K --lossy-unification #-}
open import MLTT.Spartan renaming (_+_ to _∔_)
open import Integers.Type
open import Integers.Multiplication renaming (_*_ to _ℤ*_)
open import Integers.Negation renaming (-_ to ℤ-_)
open import Rationals.Fractions
open import Rationals.FractionsOperations renaming (-_ to 𝔽-_ ; _+_ to _𝔽+_ ; _*_ to _𝔽*_)
open import Rationals.Type
open import Rationals.Addition
open import Rationals.Multiplication
module Rationals.Negation where
-_ : ℚ → ℚ
- ((x , a) , p) = toℚ (𝔽- (x , a))
infix 32 -_
_-_ : ℚ → ℚ → ℚ
p - q = p + (- q)
infixl 32 _-_
ℚ-minus-zero-is-zero : 0ℚ = - 0ℚ
ℚ-minus-zero-is-zero = refl
toℚ-neg : ((x , a) : 𝔽) → (- toℚ (x , a)) = toℚ (𝔽- (x , a))
toℚ-neg (x , a) = equiv→equality (ℤ- x' , a') (𝔽- (x , a)) γ
where
x' = numℚ (x , a)
a' = dnomℚ (x , a)
pa = (pos ∘ succ) a
pa' = (pos ∘ succ) a'
γ : (ℤ- x' , a') ≈ (𝔽- (x , a))
γ = (ℤ- x') ℤ* pa =⟨ negation-dist-over-mult' x' pa ⟩
ℤ- x' ℤ* pa =⟨ ap ℤ-_ (≈-toℚ (x , a) ⁻¹) ⟩
ℤ- x ℤ* pa' =⟨ negation-dist-over-mult' x pa' ⁻¹ ⟩
(ℤ- x) ℤ* pa' ∎
ℚ-minus-dist : (p q : ℚ) → (- p) + (- q) = - (p + q)
ℚ-minus-dist ((x , a) , p) ((y , b) , q) = γ
where
iiₐₚ : (ℤ- x , a) 𝔽+ (ℤ- y , b) ≈ (𝔽- ((x , a) 𝔽+ (y , b)))
iiₐₚ = 𝔽-minus-dist (x , a) (y , b)
i = toℚ-+ (ℤ- x , a) (ℤ- y , b) ⁻¹
ii = equiv→equality ((ℤ- x , a) 𝔽+ (ℤ- y , b)) (𝔽- ((x , a) 𝔽+ (y , b))) iiₐₚ
iii = toℚ-neg ((x , a) 𝔽+ (y , b)) ⁻¹
γ : (- ((x , a) , p)) - ((y , b) , q) = - (((x , a) , p) + ((y , b) , q))
γ = (- ((x , a) , p)) - ((y , b) , q) =⟨ refl ⟩
toℚ (ℤ- x , a) + toℚ (ℤ- y , b) =⟨ i ⟩
toℚ ((ℤ- x , a) 𝔽+ (ℤ- y , b)) =⟨ ii ⟩
toℚ (𝔽- ((x , a) 𝔽+ (y , b))) =⟨ iii ⟩
- toℚ ((x , a) 𝔽+ (y , b)) =⟨ refl ⟩
- (((x , a) , p) + ((y , b) , q)) ∎
ℚ-inverse-sum-to-zero : (q : ℚ) → q - q = 0ℚ
ℚ-inverse-sum-to-zero ((x , a) , p) = γ
where
I : ((x , a) 𝔽+ (𝔽- (x , a))) ≈ (pos 0 , 0)
→ toℚ ((x , a) 𝔽+ (𝔽- (x , a))) = toℚ (pos 0 , 0)
I = equiv→equality ((x , a) 𝔽+ (𝔽- (x , a))) (pos 0 , 0)
γ : ((x , a) , p) - ((x , a) , p) = 0ℚ
γ = ((x , a) , p) - ((x , a) , p) =⟨ i ⟩
toℚ (x , a) - toℚ (x , a) =⟨ ii ⟩
toℚ (x , a) + toℚ (𝔽- (x , a)) =⟨ iii ⟩
toℚ ((x , a) 𝔽+ (𝔽- (x , a))) =⟨ iv ⟩
0ℚ ∎
where
i = ap (λ z → z - z) (toℚ-to𝔽 ((x , a) , p))
ii = ap (toℚ (x , a) +_) (toℚ-neg (x , a))
iii = toℚ-+ (x , a) (𝔽- (x , a)) ⁻¹
iv = I (𝔽+-inverse' (x , a))
ℚ-inverse-sum-to-zero' : (q : ℚ) → (- q) + q = 0ℚ
ℚ-inverse-sum-to-zero' q = ℚ+-comm (- q) q ∙ ℚ-inverse-sum-to-zero q
ℚ+-inverse : (q : ℚ) → Σ q' ꞉ ℚ , q + q' = 0ℚ
ℚ+-inverse q = (- q) , (ℚ-inverse-sum-to-zero q)
ℚ+-inverse' : (q : ℚ) → Σ q' ꞉ ℚ , q' + q = 0ℚ
ℚ+-inverse' q = f (ℚ+-inverse q)
where
f : Σ q' ꞉ ℚ , q + q' = 0ℚ → Σ q' ꞉ ℚ , q' + q = 0ℚ
f (q' , e) = q' , (ℚ+-comm q' q ∙ e)
ℚ-minus-minus : (p : ℚ) → p = - (- p)
ℚ-minus-minus ((x , a) , α) = γ
where
γ : ((x , a) , α) = - (- ((x , a) , α))
γ = ((x , a) , α) =⟨ i ⟩
toℚ (x , a) =⟨ ii ⟩
toℚ (ℤ- (ℤ- x) , a) =⟨ refl ⟩
toℚ (𝔽- (𝔽- (x , a))) =⟨ iii ⟩
- toℚ (𝔽- (x , a)) =⟨ iv ⟩
- (- toℚ (x , a)) =⟨ v ⟩
- (- ((x , a) , α)) ∎
where
i = toℚ-to𝔽 ((x , a) , α)
ii = ap (λ z → toℚ (z , a)) (minus-minus-is-plus x ⁻¹)
iii = toℚ-neg (𝔽- (x , a)) ⁻¹
iv = ap -_ (toℚ-neg (x , a) ⁻¹)
v = ap (-_ ∘ -_) (toℚ-to𝔽 ((x , a) , α) ⁻¹)
ℚ-minus-dist' : (p q : ℚ) → - (p - q) = q - p
ℚ-minus-dist' p q = γ
where
γ : - (p - q) = q - p
γ = - (p - q) =⟨ ℚ-minus-dist p (- q) ⁻¹ ⟩
(- p) - (- q) =⟨ ap ((- p) +_) (ℚ-minus-minus q ⁻¹) ⟩
(- p) + q =⟨ ℚ+-comm (- p) q ⟩
q - p ∎
ℚ-minus-dist'' : (p q : ℚ) → p - q = - (q - p)
ℚ-minus-dist'' p q = ℚ-minus-dist' q p ⁻¹
ℚ-add-zero : (x y z : ℚ) → (x + y) = (x - z) + (z + y)
ℚ-add-zero x y z = γ
where
i = ap (_+ y) (ℚ-zero-right-neutral x ⁻¹)
ii = ap (λ k → (x + k) + y) (ℚ-inverse-sum-to-zero' z ⁻¹)
iii = ap (_+ y) (ℚ+-assoc x (- z) z ⁻¹)
iv = ℚ+-assoc (x - z) z y
γ : (x + y) = (x - z) + (z + y)
γ = (x + y) =⟨ i ⟩
(x + 0ℚ) + y =⟨ ii ⟩
x + ((- z) + z) + y =⟨ iii ⟩
x + (- z) + z + y =⟨ iv ⟩
(x - z) + (z + y) ∎
ℚ-negation-dist-over-mult : (p q : ℚ) → (- p) * q = - (p * q)
ℚ-negation-dist-over-mult ((x , a) , α) ((y , b) , β) = γ
where
I : ((𝔽- (x , a)) 𝔽* (y , b)) ≈ (𝔽- ((x , a) 𝔽* (y , b)))
→ toℚ ((𝔽- (x , a)) 𝔽* (y , b)) = toℚ (𝔽- ((x , a) 𝔽* (y , b)))
I = equiv→equality ((𝔽- (x , a)) 𝔽* (y , b)) (𝔽- ((x , a) 𝔽* (y , b)))
i = ap (toℚ (𝔽- (x , a)) *_) (toℚ-to𝔽 ((y , b) , β))
ii = toℚ-* (𝔽- (x , a)) (y , b) ⁻¹
iii = I (𝔽-subtraction-dist-over-mult (x , a) (y , b))
iv = toℚ-neg ((x , a) 𝔽* (y , b)) ⁻¹
γ : (- ((x , a) , α)) * ((y , b) , β) = - ((x , a) , α) * ((y , b) , β)
γ = (- ((x , a) , α)) * ((y , b) , β) =⟨ refl ⟩
toℚ (𝔽- (x , a)) * ((y , b) , β) =⟨ i ⟩
toℚ (𝔽- (x , a)) * toℚ (y , b) =⟨ ii ⟩
toℚ ((𝔽- (x , a)) 𝔽* (y , b)) =⟨ iii ⟩
toℚ (𝔽- ((x , a) 𝔽* (y , b))) =⟨ iv ⟩
- toℚ ((x , a) 𝔽* (y , b)) =⟨ refl ⟩
- ((x , a) , α) * ((y , b) , β) ∎
ℚ-negation-dist-over-mult' : (p q : ℚ) → p * (- q) = - (p * q)
ℚ-negation-dist-over-mult' p q = γ
where
γ : p * (- q) = - p * q
γ = p * (- q) =⟨ ℚ*-comm p (- q) ⟩
(- q) * p =⟨ ℚ-negation-dist-over-mult q p ⟩
- q * p =⟨ ap -_ (ℚ*-comm q p) ⟩
- p * q ∎
ℚ-negation-dist-over-mult'' : (p q : ℚ) → p * (- q) = (- p) * q
ℚ-negation-dist-over-mult'' p q = γ
where
γ : p * (- q) = (- p) * q
γ = p * (- q) =⟨ ℚ-negation-dist-over-mult' p q ⟩
- p * q =⟨ ℚ-negation-dist-over-mult p q ⁻¹ ⟩
(- p) * q ∎
toℚ-subtraction : (p q : 𝔽) → toℚ p - toℚ q = toℚ (p 𝔽+ (𝔽- q))
toℚ-subtraction p q = γ
where
γ : toℚ p - toℚ q = toℚ (p 𝔽+ (𝔽- q))
γ = toℚ p - toℚ q =⟨ ap (toℚ p +_) (toℚ-neg q) ⟩
toℚ p + toℚ (𝔽- q) =⟨ toℚ-+ p (𝔽- q) ⁻¹ ⟩
toℚ (p 𝔽+ (𝔽- q)) ∎
ℚ-inverse-intro : (p q : ℚ) → p = p + (q - q)
ℚ-inverse-intro p q = p =⟨ ℚ-zero-right-neutral p ⁻¹ ⟩
p + 0ℚ =⟨ ap (p +_) (ℚ-inverse-sum-to-zero q ⁻¹) ⟩
p + (q - q) ∎
ℚ-inverse-intro'' : (p q : ℚ) → p = p + q - q
ℚ-inverse-intro'' p q = ℚ-inverse-intro p q ∙ ℚ+-assoc p q (- q) ⁻¹
ℚ-inverse-intro' : (p q : ℚ) → p = (q - q) + p
ℚ-inverse-intro' p q = ℚ-inverse-intro p q ∙ ℚ+-comm p (q - q)
ℚ-inverse-intro''' : (p q : ℚ) → p = p + ((- q) + q)
ℚ-inverse-intro''' p q = ℚ-inverse-intro p q ∙ ap (p +_) (ℚ+-comm q (- q))
ℚ-inverse-intro'''' : (p q : ℚ) → p = p - q + q
ℚ-inverse-intro'''' p q = ℚ-inverse-intro''' p q ∙ ℚ+-assoc p (- q) q ⁻¹
1-2/3 : 1ℚ - 2/3 = 1/3
1-2/3 = refl
1-1/3 : 1ℚ - 1/3 = 2/3
1-1/3 = refl
1-2/5=3/5 : 1ℚ - 2/5 = 3/5
1-2/5=3/5 = refl
1-1/2 : 1ℚ - 1/2 = 1/2
1-1/2 = refl
1/2-1 : 1/2 - 1ℚ = - 1/2
1/2-1 = refl
ℚ-minus-half : (p : ℚ) → p - 1/2 * p = 1/2 * p
ℚ-minus-half p
= p - 1/2 * p =⟨ ap (_- 1/2 * p) (ℚ-mult-left-id p ⁻¹) ⟩
1ℚ * p - 1/2 * p =⟨ ap (1ℚ * p +_) (ℚ-negation-dist-over-mult 1/2 p ⁻¹) ⟩
1ℚ * p + (- 1/2) * p =⟨ ℚ-distributivity' p 1ℚ (- 1/2) ⁻¹ ⟩
(1ℚ - 1/2) * p =⟨ refl ⟩
1/2 * p ∎
ℚ+-right-cancellable : (p q r : ℚ) → p + r = q + r → p = q
ℚ+-right-cancellable p q r e = γ
where
γ : p = q
γ = p =⟨ ℚ-inverse-intro'' p r ⟩
p + r - r =⟨ ap (_- r) e ⟩
q + r - r =⟨ ℚ-inverse-intro'' q r ⁻¹ ⟩
q ∎
ℚ-add-zero-twice'' : (p q r : ℚ) → p = p + q + r - q - r
ℚ-add-zero-twice'' p q r = γ
where
γ : p = p + q + r - q - r
γ = p =⟨ ℚ-inverse-intro'' p q ⟩
p + q - q =⟨ ap (λ ■ → p + ■ - q) (ℚ-inverse-intro'' q r) ⟩
p + (q + r - r) - q =⟨ ap (_- q) (ℚ+-assoc p (q + r) (- r) ⁻¹) ⟩
p + (q + r) - r - q =⟨ ap (λ ■ → ■ - r - q) (ℚ+-assoc p q r ⁻¹) ⟩
p + q + r - r - q =⟨ ℚ+-rearrange (p + q + r) (- q) (- r) ⁻¹ ⟩
p + q + r - q - r ∎
ℚ-add-zero-twice''' : (p q r : ℚ) → p = p - q - r + q + r
ℚ-add-zero-twice''' p q r = γ
where
γ : p = p - q - r + q + r
γ = p =⟨ ℚ-add-zero-twice'' p q r ⟩
p + q + r - q - r =⟨ ℚ+-assoc (p + q + r) (- q) (- r) ⟩
p + q + r + ((- q) - r) =⟨ ap (_+ ((- q) - r)) (ℚ+-assoc p q r) ⟩
p + (q + r) + ((- q) - r) =⟨ ℚ+-rearrange p (q + r) ((- q) - r) ⟩
p + ((- q) - r) + (q + r) =⟨ ap (_+ (q + r)) (ℚ+-assoc p (- q) (- r) ⁻¹) ⟩
p - q - r + (q + r) =⟨ ℚ+-assoc (p - q - r) q r ⁻¹ ⟩
p - q - r + q + r ∎
ℚ-add-zero-twice : (p q : ℚ) → p = p - q - q + q + q
ℚ-add-zero-twice p q = ℚ-add-zero-twice''' p q q
ℚ-add-zero-twice' : (p q : ℚ) → p = p + q + q - q - q
ℚ-add-zero-twice' p q = ℚ-add-zero-twice'' p q q
\end{code}