Home

圏の同一視

module category-theory.category-identity where
Imports
open import foundations.universe
open import foundations.identity-type
open import foundations.proposition
open import foundations.function-extensionality
open import foundations.set
open import foundations.proposition-h-level
open import category-theory.category
private variable o h : Level

module _  (e : FunExtAll) where
  isPropIsCategory : (𝒞 : CategoryData o h) → isProp (isCategory 𝒞)
  isPropIsCategory 𝒞 a b = q
    where
      open CategoryData 𝒞
      module a = isCategory a
      module b = isCategory b

      p1 : Id (∀ {A B} (f : Hom A B) → _) a.identˡ b.identˡ
      p1 = byFunExtImplicit e _ _ λ A → byFunExtImplicit e _ _ λ B → byFunExtType e _ _ (λ f → a.is-set-hom _ f _ _)

      p2 : Id (∀ {A B} (f : Hom A B) → _) a.identʳ b.identʳ
      p2 = byFunExtImplicit e _ _ λ A → byFunExtImplicit e _ _ λ B → byFunExtType e _ _ (λ f → a.is-set-hom _ f _ _)

      p3 : Id (∀ A → _) a.ident² b.ident²
      p3 = byFunExtType e _ _ λ A → a.is-set-hom _ _ _ _

      p4 : Id (∀ {A B C D} {f : Hom A B} {g} {h : Hom C D} → (h ∘ g) ∘ f = h ∘ (g ∘ f)) a.assoc b.assoc
      p4 = byFunExtImplicit e _ _ (λ A → byFunExtImplicit e _ _ (λ B → byFunExtImplicit e _ _ (λ C → byFunExtImplicit e _ _ (λ D → byFunExtImplicit e _ _ (λ f → byFunExtImplicit e _ _ (λ g → byFunExtImplicit e _ _ (λ h → a.is-set-hom _ _ _ _)))))))

      p5 : Id (∀ {A B C D} {f : Hom A B} {g} {h : Hom C D} → h ∘ (g ∘ f) = (h ∘ g) ∘ f) a.sym-assoc b.sym-assoc
      p5 = byFunExtImplicit e _ _ (λ A → byFunExtImplicit e _ _ (λ B → byFunExtImplicit e _ _ (λ C → byFunExtImplicit e _ _ (λ D → byFunExtImplicit e _ _ (λ f → byFunExtImplicit e _ _ (λ g → byFunExtImplicit e _ _ (λ h → a.is-set-hom _ _ _ _)))))))

      p6 : Id (∀ {A B} → isSet (Hom A B)) a.is-set-hom b.is-set-hom
      p6 = byFunExtImplicit e _ _ (λ A → byFunExtImplicit e _ _ (λ B → isPropIsSet e _ _))

      q : a = b
      q with p1 | p2 | p3 | p4 | p5 | p6
      q | refl | refl | refl | refl | refl | refl = refl