SyntheticHomotopyTheory.Circle.Integers-Properties
Tom de Jong Reboot: 22 January 2021 Earlier version: 18 September 2020{-# 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-β€-β)We will consider iterations of succ-β€ and pred-β€ in defining addition on β€ and need some lemmas for working with those iterations.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)We are now ready to define addition on β€ and prove its basic properties, such as commutativity._+β€_ : β€ β β€ β β€ _+β€_ π = 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) β»ΒΉ)Next is negation of integers.β_ : β€ β β€ β π = π β (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 β© π βFinally, we prove some lemmas on adding/shifting by a fixed integer.+β€-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)