Home

Strict categoryの圏

module category-theory.category-of-strict-categories where
Imports
open import foundations.universe
open import foundations.set
open import foundations.sigma-type
open import foundations.identity-type
open import foundations.function
open import foundations.functions-are-functors
open import foundations.groupoid-laws
open import foundations.function-extensionality
open import foundations.h-level-sigma
open import foundations.h-level-pi
open import foundations.h-level-closed-under-retract
open import foundations.h-level-closed-under-retract-of-identity
open import category-theory.category
open import category-theory.functor
open import category-theory.functor-identity
open import category-theory.composition-of-functors
open import category-theory.strict-category

(小さい)圏全体は圏にはならないが、(小さい) strict category全体は圏を成す。

StrictFunctor :  {o h} (𝒞 𝒟 : StrictCategory o h)
   Type (o  h)
StrictFunctor (𝒞 , x) (𝒟 , y) = Functor 𝒞 𝒟

module _ (e : FunExtAll) where
  isSetStrictFunctor :  {o h} (𝒞 𝒟 : StrictCategory o h)
     isSet (StrictFunctor 𝒞 𝒟)
  isSetStrictFunctor 𝒞 𝒟  =
    isSetRetractId
      (isSetRetract
        (isSetΣ (isSet→ e λ _  𝒟 .snd) λ _  isSetImplicitΠ e λ _  isSetImplicitΠ e  _  isSet→ e λ _  Category.is-set-hom (𝒟 .fst)))
        (functorDataToΣ _ _ , hasRetractionFunctorDataToΣ _ _))
      Functor.F
      λ { {x = F} {y = G}  hasRetractionFromFunctorId e (𝒞 .fst) (𝒟 .fst) F G }

  SCats :  (o h : Level)  Category (lsuc (o  h)) (o  h)
  SCats o h = record
    { 𝒞 = record
      { Ob = StrictCategory o h
      ; Hom = StrictFunctor
      ; id = λ A  idFunctor (A .fst)
      ; _∘_ = _∘F_
      }
    ; is-category = record
      { identˡ = lunit-∘F e
      ; identʳ = runit-∘F e
      ; ident² = λ A  lunit-∘F e (idFunctor (A .fst))
      ; assoc = λ { {f = F} {g = G} {h = H}  assoc-∘F e F G H }
      ; sym-assoc = λ { {f = F} {g = G} {h = H}  sym (assoc-∘F e F G H) }
      ; is-set-hom = λ { {A = 𝒞} {B = 𝒟}  isSetStrictFunctor 𝒞 𝒟}
      }
    }