module Cat.Instances.StrictCat where

The category of strict categories🔗

Recall that a precategory is said strict if its space of objects is a Set. While general precategories are too homotopically interesting to fit into a Precategory (because functor spaces will not, in general, be h-sets), the strict categories do form a precategory, which we denote

Strict-cats :  o h  Precategory _ _
Strict-cats o h .Ob = Σ[ C ∈ Precategory o h ] (is-strict C)
Strict-cats o h .Hom (C , _) (D , _) = Functor C D
Strict-cats o h .id  = Id
Strict-cats o h .__ = _F∘_
Strict-cats o h .idr _       = Functor-path  _  refl) λ _  refl
Strict-cats o h .idl _       = Functor-path  _  refl) λ _  refl
Strict-cats o h .assoc _ _ _ = Functor-path  _  refl) λ _  refl

This assembles into a Precategory because the only bit of a Functor that doesn’t have a fixed h-level is the object mapping; By asking that D be a strict category, this fixes the functors to be sets.

Strict-cats o h .Hom-set _ (D , dset) = Functor-is-set dset

Products🔗

We prove that Strict-cats has products. This is because is and h-levels are closed under products.

Strict-cats-products
  : {C D : Precategory o h}
   (cob : is-set (Ob C)) (dob : is-set (Ob D))
   Product (Strict-cats o h) (C , cob) (D , dob)
Strict-cats-products {C = C} {D = D} cob dob = prod where
  prod : Product (Strict-cats _ _) (C , cob) (D , dob)
  prod .apex = C ×ᶜ D , ×-is-hlevel 2 cob dob
  prod .π₁ = Fst {C = C} {D = D}
  prod .π₂ = Snd {C = C} {D = D}
  prod .has-is-product ._,_⟩ p q = Cat⟨ p , q ⟩
  prod .has-is-product .π₁∘factor = Functor-path  _  refl) λ _  refl
  prod .has-is-product .π₂∘factor = Functor-path  _  refl) λ _  refl
  prod .has-is-product .unique other p q =
    Functor-path  x i  F₀ (p i) x , F₀ (q i) x) λ f i  F₁ (p i) f , F₁ (q i) f