# Morphisms of types equipped with endomorphisms ```agda module structured-types.morphisms-types-equipped-with-endomorphisms where ``` <details><summary>Imports</summary> ```agda open import foundation.commuting-squares-of-maps open import foundation.contractible-types open import foundation.dependent-pair-types open import foundation.equivalences open import foundation.functoriality-dependent-pair-types open import foundation.fundamental-theorem-of-identity-types open import foundation.homotopies open import foundation.homotopy-induction open import foundation.identity-types open import foundation.structure-identity-principle open import foundation.torsorial-type-families open import foundation.universe-levels open import foundation.whiskering-homotopies-composition open import structured-types.types-equipped-with-endomorphisms ``` </details> ## Idea Consider two [types equipped with an endomorphism](structured-types.types-equipped-with-endomorphisms.md) `(X,f)` and `(Y,g)`. A **morphism** from `(X,f)` to `(Y,g)` consists of a map `h : X → Y` equipped with a [homotopy](foundation-core.homotopies.md) witnessing that the square ```text h X -----> Y | | f| |g ∨ ∨ X -----> Y h ``` [commutes](foundation.commuting-squares-of-maps.md). ## Definition ### Morphisms of types equipped with endomorphisms ```agda module _ {l1 l2 : Level} (X : Type-With-Endomorphism l1) (Y : Type-With-Endomorphism l2) where hom-Type-With-Endomorphism : UU (l1 ⊔ l2) hom-Type-With-Endomorphism = Σ ( type-Type-With-Endomorphism X → type-Type-With-Endomorphism Y) ( λ f → coherence-square-maps ( f) ( endomorphism-Type-With-Endomorphism X) ( endomorphism-Type-With-Endomorphism Y) ( f)) map-hom-Type-With-Endomorphism : hom-Type-With-Endomorphism → type-Type-With-Endomorphism X → type-Type-With-Endomorphism Y map-hom-Type-With-Endomorphism = pr1 coherence-square-hom-Type-With-Endomorphism : (f : hom-Type-With-Endomorphism) → coherence-square-maps ( map-hom-Type-With-Endomorphism f) ( endomorphism-Type-With-Endomorphism X) ( endomorphism-Type-With-Endomorphism Y) ( map-hom-Type-With-Endomorphism f) coherence-square-hom-Type-With-Endomorphism = pr2 ``` ### Homotopies of morphisms of types equipped with endomorphisms ```agda module _ {l1 l2 : Level} (X : Type-With-Endomorphism l1) (Y : Type-With-Endomorphism l2) where htpy-hom-Type-With-Endomorphism : (f g : hom-Type-With-Endomorphism X Y) → UU (l1 ⊔ l2) htpy-hom-Type-With-Endomorphism f g = Σ ( map-hom-Type-With-Endomorphism X Y f ~ map-hom-Type-With-Endomorphism X Y g) ( λ H → ( ( H ·r endomorphism-Type-With-Endomorphism X) ∙h ( coherence-square-hom-Type-With-Endomorphism X Y g)) ~ ( ( coherence-square-hom-Type-With-Endomorphism X Y f) ∙h ( endomorphism-Type-With-Endomorphism Y ·l H))) refl-htpy-hom-Type-With-Endomorphism : (f : hom-Type-With-Endomorphism X Y) → htpy-hom-Type-With-Endomorphism f f pr1 (refl-htpy-hom-Type-With-Endomorphism f) = refl-htpy pr2 (refl-htpy-hom-Type-With-Endomorphism f) = inv-htpy-right-unit-htpy htpy-eq-hom-Type-With-Endomorphism : (f g : hom-Type-With-Endomorphism X Y) → f = g → htpy-hom-Type-With-Endomorphism f g htpy-eq-hom-Type-With-Endomorphism f .f refl = refl-htpy-hom-Type-With-Endomorphism f is-torsorial-htpy-hom-Type-With-Endomorphism : (f : hom-Type-With-Endomorphism X Y) → is-torsorial (htpy-hom-Type-With-Endomorphism f) is-torsorial-htpy-hom-Type-With-Endomorphism f = is-torsorial-Eq-structure ( is-torsorial-htpy (map-hom-Type-With-Endomorphism X Y f)) ( map-hom-Type-With-Endomorphism X Y f , refl-htpy) ( is-contr-equiv ( Σ ( coherence-square-maps ( map-hom-Type-With-Endomorphism X Y f) ( endomorphism-Type-With-Endomorphism X) ( endomorphism-Type-With-Endomorphism Y) ( map-hom-Type-With-Endomorphism X Y f)) ( λ H → H ~ coherence-square-hom-Type-With-Endomorphism X Y f)) ( equiv-tot (λ H → equiv-concat-htpy' H right-unit-htpy)) ( is-torsorial-htpy' ( coherence-square-hom-Type-With-Endomorphism X Y f))) is-equiv-htpy-eq-hom-Type-With-Endomorphism : (f g : hom-Type-With-Endomorphism X Y) → is-equiv (htpy-eq-hom-Type-With-Endomorphism f g) is-equiv-htpy-eq-hom-Type-With-Endomorphism f = fundamental-theorem-id ( is-torsorial-htpy-hom-Type-With-Endomorphism f) ( htpy-eq-hom-Type-With-Endomorphism f) extensionality-hom-Type-With-Endomorphism : (f g : hom-Type-With-Endomorphism X Y) → (f = g) ≃ htpy-hom-Type-With-Endomorphism f g pr1 (extensionality-hom-Type-With-Endomorphism f g) = htpy-eq-hom-Type-With-Endomorphism f g pr2 (extensionality-hom-Type-With-Endomorphism f g) = is-equiv-htpy-eq-hom-Type-With-Endomorphism f g eq-htpy-hom-Type-With-Endomorphism : ( f g : hom-Type-With-Endomorphism X Y) → htpy-hom-Type-With-Endomorphism f g → f = g eq-htpy-hom-Type-With-Endomorphism f g = map-inv-equiv (extensionality-hom-Type-With-Endomorphism f g) ```