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 𝒞 𝒟}
      }
    }