{-# OPTIONS --cubical #-} module Category.Categories.Cat where open import Agda.Primitive open import Cubical open import Function open import Data.Product renaming (proj₁ to fst ; proj₂ to snd) open import Category -- The category of categories module _ {ℓ ℓ' : Level} where private _⊛_ = functor-comp module _ {A B C D : Category {ℓ} {ℓ'}} {f : Functor A B} {g : Functor B C} {h : Functor C D} where assc : h ⊛ (g ⊛ f) ≡ (h ⊛ g) ⊛ f assc = {!!} module _ {A B : Category {ℓ} {ℓ'}} where lift-eq : (f g : Functor A B) → (eq* : Functor.func* f ≡ Functor.func* g) -- TODO: Must transport here using the equality from above. -- Reason: -- func→ : Arrow A dom cod → Arrow B (func* dom) (func* cod) -- func→₁ : Arrow A dom cod → Arrow B (func*₁ dom) (func*₁ cod) -- In other words, func→ and func→₁ does not have the same type. -- → Functor.func→ f ≡ Functor.func→ g -- → Functor.ident f ≡ Functor.ident g -- → Functor.distrib f ≡ Functor.distrib g → f ≡ g lift-eq (functor func* func→ idnt distrib) (functor func*₁ func→₁ idnt₁ distrib₁) eq-func* = {!!} module _ {A B : Category {ℓ} {ℓ'}} {f : Functor A B} where idHere = identity {ℓ} {ℓ'} {A} lem : (Functor.func* f) ∘ (Functor.func* idHere) ≡ Functor.func* f lem = refl ident-r : f ⊛ identity ≡ f ident-r = lift-eq (f ⊛ identity) f refl ident-l : identity ⊛ f ≡ f ident-l = {!!} CatCat : Category {lsuc (ℓ ⊔ ℓ')} {ℓ ⊔ ℓ'} CatCat = record { Object = Category {ℓ} {ℓ'} ; Arrow = Functor ; 𝟙 = identity ; _⊕_ = functor-comp ; assoc = {!!} ; ident = ident-r , ident-l }