# The category of maps and natural transformations between two categories

```agda
module category-theory.category-of-maps-categories where
```

<details><summary>Imports</summary>

```agda
open import category-theory.categories
open import category-theory.commuting-squares-of-morphisms-in-precategories
open import category-theory.isomorphisms-in-categories
open import category-theory.isomorphisms-in-precategories
open import category-theory.maps-categories
open import category-theory.maps-precategories
open import category-theory.natural-isomorphisms-maps-categories
open import category-theory.natural-isomorphisms-maps-precategories
open import category-theory.natural-transformations-maps-precategories
open import category-theory.precategories
open import category-theory.precategory-of-maps-precategories

open import foundation.action-on-identifications-binary-functions
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.function-types
open import foundation.functoriality-dependent-function-types
open import foundation.functoriality-dependent-pair-types
open import foundation.identity-types
open import foundation.type-arithmetic-dependent-pair-types
open import foundation.type-theoretic-principle-of-choice
open import foundation.univalence
open import foundation.universe-levels
```

</details>

## Idea

[Maps](category-theory.maps-categories.md) between
[categories](category-theory.categories.md) and
[natural transformations](category-theory.natural-transformations-maps-categories.md)
between them form another category whose identity map and composition structure
are inherited pointwise from the codomain category. This is called the
**category of maps between categories**.

## Lemmas

### Extensionality of maps of precategories when the codomain is a category

```agda
module _
  {l1 l2 l3 l4 : Level}
  (C : Precategory l1 l2)
  (D : Precategory l3 l4)
  (is-category-D : is-category-Precategory D)
  where

  equiv-natural-isomorphism-htpy-map-is-category-Precategory :
    (F G : map-Precategory C D) 
    ( htpy-map-Precategory C D F G) 
    ( natural-isomorphism-map-Precategory C D F G)
  equiv-natural-isomorphism-htpy-map-is-category-Precategory F G =
      ( equiv-right-swap-Σ) ∘e
      ( equiv-Σ-equiv-base
        ( is-natural-transformation-map-Precategory C D F G  pr1)
        ( ( distributive-Π-Σ) ∘e
          ( equiv-Π-equiv-family
            ( λ x 
              extensionality-obj-Category
                ( D , is-category-D)
                ( obj-map-Precategory C D F x)
                ( obj-map-Precategory C D G x)))))

  extensionality-map-is-category-Precategory :
    (F G : map-Precategory C D) 
    ( F  G) 
    ( natural-isomorphism-map-Precategory C D F G)
  extensionality-map-is-category-Precategory F G =
    ( equiv-natural-isomorphism-htpy-map-is-category-Precategory F G) ∘e
    ( equiv-htpy-eq-map-Precategory C D F G)
```

### When the codomain is a category the map precategory is a category

```agda
module _
  {l1 l2 l3 l4 : Level}
  (C : Precategory l1 l2)
  (D : Precategory l3 l4)
  (is-category-D : is-category-Precategory D)
  where

  abstract
    is-category-map-precategory-is-category-Precategory :
      is-category-Precategory (map-precategory-Precategory C D)
    is-category-map-precategory-is-category-Precategory F G =
      is-equiv-htpy-equiv
        ( ( equiv-iso-map-natural-isomorphism-map-Precategory C D F G) ∘e
          ( extensionality-map-is-category-Precategory C D is-category-D F G))
        ( λ where
          refl 
            compute-iso-map-natural-isomorphism-map-eq-Precategory C D F G refl)
```

## Definitions

### The category of maps and natural transformations between categories

```agda
module _
  {l1 l2 l3 l4 : Level}
  (C : Category l1 l2) (D : Category l3 l4)
  where

  map-category-Category :
    Category (l1  l2  l3  l4) (l1  l2  l4)
  pr1 map-category-Category =
    map-precategory-Precategory
      ( precategory-Category C)
      ( precategory-Category D)
  pr2 map-category-Category =
    is-category-map-precategory-is-category-Precategory
      ( precategory-Category C)
      ( precategory-Category D)
      ( is-category-Category D)

  extensionality-map-Category :
    (F G : map-Category C D) 
    (F  G)  natural-isomorphism-map-Category C D F G
  extensionality-map-Category F G =
    ( equiv-natural-isomorphism-map-iso-map-Precategory
      ( precategory-Category C)
      ( precategory-Category D) F G) ∘e
    ( extensionality-obj-Category map-category-Category F G)

  eq-natural-isomorphism-map-Category :
    (F G : map-Category C D) 
    natural-isomorphism-map-Category C D F G  F  G
  eq-natural-isomorphism-map-Category F G =
    map-inv-equiv (extensionality-map-Category F G)
```