foundations.AlgebraOnPaths.md.
Version of Sunday, January 22, 2023, 10:42 PM
Powered by agda version 2.6.2.2-442c76b and pandoc 2.14.0.3
{-# OPTIONS --without-K --exact-split #-}
module foundations.AlgebraOnPaths where
open import foundations.BasicTypes public
open import foundations.BasicFunctions public
ap²
: ∀ {ℓ₁ ℓ₂ ℓ₃ : Level} {A : Type ℓ₁}{B : Type ℓ₂} {C : Type ℓ₃} {a₁ a₂ : A} {b₁ b₂ : B}
→ (f : A → B → C)
→ (a₁ ≡ a₂) → (b₁ ≡ b₂)
--------------------------
→ f a₁ b₁ ≡ f a₂ b₂
ap² f idp idp = idp
ap-·
: ∀ {ℓ₁ ℓ₂ : Level} {A : Type ℓ₁}{B : Type ℓ₂} {a b c : A}
→ (f : A → B) → (p : a ≡ b) → (q : b ≡ c)
-------------------------------------------
→ ap f (p · q) ≡ ap f p · ap f q
ap-· f idp q = refl (ap f q)
ap-inv
: ∀ {ℓ₁ ℓ₂ : Level} {A : Type ℓ₁}{B : Type ℓ₂} {a b : A}
→ (f : A → B) → (p : a ≡ b)
----------------------------
→ ap f (p ⁻¹) ≡ (ap f p) ⁻¹
ap-inv f idp = idp
ap-! = ap-inv
ap-comp
: ∀ {ℓ₁ ℓ₂ ℓ₃ : Level} {A : Type ℓ₁}{B : Type ℓ₂} {C : Type ℓ₃} {a b : A}
→ (f : A → B)
→ (g : B → C)
→ (p : a ≡ b)
-------------------------------
→ ap g (ap f p) ≡ ap (g ∘ f) p
ap-comp f g idp = idp
ap-id
: ∀ {ℓ : Level} {A : Type ℓ} {a b : A}
→ (p : a ≡ b)
--------------
→ ap id p ≡ p
ap-id idp = idp
ap-const
: ∀ {ℓ₁ ℓ₂ : Level} {A : Type ℓ₁}{B : Type ℓ₂} {a a' : A} {b : B}
→ (p : a ≡ a')
-----------------------
→ ap (λ _ → b) p ≡ idp
ap-const {b = b} idp = refl (refl b)
·-runit
: ∀ {ℓ : Level} {A : Type ℓ} {a a' : A}
→ (p : a ≡ a')
--------------
→ p ≡ p · idp
·-runit idp = idp
·-lunit
: ∀ {ℓ : Level} {A : Type ℓ} {a a' : A}
→ (p : a ≡ a')
--------------
→ p ≡ idp · p
·-lunit idp = idp
·-linv
: ∀ {ℓ : Level} {A : Type ℓ} {a a' : A}
→ (p : a ≡ a')
----------------
→ ! p · p ≡ idp
·-linv idp = idp
≡-inverse-left = ·-linv
·-rinv
: ∀ {ℓ : Level} {A : Type ℓ} {a a' : A}
→ (p : a ≡ a')
----------------
→ p · ! p ≡ idp
·-rinv idp = idp
≡-inverse-right = ·-rinv
involution
: ∀ {ℓ : Level} {A : Type ℓ} {a a' : A}
→ (p : a ≡ a')
---------------
→ ! (! p) ≡ p
involution idp = idp
·-assoc
: ∀ {ℓ : Level} {A : Type ℓ} {a b c d : A}
→ (p : a ≡ b) → (q : b ≡ c) → (r : c ≡ d)
--------------------------------------------
→ p · q · r ≡ p · (q · r)
·-assoc idp q r = idp
·-cancellation
: ∀ {ℓ : Level} {A : Type ℓ} {a : A}
→ (p : a ≡ a) → (q : a ≡ a)
→ p · q ≡ p
-----------------------------------------
→ q ≡ refl a
·-cancellation {a = a} p q α =
begin
q ≡⟨ ap (_· q) (! (·-linv p)) ⟩
(! p · p) · q ≡⟨ (·-assoc (! p) p q) ⟩
! p · (p · q) ≡⟨ ap (! p ·_) α ⟩
! p · p ≡⟨ ·-linv p ⟩
refl a
∎
Moving a term from one side to the other is a common task, so let’s define a few handy functions for doing that.
·-left-to-right-l
: ∀ {ℓ : Level} {A : Type ℓ} {a b c : A} {p : a ≡ b} {q : b ≡ c} {r : a ≡ c}
→ p · q ≡ r
------------------
→ q ≡ ! p · r
·-left-to-right-l {a = a}{b = b}{c = c} {p} {q} {r} α =
begin
q
≡⟨ ·-lunit q ⟩
refl b · q
≡⟨ ap (_· q) (! (·-linv p)) ⟩
(! p · p) · q
≡⟨ ·-assoc (! p) p q ⟩
! p · (p · q)
≡⟨ ap (! p ·_) α ⟩
! p · r
∎
·-left-to-right-r
: ∀ {ℓ : Level} {A : Type ℓ} {a b c : A} {p : a ≡ b} {q : b ≡ c} {r : a ≡ c}
→ p · q ≡ r
-------------------
→ p ≡ r · ! q
·-left-to-right-r {a = a}{b = b}{c = c} {p} {q} {r} α =
begin
p
≡⟨ ·-runit p ⟩
p · refl b
≡⟨ ap (p ·_) (! (·-rinv q)) ⟩
p · (q · ! q)
≡⟨ ! (·-assoc p q (! q)) ⟩
(p · q) · ! q
≡⟨ ap (_· ! q) α ⟩
r · ! q
∎
·-right-to-left-r
: ∀ {ℓ : Level} {A : Type ℓ} {a b c : A} {p : a ≡ c} {q : a ≡ b} {r : b ≡ c}
→ p ≡ q · r
-------------------
→ p · ! r ≡ q
·-right-to-left-r {a = a}{b = b}{c = c} {p} {q} {r} α =
begin
p · ! r
≡⟨ ap (_· ! r) α ⟩
(q · r) · ! r
≡⟨ ·-assoc q r (! r) ⟩
q · (r · ! r)
≡⟨ ap (q ·_) (·-rinv r) ⟩
q · refl b
≡⟨ ! (·-runit q) ⟩
q
∎
·-right-to-left-l
: ∀ {ℓ : Level} {A : Type ℓ} {a b c : A} {p : a ≡ c} {q : a ≡ b} {r : b ≡ c}
→ p ≡ q · r
------------------
→ ! q · p ≡ r
·-right-to-left-l {a = a}{b = b}{c = c} {p} {q} {r} α =
begin
! q · p
≡⟨ ap (! q ·_) α ⟩
! q · (q · r)
≡⟨ ! (·-assoc (! q) q r) ⟩
! q · q · r
≡⟨ ap (_· r) (·-linv q) ⟩
refl b · r
≡⟨ ! (·-lunit r) ⟩
r
∎
!-·
: ∀ {ℓ : Level} {A : Type ℓ} {a b : A}
→ (p : a ≡ b)
→ (q : b ≡ a)
--------------------------
→ ! (p · q) ≡ ! q · ! p
!-· idp q = ·-runit (! q)
(2022-12-28)(57c278b4) Last updated: 2021-09-16 15:00:00 by jonathan.cubides (2022-07-06)(d3a4a8cf) minors by jonathan.cubides (2022-01-26)(4aef326b) [ reports ] added some revisions by jonathan.cubides (2021-12-20)(049db6a8) Added code of cubical experiments. by jonathan.cubides (2021-12-20)(961730c9) [ html ] regular update by jonathan.cubides (2021-12-20)(e0ef9faa) Fixed compilation and format, remove hidden parts by jonathan.cubides (2021-12-20)(5120e5d1) Added cubical experiment to the master by jonathan.cubides (2021-12-17)(828fdd0a) More revisions added for CPP by jonathan.cubides (2021-12-15)(0d6a99d8) Fixed some broken links and descriptions by jonathan.cubides (2021-12-15)(662a1f2d) [ .gitignore ] add by jonathan.cubides (2021-12-15)(0630ce66) Minor fixes by jonathan.cubides (2021-12-13)(04f10eba) Fixed a lot of details by jonathan.cubides (2021-12-10)(24195c9f) [ .gitignore ] ignore .zip and arxiv related files by jonathan.cubides (2021-12-09)(538d2859) minor fixes before dinner by jonathan.cubides (2021-12-09)(36a1a69f) [ planar.pdf ] w.i.p revisions to share on arxiv first by jonathan.cubides