module Cubical.Categories.Instances.Presheaf where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Isomorphism
open import Cubical.Data.Unit
open import Cubical.Categories.Category
open import Cubical.Categories.Presheaf.Base
open import Cubical.Categories.Presheaf.Morphism.Alt
open import Cubical.Categories.Presheaf.Constructions.Unit
open import Cubical.Categories.Presheaf.Constructions.BinProduct
open import Cubical.Categories.Presheaf.Representable.More
open import Cubical.Categories.Limits.Cartesian.Base
private
variable ℓC ℓC' ℓD ℓD' ℓE ℓE' : Level
variable ℓCᴰ ℓCᴰ' ℓDᴰ ℓDᴰ' ℓEᴰ ℓEᴰ' : Level
open Category
module _ (C : Category ℓC ℓC') (ℓP : Level) where
PRESHEAF : Category _ _
PRESHEAF .ob = Presheaf C ℓP
PRESHEAF .Hom[_,_] = PshHom
PRESHEAF .id = idPshHom
PRESHEAF ._⋆_ = _⋆PshHom_
PRESHEAF .⋆IdL = λ f → makePshHomPath refl
PRESHEAF .⋆IdR = λ f → makePshHomPath refl
PRESHEAF .⋆Assoc = ⋆PshHomAssoc
PRESHEAF .isSetHom = isSetPshHom _ _
open UniversalElementNotation
Cartesian-PRESHEAF : CartesianCategory _ _
Cartesian-PRESHEAF .CartesianCategory.C = PRESHEAF
Cartesian-PRESHEAF .CartesianCategory.term .vertex = Unit*Psh
Cartesian-PRESHEAF .CartesianCategory.term .element = tt
Cartesian-PRESHEAF .CartesianCategory.term .universal R =
isoToIsEquiv
(iso (λ _ → tt) (λ _ → Unit*Psh-intro) (λ _ → refl) λ _ → makePshHomPath refl)
Cartesian-PRESHEAF .CartesianCategory.bp (P , Q) .vertex = P ×Psh Q
Cartesian-PRESHEAF .CartesianCategory.bp (P , Q) .element =
(π₁ P Q) , (π₂ P Q)
Cartesian-PRESHEAF .CartesianCategory.bp (P , Q) .universal R =
isoToIsEquiv (×Psh-UMP P Q)