{-# OPTIONS --without-K --safe #-} module Categories.Diagram.Cone.Properties where open import Level open import Categories.Category open import Categories.Functor open import Categories.Functor.Properties open import Categories.NaturalTransformation import Categories.Diagram.Cone as Con import Categories.Morphism.Reasoning as MR open import Categories.Category.Construction.Cones using (Cones) 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 = Con F GF = G ∘F F module CGF = Con GF F-map-Coneˡ : CF.Cone → CGF.Cone F-map-Coneˡ K = record { apex = record { ψ = λ X → G.F₁ (ψ X) ; commute = λ f → [ G ]-resp-∘ (commute f) } } where open CF.Cone K F-map-Cone⇒ˡ : ∀ {K K′} (f : CF.Cone⇒ K K′) → CGF.Cone⇒ (F-map-Coneˡ K) (F-map-Coneˡ K′) F-map-Cone⇒ˡ f = record { arr = G.F₁ arr ; commute = [ G ]-resp-∘ commute } where open CF.Cone⇒ f mapˡ : Functor (Cones F) (Cones (G ∘F F)) mapˡ = record { F₀ = F-map-Coneˡ ; F₁ = F-map-Cone⇒ˡ ; 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 = Con F FG = F ∘F G module CFG = Con FG F-map-Coneʳ : CF.Cone → CFG.Cone F-map-Coneʳ K = record { apex = record { ψ = λ j → ψ (G.F₀ j) ; commute = λ f → commute (G.F₁ f) } } where open CF.Cone K F-map-Cone⇒ʳ : ∀ {K K′} (f : CF.Cone⇒ K K′) → CFG.Cone⇒ (F-map-Coneʳ K) (F-map-Coneʳ K′) F-map-Cone⇒ʳ f = record { arr = arr ; commute = commute } where open CF.Cone⇒ f mapʳ : Functor (Cones F) (Cones (F ∘F G)) mapʳ = record { F₀ = F-map-Coneʳ ; F₁ = F-map-Cone⇒ʳ ; 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 J = Category J module F = Functor F module G = Functor G module α = NaturalTransformation α module CF = Con F module CG = Con G open C open HomReasoning open MR C nat-map-Cone : CF.Cone → CG.Cone nat-map-Cone K = record { apex = record { ψ = λ j → α.η j C.∘ ψ j ; commute = λ {X Y} f → begin G.F₁ f ∘ α.η X ∘ ψ X ≈˘⟨ pushˡ (α.commute f) ⟩ (α.η Y ∘ F.F₁ f) ∘ ψ X ≈⟨ pullʳ (commute f) ⟩ α.η Y ∘ ψ Y ∎ } } where open CF.Cone K nat-map-Cone⇒ : ∀ {K K′} (f : CF.Cone⇒ K K′) → CG.Cone⇒ (nat-map-Cone K) (nat-map-Cone K′) nat-map-Cone⇒ {K} {K′} f = record { arr = arr ; commute = pullʳ commute } where open CF.Cone⇒ f nat-map : Functor (Cones F) (Cones G) nat-map = record { F₀ = nat-map-Cone ; F₁ = nat-map-Cone⇒ ; identity = C.Equiv.refl ; homomorphism = C.Equiv.refl ; F-resp-≈ = λ f≈g → f≈g }