# Morphisms of double arrows ```agda module foundation.morphisms-double-arrows where ``` <details><summary>Imports</summary> ```agda open import foundation.cartesian-product-types open import foundation.commuting-squares-of-maps open import foundation.dependent-pair-types open import foundation.double-arrows open import foundation.function-types open import foundation.homotopies open import foundation.morphisms-arrows open import foundation.universe-levels ``` </details> ## Idea A {{#concept "morphism of double arrows" Disambiguation="between types" Agda=hom-double-arrow}} from a [double arrow](foundation.double-arrows.md) `f, g : A → B` to a double arrow `h, k : X → Y` is a pair of maps `i : A → X` and `j : B → Y`, such that the squares ```text i i A --------> X A --------> X | | | | f | | h g | | k | | | | ∨ ∨ ∨ ∨ B --------> Y B --------> Y j j ``` [commute](foundation-core.commuting-squares-of-maps.md). The map `i` is referred to as the _domain map_, and the `j` as the _codomain map_. Alternatively, a morphism of double arrows is a pair of [morphisms of arrows](foundation.morphisms-arrows.md) `f → h` and `g → k` that share the underlying maps. ## Definitions ### Morphisms of double arrows ```agda module _ {l1 l2 l3 l4 : Level} (a : double-arrow l1 l2) (a' : double-arrow l3 l4) where left-coherence-hom-double-arrow : (domain-double-arrow a → domain-double-arrow a') → (codomain-double-arrow a → codomain-double-arrow a') → UU (l1 ⊔ l4) left-coherence-hom-double-arrow hA hB = coherence-square-maps ( hA) ( left-map-double-arrow a) ( left-map-double-arrow a') ( hB) right-coherence-hom-double-arrow : (domain-double-arrow a → domain-double-arrow a') → (codomain-double-arrow a → codomain-double-arrow a') → UU (l1 ⊔ l4) right-coherence-hom-double-arrow hA hB = coherence-square-maps ( hA) ( right-map-double-arrow a) ( right-map-double-arrow a') ( hB) hom-double-arrow : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4) hom-double-arrow = Σ ( domain-double-arrow a → domain-double-arrow a') ( λ hA → Σ ( codomain-double-arrow a → codomain-double-arrow a') ( λ hB → left-coherence-hom-double-arrow hA hB × right-coherence-hom-double-arrow hA hB)) ``` ### Components of a morphism of double arrows ```agda module _ {l1 l2 l3 l4 : Level} (a : double-arrow l1 l2) (a' : double-arrow l3 l4) (h : hom-double-arrow a a') where domain-map-hom-double-arrow : domain-double-arrow a → domain-double-arrow a' domain-map-hom-double-arrow = pr1 h codomain-map-hom-double-arrow : codomain-double-arrow a → codomain-double-arrow a' codomain-map-hom-double-arrow = pr1 (pr2 h) left-square-hom-double-arrow : left-coherence-hom-double-arrow a a' ( domain-map-hom-double-arrow) ( codomain-map-hom-double-arrow) left-square-hom-double-arrow = pr1 (pr2 (pr2 h)) left-hom-arrow-hom-double-arrow : hom-arrow (left-map-double-arrow a) (left-map-double-arrow a') pr1 left-hom-arrow-hom-double-arrow = domain-map-hom-double-arrow pr1 (pr2 left-hom-arrow-hom-double-arrow) = codomain-map-hom-double-arrow pr2 (pr2 left-hom-arrow-hom-double-arrow) = left-square-hom-double-arrow right-square-hom-double-arrow : right-coherence-hom-double-arrow a a' ( domain-map-hom-double-arrow) ( codomain-map-hom-double-arrow) right-square-hom-double-arrow = pr2 (pr2 (pr2 h)) right-hom-arrow-hom-double-arrow : hom-arrow (right-map-double-arrow a) (right-map-double-arrow a') pr1 right-hom-arrow-hom-double-arrow = domain-map-hom-double-arrow pr1 (pr2 right-hom-arrow-hom-double-arrow) = codomain-map-hom-double-arrow pr2 (pr2 right-hom-arrow-hom-double-arrow) = right-square-hom-double-arrow ``` ### The identity morphism of double arrows ```agda module _ {l1 l2 : Level} (a : double-arrow l1 l2) where id-hom-double-arrow : hom-double-arrow a a pr1 id-hom-double-arrow = id pr1 (pr2 id-hom-double-arrow) = id pr2 (pr2 id-hom-double-arrow) = (refl-htpy , refl-htpy) ``` ### Composition of morphisms of double arrows ```agda module _ {l1 l2 l3 l4 l5 l6 : Level} (a : double-arrow l1 l2) (b : double-arrow l3 l4) (c : double-arrow l5 l6) (g : hom-double-arrow b c) (f : hom-double-arrow a b) where domain-map-comp-hom-double-arrow : domain-double-arrow a → domain-double-arrow c domain-map-comp-hom-double-arrow = domain-map-hom-double-arrow b c g ∘ domain-map-hom-double-arrow a b f codomain-map-comp-hom-double-arrow : codomain-double-arrow a → codomain-double-arrow c codomain-map-comp-hom-double-arrow = codomain-map-hom-double-arrow b c g ∘ codomain-map-hom-double-arrow a b f left-square-comp-hom-double-arrow : left-coherence-hom-double-arrow a c ( domain-map-comp-hom-double-arrow) ( codomain-map-comp-hom-double-arrow) left-square-comp-hom-double-arrow = coh-comp-hom-arrow ( left-map-double-arrow a) ( left-map-double-arrow b) ( left-map-double-arrow c) ( left-hom-arrow-hom-double-arrow b c g) ( left-hom-arrow-hom-double-arrow a b f) right-square-comp-hom-double-arrow : right-coherence-hom-double-arrow a c ( domain-map-comp-hom-double-arrow) ( codomain-map-comp-hom-double-arrow) right-square-comp-hom-double-arrow = coh-comp-hom-arrow ( right-map-double-arrow a) ( right-map-double-arrow b) ( right-map-double-arrow c) ( right-hom-arrow-hom-double-arrow b c g) ( right-hom-arrow-hom-double-arrow a b f) comp-hom-double-arrow : hom-double-arrow a c pr1 comp-hom-double-arrow = domain-map-comp-hom-double-arrow pr1 (pr2 comp-hom-double-arrow) = codomain-map-comp-hom-double-arrow pr1 (pr2 (pr2 comp-hom-double-arrow)) = left-square-comp-hom-double-arrow pr2 (pr2 (pr2 comp-hom-double-arrow)) = right-square-comp-hom-double-arrow ```