# Higher homotopies of morphisms of arrows ```agda module foundation.higher-homotopies-morphisms-arrows where ``` <details><summary>Imports</summary> ```agda open import foundation.action-on-identifications-functions open import foundation.commuting-squares-of-homotopies open import foundation.commuting-squares-of-identifications open import foundation.dependent-pair-types open import foundation.fundamental-theorem-of-identity-types open import foundation.homotopies-morphisms-arrows open import foundation.homotopy-induction open import foundation.morphisms-arrows open import foundation.path-algebra open import foundation.structure-identity-principle open import foundation.torsorial-type-families open import foundation.universe-levels open import foundation.whiskering-higher-homotopies-composition open import foundation.whiskering-homotopies-concatenation open import foundation.whiskering-identifications-concatenation open import foundation-core.equivalences open import foundation-core.homotopies open import foundation-core.identity-types ``` </details> ## Idea Consider two [morphisms of arrows](foundation.morphisms-arrows.md) `α := (i , j , H)` and `α' := (i' , j' , H')` and two [homotopies of morphisms of arrows](foundation.homotopies-morphisms-arrows.md) `β := (I , J , K)` and `β' : (I' , J' , K')` between them. A {{#concept "`2`-homotopy of morphisms of arrows" Agda=htpy-htpy-hom-arrow}} is a triple `(γ₀, γ₁ , γ₂)` consisting of [homotopies](foundation-core.homotopies.md) ```text γ₀ : I ~ I' γ₁ : J ~ J' ``` and a homotopy witnessing that the square of homotopies ```text left-whisker-concat-htpy H (g · γ₀) H ∙ (g ·l I) ---------------------------------------> H ∙ (g · I') | | K | | K' ∨ ∨ (J · f) ∙ H' ---------------------------------------> (J' · f) ∙ H' right-whisker-concat-htpy (γ₁ · f) H' ``` [commutes](foundation.commuting-squares-of-homotopies.md). ## Definitions ### Homotopies of homotopies of arrows ```agda module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4} (f : A → B) (g : X → Y) (α α' : hom-arrow f g) (β β' : htpy-hom-arrow f g α α') where coherence-htpy-htpy-hom-arrow : htpy-domain-htpy-hom-arrow f g α α' β ~ htpy-domain-htpy-hom-arrow f g α α' β' → htpy-codomain-htpy-hom-arrow f g α α' β ~ htpy-codomain-htpy-hom-arrow f g α α' β' → UU (l1 ⊔ l4) coherence-htpy-htpy-hom-arrow γ₀ γ₁ = coherence-square-homotopies ( left-whisker-concat-htpy ( coh-hom-arrow f g α) ( left-whisker-comp² g γ₀)) ( coh-htpy-hom-arrow f g α α' β) ( coh-htpy-hom-arrow f g α α' β') ( right-whisker-concat-htpy ( right-whisker-comp² γ₁ f) ( coh-hom-arrow f g α')) htpy-htpy-hom-arrow : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4) htpy-htpy-hom-arrow = Σ ( htpy-domain-htpy-hom-arrow f g α α' β ~ htpy-domain-htpy-hom-arrow f g α α' β') ( λ γ₀ → Σ ( htpy-codomain-htpy-hom-arrow f g α α' β ~ htpy-codomain-htpy-hom-arrow f g α α' β') ( coherence-htpy-htpy-hom-arrow γ₀)) module _ (γ : htpy-htpy-hom-arrow) where htpy-domain-htpy-htpy-hom-arrow : htpy-domain-htpy-hom-arrow f g α α' β ~ htpy-domain-htpy-hom-arrow f g α α' β' htpy-domain-htpy-htpy-hom-arrow = pr1 γ htpy-codomain-htpy-htpy-hom-arrow : htpy-codomain-htpy-hom-arrow f g α α' β ~ htpy-codomain-htpy-hom-arrow f g α α' β' htpy-codomain-htpy-htpy-hom-arrow = pr1 (pr2 γ) coh-htpy-htpy-hom-arrow : coherence-htpy-htpy-hom-arrow ( htpy-domain-htpy-htpy-hom-arrow) ( htpy-codomain-htpy-htpy-hom-arrow) coh-htpy-htpy-hom-arrow = pr2 (pr2 γ) ``` ### The reflexivity homotopy of homotopies of morphisms of arrows ```agda module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4} (f : A → B) (g : X → Y) (α α' : hom-arrow f g) (β : htpy-hom-arrow f g α α') where htpy-domain-refl-htpy-htpy-hom-arrow : htpy-domain-htpy-hom-arrow f g α α' β ~ htpy-domain-htpy-hom-arrow f g α α' β htpy-domain-refl-htpy-htpy-hom-arrow = refl-htpy htpy-codomain-refl-htpy-htpy-hom-arrow : htpy-codomain-htpy-hom-arrow f g α α' β ~ htpy-codomain-htpy-hom-arrow f g α α' β htpy-codomain-refl-htpy-htpy-hom-arrow = refl-htpy coh-refl-htpy-htpy-hom-arrow : coherence-htpy-htpy-hom-arrow f g α α' β β ( htpy-domain-refl-htpy-htpy-hom-arrow) ( htpy-codomain-refl-htpy-htpy-hom-arrow) coh-refl-htpy-htpy-hom-arrow = right-unit-htpy refl-htpy-htpy-hom-arrow : htpy-htpy-hom-arrow f g α α' β β pr1 refl-htpy-htpy-hom-arrow = htpy-domain-refl-htpy-htpy-hom-arrow pr1 (pr2 refl-htpy-htpy-hom-arrow) = htpy-codomain-refl-htpy-htpy-hom-arrow pr2 (pr2 refl-htpy-htpy-hom-arrow) = coh-refl-htpy-htpy-hom-arrow ``` ## Properties ### Homotopies of homotopies of morphisms of arrows characterize equality of homotopies of morphisms of arrows ```agda module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4} (f : A → B) (g : X → Y) (α α' : hom-arrow f g) (β : htpy-hom-arrow f g α α') where htpy-eq-htpy-hom-arrow : (β' : htpy-hom-arrow f g α α') → β = β' → htpy-htpy-hom-arrow f g α α' β β' htpy-eq-htpy-hom-arrow .β refl = refl-htpy-htpy-hom-arrow f g α α' β is-torsorial-htpy-htpy-hom-arrow : is-torsorial (htpy-htpy-hom-arrow f g α α' β) is-torsorial-htpy-htpy-hom-arrow = is-torsorial-Eq-structure ( is-torsorial-htpy _) ( htpy-domain-htpy-hom-arrow f g α α' β , refl-htpy) ( is-torsorial-Eq-structure ( is-torsorial-htpy _) ( htpy-codomain-htpy-hom-arrow f g α α' β , refl-htpy) ( is-torsorial-htpy _)) is-equiv-htpy-eq-htpy-hom-arrow : (β' : htpy-hom-arrow f g α α') → is-equiv (htpy-eq-htpy-hom-arrow β') is-equiv-htpy-eq-htpy-hom-arrow = fundamental-theorem-id ( is-torsorial-htpy-htpy-hom-arrow) ( htpy-eq-htpy-hom-arrow) extensionality-htpy-hom-arrow : (β' : htpy-hom-arrow f g α α') → (β = β') ≃ htpy-htpy-hom-arrow f g α α' β β' pr1 (extensionality-htpy-hom-arrow β') = htpy-eq-htpy-hom-arrow β' pr2 (extensionality-htpy-hom-arrow β') = is-equiv-htpy-eq-htpy-hom-arrow β' eq-htpy-htpy-hom-arrow : (β' : htpy-hom-arrow f g α α') → htpy-htpy-hom-arrow f g α α' β β' → β = β' eq-htpy-htpy-hom-arrow β' = map-inv-equiv (extensionality-htpy-hom-arrow β') ``` ### The left unit law for concatenation of homotopies of morphisms of arrows ```agda module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4} (f : A → B) (g : X → Y) (α α' : hom-arrow f g) (β : htpy-hom-arrow f g α α') where htpy-domain-left-unit-law-concat-htpy-hom-arrow : htpy-domain-concat-htpy-hom-arrow f g α α α' (refl-htpy-hom-arrow f g α) β ~ htpy-domain-htpy-hom-arrow f g α α' β htpy-domain-left-unit-law-concat-htpy-hom-arrow = refl-htpy htpy-codomain-left-unit-law-concat-htpy-hom-arrow : htpy-codomain-concat-htpy-hom-arrow f g α α α' ( refl-htpy-hom-arrow f g α) ( β) ~ htpy-codomain-htpy-hom-arrow f g α α' β htpy-codomain-left-unit-law-concat-htpy-hom-arrow = refl-htpy coh-left-unit-law-concat-htpy-hom-arrow : coherence-htpy-htpy-hom-arrow f g α α' ( concat-htpy-hom-arrow f g α α α' (refl-htpy-hom-arrow f g α) β) ( β) ( htpy-domain-left-unit-law-concat-htpy-hom-arrow) ( htpy-codomain-left-unit-law-concat-htpy-hom-arrow) coh-left-unit-law-concat-htpy-hom-arrow a = ( right-unit) ∙ ( right-whisker-concat ( right-whisker-concat-horizontal-refl-coherence-square-identifications ( coh-hom-arrow f g α a) ( ap g (htpy-domain-htpy-hom-arrow f g α α' β a))) ( coh-htpy-hom-arrow f g α α' β a)) left-unit-law-concat-htpy-hom-arrow : htpy-htpy-hom-arrow f g α α' ( concat-htpy-hom-arrow f g α α α' (refl-htpy-hom-arrow f g α) β) ( β) pr1 left-unit-law-concat-htpy-hom-arrow = htpy-domain-left-unit-law-concat-htpy-hom-arrow pr1 (pr2 left-unit-law-concat-htpy-hom-arrow) = htpy-codomain-left-unit-law-concat-htpy-hom-arrow pr2 (pr2 left-unit-law-concat-htpy-hom-arrow) = coh-left-unit-law-concat-htpy-hom-arrow ``` ### The right unit law for concatenation of morphisms of arrows ```agda module _ {l1 l2 l3 l4 : Level} {A : UU l1} {B : UU l2} {X : UU l3} {Y : UU l4} (f : A → B) (g : X → Y) (α α' : hom-arrow f g) (β : htpy-hom-arrow f g α α') where htpy-domain-right-unit-law-concat-htpy-hom-arrow : htpy-domain-concat-htpy-hom-arrow f g α α' α' β ( refl-htpy-hom-arrow f g α') ~ htpy-domain-htpy-hom-arrow f g α α' β htpy-domain-right-unit-law-concat-htpy-hom-arrow = right-unit-htpy htpy-codomain-right-unit-law-concat-htpy-hom-arrow : htpy-codomain-concat-htpy-hom-arrow f g α α' α' β ( refl-htpy-hom-arrow f g α') ~ htpy-codomain-htpy-hom-arrow f g α α' β htpy-codomain-right-unit-law-concat-htpy-hom-arrow = right-unit-htpy coh-right-unit-law-concat-htpy-hom-arrow : coherence-htpy-htpy-hom-arrow f g α α' ( concat-htpy-hom-arrow f g α α' α' β (refl-htpy-hom-arrow f g α')) ( β) ( htpy-domain-right-unit-law-concat-htpy-hom-arrow) ( htpy-codomain-right-unit-law-concat-htpy-hom-arrow) coh-right-unit-law-concat-htpy-hom-arrow a = ( assoc ( left-whisker-concat (coh-hom-arrow f g α a) (ap-concat g _ refl)) ( _) ( right-whisker-concat right-unit (coh-hom-arrow f g α' a))) ∙ ( horizontal-concat-Id² ( ( ap ( left-whisker-concat (coh-hom-arrow f g α a)) ( compute-right-refl-ap-concat g ( htpy-domain-htpy-hom-arrow f g α α' β a))) ∙ ( distributive-left-whisker-concat-concat ( coh-hom-arrow f g α a) ( ap (ap g) right-unit) ( inv right-unit))) ( right-unit-law-horizontal-pasting-coherence-square-identifications ( htpy-codomain-htpy-hom-arrow f g α α' β (f a)) ( coh-hom-arrow f g α a) ( coh-hom-arrow f g α' a) ( ap g (htpy-domain-htpy-hom-arrow f g α α' β a)) ( coh-htpy-hom-arrow f g α α' β a)) ∙ ( unsplice-concat' ( left-whisker-concat (coh-hom-arrow f g α a) (ap (ap g) right-unit)) ( compute-inv-left-whisker-concat (coh-hom-arrow f g α a) right-unit) ( coh-htpy-hom-arrow f g α α' β a))) right-unit-law-concat-htpy-hom-arrow : htpy-htpy-hom-arrow f g α α' ( concat-htpy-hom-arrow f g α α' α' β (refl-htpy-hom-arrow f g α')) ( β) pr1 right-unit-law-concat-htpy-hom-arrow = htpy-domain-right-unit-law-concat-htpy-hom-arrow pr1 (pr2 right-unit-law-concat-htpy-hom-arrow) = htpy-codomain-right-unit-law-concat-htpy-hom-arrow pr2 (pr2 right-unit-law-concat-htpy-hom-arrow) = coh-right-unit-law-concat-htpy-hom-arrow ```