Tom de Jong
Reboot: 22 January 2021
Earlier version: 18 September 2020
\begin{code}
{-# OPTIONS --safe --without-K #-}
open import SyntheticHomotopyTheory.Circle.Integers
open import MLTT.Spartan
open import UF.DiscreteAndSeparated
open import UF.Equiv
open import UF.Sets
open import UF.Subsingletons
open import UF.Subsingletons-Properties
module SyntheticHomotopyTheory.Circle.Integers-Properties where
β€-is-set : is-set β€
β€-is-set = +-is-set π (β + β) (props-are-sets π-is-prop)
(+-is-set β β β-is-set β-is-set)
succ-β€ : β€ β β€
succ-β€ π = pos 0
succ-β€ (pos n) = pos (succ n)
succ-β€ (neg 0) = π
succ-β€ (neg (succ n)) = neg n
pred-β€ : β€ β β€
pred-β€ π = neg 0
pred-β€ (pos 0) = π
pred-β€ (pos (succ n)) = pos n
pred-β€ (neg n) = neg (succ n)
succ-β€-is-retraction : succ-β€ β pred-β€ βΌ id
succ-β€-is-retraction π = refl
succ-β€-is-retraction (pos zero) = refl
succ-β€-is-retraction (pos (succ n)) = refl
succ-β€-is-retraction (neg n) = refl
succ-β€-is-section : pred-β€ β succ-β€ βΌ id
succ-β€-is-section π = refl
succ-β€-is-section (pos n) = refl
succ-β€-is-section (neg zero) = refl
succ-β€-is-section (neg (succ n)) = refl
succ-β€-is-equiv : is-equiv succ-β€
succ-β€-is-equiv = qinvs-are-equivs succ-β€
(pred-β€ , succ-β€-is-section , succ-β€-is-retraction)
succ-β€-β : β€ β β€
succ-β€-β = (succ-β€ , succ-β€-is-equiv)
pred-β€-is-equiv : is-equiv pred-β€
pred-β€-is-equiv = ββ-is-equiv (β-sym succ-β€-β)
\end{code}
We will consider iterations of succ-β€ and pred-β€ in defining addition on β€ and
need some lemmas for working with those iterations.
\begin{code}
commute-with-iterated-function : {X : π€ Μ } (f g : X β X)
β f β g βΌ g β f
β (n : β) β f β (g ^ n) βΌ (g ^ n) β f
commute-with-iterated-function f g h zero x = refl
commute-with-iterated-function f g h (succ n) x =
(f β g β (g ^ n)) x οΌβ¨ h ((g ^ n) x) β©
(g β f β (g ^ n)) x οΌβ¨ ap g (IH x) β©
(g β (g ^ n) β f) x β
where
IH : f β (g ^ n) βΌ (g ^ n) β f
IH = commute-with-iterated-function f g h n
commute-with-iterated-functions : {X : π€ Μ } (f g : X β X)
β f β g βΌ g β f
β (n m : β)
β (f ^ n) β (g ^ m) βΌ (g ^ m) β (f ^ n)
commute-with-iterated-functions f g h n m =
commute-with-iterated-function (f ^ n) g Ξ³ m
where
Ξ³ : (f ^ n) β g βΌ g β (f ^ n)
Ξ³ x = (commute-with-iterated-function g f (Ξ» y β h y β»ΒΉ) n x) β»ΒΉ
iterated-function-is-section : {X : π€ Μ } (s : X β X) (r : X β X)
β r β s βΌ id
β (n : β) β (r ^ n) β (s ^ n) βΌ id
iterated-function-is-section s r Ο zero x = refl
iterated-function-is-section s r Ο (succ n) x =
(r β (r ^ n) β s β (s ^ n)) x οΌβ¨ I β©
(r β (r ^ n) β (s ^ n) β s) x οΌβ¨ II β©
(r β s) x οΌβ¨ Ο x β©
x β
where
I = ap (r ^ (succ n)) (commute-with-iterated-function s s (Ξ» x β refl) n x)
II = ap r (iterated-function-is-section s r Ο n (s x))
iterated-function-is-equiv : {X : π€ Μ } (f : X β X)
β is-equiv f
β (n : β) β is-equiv (f ^ n)
iterated-function-is-equiv f ((s , Ξ΅) , (r , Ξ·)) n =
(((s ^ n) , (iterated-function-is-section s f Ξ΅ n)) ,
((r ^ n) , (iterated-function-is-section f r Ξ· n)))
commute-with-succ-β€^n : (f : β€ β β€)
β (f β succ-β€ βΌ succ-β€ β f)
β (n : β) β f β (succ-β€ ^ n) βΌ (succ-β€ ^ n) β f
commute-with-succ-β€^n f c = commute-with-iterated-function f succ-β€ c
commute-with-pred-β€ : (f : β€ β β€)
β (f β succ-β€ βΌ succ-β€ β f)
β f β pred-β€ βΌ pred-β€ β f
commute-with-pred-β€ f c z = equivs-are-lc succ-β€ succ-β€-is-equiv Ξ³
where
Ξ³ : succ-β€ (f (pred-β€ z)) οΌ succ-β€ (pred-β€ (f z))
Ξ³ = succ-β€ (f (pred-β€ z)) οΌβ¨ (c (pred-β€ z)) β»ΒΉ β©
f (succ-β€ (pred-β€ z)) οΌβ¨ ap f (succ-β€-is-retraction z) β©
f z οΌβ¨ (succ-β€-is-retraction (f z)) β»ΒΉ β©
succ-β€ (pred-β€ (f z)) β
succ-β€-commutes-with-pred-β€ : succ-β€ β pred-β€ βΌ pred-β€ β succ-β€
succ-β€-commutes-with-pred-β€ = commute-with-pred-β€ succ-β€ (Ξ» x β refl)
pred-β€-commutes-with-succ-β€ : pred-β€ β succ-β€ βΌ succ-β€ β pred-β€
pred-β€-commutes-with-succ-β€ x = (succ-β€-commutes-with-pred-β€ x) β»ΒΉ
commute-with-pred-β€^n : (f : β€ β β€)
β (f β succ-β€ βΌ succ-β€ β f)
β (n : β) β f β (pred-β€ ^ n) βΌ (pred-β€ ^ n) β f
commute-with-pred-β€^n f c =
commute-with-iterated-function f pred-β€ (commute-with-pred-β€ f c)
succ-β€^n-is-retraction : (n : β) β (succ-β€ ^ n) β (pred-β€ ^ n) βΌ id
succ-β€^n-is-retraction =
iterated-function-is-section pred-β€ succ-β€ succ-β€-is-retraction
succ-β€^n-is-section : (n : β) β (pred-β€ ^ n) β (succ-β€ ^ n) βΌ id
succ-β€^n-is-section =
iterated-function-is-section succ-β€ pred-β€ succ-β€-is-section
pos-is-succ-β€-iterated : (n : β) β pos n οΌ (succ-β€ ^ (succ n)) π
pos-is-succ-β€-iterated zero = refl
pos-is-succ-β€-iterated (succ n) = ap succ-β€ (pos-is-succ-β€-iterated n)
neg-is-pred-β€-iterated : (n : β) β neg n οΌ (pred-β€ ^ (succ n)) π
neg-is-pred-β€-iterated zero = refl
neg-is-pred-β€-iterated (succ n) = ap pred-β€ (neg-is-pred-β€-iterated n)
\end{code}
We are now ready to define addition on β€ and prove its basic properties, such as
commutativity.
\begin{code}
_+β€_ : β€ β β€ β β€
_+β€_ π = id
_+β€_ (pos n) = (succ-β€ ^ (succ n))
_+β€_ (neg n) = (pred-β€ ^ (succ n))
+β€-is-commutative : (x y : β€) β x +β€ y οΌ y +β€ x
+β€-is-commutative π π = refl
+β€-is-commutative π (pos m) = pos-is-succ-β€-iterated m
+β€-is-commutative π (neg m) = neg-is-pred-β€-iterated m
+β€-is-commutative (pos n) π = (pos-is-succ-β€-iterated n) β»ΒΉ
+β€-is-commutative (neg n) π = (neg-is-pred-β€-iterated n) β»ΒΉ
+β€-is-commutative (pos n) (pos m) =
(succ-β€ ^ succ n) (pos m) οΌβ¨ I β©
(succ-β€ ^ succ n) ((succ-β€ ^ succ m) π) οΌβ¨ II β©
(succ-β€ ^ succ m) ((succ-β€ ^ succ n) π) οΌβ¨ III β©
(succ-β€ ^ succ m) (pos n) οΌβ¨reflβ©
pos m +β€ pos n β
where
I = ap (succ-β€ ^ (succ n)) (pos-is-succ-β€-iterated m)
II = commute-with-iterated-functions succ-β€ succ-β€
(Ξ» x β refl) (succ n) (succ m) π
III = ap (succ-β€ ^ (succ m)) ((pos-is-succ-β€-iterated n) β»ΒΉ)
+β€-is-commutative (pos n) (neg m) =
(succ-β€ ^ succ n) (neg m) οΌβ¨ I β©
(succ-β€ ^ succ n) ((pred-β€ ^ succ m) π) οΌβ¨ II β©
(pred-β€ ^ succ m) ((succ-β€ ^ succ n) π) οΌβ¨ III β©
(pred-β€ ^ succ m) (pos n) οΌβ¨reflβ©
neg m +β€ pos n β
where
I = ap (succ-β€ ^ succ n) (neg-is-pred-β€-iterated m)
II = commute-with-iterated-functions succ-β€ pred-β€
succ-β€-commutes-with-pred-β€ (succ n) (succ m) π
III = ap (pred-β€ ^ succ m) ((pos-is-succ-β€-iterated n) β»ΒΉ)
+β€-is-commutative (neg n) (pos m) =
(pred-β€ ^ succ n) (pos m) οΌβ¨ I β©
(pred-β€ ^ succ n) ((succ-β€ ^ succ m) π) οΌβ¨ II β©
(succ-β€ ^ succ m) ((pred-β€ ^ succ n) π) οΌβ¨ III β©
(succ-β€ ^ succ m) (neg n) οΌβ¨reflβ©
pos m +β€ neg n β
where
I = ap (pred-β€ ^ succ n) (pos-is-succ-β€-iterated m)
II = commute-with-iterated-functions pred-β€ succ-β€
pred-β€-commutes-with-succ-β€ (succ n) (succ m) π
III = ap (succ-β€ ^ succ m) ((neg-is-pred-β€-iterated n) β»ΒΉ)
+β€-is-commutative (neg n) (neg m) =
(pred-β€ ^ succ n) (neg m) οΌβ¨ I β©
(pred-β€ ^ succ n) ((pred-β€ ^ succ m) π) οΌβ¨ II β©
(pred-β€ ^ succ m) ((pred-β€ ^ succ n) π) οΌβ¨ III β©
(pred-β€ ^ succ m) (neg n) οΌβ¨reflβ©
neg m +β€ neg n β
where
I = ap (pred-β€ ^ succ n) (neg-is-pred-β€-iterated m)
II = commute-with-iterated-functions pred-β€ pred-β€
(Ξ» x β refl) (succ n) (succ m) π
III = ap (pred-β€ ^ succ m) ((neg-is-pred-β€-iterated n) β»ΒΉ)
\end{code}
Next is negation of integers.
\begin{code}
β_ : β€ β β€
β π = π
β (pos n) = neg n
β (neg n) = pos n
β-is-linv : (x : β€) β x +β€ (β x) οΌ π
β-is-linv π = refl
β-is-linv (pos n) =
(succ-β€ ^ succ n) (neg n) οΌβ¨ I β©
(succ-β€ ^ succ n) ((pred-β€ ^ succ n) π) οΌβ¨ II β©
π β
where
I = ap (succ-β€ ^ succ n) (neg-is-pred-β€-iterated n)
II = succ-β€^n-is-retraction (succ n) π
β-is-linv (neg n) =
(pred-β€ ^ succ n) (pos n) οΌβ¨ I β©
(pred-β€ ^ succ n) ((succ-β€ ^ succ n) π) οΌβ¨ II β©
π β
where
I = ap (pred-β€ ^ succ n) (pos-is-succ-β€-iterated n)
II = succ-β€^n-is-section (succ n) π
β-is-involutive : (x : β€) β β β x οΌ x
β-is-involutive π = refl
β-is-involutive (pos n) = refl
β-is-involutive (neg n) = refl
β-is-rinv : (x : β€) β (β x) +β€ x οΌ π
β-is-rinv x = (β x) +β€ x οΌβ¨ +β€-is-commutative (β x) x β©
x +β€ (β x) οΌβ¨ β-is-linv x β©
π β
\end{code}
Finally, we prove some lemmas on adding/shifting by a fixed integer.
\begin{code}
+β€-is-equiv-left : (x : β€) β is-equiv (Ξ» y β x +β€ y)
+β€-is-equiv-left π = id-is-equiv β€
+β€-is-equiv-left (pos n) = iterated-function-is-equiv succ-β€ succ-β€-is-equiv (succ n)
+β€-is-equiv-left (neg n) = iterated-function-is-equiv pred-β€ pred-β€-is-equiv (succ n)
+β€-is-equiv-right : (y : β€) β is-equiv (Ξ» x β x +β€ y)
+β€-is-equiv-right y = equiv-closed-under-βΌ (Ξ» x β y +β€ x) (Ξ» x β x +β€ y)
(+β€-is-equiv-left y) (Ξ» x β +β€-is-commutative x y)
shift-if-commute-with-succ-β€ : (f : β€ β β€)
β f β succ-β€ βΌ succ-β€ β f
β f βΌ (Ξ» x β x +β€ f π)
shift-if-commute-with-succ-β€ f h π = refl
shift-if-commute-with-succ-β€ f h (pos n) =
f (pos n) οΌβ¨ ap f (pos-is-succ-β€-iterated n) β©
f ((succ-β€ ^ succ n) π) οΌβ¨ commute-with-iterated-function
f succ-β€ h (succ n) π β©
(succ-β€ ^ (succ n)) (f π) β
shift-if-commute-with-succ-β€ f h (neg n) =
f (neg n) οΌβ¨ ap f (neg-is-pred-β€-iterated n) β©
f ((pred-β€ ^ succ n) π) οΌβ¨ commute-with-iterated-function
f pred-β€ (commute-with-pred-β€ f h) (succ n) π β©
(pred-β€ ^ (succ n)) (f π) β
left-shift-commutes-with-succ-β€ : (x : β€)
β (Ξ» y β x +β€ y) β succ-β€
βΌ succ-β€ β (Ξ» y β x +β€ y)
left-shift-commutes-with-succ-β€ π y = refl
left-shift-commutes-with-succ-β€ (pos n) y =
(commute-with-succ-β€^n succ-β€ (Ξ» _ β refl) (succ n) y) β»ΒΉ
left-shift-commutes-with-succ-β€ (neg n) y =
(commute-with-pred-β€^n succ-β€ (Ξ» _ β refl) (succ n) y) β»ΒΉ
right-shift-commutes-with-succ-β€ : (y : β€)
β (Ξ» x β x +β€ y) β succ-β€
βΌ succ-β€ β (Ξ» x β x +β€ y)
right-shift-commutes-with-succ-β€ y x =
(succ-β€ x) +β€ y οΌβ¨ +β€-is-commutative (succ-β€ x) y β©
y +β€ (succ-β€ x) οΌβ¨ left-shift-commutes-with-succ-β€ y x β©
succ-β€ (y +β€ x) οΌβ¨ ap succ-β€ (+β€-is-commutative y x) β©
succ-β€ (x +β€ y) β
is-equiv-if-commute-with-succ-β€ : (f : β€ β β€)
β f β succ-β€ βΌ succ-β€ β f
β is-equiv f
is-equiv-if-commute-with-succ-β€ f h =
equiv-closed-under-βΌ (Ξ» x β x +β€ f π) f
(+β€-is-equiv-right (f π)) (shift-if-commute-with-succ-β€ f h)
\end{code}