# Natural isomorphisms between maps between precategories ```agda module category-theory.natural-isomorphisms-maps-precategories where ``` <details><summary>Imports</summary> ```agda open import category-theory.isomorphisms-in-precategories open import category-theory.maps-precategories open import category-theory.natural-transformations-maps-precategories open import category-theory.precategories open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.embeddings open import foundation.equivalences open import foundation.function-types open import foundation.homotopies open import foundation.identity-types open import foundation.propositions open import foundation.sets open import foundation.subtypes open import foundation.universe-levels ``` </details> ## Idea A **natural isomorphism** `γ` from [map](category-theory.maps-precategories.md) `F : C → D` to `G : C → D` is a [natural transformation](category-theory.natural-transformations-maps-precategories.md) from `F` to `G` such that the morphism `γ F : hom (F x) (G x)` is an [isomorphism](category-theory.isomorphisms-in-precategories.md), for every object `x` in `C`. ## Definition ### Families of isomorphisms between maps ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) where iso-family-map-Precategory : UU (l1 ⊔ l4) iso-family-map-Precategory = (x : obj-Precategory C) → iso-Precategory D ( obj-map-Precategory C D F x) ( obj-map-Precategory C D G x) ``` ### The predicate of being an isomorphism in a precategory ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) where is-natural-isomorphism-map-Precategory : natural-transformation-map-Precategory C D F G → UU (l1 ⊔ l4) is-natural-isomorphism-map-Precategory f = (x : obj-Precategory C) → is-iso-Precategory D ( hom-family-natural-transformation-map-Precategory C D F G f x) module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) (f : natural-transformation-map-Precategory C D F G) where hom-inv-family-is-natural-isomorphism-map-Precategory : is-natural-isomorphism-map-Precategory C D F G f → hom-family-map-Precategory C D G F hom-inv-family-is-natural-isomorphism-map-Precategory is-iso-f = hom-inv-is-iso-Precategory D ∘ is-iso-f is-section-hom-inv-family-is-natural-isomorphism-map-Precategory : (is-iso-f : is-natural-isomorphism-map-Precategory C D F G f) → (x : obj-Precategory C) → comp-hom-Precategory D ( hom-family-natural-transformation-map-Precategory C D F G f x) ( hom-inv-is-iso-Precategory D (is-iso-f x)) = id-hom-Precategory D is-section-hom-inv-family-is-natural-isomorphism-map-Precategory is-iso-f = is-section-hom-inv-is-iso-Precategory D ∘ is-iso-f is-retraction-hom-inv-family-is-natural-isomorphism-map-Precategory : (is-iso-f : is-natural-isomorphism-map-Precategory C D F G f) → (x : obj-Precategory C) → comp-hom-Precategory D ( hom-inv-is-iso-Precategory D (is-iso-f x)) ( hom-family-natural-transformation-map-Precategory C D F G f x) = id-hom-Precategory D is-retraction-hom-inv-family-is-natural-isomorphism-map-Precategory is-iso-f = is-retraction-hom-inv-is-iso-Precategory D ∘ is-iso-f iso-family-is-natural-isomorphism-map-Precategory : is-natural-isomorphism-map-Precategory C D F G f → iso-family-map-Precategory C D F G pr1 (iso-family-is-natural-isomorphism-map-Precategory is-iso-f x) = hom-family-natural-transformation-map-Precategory C D F G f x pr2 (iso-family-is-natural-isomorphism-map-Precategory is-iso-f x) = is-iso-f x inv-iso-family-is-natural-isomorphism-map-Precategory : is-natural-isomorphism-map-Precategory C D F G f → iso-family-map-Precategory C D G F inv-iso-family-is-natural-isomorphism-map-Precategory is-iso-f = inv-iso-Precategory D ∘ iso-family-is-natural-isomorphism-map-Precategory is-iso-f ``` ### Natural isomorphisms in a precategory ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) where natural-isomorphism-map-Precategory : UU (l1 ⊔ l2 ⊔ l4) natural-isomorphism-map-Precategory = Σ ( natural-transformation-map-Precategory C D F G) ( is-natural-isomorphism-map-Precategory C D F G) module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) (f : natural-isomorphism-map-Precategory C D F G) where natural-transformation-map-natural-isomorphism-map-Precategory : natural-transformation-map-Precategory C D F G natural-transformation-map-natural-isomorphism-map-Precategory = pr1 f hom-family-natural-isomorphism-map-Precategory : hom-family-map-Precategory C D F G hom-family-natural-isomorphism-map-Precategory = hom-family-natural-transformation-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory) coherence-square-natural-isomorphism-map-Precategory : is-natural-transformation-map-Precategory C D F G ( hom-family-natural-transformation-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory)) coherence-square-natural-isomorphism-map-Precategory = naturality-natural-transformation-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory) is-natural-isomorphism-map-natural-isomorphism-map-Precategory : is-natural-isomorphism-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory) is-natural-isomorphism-map-natural-isomorphism-map-Precategory = pr2 f hom-inv-family-natural-isomorphism-map-Precategory : hom-family-map-Precategory C D G F hom-inv-family-natural-isomorphism-map-Precategory = hom-inv-family-is-natural-isomorphism-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory) ( is-natural-isomorphism-map-natural-isomorphism-map-Precategory) is-section-hom-inv-family-natural-isomorphism-map-Precategory : (x : obj-Precategory C) → comp-hom-Precategory D ( hom-family-natural-isomorphism-map-Precategory x) ( hom-inv-family-natural-isomorphism-map-Precategory x) = id-hom-Precategory D is-section-hom-inv-family-natural-isomorphism-map-Precategory = is-section-hom-inv-family-is-natural-isomorphism-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory) ( is-natural-isomorphism-map-natural-isomorphism-map-Precategory) is-retraction-hom-inv-family-natural-isomorphism-map-Precategory : (x : obj-Precategory C) → comp-hom-Precategory D ( hom-inv-family-natural-isomorphism-map-Precategory x) ( hom-family-natural-isomorphism-map-Precategory x) = id-hom-Precategory D is-retraction-hom-inv-family-natural-isomorphism-map-Precategory = is-retraction-hom-inv-family-is-natural-isomorphism-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory) ( is-natural-isomorphism-map-natural-isomorphism-map-Precategory) iso-family-natural-isomorphism-map-Precategory : iso-family-map-Precategory C D F G iso-family-natural-isomorphism-map-Precategory = iso-family-is-natural-isomorphism-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory) ( is-natural-isomorphism-map-natural-isomorphism-map-Precategory) inv-iso-family-natural-isomorphism-map-Precategory : iso-family-map-Precategory C D G F inv-iso-family-natural-isomorphism-map-Precategory = inv-iso-family-is-natural-isomorphism-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory) ( is-natural-isomorphism-map-natural-isomorphism-map-Precategory) ``` ## Examples ### The identity natural isomorphism ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) where id-natural-isomorphism-map-Precategory : (F : map-Precategory C D) → natural-isomorphism-map-Precategory C D F F pr1 (id-natural-isomorphism-map-Precategory F) = id-natural-transformation-map-Precategory C D F pr2 (id-natural-isomorphism-map-Precategory F) x = is-iso-id-hom-Precategory D ``` ### Equalities induce natural isomorphisms An equality between maps `F` and `G` gives rise to a natural isomorphism between them. This is because, by the J-rule, it is enough to construct a natural isomorphism given `refl : F = F`, from `F` to itself. We take the identity natural transformation as such an isomorphism. ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) where natural-isomorphism-map-eq-Precategory : (F G : map-Precategory C D) → F = G → natural-isomorphism-map-Precategory C D F G natural-isomorphism-map-eq-Precategory F .F refl = id-natural-isomorphism-map-Precategory C D F ``` ## Propositions ### Being a natural isomorphism is a proposition That a natural transformation is a natural isomorphism is a proposition. This follows from the fact that being an isomorphism is a proposition. ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) where is-prop-is-natural-isomorphism-map-Precategory : (f : natural-transformation-map-Precategory C D F G) → is-prop (is-natural-isomorphism-map-Precategory C D F G f) is-prop-is-natural-isomorphism-map-Precategory f = is-prop-Π (is-prop-is-iso-Precategory D ∘ hom-family-natural-transformation-map-Precategory C D F G f) is-natural-isomorphism-map-prop-hom-Precategory : (f : natural-transformation-map-Precategory C D F G) → Prop (l1 ⊔ l4) pr1 (is-natural-isomorphism-map-prop-hom-Precategory f) = is-natural-isomorphism-map-Precategory C D F G f pr2 (is-natural-isomorphism-map-prop-hom-Precategory f) = is-prop-is-natural-isomorphism-map-Precategory f ``` ### Equality of natural isomorphisms is equality of their underlying natural transformations ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) where extensionality-natural-isomorphism-map-Precategory : (f g : natural-isomorphism-map-Precategory C D F G) → (f = g) ≃ ( hom-family-natural-isomorphism-map-Precategory C D F G f ~ hom-family-natural-isomorphism-map-Precategory C D F G g) extensionality-natural-isomorphism-map-Precategory f g = ( extensionality-natural-transformation-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f) ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G g)) ∘e ( equiv-ap-emb ( emb-subtype (is-natural-isomorphism-map-prop-hom-Precategory C D F G))) eq-eq-natural-transformation-map-natural-isomorphism-map-Precategory : (f g : natural-isomorphism-map-Precategory C D F G) → ( ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f) = ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G g)) → f = g eq-eq-natural-transformation-map-natural-isomorphism-map-Precategory f g = eq-type-subtype (is-natural-isomorphism-map-prop-hom-Precategory C D F G) eq-htpy-hom-family-natural-isomorphism-map-Precategory : (f g : natural-isomorphism-map-Precategory C D F G) → ( hom-family-natural-isomorphism-map-Precategory C D F G f ~ hom-family-natural-isomorphism-map-Precategory C D F G g) → f = g eq-htpy-hom-family-natural-isomorphism-map-Precategory f g = eq-eq-natural-transformation-map-natural-isomorphism-map-Precategory f g ∘ eq-htpy-hom-family-natural-transformation-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f) ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G g) ``` ### The type of natural isomorphisms form a set The type of natural isomorphisms between maps `F` and `G` is a [subtype](foundation-core.subtypes.md) of the [set](foundation-core.sets.md) `natural-transformation F G` since being an isomorphism is a proposition. ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) where is-set-natural-isomorphism-map-Precategory : is-set (natural-isomorphism-map-Precategory C D F G) is-set-natural-isomorphism-map-Precategory = is-set-type-subtype ( is-natural-isomorphism-map-prop-hom-Precategory C D F G) ( is-set-natural-transformation-map-Precategory C D F G) natural-isomorphism-map-set-Precategory : Set (l1 ⊔ l2 ⊔ l4) pr1 natural-isomorphism-map-set-Precategory = natural-isomorphism-map-Precategory C D F G pr2 natural-isomorphism-map-set-Precategory = is-set-natural-isomorphism-map-Precategory ``` ### Inverses of natural isomorphisms are natural isomorphisms ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) (f : natural-transformation-map-Precategory C D F G) where natural-transformation-map-inv-is-natural-isomorphism-map-Precategory : is-natural-isomorphism-map-Precategory C D F G f → natural-transformation-map-Precategory C D G F pr1 ( natural-transformation-map-inv-is-natural-isomorphism-map-Precategory ( is-iso-f)) = hom-inv-is-iso-Precategory D ∘ is-iso-f pr2 ( natural-transformation-map-inv-is-natural-isomorphism-map-Precategory ( is-iso-f)) { x} {y} g = ( inv ( left-unit-law-comp-hom-Precategory D ( comp-hom-Precategory D ( hom-map-Precategory C D F g) ( hom-inv-family-is-natural-isomorphism-map-Precategory C D F G f is-iso-f x)))) ∙ ( ap ( comp-hom-Precategory' D ( comp-hom-Precategory D ( hom-map-Precategory C D F g) ( hom-inv-family-is-natural-isomorphism-map-Precategory C D F G f is-iso-f x))) ( inv (is-retraction-hom-inv-is-iso-Precategory D (is-iso-f y)))) ∙ ( associative-comp-hom-Precategory D ( hom-inv-family-is-natural-isomorphism-map-Precategory C D F G f is-iso-f y) ( hom-family-natural-transformation-map-Precategory C D F G f y) ( comp-hom-Precategory D ( hom-map-Precategory C D F g) ( hom-inv-family-is-natural-isomorphism-map-Precategory C D F G f is-iso-f x))) ∙ ( ap ( comp-hom-Precategory D ( hom-inv-family-is-natural-isomorphism-map-Precategory C D F G f is-iso-f y)) ( ( inv ( associative-comp-hom-Precategory D ( hom-family-natural-transformation-map-Precategory C D F G f y) ( hom-map-Precategory C D F g) ( hom-inv-family-is-natural-isomorphism-map-Precategory C D F G f is-iso-f x))) ∙ ( ap ( comp-hom-Precategory' D _) ( inv ( naturality-natural-transformation-map-Precategory C D F G f g))) ∙ ( associative-comp-hom-Precategory D ( hom-map-Precategory C D G g) ( hom-family-natural-transformation-map-Precategory C D F G f x) ( hom-inv-is-iso-Precategory D (is-iso-f x))) ∙ ( ap ( comp-hom-Precategory D (hom-map-Precategory C D G g)) ( is-section-hom-inv-is-iso-Precategory D (is-iso-f x))) ∙ ( right-unit-law-comp-hom-Precategory D ( hom-map-Precategory C D G g)))) is-section-natural-transformation-map-inv-is-natural-isomorphism-map-Precategory : (is-iso-f : is-natural-isomorphism-map-Precategory C D F G f) → comp-natural-transformation-map-Precategory C D G F G ( f) ( natural-transformation-map-inv-is-natural-isomorphism-map-Precategory ( is-iso-f)) = id-natural-transformation-map-Precategory C D G is-section-natural-transformation-map-inv-is-natural-isomorphism-map-Precategory is-iso-f = eq-htpy-hom-family-natural-transformation-map-Precategory C D G G _ _ ( is-section-hom-inv-is-iso-Precategory D ∘ is-iso-f) is-retraction-natural-transformation-map-inv-is-natural-isomorphism-map-Precategory : (is-iso-f : is-natural-isomorphism-map-Precategory C D F G f) → comp-natural-transformation-map-Precategory C D F G F ( natural-transformation-map-inv-is-natural-isomorphism-map-Precategory ( is-iso-f)) ( f) = id-natural-transformation-map-Precategory C D F is-retraction-natural-transformation-map-inv-is-natural-isomorphism-map-Precategory is-iso-f = eq-htpy-hom-family-natural-transformation-map-Precategory C D F F _ _ ( is-retraction-hom-inv-is-iso-Precategory D ∘ is-iso-f) is-natural-isomorphism-map-inv-is-natural-isomorphism-map-Precategory : (is-iso-f : is-natural-isomorphism-map-Precategory C D F G f) → is-natural-isomorphism-map-Precategory C D G F ( natural-transformation-map-inv-is-natural-isomorphism-map-Precategory ( is-iso-f)) is-natural-isomorphism-map-inv-is-natural-isomorphism-map-Precategory is-iso-f = is-iso-inv-is-iso-Precategory D ∘ is-iso-f ``` ### Inverses of natural isomorphisms ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) (f : natural-isomorphism-map-Precategory C D F G) where natural-transformation-map-inv-natural-isomorphism-map-Precategory : natural-transformation-map-Precategory C D G F natural-transformation-map-inv-natural-isomorphism-map-Precategory = natural-transformation-map-inv-is-natural-isomorphism-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f) ( is-natural-isomorphism-map-natural-isomorphism-map-Precategory C D F G f) is-section-natural-transformation-map-inv-natural-isomorphism-map-Precategory : ( comp-natural-transformation-map-Precategory C D G F G ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f) ( natural-transformation-map-inv-natural-isomorphism-map-Precategory)) = ( id-natural-transformation-map-Precategory C D G) is-section-natural-transformation-map-inv-natural-isomorphism-map-Precategory = is-section-natural-transformation-map-inv-is-natural-isomorphism-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f) ( is-natural-isomorphism-map-natural-isomorphism-map-Precategory C D F G f) is-retraction-natural-transformation-map-inv-natural-isomorphism-map-Precategory : ( comp-natural-transformation-map-Precategory C D F G F ( natural-transformation-map-inv-natural-isomorphism-map-Precategory) ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f)) = ( id-natural-transformation-map-Precategory C D F) is-retraction-natural-transformation-map-inv-natural-isomorphism-map-Precategory = is-retraction-natural-transformation-map-inv-is-natural-isomorphism-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f) ( is-natural-isomorphism-map-natural-isomorphism-map-Precategory C D F G f) is-natural-isomorphism-map-inv-natural-isomorphism-map-Precategory : is-natural-isomorphism-map-Precategory C D G F ( natural-transformation-map-inv-natural-isomorphism-map-Precategory) is-natural-isomorphism-map-inv-natural-isomorphism-map-Precategory = is-natural-isomorphism-map-inv-is-natural-isomorphism-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f) ( is-natural-isomorphism-map-natural-isomorphism-map-Precategory C D F G f) inv-natural-isomorphism-map-Precategory : natural-isomorphism-map-Precategory C D G F pr1 inv-natural-isomorphism-map-Precategory = natural-transformation-map-inv-natural-isomorphism-map-Precategory pr2 inv-natural-isomorphism-map-Precategory = is-natural-isomorphism-map-inv-natural-isomorphism-map-Precategory ``` ### Natural isomorphisms are closed under composition ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G H : map-Precategory C D) (g : natural-transformation-map-Precategory C D G H) (f : natural-transformation-map-Precategory C D F G) where is-natural-isomorphism-map-comp-is-natural-isomorphism-map-Precategory : is-natural-isomorphism-map-Precategory C D G H g → is-natural-isomorphism-map-Precategory C D F G f → is-natural-isomorphism-map-Precategory C D F H ( comp-natural-transformation-map-Precategory C D F G H g f) is-natural-isomorphism-map-comp-is-natural-isomorphism-map-Precategory is-iso-g is-iso-f x = is-iso-comp-is-iso-Precategory D (is-iso-g x) (is-iso-f x) ``` ### The composition operation on natural isomorphisms ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G H : map-Precategory C D) (g : natural-isomorphism-map-Precategory C D G H) (f : natural-isomorphism-map-Precategory C D F G) where hom-comp-natural-isomorphism-map-Precategory : natural-transformation-map-Precategory C D F H hom-comp-natural-isomorphism-map-Precategory = comp-natural-transformation-map-Precategory C D F G H ( natural-transformation-map-natural-isomorphism-map-Precategory C D G H g) ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f) is-natural-isomorphism-map-comp-natural-isomorphism-map-Precategory : is-natural-isomorphism-map-Precategory C D F H ( hom-comp-natural-isomorphism-map-Precategory) is-natural-isomorphism-map-comp-natural-isomorphism-map-Precategory = is-natural-isomorphism-map-comp-is-natural-isomorphism-map-Precategory C D F G H ( natural-transformation-map-natural-isomorphism-map-Precategory C D G H g) ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f) ( is-natural-isomorphism-map-natural-isomorphism-map-Precategory C D G H g) ( is-natural-isomorphism-map-natural-isomorphism-map-Precategory C D F G f) comp-natural-isomorphism-map-Precategory : natural-isomorphism-map-Precategory C D F H pr1 comp-natural-isomorphism-map-Precategory = hom-comp-natural-isomorphism-map-Precategory pr2 comp-natural-isomorphism-map-Precategory = is-natural-isomorphism-map-comp-natural-isomorphism-map-Precategory natural-transformation-map-inv-comp-natural-isomorphism-map-Precategory : natural-transformation-map-Precategory C D H F natural-transformation-map-inv-comp-natural-isomorphism-map-Precategory = natural-transformation-map-inv-natural-isomorphism-map-Precategory C D F H ( comp-natural-isomorphism-map-Precategory) is-section-inv-comp-natural-isomorphism-map-Precategory : ( comp-natural-transformation-map-Precategory C D H F H ( hom-comp-natural-isomorphism-map-Precategory) ( natural-transformation-map-inv-comp-natural-isomorphism-map-Precategory)) = ( id-natural-transformation-map-Precategory C D H) is-section-inv-comp-natural-isomorphism-map-Precategory = is-section-natural-transformation-map-inv-natural-isomorphism-map-Precategory C D F H comp-natural-isomorphism-map-Precategory is-retraction-inv-comp-natural-isomorphism-map-Precategory : ( comp-natural-transformation-map-Precategory C D F H F ( natural-transformation-map-inv-comp-natural-isomorphism-map-Precategory) ( hom-comp-natural-isomorphism-map-Precategory)) = ( id-natural-transformation-map-Precategory C D F) is-retraction-inv-comp-natural-isomorphism-map-Precategory = is-retraction-natural-transformation-map-inv-natural-isomorphism-map-Precategory C D F H comp-natural-isomorphism-map-Precategory ``` ### Groupoid laws of natural isomorphisms in precategories #### Composition of natural isomorphisms satisfies the unit laws ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) (f : natural-isomorphism-map-Precategory C D F G) where left-unit-law-comp-natural-isomorphism-map-Precategory : comp-natural-isomorphism-map-Precategory C D F G G ( id-natural-isomorphism-map-Precategory C D G) ( f) = f left-unit-law-comp-natural-isomorphism-map-Precategory = eq-eq-natural-transformation-map-natural-isomorphism-map-Precategory C D F G ( comp-natural-isomorphism-map-Precategory C D F G G ( id-natural-isomorphism-map-Precategory C D G) f) ( f) ( left-unit-law-comp-natural-transformation-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f)) right-unit-law-comp-natural-isomorphism-map-Precategory : comp-natural-isomorphism-map-Precategory C D F F G f ( id-natural-isomorphism-map-Precategory C D F) = f right-unit-law-comp-natural-isomorphism-map-Precategory = eq-eq-natural-transformation-map-natural-isomorphism-map-Precategory C D F G ( comp-natural-isomorphism-map-Precategory C D F F G f ( id-natural-isomorphism-map-Precategory C D F)) ( f) ( right-unit-law-comp-natural-transformation-map-Precategory C D F G ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f)) ``` #### Composition of natural isomorphisms is associative ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G H I : map-Precategory C D) (f : natural-isomorphism-map-Precategory C D F G) (g : natural-isomorphism-map-Precategory C D G H) (h : natural-isomorphism-map-Precategory C D H I) where associative-comp-natural-isomorphism-map-Precategory : ( comp-natural-isomorphism-map-Precategory C D F G I ( comp-natural-isomorphism-map-Precategory C D G H I h g) ( f)) = ( comp-natural-isomorphism-map-Precategory C D F H I h ( comp-natural-isomorphism-map-Precategory C D F G H g f)) associative-comp-natural-isomorphism-map-Precategory = eq-eq-natural-transformation-map-natural-isomorphism-map-Precategory C D F I ( comp-natural-isomorphism-map-Precategory C D F G I ( comp-natural-isomorphism-map-Precategory C D G H I h g) ( f)) ( comp-natural-isomorphism-map-Precategory C D F H I h ( comp-natural-isomorphism-map-Precategory C D F G H g f)) ( associative-comp-natural-transformation-map-Precategory C D F G H I ( natural-transformation-map-natural-isomorphism-map-Precategory C D F G f) ( natural-transformation-map-natural-isomorphism-map-Precategory C D G H g) ( natural-transformation-map-natural-isomorphism-map-Precategory C D H I h)) ``` #### Composition of natural isomorphisms satisfies inverse laws ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) (f : natural-isomorphism-map-Precategory C D F G) where left-inverse-law-comp-natural-isomorphism-map-Precategory : ( comp-natural-isomorphism-map-Precategory C D F G F ( inv-natural-isomorphism-map-Precategory C D F G f) ( f)) = ( id-natural-isomorphism-map-Precategory C D F) left-inverse-law-comp-natural-isomorphism-map-Precategory = eq-eq-natural-transformation-map-natural-isomorphism-map-Precategory C D F F ( comp-natural-isomorphism-map-Precategory C D F G F ( inv-natural-isomorphism-map-Precategory C D F G f) f) ( id-natural-isomorphism-map-Precategory C D F) ( is-retraction-natural-transformation-map-inv-natural-isomorphism-map-Precategory C D F G f) right-inverse-law-comp-natural-isomorphism-map-Precategory : ( comp-natural-isomorphism-map-Precategory C D G F G ( f) ( inv-natural-isomorphism-map-Precategory C D F G f)) = ( id-natural-isomorphism-map-Precategory C D G) right-inverse-law-comp-natural-isomorphism-map-Precategory = eq-eq-natural-transformation-map-natural-isomorphism-map-Precategory C D G G ( comp-natural-isomorphism-map-Precategory C D G F G ( f) ( inv-natural-isomorphism-map-Precategory C D F G f)) ( id-natural-isomorphism-map-Precategory C D G) ( is-section-natural-transformation-map-inv-natural-isomorphism-map-Precategory C D F G f) ``` ### When the type of natural transformations is a proposition, the type of natural isomorphisms is a proposition The type of natural isomorphisms between maps `F` and `G` is a subtype of `natural-transformation F G`, so when this type is a proposition, then the type of natural isomorphisms from `F` to `G` form a proposition. ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G : map-Precategory C D) where is-prop-natural-isomorphism-map-Precategory : is-prop (natural-transformation-map-Precategory C D F G) → is-prop (natural-isomorphism-map-Precategory C D F G) is-prop-natural-isomorphism-map-Precategory = is-prop-type-subtype ( is-natural-isomorphism-map-prop-hom-Precategory C D F G) natural-isomorphism-map-prop-Precategory : is-prop (natural-transformation-map-Precategory C D F G) → Prop (l1 ⊔ l2 ⊔ l4) pr1 (natural-isomorphism-map-prop-Precategory _) = natural-isomorphism-map-Precategory C D F G pr2 (natural-isomorphism-map-prop-Precategory is-prop-hom-C-F-G) = is-prop-natural-isomorphism-map-Precategory is-prop-hom-C-F-G ``` ### Functoriality of `natural-isomorphism-map-eq` ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F G H : map-Precategory C D) where preserves-concat-natural-isomorphism-map-eq-Precategory : (p : F = G) (q : G = H) → natural-isomorphism-map-eq-Precategory C D F H (p ∙ q) = comp-natural-isomorphism-map-Precategory C D F G H ( natural-isomorphism-map-eq-Precategory C D G H q) ( natural-isomorphism-map-eq-Precategory C D F G p) preserves-concat-natural-isomorphism-map-eq-Precategory refl q = inv ( right-unit-law-comp-natural-isomorphism-map-Precategory C D F H ( natural-isomorphism-map-eq-Precategory C D G H q)) ```