diff --git a/src/category-theory.lagda.md b/src/category-theory.lagda.md
index 5d426bb25d..8510ab4650 100644
--- a/src/category-theory.lagda.md
+++ b/src/category-theory.lagda.md
@@ -50,6 +50,7 @@ open import category-theory.embeddings-precategories public
open import category-theory.endomorphisms-in-categories public
open import category-theory.endomorphisms-in-precategories public
open import category-theory.epimorphisms-in-large-precategories public
+open import category-theory.equivalence-from-fully-faithful-and-split-essentially-surjective-functor public
open import category-theory.equivalences-of-categories public
open import category-theory.equivalences-of-large-precategories public
open import category-theory.equivalences-of-precategories public
@@ -70,6 +71,7 @@ open import category-theory.fully-faithful-functors-precategories public
open import category-theory.fully-faithful-maps-precategories public
open import category-theory.function-categories public
open import category-theory.function-precategories public
+open import category-theory.functor-curry public
open import category-theory.functors-categories public
open import category-theory.functors-from-small-to-large-categories public
open import category-theory.functors-from-small-to-large-precategories public
diff --git a/src/category-theory/equivalence-from-fully-faithful-and-split-essentially-surjective-functor.lagda.md b/src/category-theory/equivalence-from-fully-faithful-and-split-essentially-surjective-functor.lagda.md
new file mode 100644
index 0000000000..fb3bce4869
--- /dev/null
+++ b/src/category-theory/equivalence-from-fully-faithful-and-split-essentially-surjective-functor.lagda.md
@@ -0,0 +1,262 @@
+# File title
+
+```agda
+module category-theory.equivalence-from-fully-faithful-and-split-essentially-surjective-functor where
+```
+
+Imports
+
+```agda
+open import category-theory.equivalences-of-precategories
+open import category-theory.fully-faithful-functors-precategories
+open import category-theory.functors-precategories
+open import category-theory.isomorphisms-in-precategories
+open import category-theory.maps-precategories
+open import category-theory.natural-isomorphisms-functors-precategories
+open import category-theory.natural-transformations-functors-precategories
+open import category-theory.precategories
+open import category-theory.split-essentially-surjective-functors-precategories
+
+open import foundation.action-on-identifications-functions
+open import foundation.dependent-pair-types
+open import foundation.equivalences
+open import foundation.identity-types
+open import foundation.universe-levels
+```
+
+
+
+## Idea
+
+A functor `F : C → D` that is fully faithful (it induces equivalences
+`φ : C(c₁, c₂) ≃ D(F(c₁), F(c₂))` on homsets) and essentially surjective (for
+every `x : D`, we have some `G(x) : C` and an isomorphism `εₓ : F(G(x)) ≅ x`) is
+an equivalence of categories. The construction proceeds along the following
+lines:
+
+- The inverse functor `G` sends objects `x : D` to `G(x) : C`;
+- Morpisms `f: D(x₁, x₂)` are sent to `φ⁻¹(εₓ₂⁻¹ ∘ f ∘ εₓ₁) : C(G(x₁), G(x₂))`;
+- The unit is given on `c : C` by the preimage along `φ` of `ε` at `F(c)`;
+- The counit is given on `x : D` by `εₓ`.
+
+## Definition
+
+```agda
+module _
+ {l1 l2 : Level}
+ (C D : Precategory l1 l2)
+ (F : functor-Precategory C D)
+ (HFF : is-fully-faithful-functor-Precategory C D F)
+ (HES : is-split-essentially-surjective-functor-Precategory C D F)
+ where
+
+ private
+ infixl 10 _∘C_
+
+ _∘C_ : {x y z : obj-Precategory C}
+ → hom-Precategory C y z
+ → hom-Precategory C x y
+ → hom-Precategory C x z
+ _∘C_ f g = comp-hom-Precategory C f g
+
+ infixl 10 _∘D_
+ _∘D_ : {x y z : obj-Precategory D}
+ → hom-Precategory D y z
+ → hom-Precategory D x y
+ → hom-Precategory D x z
+ _∘D_ f g = comp-hom-Precategory D f g
+
+ F₀ : obj-Precategory C → obj-Precategory D
+ F₀ = obj-functor-Precategory C D F
+
+ F₁ : {x y : obj-Precategory C}
+ → hom-Precategory C x y
+ → hom-Precategory D (F₀ x) (F₀ y)
+ F₁ = hom-functor-Precategory C D F
+
+ F₁⁻¹ : {x y : obj-Precategory C}
+ → hom-Precategory D (F₀ x) (F₀ y)
+ → hom-Precategory C x y
+ F₁⁻¹ = map-inv-hom-is-fully-faithful-functor-Precategory C D F HFF
+
+ G : obj-Precategory D → obj-Precategory C
+ G d = pr1 (HES d)
+
+ ε :
+ (d : obj-Precategory D)
+ → iso-Precategory D (F₀ (G d)) d
+ ε d = pr2 (HES d)
+
+ obj-functor-ff-es-equiv : obj-Precategory D → obj-Precategory C
+ obj-functor-ff-es-equiv = G
+
+ hom-functor-ff-es-equiv :
+ {x y : obj-Precategory D}
+ → hom-Precategory D x y
+ → hom-Precategory C (obj-functor-ff-es-equiv x) (obj-functor-ff-es-equiv y)
+ hom-functor-ff-es-equiv {x} {y} f =
+ F₁⁻¹ (hom-inv-iso-Precategory D (ε y) ∘D f ∘D hom-iso-Precategory D (ε x))
+
+ map-functor-ff-es-equiv : map-Precategory D C
+ pr1 map-functor-ff-es-equiv = obj-functor-ff-es-equiv
+ pr2 map-functor-ff-es-equiv = hom-functor-ff-es-equiv
+
+ opaque
+ preserves-comp-hom-functor-ff-es-equiv :
+ preserves-comp-hom-map-Precategory D C map-functor-ff-es-equiv
+ preserves-comp-hom-functor-ff-es-equiv {x} {y} {z} g f = inv (
+ fully-faithful-inv-preserves-comp C D F HFF _ _
+ ∙ ap F₁⁻¹ (
+ associative-comp-hom-Precategory D _ _ _
+ ∙ ap (λ a → _ ∘D _ ∘D a)
+ (inv (associative-comp-hom-Precategory D _ _ _))
+ ∙ ap (λ a → _ ∘D _ ∘D (a ∘D _))
+ (inv (associative-comp-hom-Precategory D _ _ _))
+ ∙ ap (λ a → _ ∘D _ ∘D (a ∘D _ ∘D _))
+ (is-section-hom-inv-iso-Precategory D (ε y))
+ ∙ ap (λ a → _ ∘D (a ∘D _))
+ (left-unit-law-comp-hom-Precategory D _)
+ ∙ associative-comp-hom-Precategory D _ g _
+ ∙ ap (λ a → _ ∘D a)
+ (inv (associative-comp-hom-Precategory D _ _ _))
+ ∙ inv (associative-comp-hom-Precategory D _ _ _)
+ ))
+
+ preserves-id-hom-functor-ff-es-equiv :
+ preserves-id-hom-map-Precategory D C map-functor-ff-es-equiv
+ preserves-id-hom-functor-ff-es-equiv x =
+ ap F₁⁻¹ (
+ ap (λ a → a ∘D _) (right-unit-law-comp-hom-Precategory D _)
+ ∙ is-retraction-hom-inv-iso-Precategory D (ε x)
+ ) ∙ inv (fully-faithful-inv-preserves-id C D F HFF _)
+
+ functor-ff-es-equiv : functor-Precategory D C
+ pr1 functor-ff-es-equiv = obj-functor-ff-es-equiv
+ pr1 (pr2 functor-ff-es-equiv) = hom-functor-ff-es-equiv
+ pr1 (pr2 (pr2 functor-ff-es-equiv)) = preserves-comp-hom-functor-ff-es-equiv
+ pr2 (pr2 (pr2 functor-ff-es-equiv)) = preserves-id-hom-functor-ff-es-equiv
+
+ module _
+ (x : obj-Precategory C)
+ where
+
+ iso-unit-ff-es-equiv :
+ iso-Precategory C
+ (obj-functor-Precategory C C
+ (comp-functor-Precategory C D C functor-ff-es-equiv F) x)
+ x
+ iso-unit-ff-es-equiv =
+ (is-essentially-injective-is-fully-faithful-functor-Precategory
+ C D F HFF _ _ (ε (F₀ x)))
+
+ hom-unit-ff-es-equiv :
+ hom-Precategory C
+ (obj-functor-Precategory C C
+ (comp-functor-Precategory C D C functor-ff-es-equiv F) x)
+ x
+ hom-unit-ff-es-equiv = hom-iso-Precategory C iso-unit-ff-es-equiv
+
+ is-iso-unit-ff-es-equiv : is-iso-Precategory C hom-unit-ff-es-equiv
+ is-iso-unit-ff-es-equiv = is-iso-iso-Precategory C iso-unit-ff-es-equiv
+
+ opaque
+ is-natural-unit-ff-es-equiv :
+ is-natural-transformation-Precategory C C
+ (comp-functor-Precategory C D C functor-ff-es-equiv F)
+ (id-functor-Precategory C)
+ hom-unit-ff-es-equiv
+ is-natural-unit-ff-es-equiv {x} {y} f = equational-reasoning
+ f ∘C hom-unit-ff-es-equiv x
+ = F₁⁻¹ (F₁ f) ∘C hom-unit-ff-es-equiv x
+ by ap (λ a → a ∘C _)
+ (inv (is-retraction-map-section-is-equiv (HFF _ _) f))
+ = F₁⁻¹ (F₁ f ∘D (hom-iso-Precategory D (ε (F₀ x))))
+ by fully-faithful-inv-preserves-comp C D F HFF _ _
+ = F₁⁻¹ (
+ (id-hom-Precategory D)
+ ∘D (F₁ f)
+ ∘D (hom-iso-Precategory D (ε (F₀ x))))
+ by ap (λ a → F₁⁻¹ (a ∘D _))
+ (inv (left-unit-law-comp-hom-Precategory D _))
+ = F₁⁻¹ (
+ (hom-iso-Precategory D (ε (F₀ y)))
+ ∘D (hom-inv-iso-Precategory D (ε (F₀ y)))
+ ∘D (F₁ f)
+ ∘D (hom-iso-Precategory D (ε (F₀ x))))
+ by ap (λ a → F₁⁻¹ (a ∘D _ ∘D _))
+ (inv (is-section-hom-inv-iso-Precategory D (ε (F₀ y))))
+ = F₁⁻¹ (
+ (hom-iso-Precategory D (ε (F₀ y)))
+ ∘D (
+ (hom-inv-iso-Precategory D (ε (F₀ y)))
+ ∘D (F₁ f)
+ ∘D (hom-iso-Precategory D (ε (F₀ x)))))
+ by ap F₁⁻¹ (
+ associative-comp-hom-Precategory D _ _ _
+ ∙ associative-comp-hom-Precategory D _ _ _
+ ∙ ap (λ a → _ ∘D a) (inv (associative-comp-hom-Precategory D _ _ _)))
+ = (hom-unit-ff-es-equiv y) ∘C (hom-functor-ff-es-equiv (F₁ f))
+ by inv (fully-faithful-inv-preserves-comp C D F HFF _ _)
+
+ unit-ff-es-equiv :
+ natural-isomorphism-Precategory C C
+ (comp-functor-Precategory C D C functor-ff-es-equiv F)
+ (id-functor-Precategory C)
+ pr1 (pr1 unit-ff-es-equiv) = hom-unit-ff-es-equiv
+ pr2 (pr1 unit-ff-es-equiv) = is-natural-unit-ff-es-equiv
+ pr2 unit-ff-es-equiv = is-iso-unit-ff-es-equiv
+
+ hom-counit-ff-es-equiv :
+ (d : obj-Precategory D)
+ → hom-Precategory D
+ (obj-functor-Precategory D D
+ (comp-functor-Precategory D C D F functor-ff-es-equiv) d) d
+ hom-counit-ff-es-equiv d = hom-iso-Precategory D (ε d)
+
+ is-iso-counit-ff-es-equiv :
+ (d : obj-Precategory D)
+ → is-iso-Precategory D (hom-counit-ff-es-equiv d)
+ is-iso-counit-ff-es-equiv d = is-iso-iso-Precategory D (ε d)
+
+ opaque
+ is-natural-counit-ff-es-equiv :
+ is-natural-transformation-Precategory D D
+ (comp-functor-Precategory D C D F functor-ff-es-equiv)
+ (id-functor-Precategory D)
+ hom-counit-ff-es-equiv
+ is-natural-counit-ff-es-equiv {x} {y} f = equational-reasoning
+ f ∘D (hom-counit-ff-es-equiv x)
+ = (id-hom-Precategory D) ∘D f ∘D (hom-counit-ff-es-equiv x)
+ by ap (λ a → a ∘D _) (inv (left-unit-law-comp-hom-Precategory D f))
+ = (hom-iso-Precategory D (ε y))
+ ∘D (hom-inv-iso-Precategory D (ε y))
+ ∘D f
+ ∘D (hom-counit-ff-es-equiv x)
+ by ap (λ a → a ∘D _ ∘D _)
+ (inv (is-section-hom-inv-iso-Precategory D (ε y)))
+ = (hom-iso-Precategory D (ε y))
+ ∘D (
+ (hom-inv-iso-Precategory D (ε y))
+ ∘D f
+ ∘D (hom-iso-Precategory D (ε x)))
+ by associative-comp-hom-Precategory D _ _ _
+ ∙ associative-comp-hom-Precategory D _ _ _
+ ∙ ap (λ a → _ ∘D a) (inv (associative-comp-hom-Precategory D _ _ _))
+ = (hom-counit-ff-es-equiv y) ∘D (F₁ (hom-functor-ff-es-equiv f))
+ by ap (λ a → _ ∘D a) (inv (is-section-map-section-is-equiv (HFF _ _) _))
+
+ counit-ff-es-equiv :
+ natural-isomorphism-Precategory D D
+ (comp-functor-Precategory D C D F functor-ff-es-equiv)
+ (id-functor-Precategory D)
+ pr1 (pr1 counit-ff-es-equiv) = hom-counit-ff-es-equiv
+ pr2 (pr1 counit-ff-es-equiv) = is-natural-counit-ff-es-equiv
+ pr2 counit-ff-es-equiv = is-iso-counit-ff-es-equiv
+
+ result : equiv-Precategory C D
+ pr1 result = F
+ pr1 (pr1 (pr2 result)) = functor-ff-es-equiv
+ pr2 (pr1 (pr2 result)) = unit-ff-es-equiv
+ pr1 (pr2 (pr2 result)) = functor-ff-es-equiv
+ pr2 (pr2 (pr2 result)) = counit-ff-es-equiv
+```
diff --git a/src/category-theory/fully-faithful-functors-precategories.lagda.md b/src/category-theory/fully-faithful-functors-precategories.lagda.md
index a0de4952c0..ddd26515c5 100644
--- a/src/category-theory/fully-faithful-functors-precategories.lagda.md
+++ b/src/category-theory/fully-faithful-functors-precategories.lagda.md
@@ -409,6 +409,65 @@ module _
{ x} {y}
```
+### The inverse function on the morphisms preserves composition and identity
+
+```agda
+module _
+ {l1 l2 : Level}
+ (C D : Precategory l1 l2)
+ (F : functor-Precategory C D)
+ (H : is-fully-faithful-functor-Precategory C D F)
+ where
+
+ module _
+ {x y z : obj-Precategory C}
+ (f : hom-Precategory D (obj-functor-Precategory C D F y)
+ (obj-functor-Precategory C D F z))
+ (g : hom-Precategory D (obj-functor-Precategory C D F x)
+ (obj-functor-Precategory C D F y))
+ where
+
+ private
+ f' : hom-Precategory C y z
+ f' = map-inv-hom-is-fully-faithful-functor-Precategory C D F H f
+
+ g' : hom-Precategory C x y
+ g' = map-inv-hom-is-fully-faithful-functor-Precategory C D F H g
+
+ fully-faithful-inv-preserves-comp :
+ comp-hom-Precategory C f' g'
+ = map-inv-hom-is-fully-faithful-functor-Precategory C D F H
+ (comp-hom-Precategory D f g)
+ fully-faithful-inv-preserves-comp
+ = inv (is-retraction-map-section-is-equiv (H x z)
+ (comp-hom-Precategory C f' g'))
+ ∙ ap (λ a → map-inv-hom-is-fully-faithful-functor-Precategory C D F H a) (
+ preserves-comp-functor-Precategory C D F f' g'
+ ∙ ap (λ a → comp-hom-Precategory D a _)
+ (is-section-map-section-is-equiv (H y z) f)
+ ∙ ap (λ a → comp-hom-Precategory D _ a)
+ (is-section-map-section-is-equiv (H x y) g)
+ )
+
+ module _
+ (x : obj-Precategory C)
+ where
+
+ private
+ x' : obj-Precategory D
+ x' = obj-functor-Precategory C D F x
+
+ fully-faithful-inv-preserves-id :
+ id-hom-Precategory C {x}
+ = map-inv-hom-is-fully-faithful-functor-Precategory C D F H
+ (id-hom-Precategory D {x'})
+
+ fully-faithful-inv-preserves-id
+ = inv (is-retraction-map-section-is-equiv (H x x) (id-hom-Precategory C))
+ ∙ ap (λ a → map-inv-hom-is-fully-faithful-functor-Precategory C D F H a)
+ (preserves-id-functor-Precategory C D F x)
+```
+
## External links
- [Fully Faithful Functors](https://1lab.dev/Cat.Functor.Properties.html#fully-faithful-functors)
diff --git a/src/category-theory/functor-curry.lagda.md b/src/category-theory/functor-curry.lagda.md
new file mode 100644
index 0000000000..63bfdf76dc
--- /dev/null
+++ b/src/category-theory/functor-curry.lagda.md
@@ -0,0 +1,319 @@
+# The Currying of Functors on a Product Category
+
+```agda
+module category-theory.functor-curry where
+```
+
+Imports
+
+```agda
+open import category-theory.functors-precategories
+open import category-theory.maps-precategories
+open import category-theory.natural-transformations-functors-precategories
+open import category-theory.precategories
+open import category-theory.precategory-of-functors
+open import category-theory.products-of-precategories
+
+open import foundation.action-on-identifications-functions
+open import foundation.equality-cartesian-product-types
+open import foundation.dependent-pair-types
+open import foundation.identity-types
+open import foundation.universe-levels
+```
+
+
+
+## Idea
+
+In the context of sets, currying means that we can view a function
+`f : S × T → U` as a function `f : S → (T → U)`. We can view this as a function
+`curry : (S × T → U) → (S → T → U)`. In the context of categories, there is a
+similar situation: this file constructs the functor between functor categories
+
+```text
+curry-functor : [C × D, E] → [C, [D, E]].
+```
+
+## Definition
+
+```agda
+module CurryFunctor
+ {lc₁ lc₂ ld₁ ld₂ le₁ le₂ : Level}
+ (C : Precategory lc₁ lc₂)
+ (D : Precategory ld₁ ld₂)
+ (E : Precategory le₁ le₂) where
+ private
+ CD = product-Precategory C D
+ CDE1 = functor-precategory-Precategory CD E
+ DE = functor-precategory-Precategory D E
+ CDE2 = functor-precategory-Precategory C DE
+
+ module _
+ (F : obj-Precategory CDE1)
+ where
+
+ module _
+ (c : obj-Precategory C)
+ where
+
+ obj-obj-obj-curry-functor : obj-Precategory D → obj-Precategory E
+ obj-obj-obj-curry-functor d = obj-functor-Precategory CD E F (c , d)
+
+ hom-obj-obj-curry-functor :
+ {d₁ d₂ : obj-Precategory D}
+ → hom-Precategory D d₁ d₂
+ → hom-Precategory E
+ (obj-obj-obj-curry-functor d₁)
+ (obj-obj-obj-curry-functor d₂)
+ hom-obj-obj-curry-functor f =
+ hom-functor-Precategory CD E F (id-hom-Precategory C , f)
+
+ map-obj-obj-curry-functor : map-Precategory D E
+ pr1 map-obj-obj-curry-functor = obj-obj-obj-curry-functor
+ pr2 map-obj-obj-curry-functor = hom-obj-obj-curry-functor
+
+ opaque
+ preserves-comp-obj-obj-curry-functor :
+ preserves-comp-hom-map-Precategory D E map-obj-obj-curry-functor
+ preserves-comp-obj-obj-curry-functor f g = equational-reasoning
+ hom-functor-Precategory CD E F
+ (id-hom-Precategory C , comp-hom-Precategory D f g)
+ = hom-functor-Precategory CD E F (comp-hom-Precategory CD
+ (id-hom-Precategory C , f) (id-hom-Precategory C , g))
+ by ap (λ x → hom-functor-Precategory CD E F (x , _)) (inv
+ (left-unit-law-comp-hom-Precategory C (id-hom-Precategory C)))
+ = comp-hom-Precategory E
+ (hom-functor-Precategory CD E F (id-hom-Precategory C , f))
+ (hom-functor-Precategory CD E F (id-hom-Precategory C , g))
+ by preserves-comp-functor-Precategory CD E F
+ (id-hom-Precategory C , f)
+ (id-hom-Precategory C , g)
+
+ preserves-id-obj-obj-curry-functor :
+ preserves-id-hom-map-Precategory D E map-obj-obj-curry-functor
+ preserves-id-obj-obj-curry-functor d =
+ preserves-id-functor-Precategory CD E F (c , d)
+
+ obj-obj-curry-functor : obj-Precategory DE
+ pr1 obj-obj-curry-functor = obj-obj-obj-curry-functor
+ pr1 (pr2 obj-obj-curry-functor) = hom-obj-obj-curry-functor
+ pr1 (pr2 (pr2 obj-obj-curry-functor)) =
+ preserves-comp-obj-obj-curry-functor
+ pr2 (pr2 (pr2 obj-obj-curry-functor)) = preserves-id-obj-obj-curry-functor
+
+ module _
+ {c₁ c₂ : obj-Precategory C}
+ (f : hom-Precategory C c₁ c₂)
+ where
+
+ hom-hom-obj-curry-functor :
+ (d : obj-Precategory D)
+ → hom-Precategory E
+ (obj-obj-obj-curry-functor c₁ d)
+ (obj-obj-obj-curry-functor c₂ d)
+ hom-hom-obj-curry-functor d =
+ hom-functor-Precategory CD E F (f , id-hom-Precategory D)
+
+ opaque
+ is-natural-hom-obj-curry-functor :
+ is-natural-transformation-Precategory D E
+ (obj-obj-curry-functor c₁) (obj-obj-curry-functor c₂)
+ hom-hom-obj-curry-functor
+ is-natural-hom-obj-curry-functor {d₁} {d₂} g = equational-reasoning
+ comp-hom-Precategory E
+ (hom-obj-obj-curry-functor c₂ g)
+ (hom-hom-obj-curry-functor d₁)
+ = hom-functor-Precategory CD E F (comp-hom-Precategory CD
+ (id-hom-Precategory C , g)
+ (f , id-hom-Precategory D))
+ by inv (preserves-comp-functor-Precategory CD E F
+ (id-hom-Precategory C , g)
+ (f , id-hom-Precategory D))
+ = hom-functor-Precategory CD E F (comp-hom-Precategory CD
+ (f , id-hom-Precategory D)
+ (id-hom-Precategory C , g))
+ by ap (hom-functor-Precategory CD E F) (eq-pair
+ (left-unit-law-comp-hom-Precategory C f
+ ∙ inv (right-unit-law-comp-hom-Precategory C f))
+ (right-unit-law-comp-hom-Precategory D g
+ ∙ inv (left-unit-law-comp-hom-Precategory D g)))
+ = comp-hom-Precategory E
+ (hom-hom-obj-curry-functor d₂)
+ (hom-obj-obj-curry-functor c₁ g)
+ by preserves-comp-functor-Precategory CD E F
+ (f , id-hom-Precategory D)
+ (id-hom-Precategory C , g)
+
+ hom-obj-curry-functor :
+ hom-Precategory DE (obj-obj-curry-functor c₁) (obj-obj-curry-functor c₂)
+ pr1 hom-obj-curry-functor = hom-hom-obj-curry-functor
+ pr2 hom-obj-curry-functor = is-natural-hom-obj-curry-functor
+
+ map-obj-curry-functor : map-Precategory C DE
+ pr1 map-obj-curry-functor = obj-obj-curry-functor
+ pr2 map-obj-curry-functor = hom-obj-curry-functor
+
+ opaque
+ preserves-comp-obj-curry-functor :
+ preserves-comp-hom-map-Precategory C DE map-obj-curry-functor
+ preserves-comp-obj-curry-functor {c₁} {c₂} {c₃} f g =
+ eq-htpy-hom-family-natural-transformation-Precategory
+ D E
+ (obj-obj-curry-functor c₁) (obj-obj-curry-functor c₃)
+ (hom-obj-curry-functor (comp-hom-Precategory C f g))
+ (comp-hom-Precategory DE
+ {obj-obj-curry-functor c₁}
+ {obj-obj-curry-functor c₂}
+ {obj-obj-curry-functor c₃}
+ (hom-obj-curry-functor f)
+ (hom-obj-curry-functor g))
+ (λ d → equational-reasoning
+ hom-functor-Precategory CD E F
+ (comp-hom-Precategory C f g , id-hom-Precategory D)
+ = hom-functor-Precategory CD E F (comp-hom-Precategory CD
+ (f , id-hom-Precategory D)
+ (g , id-hom-Precategory D))
+ by ap
+ (λ h → hom-functor-Precategory CD E F
+ (comp-hom-Precategory C f g , h))
+ (inv
+ (left-unit-law-comp-hom-Precategory D (id-hom-Precategory D)))
+ = comp-hom-Precategory E
+ (hom-functor-Precategory CD E F (f , id-hom-Precategory D))
+ (hom-functor-Precategory CD E F (g , id-hom-Precategory D))
+ by preserves-comp-functor-Precategory CD E F
+ (f , id-hom-Precategory D)
+ (g , id-hom-Precategory D))
+
+ preserves-id-obj-curry-functor :
+ preserves-id-hom-map-Precategory C DE map-obj-curry-functor
+ preserves-id-obj-curry-functor c =
+ eq-htpy-hom-family-natural-transformation-Precategory
+ D E
+ (obj-obj-curry-functor c)
+ (obj-obj-curry-functor c)
+ (hom-obj-curry-functor (id-hom-Precategory C))
+ (id-hom-Precategory DE {obj-obj-curry-functor c})
+ (λ d → preserves-id-functor-Precategory CD E F (c , d))
+
+ obj-curry-functor : obj-Precategory CDE2
+ pr1 obj-curry-functor = obj-obj-curry-functor
+ pr1 (pr2 obj-curry-functor) = hom-obj-curry-functor
+ pr1 (pr2 (pr2 obj-curry-functor)) = preserves-comp-obj-curry-functor
+ pr2 (pr2 (pr2 obj-curry-functor)) = preserves-id-obj-curry-functor
+
+ module _
+ {F₁ F₂ : obj-Precategory CDE1}
+ (α : hom-Precategory CDE1 F₁ F₂)
+ where
+
+ module _
+ (c : obj-Precategory C)
+ where
+
+ hom-hom-hom-curry-functor :
+ (d : obj-Precategory D)
+ → hom-Precategory E
+ (obj-obj-obj-curry-functor F₁ c d)
+ (obj-obj-obj-curry-functor F₂ c d)
+ hom-hom-hom-curry-functor d =
+ hom-family-natural-transformation-Precategory CD E F₁ F₂ α (c , d)
+
+ opaque
+ is-natural-hom-hom-curry-functor :
+ is-natural-transformation-Precategory D E
+ (obj-obj-curry-functor F₁ c) (obj-obj-curry-functor F₂ c)
+ hom-hom-hom-curry-functor
+ is-natural-hom-hom-curry-functor {d₁} {d₂} f =
+ naturality-natural-transformation-Precategory CD E F₁ F₂ α
+ (id-hom-Precategory C , f)
+
+ hom-hom-curry-functor :
+ hom-Precategory DE
+ (obj-obj-curry-functor F₁ c) (obj-obj-curry-functor F₂ c)
+ pr1 hom-hom-curry-functor = hom-hom-hom-curry-functor
+ pr2 hom-hom-curry-functor = is-natural-hom-hom-curry-functor
+
+ opaque
+ is-natural-hom-curry-functor :
+ is-natural-transformation-Precategory C DE
+ (obj-curry-functor F₁) (obj-curry-functor F₂)
+ hom-hom-curry-functor
+ is-natural-hom-curry-functor {c₁} {c₂} f =
+ eq-htpy-hom-family-natural-transformation-Precategory
+ D E
+ (obj-obj-curry-functor F₁ c₁) (obj-obj-curry-functor F₂ c₂)
+ (comp-hom-Precategory DE
+ {obj-obj-curry-functor F₁ c₁}
+ {obj-obj-curry-functor F₂ c₁}
+ {obj-obj-curry-functor F₂ c₂}
+ (hom-obj-curry-functor F₂ f)
+ (hom-hom-curry-functor c₁))
+ (comp-hom-Precategory DE
+ {obj-obj-curry-functor F₁ c₁}
+ {obj-obj-curry-functor F₁ c₂}
+ {obj-obj-curry-functor F₂ c₂}
+ (hom-hom-curry-functor c₂)
+ (hom-obj-curry-functor F₁ f))
+ (λ d → naturality-natural-transformation-Precategory CD E F₁ F₂ α
+ (f , id-hom-Precategory D))
+
+ hom-curry-functor :
+ hom-Precategory CDE2 (obj-curry-functor F₁) (obj-curry-functor F₂)
+ pr1 hom-curry-functor = hom-hom-curry-functor
+ pr2 hom-curry-functor = is-natural-hom-curry-functor
+
+ map-curry-functor : map-Precategory CDE1 CDE2
+ pr1 map-curry-functor = obj-curry-functor
+ pr2 map-curry-functor {F₁} {F₂} = hom-curry-functor {F₁} {F₂}
+
+ opaque
+ preserves-comp-curry-functor :
+ preserves-comp-hom-map-Precategory CDE1 CDE2 map-curry-functor
+ preserves-comp-curry-functor {F₁} {F₂} {F₃} α₁ α₂ =
+ eq-htpy-hom-family-natural-transformation-Precategory
+ C DE
+ (obj-curry-functor F₁) (obj-curry-functor F₃)
+ (hom-curry-functor {F₁} {F₃}
+ (comp-hom-Precategory CDE1 {F₁} {F₂} {F₃} α₁ α₂))
+ (comp-hom-Precategory CDE2
+ {obj-curry-functor F₁}
+ {obj-curry-functor F₂}
+ {obj-curry-functor F₃}
+ (hom-curry-functor {F₂} {F₃} α₁)
+ (hom-curry-functor {F₁} {F₂} α₂))
+ (λ c → eq-htpy-hom-family-natural-transformation-Precategory
+ D E
+ (obj-obj-curry-functor F₁ c) (obj-obj-curry-functor F₃ c)
+ (hom-hom-curry-functor {F₁} {F₃}
+ (comp-hom-Precategory CDE1 {F₁} {F₂} {F₃} α₁ α₂) c)
+ (comp-hom-Precategory DE
+ {obj-obj-curry-functor F₁ c}
+ {obj-obj-curry-functor F₂ c}
+ {obj-obj-curry-functor F₃ c}
+ (hom-hom-curry-functor {F₂} {F₃} α₁ c)
+ (hom-hom-curry-functor {F₁} {F₂} α₂ c))
+ (λ d → refl))
+
+ preserves-id-curry-functor :
+ preserves-id-hom-map-Precategory CDE1 CDE2 map-curry-functor
+ preserves-id-curry-functor F =
+ eq-htpy-hom-family-natural-transformation-Precategory
+ C DE
+ (obj-curry-functor F) (obj-curry-functor F)
+ (hom-curry-functor {F} {F} (id-hom-Precategory CDE1 {F}))
+ (id-hom-Precategory CDE2 {obj-curry-functor F})
+ (λ c → eq-htpy-hom-family-natural-transformation-Precategory
+ D E
+ (obj-obj-curry-functor F c) (obj-obj-curry-functor F c)
+ (hom-hom-curry-functor {F} {F} (id-hom-Precategory CDE1 {F}) c)
+ (id-hom-Precategory DE {obj-obj-curry-functor F c})
+ (λ d → refl))
+
+ curry-functor : functor-Precategory CDE1 CDE2
+ pr1 curry-functor = obj-curry-functor
+ pr1 (pr2 curry-functor) {F₁} {F₂} = hom-curry-functor {F₁} {F₂}
+ pr1 (pr2 (pr2 curry-functor)) {F₁} {F₂} {F₃} =
+ preserves-comp-curry-functor {F₁} {F₂} {F₃}
+ pr2 (pr2 (pr2 curry-functor)) = preserves-id-curry-functor
+```