Products of precategories

module category-theory.products-of-precategories where
Imports
open import category-theory.precategories

open import foundation.cartesian-product-types
open import foundation.dependent-pair-types
open import foundation.equality-cartesian-product-types
open import foundation.sets
open import foundation.universe-levels

Idea

The product of two precategories C and D has as objects pairs (x , y), for x in obj-Precat C and y in obj-Precat D; and has a morphism Hom (x , y) (x' , y) for each pair of morphisms f : x → x' and g : y → y'. Composition of morphisms is given by composing each entry.

Definition

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

  prod-Precategory :
    Precategory (l1  l3) (l2  l4)
  pr1 prod-Precategory = obj-Precategory C × obj-Precategory D
  pr1 (pr2 prod-Precategory) (x , y) (x' , y') =
    prod-Set (hom-Precategory C x x') (hom-Precategory D y y')
  pr1 (pr1 (pr1 (pr2 (pr2 prod-Precategory))) (f' , g') (f , g)) =
    comp-hom-Precategory C f' f
  pr2 (pr1 (pr1 (pr2 (pr2 prod-Precategory))) (f' , g') (f , g)) =
    comp-hom-Precategory D g' g
  pr2 (pr1 (pr2 (pr2 prod-Precategory))) (f'' , g'') (f' , g') (f , g) =
    eq-pair
      ( associative-comp-hom-Precategory C f'' f' f)
      ( associative-comp-hom-Precategory D g'' g' g)
  pr1 (pr1 (pr2 (pr2 (pr2 prod-Precategory))) (x , y)) =
    id-hom-Precategory C {x}
  pr2 (pr1 (pr2 (pr2 (pr2 prod-Precategory))) (x , y)) =
    id-hom-Precategory D {y}
  pr1 (pr2 (pr2 (pr2 (pr2 prod-Precategory)))) (f , g) =
    eq-pair
      ( left-unit-law-comp-hom-Precategory C f)
      ( left-unit-law-comp-hom-Precategory D g)
  pr2 (pr2 (pr2 (pr2 (pr2 prod-Precategory)))) (f , g) =
    eq-pair
      ( right-unit-law-comp-hom-Precategory C f)
      ( right-unit-law-comp-hom-Precategory D g)