{-# OPTIONS --without-K --safe #-}
module Categories.Diagram.Cocone.Properties where
open import Level
open import Categories.Category
open import Categories.Functor
open import Categories.Functor.Properties
open import Categories.NaturalTransformation
open import Categories.Diagram.Cone.Properties using (F-map-Coneʳ; F-map-Cone⇒ʳ; nat-map-Cone; nat-map-Cone⇒)
open import Categories.Diagram.Duality
open import Categories.Category.Construction.Cocones using (Cocones)
import Categories.Diagram.Cocone as Coc
import Categories.Morphism.Reasoning as MR
private
variable
o ℓ e : Level
C D J J′ : Category o ℓ e
module _ {F : Functor J C} (G : Functor C D) where
private
module C = Category C
module D = Category D
module F = Functor F
module G = Functor G
module CF = Coc F
GF = G ∘F F
module CGF = Coc GF
F-map-Coconeˡ : CF.Cocone → CGF.Cocone
F-map-Coconeˡ K = record
{ coapex = record
{ ψ = λ X → G.F₁ (ψ X)
; commute = λ f → [ G ]-resp-∘ (commute f)
}
}
where open CF.Cocone K
F-map-Cocone⇒ˡ : ∀ {K K′} (f : CF.Cocone⇒ K K′) → CGF.Cocone⇒ (F-map-Coconeˡ K) (F-map-Coconeˡ K′)
F-map-Cocone⇒ˡ f = record
{ arr = G.F₁ arr
; commute = [ G ]-resp-∘ commute
}
where open CF.Cocone⇒ f
mapˡ : Functor (Cocones F) (Cocones (G ∘F F))
mapˡ = record
{ F₀ = F-map-Coconeˡ
; F₁ = F-map-Cocone⇒ˡ
; identity = G.identity
; homomorphism = G.homomorphism
; F-resp-≈ = G.F-resp-≈
}
module _ {F : Functor J C} (G : Functor J′ J) where
private
module C = Category C
module J′ = Category J′
module F = Functor F
module G = Functor G
module CF = Coc F
FG = F ∘F G
module CFG = Coc FG
F-map-Coconeʳ : CF.Cocone → CFG.Cocone
F-map-Coconeʳ K = coCone⇒Cocone C (F-map-Coneʳ G.op (Cocone⇒coCone C K))
F-map-Cocone⇒ʳ : ∀ {K K′} (f : CF.Cocone⇒ K K′) → CFG.Cocone⇒ (F-map-Coconeʳ K) (F-map-Coconeʳ K′)
F-map-Cocone⇒ʳ f = coCone⇒⇒Cocone⇒ C (F-map-Cone⇒ʳ G.op (Cocone⇒⇒coCone⇒ C f))
mapʳ : Functor (Cocones F) (Cocones (F ∘F G))
mapʳ = record
{ F₀ = F-map-Coconeʳ
; F₁ = F-map-Cocone⇒ʳ
; identity = C.Equiv.refl
; homomorphism = C.Equiv.refl
; F-resp-≈ = λ f≈g → f≈g
}
module _ {F G : Functor J C} (α : NaturalTransformation F G) where
private
module C = Category C
module α = NaturalTransformation α
module CF = Coc F
module CG = Coc G
nat-map-Cocone : CG.Cocone → CF.Cocone
nat-map-Cocone K = coCone⇒Cocone C (nat-map-Cone α.op (Cocone⇒coCone C K))
nat-map-Cocone⇒ : ∀ {K K′} (f : CG.Cocone⇒ K K′) → CF.Cocone⇒ (nat-map-Cocone K) (nat-map-Cocone K′)
nat-map-Cocone⇒ f = coCone⇒⇒Cocone⇒ C (nat-map-Cone⇒ α.op (Cocone⇒⇒coCone⇒ C f))
nat-map : Functor (Cocones G) (Cocones F)
nat-map = record
{ F₀ = nat-map-Cocone
; F₁ = nat-map-Cocone⇒
; identity = C.Equiv.refl
; homomorphism = C.Equiv.refl
; F-resp-≈ = λ f≈g → f≈g
}