{-# OPTIONS --lossy-unification #-}
module Cubical.Categories.Displayed.Presheaf.Uncurried.Base where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Function
open import Cubical.Foundations.HLevels
open import Cubical.Foundations.Structure
open import Cubical.Foundations.More hiding (_≡[_]_; rectify)
open import Cubical.Foundations.HLevels.More
open import Cubical.Data.Unit
open import Cubical.Data.Sigma
import Cubical.Data.Equality as Eq
open import Cubical.Categories.Category.Base
open import Cubical.Categories.Functor.Base
open import Cubical.Categories.NaturalTransformation
open import Cubical.Categories.Constructions.Fiber
open import Cubical.Categories.Constructions.TotalCategory
open import Cubical.Categories.Instances.Sets
open import Cubical.Categories.Presheaf.Base
open import Cubical.Categories.Presheaf.Constructions
open import Cubical.Categories.Presheaf.Morphism.Alt
open import Cubical.Categories.Presheaf.Representable hiding (Elements)
open import Cubical.Categories.Presheaf.Representable.More
open import Cubical.Categories.Presheaf.More
open import Cubical.Categories.Displayed.Base
open import Cubical.Categories.Displayed.Functor
open import Cubical.Categories.Displayed.Functor.More
open import Cubical.Categories.Displayed.BinProduct
open import Cubical.Categories.Displayed.Instances.Functor.Base
open import Cubical.Categories.Displayed.Instances.Sets.Base
open import Cubical.Categories.Displayed.Constructions.BinProduct.More
open import Cubical.Categories.Displayed.Constructions.Graph.Presheaf
private
variable
ℓ ℓ' ℓᴰ ℓᴰ' : Level
ℓA ℓB ℓAᴰ ℓBᴰ : Level
ℓC ℓC' ℓCᴰ ℓCᴰ' : Level
ℓD ℓD' ℓDᴰ ℓDᴰ' : Level
ℓE ℓE' ℓEᴰ ℓEᴰ' : Level
ℓP ℓQ ℓR ℓPᴰ ℓPᴰ' ℓQᴰ ℓQᴰ' ℓRᴰ : Level
open Category
open Functor
open Functorᴰ
open NatTrans
open PshHom
open PshIso
_/_ : {C : Category ℓC ℓC'} (Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ') (P : Presheaf C ℓP) → Category _ _
Cᴰ / P = ∫C (Cᴰ ×ᴰ Element P)
module _ {C : Category ℓC ℓC'}{D : Category ℓD ℓD'}
{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}{Dᴰ : Categoryᴰ D ℓDᴰ ℓDᴰ'}
{P : Presheaf C ℓP}{Q : Presheaf D ℓQ}
{F : Functor C D}
where
_/Fᴰ_ : (Fᴰ : Functorᴰ F Cᴰ Dᴰ) → (α : PshHet F P Q) → Functor (Cᴰ / P) (Dᴰ / Q)
Fᴰ /Fᴰ α = ∫F {F = F} (Fᴰ ×ᴰF PshHet→ElementFunctorᴰ α)
module _ {C : Category ℓC ℓC'}{D : Category ℓD ℓD'}{E : Category ℓE ℓE'}
{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}{Dᴰ : Categoryᴰ D ℓDᴰ ℓDᴰ'}{Eᴰ : Categoryᴰ E ℓEᴰ ℓEᴰ'}
{P : Presheaf C ℓP}{Q : Presheaf D ℓQ}{R : Presheaf E ℓR}
{F : Functor C D}{G : Functor D E}
(Fᴰ : Functorᴰ F Cᴰ Dᴰ)
(α : PshHet F P Q)
(Gᴰ : Functorᴰ G Dᴰ Eᴰ)
(β : PshHet G Q R)
where
/Fᴰ-seq : (Gᴰ /Fᴰ β) ∘F (Fᴰ /Fᴰ α) ≡ ((Gᴰ ∘Fᴰ Fᴰ) /Fᴰ (α ⋆PshHet β))
/Fᴰ-seq = Functor≡ (λ _ → refl) (λ (f , fᴰ , f⋆p≡p') →
ΣPathP (refl , (ΣPathPProp (λ _ → PresheafNotation.isSetPsh R _ _) refl)) )
module _ {C : Category ℓC ℓC'}{D : Category ℓD ℓD'}
{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}{Dᴰ : Categoryᴰ D ℓDᴰ ℓDᴰ'}
{F : Functor C D}
where
_/FᴰYo_ : (Fᴰ : Functorᴰ F Cᴰ Dᴰ) (x : C .ob) → Functor (Cᴰ / (C [-, x ])) (Dᴰ / (D [-, F ⟅ x ⟆ ]))
Fᴰ /FᴰYo x = Fᴰ /Fᴰ Functor→PshHet F x
module _ {C : Category ℓC ℓC'}
{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}{Dᴰ : Categoryᴰ C ℓDᴰ ℓDᴰ'}
{P : Presheaf C ℓP}{Q : Presheaf C ℓQ}
where
_/Fⱽ_ : (Fᴰ : Functorⱽ Cᴰ Dᴰ) (α : PshHom P Q) → Functor (Cᴰ / P) (Dᴰ / Q)
Fᴰ /Fⱽ α = Fᴰ /Fᴰ (α ⋆PshHom reindPshId≅ Q .trans)
module _ {C : Category ℓC ℓC'}
{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{P : Presheaf C ℓP}
where
/FⱽId : Idᴰ {Cᴰ = Cᴰ} /Fⱽ idPshHom {P = P} ≡ Id
/FⱽId = Functor≡ (λ _ → refl) (λ f → ΣPathP (refl , (ΣPathPProp (λ _ → PresheafNotation.isSetPsh P _ _) refl)))
Presheafᴰ : {C : Category ℓC ℓC'} (P : Presheaf C ℓP) (Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ')
→ (ℓPᴰ : Level)
→ Type (ℓ-max (ℓ-max (ℓ-max (ℓ-max (ℓ-max ℓC ℓC') ℓP) ℓCᴰ) ℓCᴰ') (ℓ-suc ℓPᴰ))
Presheafᴰ {ℓP = ℓP} P Cᴰ ℓPᴰ = Presheaf (Cᴰ / P) ℓPᴰ
PresheafᴰCategory : {C : Category ℓC ℓC'} (P : Presheaf C ℓP) (Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ') → (ℓPᴰ : Level)
→ Category _ _
PresheafᴰCategory P Cᴰ ℓPᴰ = PresheafCategory (Cᴰ / P) ℓPᴰ
Presheafⱽ : {C : Category ℓC ℓC'} (x : C .ob)(Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ')
→ (ℓPᴰ : Level)
→ Type _
Presheafⱽ {C = C} x = Presheafᴰ (C [-, x ])
module PresheafᴰNotation {C : Category ℓC ℓC'}
(Cᴰ : Categoryᴰ C ℓD ℓD')
(P : Presheaf C ℓP)
(Pᴰ : Presheafᴰ P Cᴰ ℓPᴰ) where
private
module C = Category C
module Cᴰ = Fibers Cᴰ
module P = PresheafNotation P
infixr 9 _⋆ᴰ_
p[_][_] : ∀ {x} → P.p[ x ] → Cᴰ.ob[ x ] → Type ℓPᴰ
p[ p ][ xᴰ ] = ⟨ Pᴰ .F-ob (_ , xᴰ , p) ⟩
isSetPshᴰ : ∀ {x}{p : P.p[ x ]}{xᴰ} → isSet p[ p ][ xᴰ ]
isSetPshᴰ = Pᴰ .F-ob _ .snd
module pReasoning {x}{xᴰ : Cᴰ.ob[ x ]} = hSetReasoning (P .F-ob x) p[_][ xᴰ ]
open pReasoning renaming (_P≡[_]_ to _≡[_]_; Prectify to rectify) public
_⋆ᴰ_ : ∀ {x y xᴰ yᴰ}{f : C [ x , y ]}{p} (fᴰ : Cᴰ [ f ][ xᴰ , yᴰ ]) (pᴰ : p[ p ][ yᴰ ])
→ p[ f P.⋆ p ][ xᴰ ]
fᴰ ⋆ᴰ pᴰ = Pᴰ .F-hom (_ , fᴰ , refl) pᴰ
opaque
⋆ᴰ-reindᴰ : ∀ {x y xᴰ yᴰ}{f : C [ x , y ]}{p q}(fᴰ : Cᴰ [ f ][ xᴰ , yᴰ ]) (f⋆p≡q : f P.⋆ p ≡ q) (pᴰ : p[ p ][ yᴰ ])
→ PathP (λ i → ⟨ Pᴰ .F-ob (x , xᴰ , f⋆p≡q i ) ⟩)
(fᴰ ⋆ᴰ pᴰ)
(Pᴰ .F-hom (f , fᴰ , f⋆p≡q) pᴰ)
⋆ᴰ-reindᴰ {x}{y}{xᴰ}{yᴰ} {f = f}{p}{q} fᴰ f⋆p≡q pᴰ i = Pᴰ .F-hom (f , fᴰ , λ j → f⋆p≡q (i ∧ j)) pᴰ
⋆ᴰ-reind : ∀ {x y xᴰ yᴰ}{f : C [ x , y ]}{p q}(fᴰ : Cᴰ [ f ][ xᴰ , yᴰ ]) (f⋆p≡q : f P.⋆ p ≡ q) (pᴰ : p[ p ][ yᴰ ])
→ Pᴰ .F-hom (f , fᴰ , f⋆p≡q) pᴰ ∫≡ (fᴰ ⋆ᴰ pᴰ)
⋆ᴰ-reind fᴰ f⋆p≡q pᴰ =
sym $ ≡in $ ⋆ᴰ-reindᴰ fᴰ f⋆p≡q pᴰ
⋆IdLᴰ : ∀ {x}{xᴰ}{p : P.p[ x ]}(pᴰ : p[ p ][ xᴰ ])
→ (Pᴰ .F-hom (C.id , Cᴰ.idᴰ , refl {x = C.id P.⋆ p}) pᴰ) ∫≡ pᴰ
⋆IdLᴰ {x}{xᴰ}{p} pᴰ =
(sym $ ⋆ᴰ-reind Cᴰ.idᴰ _ pᴰ)
∙ (≡in $ funExt⁻ (Pᴰ .F-id) pᴰ)
⋆Assocᴰ : ∀ {x y z}{xᴰ yᴰ zᴰ}{f : C [ z , y ]}{g : C [ y , x ]}{p : P.p[ x ]}
(fᴰ : Cᴰ [ f ][ zᴰ , yᴰ ])
(gᴰ : Cᴰ [ g ][ yᴰ , xᴰ ])
(pᴰ : p[ p ][ xᴰ ])
→ ((fᴰ Cᴰ.⋆ᴰ gᴰ) ⋆ᴰ pᴰ) ∫≡ (fᴰ ⋆ᴰ gᴰ ⋆ᴰ pᴰ)
⋆Assocᴰ {x} {y} {z} {xᴰ} {yᴰ} {zᴰ} {f} {g} {p} fᴰ gᴰ pᴰ =
(sym $ ⋆ᴰ-reind (fᴰ Cᴰ.⋆ᴰ gᴰ) _ pᴰ)
∙ ≡in (funExt⁻ (Pᴰ .F-seq (g , gᴰ , refl) (f , fᴰ , refl)) pᴰ)
∫ : Presheaf (∫C Cᴰ) (ℓ-max ℓP ℓPᴰ)
∫ .F-ob (x , xᴰ) .fst = Σ[ p ∈ _ ] p[ p ][ xᴰ ]
∫ .F-ob (x , xᴰ) .snd = isSetΣ P.isSetPsh (λ _ → isSetPshᴰ)
∫ .F-hom (f , fᴰ) (p , pᴰ) = (f P.⋆ p) , (fᴰ ⋆ᴰ pᴰ)
∫ .F-id = funExt λ _ → ⋆IdLᴰ _
∫ .F-seq _ _ = funExt λ _ → ⋆Assocᴰ _ _ _
open PresheafNotation ∫ public
module _ {C : Category ℓC ℓC'} {Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{P : Presheaf C ℓP}
(Pᴰ : Presheafᴰ P Cᴰ ℓPᴰ)
(Qᴰ : Presheafᴰ P Cᴰ ℓQᴰ) where
PshHomⱽ : Type _
PshHomⱽ = PshHom Pᴰ Qᴰ
PshIsoⱽ : Type _
PshIsoⱽ = PshIso Pᴰ Qᴰ
module _
{C : Category ℓC ℓC'}{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{P : Presheaf C ℓP}{Q : Presheaf C ℓQ} (α : PshHom P Q) (Qᴰ : Presheafᴰ Q Cᴰ ℓQᴰ) where
reindPshᴰNatTrans : Presheafᴰ P Cᴰ ℓQᴰ
reindPshᴰNatTrans = reindPsh (Idᴰ /Fⱽ α) Qᴰ
module _
{C : Category ℓC ℓC'}{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{P : Presheaf C ℓP}{Q : Presheaf C ℓQ}{R : Presheaf C ℓR}
(α : PshHom P Q)(β : PshHom Q R) (Rᴰ : Presheafᴰ R Cᴰ ℓRᴰ) where
private
module Rᴰ = PresheafᴰNotation Cᴰ R Rᴰ
reindPshᴰNatTrans-seq : PshIso (reindPshᴰNatTrans (α ⋆PshHom β) Rᴰ) (reindPshᴰNatTrans α $ reindPshᴰNatTrans β Rᴰ)
reindPshᴰNatTrans-seq = pathToPshIso (Functor≡ (λ _ → refl) (λ _ → funExt (λ _ → Rᴰ.rectify $ Rᴰ.≡out
$ Rᴰ.⋆ᴰ-reind _ _ _ ∙ (sym $ Rᴰ.⋆ᴰ-reind _ _ _))))
module _
{C : Category ℓC ℓC'}{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{P : Presheaf C ℓP} (α : PshHom P P) (Pᴰ : Presheafᴰ P Cᴰ ℓPᴰ) where
private
module Pᴰ = PresheafᴰNotation Cᴰ P Pᴰ
reindPshᴰNatTrans-id : PshIso (reindPshᴰNatTrans idPshHom Pᴰ) Pᴰ
reindPshᴰNatTrans-id = pathToPshIso (Functor≡ (λ _ → refl) (λ _ → funExt λ _ → Pᴰ.rectify $ Pᴰ.≡out $
Pᴰ.⋆ᴰ-reind _ _ _ ∙ (sym $ Pᴰ.⋆ᴰ-reind _ _ _)))
module _
{C : Category ℓC ℓC'}{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{P : Presheaf C ℓP} {Q : Presheaf C ℓQ} (α β : PshHom P Q) (α≡β : α ≡ β) (Qᴰ : Presheafᴰ Q Cᴰ ℓQᴰ) where
private
module Q = PresheafNotation Q
module Qᴰ = PresheafᴰNotation Cᴰ Q Qᴰ
reindPshᴰNatTrans-Path : PshIso (reindPshᴰNatTrans α Qᴰ) (reindPshᴰNatTrans β Qᴰ)
reindPshᴰNatTrans-Path = reindNatIsoPsh (pathToNatIso (cong₂ _/Fⱽ_ refl α≡β)) Qᴰ
module _
{C : Category ℓC ℓC'}{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{D : Category ℓD ℓD'}{Dᴰ : Categoryᴰ D ℓDᴰ ℓDᴰ'}
{F : Functor C D}
{P : Presheaf D ℓP}
(Fᴰ : Functorᴰ F Cᴰ Dᴰ) (Pᴰ : Presheafᴰ P Dᴰ ℓPᴰ)
where
reindPshᴰFunctor : Presheafᴰ (reindPsh F P) Cᴰ ℓPᴰ
reindPshᴰFunctor = reindPsh (Fᴰ /Fᴰ idPshHom) Pᴰ
module _ {C : Category ℓC ℓC'} {Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{P : Presheaf C ℓP}
{Q : Presheaf C ℓQ}
(α : PshHom P Q)
(Pᴰ : Presheafᴰ P Cᴰ ℓPᴰ)
(Qᴰ : Presheafᴰ Q Cᴰ ℓQᴰ) where
PshHomᴰ : Type _
PshHomᴰ = PshHomⱽ Pᴰ (reindPshᴰNatTrans α Qᴰ)
module _ {C : Category ℓC ℓC'} {Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{P : Presheaf C ℓP}
(Pᴰ : Presheafᴰ P Cᴰ ℓPᴰ)
(Qᴰ : Presheafᴰ P Cᴰ ℓQᴰ) where
isPshIsoⱽ : PshHomⱽ Pᴰ Qᴰ → Type _
isPshIsoⱽ = isPshIso
module _ {C : Category ℓC ℓC'} {Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{P : Presheaf C ℓP}
{Pᴰ : Presheafᴰ P Cᴰ ℓPᴰ}
where
idPshIsoⱽ : PshIsoⱽ Pᴰ Pᴰ
idPshIsoⱽ = idPshIso
idPshHomⱽ : PshHomⱽ Pᴰ Pᴰ
idPshHomⱽ = idPshHom
module _ {C : Category ℓC ℓC'}{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{P : Presheaf C ℓP}
{Pᴰ : Presheafᴰ P Cᴰ ℓPᴰ}{Qᴰ : Presheafᴰ P Cᴰ ℓQᴰ}
where
invPshIsoⱽ : PshIsoⱽ Pᴰ Qᴰ → PshIsoⱽ Qᴰ Pᴰ
invPshIsoⱽ = invPshIso
module _ {C : Category ℓC ℓC'}{Cᴰ : Categoryᴰ C ℓCᴰ ℓCᴰ'}
{P : Presheaf C ℓP}
{Pᴰ : Presheafᴰ P Cᴰ ℓPᴰ}{Qᴰ : Presheafᴰ P Cᴰ ℓQᴰ}{Rᴰ : Presheafᴰ P Cᴰ ℓRᴰ}
where
_⋆PshHomⱽ_ : (αᴰ : PshHomⱽ Pᴰ Qᴰ)(βᴰ : PshHomⱽ Qᴰ Rᴰ) → PshHomⱽ Pᴰ Rᴰ
_⋆PshHomⱽ_ = _⋆PshHom_
_⋆PshIsoⱽ_ : (αᴰ : PshIsoⱽ Pᴰ Qᴰ)(βᴰ : PshIsoⱽ Qᴰ Rᴰ) → PshIsoⱽ Pᴰ Rᴰ
_⋆PshIsoⱽ_ = _⋆PshIso_
infixr 9 _⋆PshHomⱽ_
infixr 9 _⋆PshIsoⱽ_