# Cones in precategories ```agda module category-theory.cones-precategories where ``` <details><summary>Imports</summary> ```agda open import category-theory.commuting-squares-of-morphisms-in-precategories open import category-theory.commuting-triangles-of-morphisms-in-precategories open import category-theory.constant-functors open import category-theory.functors-precategories open import category-theory.maps-precategories open import category-theory.natural-transformations-functors-precategories open import category-theory.precategories open import category-theory.precategory-of-functors open import category-theory.right-extensions-precategories open import category-theory.terminal-category open import foundation.action-on-identifications-functions open import foundation.contractible-types open import foundation.dependent-identifications open import foundation.dependent-pair-types open import foundation.equality-dependent-function-types open import foundation.equality-dependent-pair-types open import foundation.equivalences open import foundation.function-extensionality open import foundation.function-types open import foundation.functoriality-dependent-function-types open import foundation.functoriality-dependent-pair-types open import foundation.fundamental-theorem-of-identity-types open import foundation.homotopies open import foundation.homotopy-induction open import foundation.identity-types open import foundation.multivariable-homotopies open import foundation.propositions open import foundation.retractions open import foundation.sections open import foundation.sets open import foundation.structure-identity-principle open import foundation.torsorial-type-families open import foundation.unit-type open import foundation.universe-levels ``` </details> ## Idea A {{#concept "cone" Disambiguation="over a functor between precategories" Agda=cone-Precategory}} over a [functor](category-theory.functors-precategories.md) `F` between [precategories](category-theory.precategories.md) is a [natural transformation](category-theory.natural-transformations-functors-precategories.md) from a [constant functor](category-theory.constant-functors.md) to `F`. In this context, we usually think of (and refer to) the functor `F` as a **diagram** in its codomain, A cone over such diagram then corresponds to an element `d`, called the **vertex** of the cone, equipped with components `d → F x` satisfying the naturality condition. For example, if `F` corresponds to the diagram `F x → F y`, then a cone over `F` corresponds to a commuting triangle as below. ```text d / \ / \ ∨ ∨ Fx ----> Fy ``` Equivalently, we can see a cone over `F` as a [right extension](category-theory.right-extensions-precategories.md) of `F` along the terminal functor into the [terminal precategory](category-theory.terminal-category.md). ## Definitions ### The type of cones over a functor ```agda module _ {l1 l2 l3 l4 : Level} (C : Precategory l1 l2) (D : Precategory l3 l4) (F : functor-Precategory C D) where cone-Precategory : UU (l1 ⊔ l2 ⊔ l3 ⊔ l4) cone-Precategory = Σ ( obj-Precategory D) ( λ d → natural-transformation-Precategory C D ( constant-functor-Precategory C D d) ( F)) make-cone-Precategory : ( d : obj-Precategory D) ( α : ( x : obj-Precategory C) → ( hom-Precategory D d (obj-functor-Precategory C D F x))) → ( {x y : obj-Precategory C} (f : hom-Precategory C x y) → coherence-triangle-hom-Precategory D ( α x) ( α y) ( hom-functor-Precategory C D F f)) → cone-Precategory pr1 (make-cone-Precategory d α p) = d pr1 (pr2 (make-cone-Precategory d α p)) = α pr2 (pr2 (make-cone-Precategory d α p)) f = inv (p f) ∙ inv (right-unit-law-comp-hom-Precategory D _) vertex-cone-Precategory : cone-Precategory → obj-Precategory D vertex-cone-Precategory = pr1 vertex-functor-cone-Precategory : cone-Precategory → functor-Precategory C D vertex-functor-cone-Precategory α = constant-functor-Precategory C D (vertex-cone-Precategory α) natural-transformation-cone-Precategory : (α : cone-Precategory) → natural-transformation-Precategory C D ( vertex-functor-cone-Precategory α) ( F) natural-transformation-cone-Precategory = pr2 component-cone-Precategory : (α : cone-Precategory) (x : obj-Precategory C) → hom-Precategory D ( vertex-cone-Precategory α) ( obj-functor-Precategory C D F x) component-cone-Precategory α = hom-family-natural-transformation-Precategory C D ( vertex-functor-cone-Precategory α) ( F) ( natural-transformation-cone-Precategory α) naturality-cone-Precategory : (α : cone-Precategory) {x y : obj-Precategory C} (f : hom-Precategory C x y) → coherence-triangle-hom-Precategory D ( component-cone-Precategory α x) ( component-cone-Precategory α y) ( hom-functor-Precategory C D F f) naturality-cone-Precategory α {x} {y} f = inv (right-unit-law-comp-hom-Precategory D _) ∙ inv ( naturality-natural-transformation-Precategory C D ( vertex-functor-cone-Precategory α) ( F) ( natural-transformation-cone-Precategory α) ( f)) ``` ### Precomposing cones ```agda cone-map-Precategory : (τ : cone-Precategory) (d : obj-Precategory D) → (hom-Precategory D d (vertex-cone-Precategory τ)) → natural-transformation-Precategory C D ( constant-functor-Precategory C D d) ( F) pr1 (cone-map-Precategory τ d f) x = comp-hom-Precategory D (component-cone-Precategory τ x) f pr2 (cone-map-Precategory τ d f) h = inv (associative-comp-hom-Precategory D _ _ _) ∙ ap ( λ g → comp-hom-Precategory D g f) ( inv (naturality-cone-Precategory τ h)) ∙ inv (right-unit-law-comp-hom-Precategory D _) ``` ## Properties ### Characterization of equality of cones over functors between precategories ```agda coherence-htpy-cone-Precategory : (α β : cone-Precategory) → (p : vertex-cone-Precategory α = vertex-cone-Precategory β) → UU (l1 ⊔ l4) coherence-htpy-cone-Precategory α β p = (x : obj-Precategory C) → coherence-triangle-hom-Precategory D ( hom-eq-Precategory D ( vertex-cone-Precategory α) ( vertex-cone-Precategory β) ( p)) ( component-cone-Precategory α x) ( component-cone-Precategory β x) htpy-cone-Precategory : (α β : cone-Precategory) → UU (l1 ⊔ l3 ⊔ l4) htpy-cone-Precategory α β = Σ ( vertex-cone-Precategory α = vertex-cone-Precategory β) ( coherence-htpy-cone-Precategory α β) refl-htpy-cone-Precategory : (α : cone-Precategory) → htpy-cone-Precategory α α pr1 (refl-htpy-cone-Precategory α) = refl pr2 (refl-htpy-cone-Precategory α) x = inv (right-unit-law-comp-hom-Precategory D _) htpy-eq-cone-Precategory : (α β : cone-Precategory) → α = β → htpy-cone-Precategory α β htpy-eq-cone-Precategory α .α refl = refl-htpy-cone-Precategory α is-torsorial-htpy-cone-Precategory : (α : cone-Precategory) → is-torsorial (htpy-cone-Precategory α) is-torsorial-htpy-cone-Precategory α = is-torsorial-Eq-structure ( is-torsorial-Id (vertex-cone-Precategory α)) ( pair (vertex-cone-Precategory α) refl) ( is-contr-equiv ( Σ ( natural-transformation-Precategory C D ( constant-functor-Precategory C D (vertex-cone-Precategory α)) F) (λ τ → τ = (natural-transformation-cone-Precategory α))) ( equiv-tot ( λ τ → inv-equiv ( extensionality-natural-transformation-Precategory C D ( constant-functor-Precategory C D (vertex-cone-Precategory α)) ( F) _ _) ∘e equiv-Π-equiv-family ( λ x → equiv-inv (component-cone-Precategory α x) (pr1 τ x) ∘e equiv-concat' ( component-cone-Precategory α x) ( right-unit-law-comp-hom-Precategory D _)))) ( is-torsorial-Id' (natural-transformation-cone-Precategory α))) is-equiv-htpy-eq-cone-Precategory : (α β : cone-Precategory) → is-equiv (htpy-eq-cone-Precategory α β) is-equiv-htpy-eq-cone-Precategory α = fundamental-theorem-id ( is-torsorial-htpy-cone-Precategory α) ( htpy-eq-cone-Precategory α) equiv-htpy-eq-cone-Precategory : (α β : cone-Precategory) → (α = β) ≃ htpy-cone-Precategory α β pr1 (equiv-htpy-eq-cone-Precategory α β) = htpy-eq-cone-Precategory α β pr2 (equiv-htpy-eq-cone-Precategory α β) = is-equiv-htpy-eq-cone-Precategory α β eq-htpy-cone-Precategory : (α β : cone-Precategory) → htpy-cone-Precategory α β → α = β eq-htpy-cone-Precategory α β = map-inv-equiv (equiv-htpy-eq-cone-Precategory α β) ``` ### A cone is a right extension along the terminal map ```agda equiv-right-extension-cone-Precategory : cone-Precategory ≃ right-extension-Precategory C terminal-Precategory D (terminal-functor-Precategory C) F equiv-right-extension-cone-Precategory = equiv-Σ-equiv-base ( λ K → natural-transformation-Precategory C D ( comp-functor-Precategory C terminal-Precategory D ( K) ( terminal-functor-Precategory C)) ( F)) ( equiv-point-Precategory D) right-extension-cone-Precategory : cone-Precategory → right-extension-Precategory C terminal-Precategory D (terminal-functor-Precategory C) F right-extension-cone-Precategory = map-equiv equiv-right-extension-cone-Precategory cone-right-extension-Precategory : right-extension-Precategory C terminal-Precategory D (terminal-functor-Precategory C) F → cone-Precategory cone-right-extension-Precategory = map-inv-equiv equiv-right-extension-cone-Precategory vertex-right-extension-Precategory : right-extension-Precategory C terminal-Precategory D (terminal-functor-Precategory C) F → obj-Precategory D vertex-right-extension-Precategory R = vertex-cone-Precategory ( cone-right-extension-Precategory R) ```