{-# OPTIONS --without-K --safe #-} open import Categories.Category module Categories.Object.Terminal.Limit {o ℓ e} (C : Category o ℓ e) where open import Categories.Category.Instance.Zero using (Zero) open import Categories.Diagram.Limit open import Categories.Functor.Core open import Categories.Object.Terminal C import Categories.Category.Construction.Cones as Co private module C = Category C open C module _ {o′ ℓ′ e′} {F : Functor (Zero {o′} {ℓ′} {e′}) C} where limit⇒⊤ : Limit F → Terminal limit⇒⊤ L = record { ⊤ = apex ; ⊤-is-terminal = record { ! = rep record { apex = record { ψ = λ () ; commute = λ { {()} } } } ; !-unique = λ f → terminal.!-unique record { arr = f ; commute = λ { {()} } } } } where open Limit L module _ {o′ ℓ′ e′} {F : Functor (Zero {o′} {ℓ′} {e′}) C} where ⊤⇒limit : Terminal → Limit F ⊤⇒limit t = record { terminal = record { ⊤ = record { N = ⊤ ; apex = record { ψ = λ () ; commute = λ { {()} } } } ; ⊤-is-terminal = record { ! = λ {K} → let open Co.Cone F K in record { arr = ! ; commute = λ { {()} } } ; !-unique = λ f → let module f = Co.Cone⇒ F f in !-unique f.arr } } } where open Terminal t