{-# OPTIONS --safe --lossy-unification #-}
module Cubical.Categories.FunctorComprehension where
open import Cubical.Foundations.Prelude
open import Cubical.Foundations.Function
open import Cubical.Data.Sigma
open import Cubical.Categories.Category
open import Cubical.Categories.Functor
open import Cubical.Categories.NaturalTransformation
open import Cubical.Categories.Presheaf.Representable
open import Cubical.Categories.Presheaf.More
open import Cubical.Categories.Profunctor.General
private
variable
ℓC ℓC' ℓD ℓD' ℓS ℓR : Level
open Category
open Functor
open NatTrans
open UniversalElement
open UniversalElementNotation
module _ {C : Category ℓC ℓC'}{D : Category ℓD ℓD'}
(P : Profunctor C D ℓS)
(ues : UniversalElements P)
where
private
module C = Category C
FunctorComprehension : Functor C D
FunctorComprehension .F-ob x = ues x .vertex
FunctorComprehension .F-hom {x}{y} f =
intro (ues y) ((P ⟪ f ⟫) .N-ob _ (ues x .element))
FunctorComprehension .F-id {x} =
(λ i → intro (ues x) (P .F-id i .N-ob _ (ues x .element)))
∙ (sym $ weak-η (ues x))
FunctorComprehension .F-seq {x}{y}{z} f g =
((λ i → intro (ues z) (P .F-seq f g i .N-ob _ (ues x .element))))
∙ (cong (intro (ues z)) $
((λ i → P .F-hom g .N-ob _
(β (ues y) {p = P .F-hom f .N-ob _ (ues x .element)} (~ i))))
∙ funExt⁻ (P .F-hom g .N-hom _) _)
∙ (sym $ intro-natural (ues z))