Andrew Sneap, 26th November 2021
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import MLTT.Spartan renaming (_+_ to _∔_)
open import Naturals.AbsoluteDifference using (∣_-_∣)
open import Naturals.Order
open import Notation.Order
open import UF.Base
open import UF.Subsingletons
open import Integers.Abs
open import Integers.Type
open import Integers.Addition
open import Integers.Multiplication
open import Integers.Negation
open import Naturals.Addition renaming (_+_ to _ℕ+_)
module Integers.Order where
\end{code}
First, the definition of < and ≤ for the integers. See the NaturalsOrder import
to see how < is defined similarly to < for the natural numbers. Following the
definitions are the proofs that the relations are propositions, and some simple
proofs for each.
\begin{code}
_≤ℤ_ _≥ℤ_ : (x y : ℤ) → 𝓤₀ ̇
x ≤ℤ y = Σ n ꞉ ℕ , x + pos n = y
x ≥ℤ y = y ≤ℤ x
_<ℤ_ _>ℤ_ : (x y : ℤ) → 𝓤₀ ̇
x <ℤ y = succℤ x ≤ℤ y
x >ℤ y = y <ℤ x
instance
Order-ℤ-ℤ : Order ℤ ℤ
_≤_ {{Order-ℤ-ℤ}} = _≤ℤ_
Strict-Order-ℤ-ℤ : Strict-Order ℤ ℤ
_<_ {{Strict-Order-ℤ-ℤ}} = _<ℤ_
Strict-Order-Chain-ℤ-ℤ-ℤ : Strict-Order-Chain ℤ ℤ ℤ _<_ _<_
_<_<_ {{Strict-Order-Chain-ℤ-ℤ-ℤ}} p q r = (p < q) × (q < r)
Order-Chain-ℤ-ℤ-ℤ : Order-Chain ℤ ℤ ℤ _≤_ _≤_
_≤_≤_ {{Order-Chain-ℤ-ℤ-ℤ}} p q r = (p ≤ q) × (q ≤ r)
ℤ≤-is-prop : (x y : ℤ) → is-prop (x ≤ y)
ℤ≤-is-prop x y (n , p) (m , q) = to-subtype-= I II
where
I : (k : ℕ) → (α β : x + pos k = y) → α = β
I _ = ℤ-is-set
II : n = m
II = pos-lc (ℤ+-lc (pos n) (pos m) x γ)
where
γ : x + pos n = x + pos m
γ = x + pos n =⟨ p ⟩
y =⟨ q ⁻¹ ⟩
x + pos m ∎
ℤ<-is-prop : (x y : ℤ) → is-prop (x < y)
ℤ<-is-prop x = ℤ≤-is-prop (succℤ x)
≤-incrℤ : (x : ℤ) → x ≤ succℤ x
≤-incrℤ x = 1 , refl
<-incrℤ : (x : ℤ) → x < succℤ x
<-incrℤ x = 0 , refl
≤-predℤ : (x : ℤ) → predℤ x ≤ x
≤-predℤ x = 1 , succpredℤ x
≤-predℤ' : (x y : ℤ) → x ≤ y → predℤ x ≤ predℤ y
≤-predℤ' x y (n , e) = n , γ
where
γ : predℤ x + pos n = predℤ y
γ = predℤ x + pos n =⟨ ℤ-left-pred x (pos n) ⟩
predℤ (x + pos n) =⟨ ap predℤ e ⟩
predℤ y ∎
<-predℤ : (x : ℤ) → predℤ x < x
<-predℤ x = 0 , succpredℤ x
<-is-≤ : (x y : ℤ) → x < y → x ≤ y
<-is-≤ x y (a , p) = succ a , γ
where
γ : succℤ (x + pos a) = y
γ = succℤ (x + pos a) =⟨ ℤ-left-succ x (pos a) ⁻¹ ⟩
succℤ x + pos a =⟨ p ⟩
y ∎
ℕ-order-respects-ℤ-order : (m n : ℕ) → m < n → pos m < pos n
ℕ-order-respects-ℤ-order m n l = I (subtraction'' m n l)
where
I : (Σ k ꞉ ℕ , succ k ℕ+ m = n) → pos m < pos n
I (k , e) = k , II
where
II : succℤ (pos m) + pos k = pos n
II = succℤ (pos m) + pos k =⟨ distributivity-pos-addition (succ m) k ⟩
pos (succ m ℕ+ k) =⟨ ap pos (addition-commutativity (succ m) k) ⟩
pos (k ℕ+ succ m) =⟨ ap pos (succ-left k m ⁻¹) ⟩
pos (succ k ℕ+ m) =⟨ ap pos e ⟩
pos n ∎
ℕ-order-respects-ℤ-order' : (m n : ℕ) → m < n → negsucc n < negsucc m
ℕ-order-respects-ℤ-order' m n l = I (subtraction'' m n l)
where
I : (Σ k ꞉ ℕ , succ k ℕ+ m = n) → negsucc n < negsucc m
I (k , e) = k , γ
where
k' = pos (succ k)
m' = pos (succ m)
n' = pos (succ n)
II : k' + m' = n'
II = k' + m' =⟨ i ⟩
pos (succ k ℕ+ succ m) =⟨ ii ⟩
n' ∎
where
i = distributivity-pos-addition (succ k) (succ m)
ii = ap (pos ∘ succ) e
γ : succℤ (negsucc n) + pos k = negsucc m
γ = succℤ (negsucc n) + pos k =⟨ i ⟩
negsucc n + k' =⟨ ii ⟩
k' + negsucc n =⟨ iii ⟩
k' + negsucc n + pos 0 =⟨ iv ⟩
k' + negsucc n + (m' + negsucc m) =⟨ v ⟩
k' + negsucc n + m' + negsucc m =⟨ vi ⟩
k' + (negsucc n + m') + negsucc m =⟨ vii ⟩
k' + (m' + negsucc n) + negsucc m =⟨ viii ⟩
k' + m' + negsucc n + negsucc m =⟨ ix ⟩
k' + m' + (negsucc n + negsucc m) =⟨ x ⟩
n' + (negsucc n + negsucc m) =⟨ xi ⟩
n' + negsucc n + negsucc m =⟨ xii ⟩
pos 0 + negsucc m =⟨ xiii ⟩
negsucc m ∎
where
ivₐₚ : pos 0 = m' - m'
ivₐₚ = ℤ-sum-of-inverse-is-zero m' ⁻¹
i = ℤ-left-succ (negsucc n) (pos k)
ii = ℤ+-comm (negsucc n) k'
iii = ℤ-zero-right-neutral (k' + negsucc n)
iv = ap ((k' + negsucc n) +_) ivₐₚ
v = ℤ+-assoc (k' + negsucc n) m' (negsucc m) ⁻¹
vi = ap (_+ negsucc m) (ℤ+-assoc k' (negsucc n) m')
vii = ap (λ p → k' + p + negsucc m) (ℤ+-comm (negsucc n) m')
viii = ap (_+ negsucc m) (ℤ+-assoc k' m' (negsucc n) ⁻¹)
ix = ℤ+-assoc (k' + m') (negsucc n) (negsucc m)
x = ap (λ p → p + (negsucc n + negsucc m)) II
xi = ℤ+-assoc n' (negsucc n) (negsucc m) ⁻¹
xii = ap (_+ negsucc m) (ℤ-sum-of-inverse-is-zero n')
xiii = ℤ-zero-left-neutral (negsucc m)
ℤ-bigger-or-equal-not-less : (x y : ℤ) → x ≤ y → ¬ (y < x)
ℤ-bigger-or-equal-not-less x y (α , p) (β , q) = 𝟘-elim γ
where
I : x + succℤ (pos (α ℕ+ β)) = x + pos 0
I = x + succℤ (pos (α ℕ+ β)) =⟨ i ⟩
x + succℤ (pos α + pos β) =⟨ ii ⟩
succℤ (x + (pos α + pos β)) =⟨ iii ⟩
succℤ (x + pos α + pos β) =⟨ iv ⟩
succℤ (x + pos α) + pos β =⟨ v ⟩
x =⟨ by-definition ⟩
x + pos 0 ∎
where
i = ap (λ - → x + succℤ -) (distributivity-pos-addition α β ⁻¹)
ii = ℤ-right-succ x (pos α + pos β)
iii = ap succℤ (ℤ+-assoc x (pos α) (pos β) ⁻¹)
iv = ℤ-left-succ (x + pos α) (pos β) ⁻¹
v = transport (λ - → succℤ - + (pos β) = x) (p ⁻¹) q
II : succℤ (pos (α ℕ+ β)) = pos 0
II = ℤ+-lc (succℤ (pos (α ℕ+ β))) (pos 0) x I
γ : 𝟘
γ = pos-succ-not-zero (α ℕ+ β) II
ℤ≤-split : (x y : ℤ) → x ≤ y → (x < y) ∔ (x = y)
ℤ≤-split x y (zero , p) = inr p
ℤ≤-split x y (succ a , p) = inl (a , (ℤ-left-succ x (pos a) ∙ p))
ℤ≤-trans : (x y z : ℤ) → x ≤ y → y ≤ z → x ≤ z
ℤ≤-trans x y z (a , p) (b , q) = a ℕ+ b , I
where
I : x + pos (a ℕ+ b) = z
I = x + pos (a ℕ+ b) =⟨ ap (x +_) (distributivity-pos-addition a b ⁻¹) ⟩
x + (pos a + pos b) =⟨ ℤ+-assoc x (pos a) (pos b) ⁻¹ ⟩
x + pos a + pos b =⟨ ap (_+ (pos b)) p ⟩
y + (pos b) =⟨ q ⟩
z ∎
ℤ<-trans : (x y z : ℤ) → x < y → y < z → x < z
ℤ<-trans x y z l₁ l₂ = ℤ≤-trans (succℤ x) (succℤ y) z I l₂
where
I : succℤ x ≤ succℤ y
I = ℤ≤-trans (succℤ x) y (succℤ y) l₁ (≤-incrℤ y)
ℤ<-≤-trans : (x y z : ℤ) → x < y → y ≤ z → x < z
ℤ<-≤-trans x y z l₁ l₂ = cases γ₁ γ₂ I
where
I : (y < z) ∔ (y = z)
I = ℤ≤-split y z l₂
γ₁ : y < z → x < z
γ₁ l₃ = ℤ<-trans x y z l₁ l₃
γ₂ : y = z → x < z
γ₂ e = transport (x <_) e l₁
ℤ≤-<-trans : (x y z : ℤ) → x ≤ y → y < z → x < z
ℤ≤-<-trans x y z l₁ l₂ = cases γ₁ γ₂ I
where
I : (x < y) ∔ (x = y)
I = ℤ≤-split x y l₁
γ₁ : x < y → x < z
γ₁ l₃ = ℤ<-trans x y z l₃ l₂
γ₂ : x = y → x < z
γ₂ e = transport (_< z) (e ⁻¹) l₂
ℤ≤-refl : (x : ℤ) → x ≤ x
ℤ≤-refl x = 0 , refl
ℤ-equal-not-less-than : (x : ℤ) → ¬ (x < x)
ℤ-equal-not-less-than x (0 , α) = succℤ-no-fp x (α ⁻¹)
ℤ-equal-not-less-than x (succ n , α) = pos-succ-not-zero (n ℕ+ 1) γ
where
I : x + succℤ (succℤ (pos n)) = x + pos 0
I = x + succℤ (succℤ (pos n)) =⟨ ℤ-right-succ x (succℤ (pos n)) ⟩
succℤ (x + succℤ (pos n)) =⟨ ℤ-left-succ x (succℤ (pos n)) ⁻¹ ⟩
succℤ x + succℤ (pos n) =⟨ by-definition ⟩
succℤ x + pos (succ n) =⟨ α ⟩
x =⟨ ℤ-zero-right-neutral x ⟩
x + pos 0 ∎
γ : succℤ (succℤ (pos n)) = pos 0
γ = ℤ+-lc (succℤ (succℤ (pos n))) (pos 0) x I
ℤ-zero-less-than-pos : (n : ℕ) → pos 0 < pos (succ n)
ℤ-zero-less-than-pos n = ℕ-order-respects-ℤ-order 0 (succ n) (zero-least n)
ℤ-zero-least-pos : (n : ℕ) → pos 0 ≤ pos n
ℤ-zero-least-pos 0 = ℤ≤-refl (pos 0)
ℤ-zero-least-pos (succ n) = γ
where
I : pos 0 ≤ pos n
I = ℤ-zero-least-pos n
II : pos n ≤ pos (succ n)
II = ≤-incrℤ (pos n)
γ : pos 0 ≤ pos (succ n)
γ = ℤ≤-trans (pos 0) (pos n) (pos (succ n)) I II
negative-less-than-positive : (x y : ℕ) → negsucc x < pos y
negative-less-than-positive x y = (x ℕ+ y) , I
where
I : succℤ (negsucc x) + pos (x ℕ+ y) = pos y
I = succℤ (negsucc x) + pos (x ℕ+ y) =⟨ i ⟩
succℤ (negsucc x) + (pos x + pos y) =⟨ ii ⟩
succℤ (negsucc x) + pos x + pos y =⟨ iii ⟩
negsucc x + pos (succ x) + pos y =⟨ refl ⟩
(- pos (succ x)) + pos (succ x) + pos y =⟨ iv ⟩
pos 0 + pos y =⟨ v ⟩
pos y ∎
where
i = ap (succℤ (negsucc x) +_) (distributivity-pos-addition x y ⁻¹)
ii = ℤ+-assoc (succℤ (negsucc x)) (pos x) (pos y) ⁻¹
iii = ap (_+ pos y) (ℤ-left-succ (negsucc x) (pos x))
iv = ap (_+ pos y) (ℤ-sum-of-inverse-is-zero' (pos (succ x)))
v = ℤ-zero-left-neutral (pos y)
ℤ≤-swap : (x y : ℤ) → x ≤ y → - y ≤ - x
ℤ≤-swap x y (k , e) = k , ℤ+-lc ((- y) + pos k) (- x) (y + x) I
where
I : y + x + ((- y) + pos k) = y + x - x
I = y + x + ((- y) + pos k) =⟨ i ⟩
x + y + ((- y) + pos k) =⟨ ii ⟩
x + y - y + pos k =⟨ iii ⟩
x + (y - y) + pos k =⟨ iv ⟩
x + pos 0 + pos k =⟨ by-definition ⟩
x + pos k =⟨ e ⟩
y =⟨ by-definition ⟩
y + pos 0 =⟨ v ⟩
y + (x - x) =⟨ vi ⟩
y + x - x ∎
where
i = ap (_+ ((- y) + pos k)) (ℤ+-comm y x)
ii = ℤ+-assoc (x + y) (- y) (pos k) ⁻¹
iii = ap (_+ pos k) (ℤ+-assoc x y (- y))
iv = ap (λ α → x + α + (pos k)) (ℤ-sum-of-inverse-is-zero y)
v = ap (y +_) (ℤ-sum-of-inverse-is-zero x ⁻¹)
vi = ℤ+-assoc y x (- x) ⁻¹
ℤ≤-swap₂ : (x y z : ℤ) → x ≤ y ≤ z → (- y ≤ - x) × (- z ≤ - y)
ℤ≤-swap₂ x y z (l₁ , l₂) = (ℤ≤-swap x y l₁) , (ℤ≤-swap y z l₂)
ℕ≤-to-ℤ≤ : (x y : ℕ) → x ≤ y → pos x ≤ pos y
ℕ≤-to-ℤ≤ x y l = I (subtraction x y l)
where
I : (Σ k ꞉ ℕ , k ℕ+ x = y) → pos x ≤ pos y
I (k , e) = k , II
where
II : pos x + pos k = pos y
II = pos x + pos k =⟨ distributivity-pos-addition x k ⟩
pos (x ℕ+ k) =⟨ ap pos (addition-commutativity x k) ⟩
pos (k ℕ+ x) =⟨ ap pos e ⟩
pos y ∎
ℤ-dichotomous : (x y : ℤ) → (x ≤ y) ∔ (y ≤ x)
ℤ-dichotomous (pos x) (pos y) = I (≤-dichotomous x y)
where
I : (x ≤ y) ∔ (y ≤ x) → (pos x ≤ pos y) ∔ (pos y ≤ pos x)
I (inl l) = inl (ℕ≤-to-ℤ≤ x y l)
I (inr r) = inr (ℕ≤-to-ℤ≤ y x r)
ℤ-dichotomous (pos x) (negsucc y) = inr (negative-less-than-positive (succ y) x)
ℤ-dichotomous (negsucc x) (pos y) = inl (negative-less-than-positive (succ x) y)
ℤ-dichotomous (negsucc x) (negsucc y) = Cases (≤-dichotomous x y) γ₁ γ₂
where
I : (a b : ℕ) → a ≤ b → negsucc b ≤ negsucc a
I a b l = ℤ≤-swap (pos (succ a)) (pos (succ b)) II
where
II : pos (succ a) ≤ pos (succ b)
II = ℕ≤-to-ℤ≤ (succ a) (succ b) l
γ₁ : x ≤ y → (negsucc x ≤ negsucc y) ∔ (negsucc y ≤ negsucc x)
γ₁ l = inr (I x y l)
γ₂ : y ≤ x → (negsucc x ≤ negsucc y) ∔ (negsucc y ≤ negsucc x)
γ₂ l = inl (I y x l)
trich-locate : (x y : ℤ) → 𝓤₀ ̇
trich-locate x y = (x < y) ∔ (x = y) ∔ (y < x)
ℤ-trichotomous : (x y : ℤ) → trich-locate x y
ℤ-trichotomous x y = I (ℤ-dichotomous x y)
where
I : (x ≤ y) ∔ (y ≤ x) → (x < y) ∔ (x = y) ∔ (y < x)
I (inl l) = II (ℤ≤-split x y l)
where
II : (x < y) ∔ (x = y) → (x < y) ∔ (x = y) ∔ (y < x)
II (inl l) = inl l
II (inr r) = inr (inl r)
I (inr r) = II (ℤ≤-split y x r)
where
II : (y < x) ∔ (y = x) → (x < y) ∔ (x = y) ∔ (y < x)
II (inl l) = inr (inr l)
II (inr r) = inr (inl (r ⁻¹))
ℤ-dichotomous' : (x y : ℤ) → x < y ∔ y ≤ x
ℤ-dichotomous' x y = I (ℤ-trichotomous x y)
where
I : (x < y) ∔ (x = y) ∔ (y < x) → x < y ∔ y ≤ x
I (inl x<y) = inl x<y
I (inr (inl x=y)) = inr (transport (_≤ x) x=y (ℤ≤-refl x))
I (inr (inr y<x)) = inr (<-is-≤ y x y<x)
ℤ-trichotomous-is-prop : (x y : ℤ) → is-prop (trich-locate x y)
ℤ-trichotomous-is-prop x y = +-is-prop I II γ
where
I : is-prop (x < y)
I = ℤ<-is-prop x y
II : is-prop ((x = y) ∔ y < x)
II = +-is-prop ℤ-is-set (ℤ<-is-prop y x) III
where
III : x = y → ¬ (y < x)
III e l = ℤ-equal-not-less-than y (transport (y <_) e l)
γ : x < y → ¬ ((x = y) ∔ y < x)
γ l (inl e ) = ℤ-equal-not-less-than x (transport (x <_) (e ⁻¹) l)
γ l (inr l') = ℤ-bigger-or-equal-not-less x y (<-is-≤ x y l) l'
ℤ≤-adding : (a b c d : ℤ) → a ≤ b → c ≤ d → a + c ≤ b + d
ℤ≤-adding a b c d (p , β) (q , β') = (p ℕ+ q) , I
where
I : a + c + pos (p ℕ+ q) = b + d
I = a + c + pos (p ℕ+ q) =⟨ i ⟩
a + c + (pos p + pos q) =⟨ ii ⟩
a + c + pos p + pos q =⟨ iii ⟩
c + a + pos p + pos q =⟨ iv ⟩
c + (a + pos p) + pos q =⟨ v ⟩
c + b + pos q =⟨ vi ⟩
b + c + pos q =⟨ vii ⟩
b + (c + pos q) =⟨ viii ⟩
b + d ∎
where
i = ap (a + c +_) (distributivity-pos-addition p q ⁻¹)
ii = ℤ+-assoc (a + c) (pos p) (pos q) ⁻¹
iii = ap (λ z → z + pos p + pos q) (ℤ+-comm a c)
iv = ap (_+ pos q) (ℤ+-assoc c a (pos p))
v = ap (λ z → c + z + pos q) β
vi = ap (_+ pos q) (ℤ+-comm c b)
vii = ℤ+-assoc b c (pos q)
viii = ap (b +_) β'
ℤ<-adding : (a b c d : ℤ) → a < b → c < d → a + c < b + d
ℤ<-adding a b c d l₁ l₂ = ℤ<-trans (a + c) (a + succℤ c) (b + d) II III
where
I : succℤ a + succℤ c ≤ b + d
I = ℤ≤-adding (succℤ a) b (succℤ c) d l₁ l₂
II : a + c < a + succℤ c
II = 0 , (ℤ-right-succ a c ⁻¹)
III : a + succℤ c < b + d
III = transport (_≤ b + d) (ℤ-left-succ a (succℤ c)) I
ℤ≤-adding' : (a b c : ℤ) → a ≤ b → a + c ≤ b + c
ℤ≤-adding' a b c (k , p) = k , I
where
I : a + c + pos k = b + c
I = a + c + pos k =⟨ ℤ+-assoc a c (pos k) ⟩
a + (c + pos k) =⟨ ap (a +_) (ℤ+-comm c (pos k)) ⟩
a + (pos k + c) =⟨ ℤ+-assoc a (pos k) c ⁻¹ ⟩
a + pos k + c =⟨ ap (_+ c) p ⟩
b + c ∎
ℤ≤-adding-left : (a b c : ℤ) → a ≤ b → c + a ≤ c + b
ℤ≤-adding-left a b c l = transport₂ _≤_ I II III
where
I : a + c = c + a
I = ℤ+-comm a c
II : b + c = c + b
II = ℤ+-comm b c
III : a + c ≤ b + c
III = ℤ≤-adding' a b c l
ℤ≤-adding₂ : (a b c d : ℤ) → a ≤ b ≤ c → (a + d ≤ b + d ≤ c + d)
ℤ≤-adding₂ a b c d (l₁ , l₂) = (ℤ≤-adding' a b d l₁) , (ℤ≤-adding' b c d l₂)
ℤ<-adding' : (a b c : ℤ) → a < b → a + c < b + c
ℤ<-adding' a b c (k , p) = I (ℤ≤-adding' (succℤ a) b c (k , p))
where
I : succℤ a + c ≤ b + c → a + c < b + c
I (h , q) = h , II
where
II : succℤ (a + c) + pos h = b + c
II = succℤ (a + c) + pos h =⟨ ap (_+ (pos h)) (ℤ-left-succ a c ⁻¹) ⟩
succℤ a + c + pos h =⟨ q ⟩
b + c ∎
ℤ<-adding-left : (a b c : ℤ) → a < b → c + a < c + b
ℤ<-adding-left a b c l = transport₂ _<_ I II III
where
I : a + c = c + a
I = ℤ+-comm a c
II : b + c = c + b
II = ℤ+-comm b c
III : a + c < b + c
III = ℤ<-adding' a b c l
ℤ<-adding'' : (a b c : ℤ) → a < b → c + a < c + b
ℤ<-adding'' a b c l = transport₂ _<_ (ℤ+-comm a c) (ℤ+-comm b c) I
where
I : a + c < b + c
I = ℤ<-adding' a b c l
pmpo-lemma : (a b : ℤ) → (n : ℕ) → a < b → a * pos (succ n) < b * pos (succ n)
pmpo-lemma a b = ℕ-induction base step
where
base : a < b
→ a * pos 1 < b * pos 1
base z = z
step : (k : ℕ)
→ (a < b → a * pos (succ k) < b * pos (succ k))
→ a < b
→ a * pos (succ (succ k)) < b * pos (succ (succ k))
step k IH l = ℤ<-adding a b (a + (a * pos k)) (b + (b * pos k)) l (IH l)
positive-multiplication-preserves-order : (a b c : ℤ)
→ is-pos-succ c
→ a < b
→ a * c < b * c
positive-multiplication-preserves-order a b (negsucc x) p l = 𝟘-elim p
positive-multiplication-preserves-order a b (pos 0) p l = 𝟘-elim p
positive-multiplication-preserves-order a b (pos (succ x)) p l = pmpo-lemma a b x l
positive-multiplication-preserves-order' : (a b c : ℤ)
→ is-pos-succ c
→ a ≤ b
→ a * c ≤ b * c
positive-multiplication-preserves-order' a b c p l = I (ℤ≤-split a b l)
where
I : (a < b) ∔ (a = b) → a * c ≤ b * c
I (inl l) = <-is-≤ (a * c) (b * c) γ
where
γ : a * c < b * c
γ = positive-multiplication-preserves-order a b c p l
I (inr e) = transport (_≤ b * c) γ (ℤ≤-refl (b * c))
where
γ : b * c = a * c
γ = ap (_* c) (e ⁻¹)
ℤ*-multiplication-order : (a b c : ℤ)
→ pos 0 ≤ c
→ a ≤ b
→ a * c ≤ b * c
ℤ*-multiplication-order a b (pos 0) p l = ℤ≤-refl (pos 0)
ℤ*-multiplication-order a b (pos (succ c)) p l
= positive-multiplication-preserves-order' a b (pos (succ c)) ⋆ l
ℤ*-multiplication-order a b (negsucc c) p l = 𝟘-elim γ
where
I : negsucc c < pos 0
I = negative-less-than-positive c 0
γ : 𝟘
γ = ℤ-bigger-or-equal-not-less (pos 0) (negsucc c) p I
nmco-lemma : (a b : ℤ) → (c : ℕ) → a < b → b * (negsucc c) < a * (negsucc c)
nmco-lemma a b = ℕ-induction base step
where
base : a < b → b * negsucc 0 < a * negsucc 0
base (k , γ) = k , I
where
II : (- b) + pos k + (a - a) = a + pos k + ((- b) - a)
II = (- b) + pos k + (a - a) =⟨ i ⟩
pos k - b + (a - a) =⟨ ii ⟩
pos k - b + a - a =⟨ iii ⟩
a + (pos k - b) - a =⟨ iv ⟩
a + pos k - b - a =⟨ v ⟩
a + pos k + ((- b) - a) ∎
where
i = ap (_+ (a - a)) (ℤ+-comm (- b) (pos k))
ii = ℤ+-assoc (pos k - b) a (- a) ⁻¹
iii = ap (_+ (- a)) (ℤ+-comm (pos k - b) a)
iv = ap (_+ (- a)) (ℤ+-assoc a (pos k) (- b) ⁻¹)
v = ℤ+-assoc (a + pos k) (- b) (- a)
I : succℤ (b * negsucc 0) + pos k = a * negsucc 0
I = succℤ (b * negsucc 0) + pos k =⟨ by-definition ⟩
succℤ (- b) + pos k =⟨ i ⟩
succℤ ((- b) + pos k) =⟨ ii ⟩
succℤ ((- b) + pos k) + pos 0 =⟨ iii ⟩
succℤ ((- b) + pos k) + (a - a) =⟨ iv ⟩
succℤ ((- b) + pos k + (a - a)) =⟨ v ⟩
succℤ (a + pos k + ((- b) - a)) =⟨ vi ⟩
succℤ (a + pos k) + ((- b) - a) =⟨ vii ⟩
succℤ a + pos k + ((- b) - a) =⟨ viii ⟩
b + ((- b) - a) =⟨ ix ⟩
b - b - a =⟨ x ⟩
pos 0 - a =⟨ xi ⟩
- a =⟨ by-definition ⟩
a * negsucc 0 ∎
where
i = ℤ-left-succ (- b) (pos k)
ii = ℤ-zero-right-neutral (succℤ ((- b) +pos k))
iii = ap (succℤ ((- b) + pos k) +_) (ℤ-sum-of-inverse-is-zero a ⁻¹)
iv = ℤ-left-succ ((- b) + pos k) (a - a)
v = ap succℤ II
vi = ℤ-left-succ (a + pos k) ((- b) - a) ⁻¹
vii = ap (_+ ((- b) - a)) (ℤ-left-succ a (pos k) ⁻¹)
viii = ap (_+ ((- b) - a)) γ
ix = ℤ+-assoc b (- b) (- a) ⁻¹
x = ap (_+ (- a)) (ℤ-sum-of-inverse-is-zero b)
xi = ℤ-zero-left-neutral (- a)
step : (k : ℕ)
→ (a < b → b * negsucc k < a * negsucc k)
→ a < b → b * negsucc (succ k) < a * negsucc (succ k)
step k IH l = ℤ<-adding (- b) (- a) (b * negsucc k) (a * negsucc k) I II
where
I : - b < - a
I = base l
II : b * negsucc k < a * negsucc k
II = IH l
negative-multiplication-changes-order : (a b c : ℤ)
→ negative c
→ a < b
→ b * c < a * c
negative-multiplication-changes-order a b (pos c) g l = 𝟘-elim g
negative-multiplication-changes-order a b (negsucc c) g l = nmco-lemma a b c l
negative-multiplication-changes-order' : (a b c : ℤ)
→ negative c
→ a ≤ b
→ b * c ≤ a * c
negative-multiplication-changes-order' a b (pos x) g l = 𝟘-elim g
negative-multiplication-changes-order' a b (negsucc x) g l = I (ℤ≤-split a b l)
where
I : a < b ∔ (a = b) → b * negsucc x ≤ a * negsucc x
I (inl a<b) = <-is-≤ (b * negsucc x) (a * negsucc x) γ
where
γ : b * negsucc x < a * negsucc x
γ = negative-multiplication-changes-order a b (negsucc x) ⋆ a<b
I (inr a=b) = transport (b * negsucc x ≤ℤ_) γ₁ γ₂
where
γ₁ : b * negsucc x = a * negsucc x
γ₁ = ap (_* negsucc x) (a=b ⁻¹)
γ₂ : b * negsucc x ≤ b * negsucc x
γ₂ = ℤ≤-refl (b * negsucc x)
ℤ-mult-right-cancellable : (x y z : ℤ) → not-zero z → x * z = y * z → x = y
ℤ-mult-right-cancellable x y (pos 0) nz e = 𝟘-elim (nz ⋆)
ℤ-mult-right-cancellable x y (pos (succ z)) nz e = tri-split (ℤ-trichotomous x y)
where
tri-split : (x < y) ∔ (x = y) ∔ (y < x) → x = y
tri-split (inl l) = 𝟘-elim (ℤ-equal-not-less-than (x * pos (succ z)) II)
where
I : x * pos (succ z) < y * pos (succ z)
I = positive-multiplication-preserves-order x y (pos (succ z)) ⋆ l
II : x * pos (succ z) < x * pos (succ z)
II = transport (x * pos (succ z) <_) (e ⁻¹) I
tri-split (inr (inl m)) = m
tri-split (inr (inr r)) = 𝟘-elim (ℤ-equal-not-less-than (y * pos (succ z)) II)
where
I : y * pos (succ z) < x * pos (succ z)
I = positive-multiplication-preserves-order y x (pos (succ z)) ⋆ r
II : y * pos (succ z) < y * pos (succ z)
II = transport (y * pos (succ z) <_) e I
ℤ-mult-right-cancellable x y (negsucc z) nz e = tri-split (ℤ-trichotomous x y)
where
tri-split : (x < y) ∔ (x = y) ∔ (y < x) → x = y
tri-split (inl l) = 𝟘-elim (ℤ-equal-not-less-than (y * negsucc z) II)
where
I : y * negsucc z < x * negsucc z
I = nmco-lemma x y z l
II : y * negsucc z < y * negsucc z
II = transport (y * negsucc z <_) e I
tri-split (inr (inl r)) = r
tri-split (inr (inr r)) = 𝟘-elim (ℤ-equal-not-less-than (x * negsucc z) II)
where
I : (x * negsucc z) < (y * negsucc z)
I = nmco-lemma y x z r
II : x * negsucc z < x * negsucc z
II = transport (x * negsucc z <_) (e ⁻¹) I
ℤ-mult-left-cancellable : (x y z : ℤ) → not-zero z
→ z * x = z * y
→ x = y
ℤ-mult-left-cancellable x y z nz e = ℤ-mult-right-cancellable x y z nz I
where
I : x * z = y * z
I = x * z =⟨ ℤ*-comm x z ⟩
z * x =⟨ e ⟩
z * y =⟨ ℤ*-comm z y ⟩
y * z ∎
non-zero-multiplication : (x y : ℤ) → ¬ (x = pos 0) → ¬ (y = pos 0) → ¬ (x * y = pos 0)
non-zero-multiplication (pos 0) y xnz ynz e = xnz refl
non-zero-multiplication (pos (succ x)) y xnz ynz e = ynz γ
where
γ : y = pos 0
γ = ℤ-mult-left-cancellable y (pos 0) (pos (succ x)) id e
non-zero-multiplication (negsucc x) y xnz ynz e = ynz γ
where
γ : y = pos 0
γ = ℤ-mult-left-cancellable y (pos 0) (negsucc x) id e
orcl : (a b : ℤ) → (n : ℕ) → a * (pos (succ n)) ≤ b * (pos (succ n)) → a ≤ b
orcl a b = ℕ-induction base step
where
base : a * pos 1 ≤ b * pos 1 → a ≤ b
base = id
step : (k : ℕ)
→ (a * pos (succ k) ≤ b * pos (succ k) → a ≤ b)
→ a * pos (succ (succ k)) ≤ b * pos (succ (succ k))
→ a ≤ b
step k IH (α , β) = cases₃ γ₁ γ₂ γ₃ (ℤ-trichotomous a b)
where
k' = pos (succ (succ k))
γ₁ : a < b → a ≤ b
γ₁ = <-is-≤ a b
γ₂ : a = b → a ≤ b
γ₂ e = transport (a ≤_) e (ℤ≤-refl a)
γ₃ : b < a → a ≤ b
γ₃ l = 𝟘-elim III
where
I : a * k' ≤ b * k'
I = α , β
II : b * k' < a * k'
II = positive-multiplication-preserves-order b a k' ⋆ l
III : 𝟘
III = ℤ-bigger-or-equal-not-less (a * k') (b * k') I II
orcl' : (a b : ℤ) → (n : ℕ) → a * (pos (succ n)) < b * (pos (succ n)) → a < b
orcl' a b n l = II (ℤ≤-split a b I)
where
I : a ≤ b
I = orcl a b n (<-is-≤ (a * pos (succ n)) (b * pos (succ n)) l)
II : a < b ∔ (a = b) → a < b
II (inl l) = l
II (inr e) = 𝟘-elim (ℤ-equal-not-less-than (a * pos (succ n)) III)
where
III : a * pos (succ n) < a * pos (succ n)
III = transport (λ - → (a * pos (succ n)) < (- * pos (succ n))) (e ⁻¹) l
ordering-right-cancellable : (a b c : ℤ) → is-pos-succ c → a * c < b * c → a < b
ordering-right-cancellable a b (negsucc x) p l = 𝟘-elim p
ordering-right-cancellable a b (pos 0) p l = 𝟘-elim p
ordering-right-cancellable a b (pos (succ x)) p l = orcl' a b x l
ℤ≤-ordering-right-cancellable : (a b c : ℤ)
→ is-pos-succ c → a * c ≤ b * c → a ≤ b
ℤ≤-ordering-right-cancellable a b (pos zero) p l = 𝟘-elim p
ℤ≤-ordering-right-cancellable a b (pos (succ x)) p l = orcl a b x l
ℤ≤-ordering-right-cancellable a b (negsucc x) p l = 𝟘-elim p
ℤ≤-anti : (x y : ℤ) → x ≤ y → y ≤ x → x = y
ℤ≤-anti x y l₁ l₂ = I (ℤ≤-split x y l₁) (ℤ≤-split y x l₂)
where
I : x < y ∔ (x = y) → y < x ∔ (y = x)
→ x = y
I (inl x<y) (inr e) = e ⁻¹
I (inr e) (inl y<x) = e
I (inr e) (inr e') = e
I (inl x<y) (inl y<x) = 𝟘-elim III
where
II : x < x
II = ℤ<-trans x y x x<y y<x
III : 𝟘
III = ℤ-equal-not-less-than x II
maxℤ : ℤ → ℤ → ℤ
maxℤ x y with ℤ-dichotomous x y
... | inl x≤y = y
... | inr y≤x = x
max₂ : ℤ → ℤ → ℤ → ℤ
max₂ x y z = maxℤ (maxℤ x y) z
max₃ : ℤ → ℤ → ℤ → ℤ → ℤ
max₃ w x y z = maxℤ (max₂ w x y) z
minℤ : ℤ → ℤ → ℤ
minℤ x y with ℤ-dichotomous x y
... | inl x≤y = x
... | inr y≤x = y
min₂ : ℤ → ℤ → ℤ → ℤ
min₂ x y z = minℤ (minℤ x y) z
min₃ : ℤ → ℤ → ℤ → ℤ → ℤ
min₃ w x y z = minℤ (min₂ w x y) z
\end{code}
Added by Todd
\begin{code}
ℤ≤-attach : (x y : ℤ) → (y = x) ∔ (x < y) → x ≤ y
ℤ≤-attach x x (inl refl) = 0 , refl
ℤ≤-attach x y (inr (a , p)) = succ a , (ℤ-left-succ-pos x a ⁻¹ ∙ p)
ℤ≤-same-witness : (x y : ℤ) → ((n , _) (m , _) : x ≤ y) → n = m
ℤ≤-same-witness x y p q = ap pr₁ (ℤ≤-is-prop x y p q)
ℤ≤-add-witness : (x y z : ℤ) → ((n , p) : x ≤ y) ((m , q) : y ≤ z)
→ ((o , r) : x ≤ z)
→ o = n ℕ+ m
ℤ≤-add-witness x y z x≤y y≤z x≤z
= ℤ≤-same-witness x z x≤z (ℤ≤-trans x y z x≤y y≤z)
ℤ-less-not-bigger-or-equal : (x y : ℤ) → x < y → ¬ (y ≤ x)
ℤ-less-not-bigger-or-equal x y x<y y≤x
= ℤ-bigger-or-equal-not-less y x y≤x x<y
\end{code}
Lane Biocini, 07 September 2023
A proof of the triangle inequality in the Integers using the Absolute
Difference operation defined in the Naturals. We first prove a convenience
lemma.
\begin{code}
ℕ-order-respects-ℤ-order'' : (m n : ℕ) → m ≤ n → pos m ≤ pos n
ℕ-order-respects-ℤ-order'' zero n l = ℤ-zero-least-pos n
ℕ-order-respects-ℤ-order'' (succ m) n l = ℕ-order-respects-ℤ-order m n l
triangle-inequality₀ : (x y : ℕ) → abs (pos x +pos y) ≤ℕ abs (pos x) ℕ+ abs (pos y)
triangle-inequality₀ x y = transport (_≤ℕ x ℕ+ y) Γ (≤-refl (x ℕ+ y))
where
Γ : x ℕ+ y = abs (pos x +pos y)
Γ = x ℕ+ y =⟨ ap abs (distributivity-pos-addition x y) ⁻¹ ⟩
abs (pos x +pos y) ∎
triangle-inequality₁ : (x y : ℕ) → abs (pos x +negsucc y) ≤ℕ succ (x ℕ+ y)
triangle-inequality₁ x y = transport (_≤ℕ succ (x ℕ+ y)) Γ γ
where
Γ : ∣ x - succ y ∣ = abs (pos x +negsucc y)
Γ = abs-pos-plus-negsucc x y ⁻¹
γ : ∣ x - succ y ∣ ≤ℕ succ (x ℕ+ y)
γ = triangle-inequality x 0 (succ y)
triangle-inequality₂ : (x y : ℕ) → abs (negsucc x +pos y) ≤ℕ (succ x ℕ+ y)
triangle-inequality₂ x y = transport₂ _≤ℕ_ I II (triangle-inequality₁ y x)
where
I : abs (pos y +negsucc x) = abs (negsucc x +pos y)
I = ap abs (ℤ+-comm (pos y) (negsucc x))
II : succ (y ℕ+ x) = succ x ℕ+ y
II = ap succ (addition-commutativity y x) ∙ succ-left x y ⁻¹
triangle-inequality₃ : (x y : ℕ) → abs (negsucc x +negsucc y) ≤ℕ succ (succ x ℕ+ y)
triangle-inequality₃ x y = transport (_≤ℕ succ (succ x ℕ+ y)) Γ γ
where
Γ : abs (pos (succ x) + pos (succ y)) = abs (negsucc x +negsucc y)
Γ = abs (succℤ (pos (succ x) +pos y)) =⟨ i ⟩
abs (- succℤ (pos (succ x) +pos y)) =⟨ ii ⟩
abs (negsucc x +negsucc y) ∎
where
i = abs-removes-neg-sign (succℤ (pos (succ x) +pos y))
ii = ap abs (negation-dist (pos (succ x)) (pos (succ y))) ⁻¹
γ : abs (pos (succ x) + pos (succ y)) ≤ℕ succ (succ x ℕ+ y)
γ = triangle-inequality₀ (succ x) (succ y)
ℤ-triangle-inequality : (x y : ℤ) → abs (x + y) ≤ℕ abs x ℕ+ abs y
ℤ-triangle-inequality (pos x) (pos y) = triangle-inequality₀ x y
ℤ-triangle-inequality (pos x) (negsucc y) = triangle-inequality₁ x y
ℤ-triangle-inequality (negsucc x) (pos y) = triangle-inequality₂ x y
ℤ-triangle-inequality (negsucc x) (negsucc y) = triangle-inequality₃ x y
ℤ-triangle-inequality' : (x y : ℤ) → absℤ (x + y) ≤ℤ absℤ x + absℤ y
ℤ-triangle-inequality' x y = transport₂ _≤ℤ_ I II γ
where
I : pos (abs (x + y)) = absℤ (x + y)
I = pos-abs-is-absℤ (x + y)
II : pos (abs x ℕ+ abs y) = absℤ x + absℤ y
II = pos (abs x ℕ+ abs y) =⟨ i ⟩
(pos (abs x) +pos abs y) =⟨ ii ⟩
absℤ x + absℤ y ∎
where
i = distributivity-pos-addition (abs x) (abs y) ⁻¹
ii : (pos (abs x) +pos abs y) = absℤ x + absℤ y
ii = ap₂ (λ x y → x + y) (pos-abs-is-absℤ x) (pos-abs-is-absℤ y)
γ : pos (abs (x + y)) ≤ℤ pos (abs x ℕ+ abs y)
γ = ℕ-order-respects-ℤ-order'' (abs (x + y)) (abs x ℕ+ abs y) (ℤ-triangle-inequality x y)