{-# OPTIONS --without-K --safe #-}
open import Categories.Category using (Category; _[_,_]; _[_≈_])
module Categories.Yoneda.Continuous {o ℓ e} (C : Category o ℓ e) where
open import Function.Bundles using (Func; _⟨$⟩_)
open import Relation.Binary using (Setoid)
open import Categories.Category.Construction.Cones using (Cones; Cone; Cone⇒)
open import Categories.Category.Construction.Presheaves using (Presheaves)
open import Categories.Diagram.Cone.Properties using (F-map-Coneˡ)
open import Categories.Diagram.Limit using (Limit)
open import Categories.Functor using (Functor; _∘F_)
open import Categories.Functor.Limits using (Continuous)
open import Categories.Functor.Hom using (module Hom)
open import Categories.Functor.Hom.Properties C using (hom-resp-limit)
open import Categories.NaturalTransformation using (NaturalTransformation; ntHelper)
open import Categories.Yoneda using (module Yoneda)
import Categories.Morphism.Reasoning as MR
open Hom C
open Yoneda C using (embed)
private
module C = Category C
module _ {o′ ℓ′ e′} {J : Category o′ ℓ′ e′} {F : Functor J C} (L : Limit F) where
private
module J = Category J
module F = Functor F
module L = Limit L
open C.HomReasoning
open MR C
yF = embed ∘F F
⊤ : Cone yF
⊤ = F-map-Coneˡ embed L.limit
HomL : ∀ X → Limit (Hom[ X ,-] ∘F F)
HomL X = hom-resp-limit X L
module HomL X = Limit (HomL X)
module _ {K : Cone yF} where
private
module K where
open Cone _ K public
module N = Functor N
module ψ j = NaturalTransformation (ψ j)
KHF : ∀ X → Cone (Hom[ X ,-] ∘F F)
KHF X = record
{ N = K.N.₀ X
; apex = record
{ ψ = λ j → K.ψ.η j X
; commute = λ f → C.∘-resp-≈ʳ C.identityʳ ○ K.commute f
}
}
! : Cones yF [ K , ⊤ ]
! = record
{ arr = ntHelper record
{ η = λ X → Cone⇒.arr (HomL.terminal.! X {KHF X})
; commute = λ {X Y} f {x} → L.terminal.!-unique record
{ arr = C.id C.∘ L.rep _ C.∘ f
; commute = λ {j} → begin
L.proj j C.∘ C.id C.∘ L.rep _ C.∘ f ≈⟨ refl⟩∘⟨ C.identityˡ ⟩
L.proj j C.∘ L.rep _ C.∘ f ≈⟨ pullˡ L.commute ⟩
(K.ψ.η j X ⟨$⟩ x) C.∘ f ≈˘⟨ C.identityˡ ⟩
C.id C.∘ (K.ψ.η j X ⟨$⟩ x) C.∘ f ≈˘⟨ K.ψ.commute j f ⟩
K.ψ.η j Y ⟨$⟩ (K.N.₁ f ⟨$⟩ x) ∎
}
}
; commute = L.commute
}
module _ (f : Cones yF [ K , ⊤ ]) where
private
module f where
open Cone⇒ _ f public
module arr = NaturalTransformation arr
!-unique : Cones yF [ ! ≈ f ]
!-unique {X} {x} = L.terminal.!-unique record
{ arr = f.arr.η X ⟨$⟩ x
; commute = f.commute
}
embed-resp-limit : Limit yF
embed-resp-limit = record
{ terminal = record
{ ⊤ = ⊤
; ⊤-is-terminal = record
{ ! = !
; !-unique = !-unique
}
}
}
embed-Continous : ∀ o′ ℓ′ e′ → Continuous o′ ℓ′ e′ embed
embed-Continous _ _ _ L = terminal.⊤-is-terminal
where open Limit (embed-resp-limit L)