# Large precategories ```agda module category-theory.large-precategories where ``` <details><summary>Imports</summary> ```agda open import category-theory.precategories open import foundation.action-on-identifications-binary-functions open import foundation.dependent-pair-types open import foundation.function-types open import foundation.homotopies open import foundation.identity-types open import foundation.sets open import foundation.strictly-involutive-identity-types open import foundation.universe-levels ``` </details> ## Idea A **large precategory** is a [precategory](category-theory.precategories.md) where we don't fix a universe for the type of objects or morphisms. (This cannot be done with Σ-types, we must use a record type.) ## Definition ### The large type of large precategories ```agda record Large-Precategory (α : Level → Level) (β : Level → Level → Level) : UUω where field obj-Large-Precategory : (l : Level) → UU (α l) hom-set-Large-Precategory : {l1 l2 : Level} → obj-Large-Precategory l1 → obj-Large-Precategory l2 → Set (β l1 l2) hom-Large-Precategory : {l1 l2 : Level} → obj-Large-Precategory l1 → obj-Large-Precategory l2 → UU (β l1 l2) hom-Large-Precategory X Y = type-Set (hom-set-Large-Precategory X Y) is-set-hom-Large-Precategory : {l1 l2 : Level} (X : obj-Large-Precategory l1) (Y : obj-Large-Precategory l2) → is-set (hom-Large-Precategory X Y) is-set-hom-Large-Precategory X Y = is-set-type-Set (hom-set-Large-Precategory X Y) field comp-hom-Large-Precategory : {l1 l2 l3 : Level} {X : obj-Large-Precategory l1} {Y : obj-Large-Precategory l2} {Z : obj-Large-Precategory l3} → hom-Large-Precategory Y Z → hom-Large-Precategory X Y → hom-Large-Precategory X Z id-hom-Large-Precategory : {l1 : Level} {X : obj-Large-Precategory l1} → hom-Large-Precategory X X involutive-eq-associative-comp-hom-Large-Precategory : {l1 l2 l3 l4 : Level} {X : obj-Large-Precategory l1} {Y : obj-Large-Precategory l2} {Z : obj-Large-Precategory l3} {W : obj-Large-Precategory l4} → (h : hom-Large-Precategory Z W) (g : hom-Large-Precategory Y Z) (f : hom-Large-Precategory X Y) → ( comp-hom-Large-Precategory (comp-hom-Large-Precategory h g) f) =ⁱ ( comp-hom-Large-Precategory h (comp-hom-Large-Precategory g f)) left-unit-law-comp-hom-Large-Precategory : {l1 l2 : Level} {X : obj-Large-Precategory l1} {Y : obj-Large-Precategory l2} (f : hom-Large-Precategory X Y) → ( comp-hom-Large-Precategory id-hom-Large-Precategory f) = f right-unit-law-comp-hom-Large-Precategory : {l1 l2 : Level} {X : obj-Large-Precategory l1} {Y : obj-Large-Precategory l2} (f : hom-Large-Precategory X Y) → ( comp-hom-Large-Precategory f id-hom-Large-Precategory) = f associative-comp-hom-Large-Precategory : {l1 l2 l3 l4 : Level} {X : obj-Large-Precategory l1} {Y : obj-Large-Precategory l2} {Z : obj-Large-Precategory l3} {W : obj-Large-Precategory l4} → (h : hom-Large-Precategory Z W) (g : hom-Large-Precategory Y Z) (f : hom-Large-Precategory X Y) → ( comp-hom-Large-Precategory (comp-hom-Large-Precategory h g) f) = ( comp-hom-Large-Precategory h (comp-hom-Large-Precategory g f)) associative-comp-hom-Large-Precategory h g f = eq-involutive-eq ( involutive-eq-associative-comp-hom-Large-Precategory h g f) open Large-Precategory public make-Large-Precategory : {α : Level → Level} {β : Level → Level → Level} ( obj : (l : Level) → UU (α l)) ( hom-set : {l1 l2 : Level} → obj l1 → obj l2 → Set (β l1 l2)) ( _∘_ : {l1 l2 l3 : Level} {X : obj l1} {Y : obj l2} {Z : obj l3} → type-Set (hom-set Y Z) → type-Set (hom-set X Y) → type-Set (hom-set X Z)) ( id : {l : Level} {X : obj l} → type-Set (hom-set X X)) ( assoc-comp-hom : {l1 l2 l3 l4 : Level} {X : obj l1} {Y : obj l2} {Z : obj l3} {W : obj l4} (h : type-Set (hom-set Z W)) (g : type-Set (hom-set Y Z)) (f : type-Set (hom-set X Y)) → ( (h ∘ g) ∘ f) = ( h ∘ (g ∘ f))) ( left-unit-comp-hom : {l1 l2 : Level} {X : obj l1} {Y : obj l2} (f : type-Set (hom-set X Y)) → id ∘ f = f) ( right-unit-comp-hom : {l1 l2 : Level} {X : obj l1} {Y : obj l2} (f : type-Set (hom-set X Y)) → f ∘ id = f) → Large-Precategory α β make-Large-Precategory obj hom-set _∘_ id assoc-comp-hom left-unit-comp-hom right-unit-comp-hom = λ where .obj-Large-Precategory → obj .hom-set-Large-Precategory → hom-set .comp-hom-Large-Precategory → _∘_ .id-hom-Large-Precategory → id .involutive-eq-associative-comp-hom-Large-Precategory h g f → involutive-eq-eq (assoc-comp-hom h g f) .left-unit-law-comp-hom-Large-Precategory → left-unit-comp-hom .right-unit-law-comp-hom-Large-Precategory → right-unit-comp-hom {-# INLINE make-Large-Precategory #-} ``` ```agda module _ {α : Level → Level} {β : Level → Level → Level} (C : Large-Precategory α β) where ap-comp-hom-Large-Precategory : {l1 l2 l3 : Level} {X : obj-Large-Precategory C l1} {Y : obj-Large-Precategory C l2} {Z : obj-Large-Precategory C l3} {g g' : hom-Large-Precategory C Y Z} (p : g = g') {f f' : hom-Large-Precategory C X Y} (q : f = f') → comp-hom-Large-Precategory C g f = comp-hom-Large-Precategory C g' f' ap-comp-hom-Large-Precategory = ap-binary (comp-hom-Large-Precategory C) comp-hom-Large-Precategory' : {l1 l2 l3 : Level} {X : obj-Large-Precategory C l1} {Y : obj-Large-Precategory C l2} {Z : obj-Large-Precategory C l3} → hom-Large-Precategory C X Y → hom-Large-Precategory C Y Z → hom-Large-Precategory C X Z comp-hom-Large-Precategory' f g = comp-hom-Large-Precategory C g f ``` ### Precategories obtained from large precategories ```agda module _ {α : Level → Level} {β : Level → Level → Level} (C : Large-Precategory α β) where precategory-Large-Precategory : (l : Level) → Precategory (α l) (β l l) pr1 (precategory-Large-Precategory l) = obj-Large-Precategory C l pr1 (pr2 (precategory-Large-Precategory l)) = hom-set-Large-Precategory C pr1 (pr1 (pr2 (pr2 (precategory-Large-Precategory l)))) = comp-hom-Large-Precategory C pr2 (pr1 (pr2 (pr2 (precategory-Large-Precategory l)))) = involutive-eq-associative-comp-hom-Large-Precategory C pr1 (pr2 (pr2 (pr2 (precategory-Large-Precategory l)))) x = id-hom-Large-Precategory C pr1 (pr2 (pr2 (pr2 (pr2 (precategory-Large-Precategory l))))) = left-unit-law-comp-hom-Large-Precategory C pr2 (pr2 (pr2 (pr2 (pr2 (precategory-Large-Precategory l))))) = right-unit-law-comp-hom-Large-Precategory C ``` ### Equalities induce morphisms ```agda module _ {α : Level → Level} {β : Level → Level → Level} (C : Large-Precategory α β) {l1 : Level} where hom-eq-Large-Precategory : (X Y : obj-Large-Precategory C l1) → X = Y → hom-Large-Precategory C X Y hom-eq-Large-Precategory X .X refl = id-hom-Large-Precategory C hom-inv-eq-Large-Precategory : (X Y : obj-Large-Precategory C l1) → X = Y → hom-Large-Precategory C Y X hom-inv-eq-Large-Precategory X Y = hom-eq-Large-Precategory Y X ∘ inv compute-hom-eq-Large-Precategory : (X Y : obj-Large-Precategory C l1) → hom-eq-Precategory (precategory-Large-Precategory C l1) X Y ~ hom-eq-Large-Precategory X Y compute-hom-eq-Large-Precategory X .X refl = refl ``` ### Pre- and postcomposition by a morphism ```agda module _ {α : Level → Level} {β : Level → Level → Level} (C : Large-Precategory α β) where precomp-hom-Large-Precategory : {l1 l2 l3 : Level} {X : obj-Large-Precategory C l1} {Y : obj-Large-Precategory C l2} (f : hom-Large-Precategory C X Y) → (Z : obj-Large-Precategory C l3) → hom-Large-Precategory C Y Z → hom-Large-Precategory C X Z precomp-hom-Large-Precategory f Z g = comp-hom-Large-Precategory C g f postcomp-hom-Large-Precategory : {l1 l2 l3 : Level} (X : obj-Large-Precategory C l1) {Y : obj-Large-Precategory C l2} {Z : obj-Large-Precategory C l3} (f : hom-Large-Precategory C Y Z) → hom-Large-Precategory C X Y → hom-Large-Precategory C X Z postcomp-hom-Large-Precategory X f g = comp-hom-Large-Precategory C f g ```