Library UniMath.CategoryTheory.categories.CategoryOfSetCategories

Require Import UniMath.Foundations.All.
Require Import UniMath.MoreFoundations.All.
Require Import UniMath.CategoryTheory.Core.Categories.
Require Import UniMath.CategoryTheory.Core.Univalence.
Require Import UniMath.CategoryTheory.Core.Setcategories.
Require Import UniMath.CategoryTheory.Core.Functors.
Require Import UniMath.CategoryTheory.Core.NaturalTransformations.

Local Open Scope cat.

Definition precat_ob_mor_of_setcategory
  : precategory_ob_mor.
Show proof.
  use make_precategory_ob_mor.
  - exact setcategory.
  - exact (λ C₁ C₂, C₁ C₂).

Definition precat_data_of_setcategory
  : precategory_data.
Show proof.
  use make_precategory_data.
  - exact precat_ob_mor_of_setcategory.
  - exact (λ C, functor_identity _).
  - exact (λ C₁ C₂ C₃ F G, F G).

Definition is_precategory_of_setcategory
  : is_precategory precat_data_of_setcategory.
Show proof.
  use make_is_precategory_one_assoc.
  - intros C₁ C₂ F.
    use functor_eq.
    {
      apply homset_property.
    }
    use functor_data_eq ; cbn.
    + intro ; apply idpath.
    + intros x y f ; cbn.
      apply idpath.
  - intros C₁ C₂ F.
    use functor_eq.
    {
      apply homset_property.
    }
    use functor_data_eq ; cbn.
    + intro ; apply idpath.
    + intros x y f ; cbn.
      apply idpath.
  - intros C₁ C₂ C₃ C₄ F G H.
    use functor_eq.
    {
      apply homset_property.
    }
    use functor_data_eq ; cbn.
    + intro ; apply idpath.
    + intros x y f ; cbn.
      apply idpath.

Definition precat_of_setcategory
  : precategory.
Show proof.

Definition has_homsets_cat_of_setcategory
  : has_homsets precat_of_setcategory.
Show proof.
  intros C₁ C₂.
  use functor_isaset.
  - apply homset_property.
  - apply C₂.

Definition cat_of_setcategory
  : category.
Show proof.