# The precategory of functors and natural transformations between two precategories

```agda
module category-theory.precategory-of-functors where
```

<details><summary>Imports</summary>

```agda
open import category-theory.composition-operations-on-binary-families-of-sets
open import category-theory.functors-precategories
open import category-theory.isomorphisms-in-precategories
open import category-theory.natural-isomorphisms-functors-precategories
open import category-theory.natural-transformations-functors-precategories
open import category-theory.precategories

open import foundation.action-on-identifications-functions
open import foundation.dependent-pair-types
open import foundation.equivalences
open import foundation.function-extensionality
open import foundation.functoriality-dependent-pair-types
open import foundation.identity-types
open import foundation.logical-equivalences
open import foundation.propositions
open import foundation.strictly-involutive-identity-types
open import foundation.universe-levels
```

</details>

## Idea

[Functors](category-theory.functors-precategories.md) between
[precategories](category-theory.precategories.md) and
[natural transformations](category-theory.natural-transformations-functors-precategories.md)
between them introduce a new precategory whose identity map and composition
structure are inherited pointwise from the codomain precategory. This is called
the **precategory of functors**.

## Definitions

### The precategory of functors and natural transformations between precategories

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

  comp-hom-functor-precategory-Precategory :
    {F G H : functor-Precategory C D} 
    natural-transformation-Precategory C D G H 
    natural-transformation-Precategory C D F G 
    natural-transformation-Precategory C D F H
  comp-hom-functor-precategory-Precategory {F} {G} {H} =
    comp-natural-transformation-Precategory C D F G H

  associative-comp-hom-functor-precategory-Precategory :
    {F G H I : functor-Precategory C D}
    (h : natural-transformation-Precategory C D H I)
    (g : natural-transformation-Precategory C D G H)
    (f : natural-transformation-Precategory C D F G) 
    comp-natural-transformation-Precategory C D F G I
      ( comp-natural-transformation-Precategory C D G H I h g)
      ( f) 
    comp-natural-transformation-Precategory C D F H I
      ( h)
      ( comp-natural-transformation-Precategory C D F G H g f)
  associative-comp-hom-functor-precategory-Precategory {F} {G} {H} {I} h g f =
    associative-comp-natural-transformation-Precategory
      C D F G H I f g h

  involutive-eq-associative-comp-hom-functor-precategory-Precategory :
    {F G H I : functor-Precategory C D}
    (h : natural-transformation-Precategory C D H I)
    (g : natural-transformation-Precategory C D G H)
    (f : natural-transformation-Precategory C D F G) 
    comp-natural-transformation-Precategory C D F G I
      ( comp-natural-transformation-Precategory C D G H I h g)
      ( f) =ⁱ
    comp-natural-transformation-Precategory C D F H I
      ( h)
      ( comp-natural-transformation-Precategory C D F G H g f)
  involutive-eq-associative-comp-hom-functor-precategory-Precategory
    { F} {G} {H} {I} h g f =
    involutive-eq-associative-comp-natural-transformation-Precategory
      C D F G H I f g h

  associative-composition-operation-functor-precategory-Precategory :
    associative-composition-operation-binary-family-Set
      ( natural-transformation-set-Precategory C D)
  pr1 associative-composition-operation-functor-precategory-Precategory
    {F} {G} {H} =
    comp-hom-functor-precategory-Precategory {F} {G} {H}
  pr2
    associative-composition-operation-functor-precategory-Precategory
      { F} {G} {H} {I} h g f =
    involutive-eq-associative-comp-hom-functor-precategory-Precategory
      { F} {G} {H} {I} h g f

  id-hom-functor-precategory-Precategory :
    (F : functor-Precategory C D)  natural-transformation-Precategory C D F F
  id-hom-functor-precategory-Precategory =
    id-natural-transformation-Precategory C D

  left-unit-law-comp-hom-functor-precategory-Precategory :
    {F G : functor-Precategory C D}
    (α : natural-transformation-Precategory C D F G) 
    comp-natural-transformation-Precategory C D F G G
      ( id-natural-transformation-Precategory C D G) α 
    α
  left-unit-law-comp-hom-functor-precategory-Precategory {F} {G} =
    left-unit-law-comp-natural-transformation-Precategory C D F G

  right-unit-law-comp-hom-functor-precategory-Precategory :
    {F G : functor-Precategory C D}
    (α : natural-transformation-Precategory C D F G) 
    comp-natural-transformation-Precategory C D F F G
        α (id-natural-transformation-Precategory C D F) 
    α
  right-unit-law-comp-hom-functor-precategory-Precategory {F} {G} =
    right-unit-law-comp-natural-transformation-Precategory C D F G

  is-unital-composition-operation-functor-precategory-Precategory :
    is-unital-composition-operation-binary-family-Set
      ( natural-transformation-set-Precategory C D)
      ( λ {F} {G} {H}  comp-hom-functor-precategory-Precategory {F} {G} {H})
  pr1 is-unital-composition-operation-functor-precategory-Precategory =
    id-hom-functor-precategory-Precategory
  pr1
    ( pr2 is-unital-composition-operation-functor-precategory-Precategory)
    { F} {G} =
    left-unit-law-comp-hom-functor-precategory-Precategory {F} {G}
  pr2
    ( pr2 is-unital-composition-operation-functor-precategory-Precategory)
    { F} {G} =
    right-unit-law-comp-hom-functor-precategory-Precategory {F} {G}

  functor-precategory-Precategory :
    Precategory (l1  l2  l3  l4) (l1  l2  l4)
  pr1 functor-precategory-Precategory = functor-Precategory C D
  pr1 (pr2 functor-precategory-Precategory) =
    natural-transformation-set-Precategory C D
  pr1 (pr2 (pr2 functor-precategory-Precategory)) =
    associative-composition-operation-functor-precategory-Precategory
  pr2 (pr2 (pr2 functor-precategory-Precategory)) =
    is-unital-composition-operation-functor-precategory-Precategory
```

## Properties

### Isomorphisms in the functor precategory are natural isomorphisms

```agda
module _
  {l1 l2 l3 l4 : Level}
  (C : Precategory l1 l2)
  (D : Precategory l3 l4)
  (F G : functor-Precategory C D)
  where

  is-iso-functor-is-natural-isomorphism-Precategory :
    (f : natural-transformation-Precategory C D F G) 
    is-natural-isomorphism-Precategory C D F G f 
    is-iso-Precategory (functor-precategory-Precategory C D) {F} {G} f
  pr1 (is-iso-functor-is-natural-isomorphism-Precategory f is-iso-f) =
    natural-transformation-inv-is-natural-isomorphism-Precategory
      C D F G f is-iso-f
  pr1 (pr2 (is-iso-functor-is-natural-isomorphism-Precategory f is-iso-f)) =
    is-section-natural-transformation-inv-is-natural-isomorphism-Precategory
      C D F G f is-iso-f
  pr2 (pr2 (is-iso-functor-is-natural-isomorphism-Precategory f is-iso-f)) =
    is-retraction-natural-transformation-inv-is-natural-isomorphism-Precategory
      C D F G f is-iso-f

  is-natural-isomorphism-is-iso-functor-Precategory :
    (f : natural-transformation-Precategory C D F G) 
    is-iso-Precategory (functor-precategory-Precategory C D) {F} {G} f 
    is-natural-isomorphism-Precategory C D F G f
  pr1 (is-natural-isomorphism-is-iso-functor-Precategory f is-iso-f x) =
    hom-family-natural-transformation-Precategory C D G F
      ( hom-inv-is-iso-Precategory
        ( functor-precategory-Precategory C D) {F} {G} is-iso-f)
      ( x)
  pr1 (pr2 (is-natural-isomorphism-is-iso-functor-Precategory f is-iso-f x)) =
    htpy-eq
      ( ap
        ( hom-family-natural-transformation-Precategory C D G G)
        ( is-section-hom-inv-is-iso-Precategory
          ( functor-precategory-Precategory C D) {F} {G} is-iso-f))
      ( x)
  pr2 (pr2 (is-natural-isomorphism-is-iso-functor-Precategory f is-iso-f x)) =
    htpy-eq
      ( ap
        ( hom-family-natural-transformation-Precategory C D F F)
        ( is-retraction-hom-inv-is-iso-Precategory
          ( functor-precategory-Precategory C D) {F} {G} is-iso-f))
      ( x)

  is-equiv-is-iso-functor-is-natural-isomorphism-Precategory :
    (f : natural-transformation-Precategory C D F G) 
    is-equiv (is-iso-functor-is-natural-isomorphism-Precategory f)
  is-equiv-is-iso-functor-is-natural-isomorphism-Precategory f =
    is-equiv-has-converse-is-prop
      ( is-prop-is-natural-isomorphism-Precategory C D F G f)
      ( is-prop-is-iso-Precategory
        ( functor-precategory-Precategory C D) {F} {G} f)
      ( is-natural-isomorphism-is-iso-functor-Precategory f)

  is-equiv-is-natural-isomorphism-is-iso-functor-Precategory :
    (f : natural-transformation-Precategory C D F G) 
    is-equiv (is-natural-isomorphism-is-iso-functor-Precategory f)
  is-equiv-is-natural-isomorphism-is-iso-functor-Precategory f =
    is-equiv-has-converse-is-prop
      ( is-prop-is-iso-Precategory
        ( functor-precategory-Precategory C D) {F} {G} f)
      ( is-prop-is-natural-isomorphism-Precategory C D F G f)
      ( is-iso-functor-is-natural-isomorphism-Precategory f)

  equiv-is-iso-functor-is-natural-isomorphism-Precategory :
    (f : natural-transformation-Precategory C D F G) 
    is-natural-isomorphism-Precategory C D F G f 
    is-iso-Precategory (functor-precategory-Precategory C D) {F} {G} f
  pr1 (equiv-is-iso-functor-is-natural-isomorphism-Precategory f) =
    is-iso-functor-is-natural-isomorphism-Precategory f
  pr2 (equiv-is-iso-functor-is-natural-isomorphism-Precategory f) =
    is-equiv-is-iso-functor-is-natural-isomorphism-Precategory f

  equiv-is-natural-isomorphism-is-iso-functor-Precategory :
    (f : natural-transformation-Precategory C D F G) 
    is-iso-Precategory (functor-precategory-Precategory C D) {F} {G} f 
    is-natural-isomorphism-Precategory C D F G f
  pr1 (equiv-is-natural-isomorphism-is-iso-functor-Precategory f) =
    is-natural-isomorphism-is-iso-functor-Precategory f
  pr2 (equiv-is-natural-isomorphism-is-iso-functor-Precategory f) =
    is-equiv-is-natural-isomorphism-is-iso-functor-Precategory f

  iso-functor-natural-isomorphism-Precategory :
    natural-isomorphism-Precategory C D F G 
    iso-Precategory (functor-precategory-Precategory C D) F G
  iso-functor-natural-isomorphism-Precategory =
    tot is-iso-functor-is-natural-isomorphism-Precategory

  natural-isomorphism-iso-functor-Precategory :
    iso-Precategory (functor-precategory-Precategory C D) F G 
    natural-isomorphism-Precategory C D F G
  natural-isomorphism-iso-functor-Precategory =
    tot is-natural-isomorphism-is-iso-functor-Precategory

  is-equiv-iso-functor-natural-isomorphism-Precategory :
    is-equiv iso-functor-natural-isomorphism-Precategory
  is-equiv-iso-functor-natural-isomorphism-Precategory =
    is-equiv-tot-is-fiberwise-equiv
      is-equiv-is-iso-functor-is-natural-isomorphism-Precategory

  is-equiv-natural-isomorphism-iso-functor-Precategory :
    is-equiv natural-isomorphism-iso-functor-Precategory
  is-equiv-natural-isomorphism-iso-functor-Precategory =
    is-equiv-tot-is-fiberwise-equiv
      is-equiv-is-natural-isomorphism-is-iso-functor-Precategory

  equiv-iso-functor-natural-isomorphism-Precategory :
    natural-isomorphism-Precategory C D F G 
    iso-Precategory (functor-precategory-Precategory C D) F G
  equiv-iso-functor-natural-isomorphism-Precategory =
    equiv-tot equiv-is-iso-functor-is-natural-isomorphism-Precategory

  equiv-natural-isomorphism-iso-functor-Precategory :
    iso-Precategory (functor-precategory-Precategory C D) F G 
    natural-isomorphism-Precategory C D F G
  equiv-natural-isomorphism-iso-functor-Precategory =
    equiv-tot equiv-is-natural-isomorphism-is-iso-functor-Precategory
```

#### Computing with the equivalence that isomorphisms are natural isomorphisms

```agda
module _
  {l1 l2 l3 l4 : Level}
  (C : Precategory l1 l2)
  (D : Precategory l3 l4)
  (F G : functor-Precategory C D)
  where

  compute-iso-functor-natural-isomorphism-eq-Precategory :
    (p : F  G) 
    iso-eq-Precategory (functor-precategory-Precategory C D) F G p 
    iso-functor-natural-isomorphism-Precategory C D F G
      ( natural-isomorphism-eq-Precategory C D F G p)
  compute-iso-functor-natural-isomorphism-eq-Precategory refl =
    eq-iso-eq-hom-Precategory
      ( functor-precategory-Precategory C D)
      { F} {G} _ _ refl
```

### The evaluation functor

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

  ev-functor-Precategory :
    (c : obj-Precategory C) 
    functor-Precategory (functor-precategory-Precategory C D) D
  pr1 (ev-functor-Precategory c) F = obj-functor-Precategory C D F c
  pr1 (pr2 (ev-functor-Precategory c)) {F} {G} φ =
    hom-family-natural-transformation-Precategory C D F G φ c
  pr1 (pr2 (pr2 (ev-functor-Precategory c))) φ Ψ = refl
  pr2 (pr2 (pr2 (ev-functor-Precategory c))) F = refl
```