{-# OPTIONS --safe #-} open import Cubical.Foundations.Prelude open import Cubical.Foundations.Function open import Cubical.Data.Unit open import Cubical.Categories.Category open import Cubical.Categories.Displayed.Base import Cubical.Categories.Displayed.Reasoning as HomᴰReasoning open import Cubical.Categories.Functor open import Cubical.Categories.Instances.Terminal module Cubical.Categories.Displayed.Properties where private variable ℓC ℓ'C ℓD ℓ'D ℓCᴰ ℓ'Cᴰ ℓDᴰ ℓ'Dᴰ : Level module _ {C : Category ℓC ℓ'C} {D : Category ℓD ℓ'D} (Dᴰ : Categoryᴰ D ℓDᴰ ℓ'Dᴰ) (F : Functor C D) where private module R = HomᴰReasoning Dᴰ module C = Category C module D = Category D open Categoryᴰ Dᴰ open Functor F reindex : Categoryᴰ C ℓDᴰ ℓ'Dᴰ reindex .Categoryᴰ.ob[_] c = ob[ F-ob c ] reindex .Categoryᴰ.Hom[_][_,_] f aᴰ bᴰ = Hom[ F-hom f ][ aᴰ , bᴰ ] reindex .Categoryᴰ.idᴰ = R.reind (sym F-id) idᴰ reindex .Categoryᴰ._⋆ᴰ_ fᴰ gᴰ = R.reind (sym $ F-seq _ _) (fᴰ ⋆ᴰ gᴰ) reindex .Categoryᴰ.⋆IdLᴰ fᴰ = R.≡[]-rectify $ R.reind-filler-sym (F-seq _ _) _ R.[ _ ]∙[ _ ] (R.reind-filler-sym F-id idᴰ R.[ _ ]⋆[ refl ] refl) R.[ _ ]∙[ _ ] ⋆IdLᴰ fᴰ reindex .Categoryᴰ.⋆IdRᴰ fᴰ = R.≡[]-rectify $ R.reind-filler-sym (F-seq _ _) _ R.[ _ ]∙[ _ ] (refl R.[ refl ]⋆[ _ ] R.reind-filler-sym F-id idᴰ) R.[ _ ]∙[ _ ] ⋆IdRᴰ fᴰ reindex .Categoryᴰ.⋆Assocᴰ fᴰ gᴰ hᴰ = R.≡[]-rectify $ R.reind-filler-sym (F-seq _ _) _ R.[ _ ]∙[ _ ] (R.reind-filler-sym (F-seq _ _) _ R.[ _ ]⋆[ refl ] refl) R.[ _ ]∙[ _ ] ⋆Assocᴰ fᴰ gᴰ hᴰ R.[ _ ]∙[ _ ] (refl R.[ refl ]⋆[ _ ] R.reind-filler (sym $ F-seq _ _) _) R.[ _ ]∙[ _ ] R.reind-filler (sym $ F-seq _ _) _ reindex .Categoryᴰ.isSetHomᴰ = isSetHomᴰ module _ {ℓ* : Level} (Cᴰ : Categoryᴰ (TerminalCategory {ℓ*}) ℓCᴰ ℓ'Cᴰ) where open Categoryᴰ Cᴰ open Category hiding (_∘_) DispOverTerminal→Category : Category ℓCᴰ ℓ'Cᴰ DispOverTerminal→Category .ob = ob[ tt* ] DispOverTerminal→Category .Hom[_,_] = Hom[ refl ][_,_] DispOverTerminal→Category .id = idᴰ DispOverTerminal→Category ._⋆_ = _⋆ᴰ_ DispOverTerminal→Category .⋆IdL = ⋆IdLᴰ DispOverTerminal→Category .⋆IdR = ⋆IdRᴰ DispOverTerminal→Category .⋆Assoc = ⋆Assocᴰ DispOverTerminal→Category .isSetHom = isSetHomᴰ module _ (C : Category ℓC ℓ'C) where open Categoryᴰ open Category C hiding (_∘_) Category→DispOverTerminal : {ℓ* : Level} → Categoryᴰ (TerminalCategory {ℓ*}) ℓC ℓ'C Category→DispOverTerminal .ob[_] _ = ob Category→DispOverTerminal .Hom[_][_,_] _ = Hom[_,_] Category→DispOverTerminal .idᴰ = id Category→DispOverTerminal ._⋆ᴰ_ = _⋆_ Category→DispOverTerminal .⋆IdLᴰ = ⋆IdL Category→DispOverTerminal .⋆IdRᴰ = ⋆IdR Category→DispOverTerminal .⋆Assocᴰ = ⋆Assoc Category→DispOverTerminal .isSetHomᴰ = isSetHom module _ {C : Category ℓC ℓ'C} (Cᴰ : Categoryᴰ C ℓCᴰ ℓ'Cᴰ) where open Category C open Categoryᴰ Cᴰ VerticalCategory : ob → Category ℓCᴰ ℓ'Cᴰ VerticalCategory c = DispOverTerminal→Category (reindex Cᴰ (FunctorFromTerminal {ℓ* = ℓ-zero} c))