Cones and cocones #
We define cone F, a cone over a functor F,
and F.cones : Cᵒᵖ ⥤ Type, the functor associating to X the cones over F with cone point X.
A cone c is defined by specifying its cone point c.X and a natural transformation c.π
from the constant c.X valued functor to F.
We provide c.w f : c.π.app j ≫ F.map f = c.π.app j' for any f : j ⟶ j'
as a wrapper for c.π.naturality f avoiding unneeded identity morphisms.
We define c.extend f, where c : cone F and f : Y ⟶ c.X for some other Y,
which replaces the cone point by Y and inserts f into each of the components of the cone.
Similarly we have c.whisker F producing a cone (E ⋙ F)
We define morphisms of cones, and the category of cones.
We define cone.postcompose α : cone F ⥤ cone G for α a natural transformation F ⟶ G.
And, of course, we dualise all this to cocones as well.
For more results about the category of cones, see cone_category.lean.
F.cones is the functor assigning to an object X the type of
natural transformations from the constant functor with value X to F.
An object representing this functor is a limit of F.
Equations
F.cocones is the functor assigning to an object X the type of
natural transformations from F to the constant functor with value X.
An object corepresenting this functor is a colimit of F.
Equations
Functorially associated to each functor J ⥤ C, we have the C-presheaf consisting of
cones with a given cone point.
Equations
- category_theory.cones J C = {obj := category_theory.functor.cones _inst_3, map := λ (F G : J ⥤ C) (f : F ⟶ G), category_theory.whisker_left (category_theory.functor.const J).op (category_theory.yoneda.map f), map_id' := _, map_comp' := _}
Contravariantly associated to each functor J ⥤ C, we have the C-copresheaf consisting of
cocones with a given cocone point.
Equations
- category_theory.cocones J C = {obj := λ (F : (J ⥤ C)ᵒᵖ), (opposite.unop F).cocones, map := λ (F G : (J ⥤ C)ᵒᵖ) (f : F ⟶ G), category_theory.whisker_left (category_theory.functor.const J) (category_theory.coyoneda.map f), map_id' := _, map_comp' := _}
- X : C
- π : (category_theory.functor.const J).obj self.X ⟶ F
A c : cone F is:
- an object
c.Xand - a natural transformation
c.π : c.X ⟶ Ffrom the constantc.Xfunctor toF.
cone F is equivalent, via cone.equiv below, to Σ X, F.cones.obj X.
Instances for category_theory.limits.cone
- category_theory.limits.cone.has_sizeof_inst
- category_theory.limits.inhabited_cone
- category_theory.limits.cone.category
Equations
- category_theory.limits.inhabited_cone F = {default := {X := F.obj {as := punit.star}, π := {app := λ (_x : category_theory.discrete punit), category_theory.limits.inhabited_cone._match_1 F _x, naturality' := _}}}
- category_theory.limits.inhabited_cone._match_1 F {as := punit.star} = 𝟙 (((category_theory.functor.const (category_theory.discrete punit)).obj (F.obj {as := punit.star})).obj {as := punit.star})
- X : C
- ι : F ⟶ (category_theory.functor.const J).obj self.X
A c : cocone F is
- an object
c.Xand - a natural transformation
c.ι : F ⟶ c.XfromFto the constantc.Xfunctor.
cocone F is equivalent, via cone.equiv below, to Σ X, F.cocones.obj X.
Instances for category_theory.limits.cocone
- category_theory.limits.cocone.has_sizeof_inst
- category_theory.limits.inhabited_cocone
- category_theory.limits.cocone.category
Equations
- category_theory.limits.inhabited_cocone F = {default := {X := F.obj {as := punit.star}, ι := {app := λ (_x : category_theory.discrete punit), category_theory.limits.inhabited_cocone._match_1 F _x, naturality' := _}}}
- category_theory.limits.inhabited_cocone._match_1 F {as := punit.star} = 𝟙 (F.obj {as := punit.star})
The isomorphism between a cone on F and an element of the functor F.cones.
Equations
- category_theory.limits.cone.equiv F = {hom := λ (c : category_theory.limits.cone F), ⟨opposite.op c.X, c.π⟩, inv := λ (c : Σ (X : Cᵒᵖ), F.cones.obj X), {X := opposite.unop c.fst, π := c.snd}, hom_inv_id' := _, inv_hom_id' := _}
A map to the vertex of a cone naturally induces a cone by composition.
Equations
- c.extensions = {app := λ (X : Cᵒᵖ) (f : (category_theory.yoneda.obj c.X ⋙ category_theory.ulift_functor).obj X), (category_theory.functor.const J).map f.down ≫ c.π, naturality' := _}
A map to the vertex of a cone induces a cone by composition.
Equations
- c.extend f = {X := X, π := c.extensions.app (opposite.op X) {down := f}}
Whisker a cone by precomposition of a functor.
Equations
- category_theory.limits.cone.whisker E c = {X := c.X, π := category_theory.whisker_left E c.π}
The isomorphism between a cocone on F and an element of the functor F.cocones.
Equations
- category_theory.limits.cocone.equiv F = {hom := λ (c : category_theory.limits.cocone F), ⟨c.X, c.ι⟩, inv := λ (c : Σ (X : C), F.cocones.obj X), {X := c.fst, ι := c.snd}, hom_inv_id' := _, inv_hom_id' := _}
A map from the vertex of a cocone naturally induces a cocone by composition.
Equations
- c.extensions = {app := λ (X : C) (f : (category_theory.coyoneda.obj (opposite.op c.X) ⋙ category_theory.ulift_functor).obj X), c.ι ≫ (category_theory.functor.const J).map f.down, naturality' := _}
A map from the vertex of a cocone induces a cocone by composition.
Whisker a cocone by precomposition of a functor. See whiskering for a functorial
version.
Equations
- category_theory.limits.cocone.whisker E c = {X := c.X, ι := category_theory.whisker_left E c.ι}
A cone morphism between two cones for the same diagram is a morphism of the cone points which commutes with the cone legs.
Instances for category_theory.limits.cone_morphism
- category_theory.limits.cone_morphism.has_sizeof_inst
- category_theory.limits.inhabited_cone_morphism
The category of cones on a given diagram.
Equations
- category_theory.limits.cone.category = {to_category_struct := {to_quiver := {hom := λ (A B : category_theory.limits.cone F), category_theory.limits.cone_morphism A B}, id := λ (B : category_theory.limits.cone F), {hom := 𝟙 B.X, w' := _}, comp := λ (X Y Z : category_theory.limits.cone F) (f : X ⟶ Y) (g : Y ⟶ Z), {hom := f.hom ≫ g.hom, w' := _}}, id_comp' := _, comp_id' := _, assoc' := _}
To give an isomorphism between cones, it suffices to give an isomorphism between their vertices which commutes with the cone maps.
Equations
- category_theory.limits.cones.ext φ w = {hom := {hom := φ.hom, w' := _}, inv := {hom := φ.inv, w' := _}, hom_inv_id' := _, inv_hom_id' := _}
Eta rule for cones.
Given a cone morphism whose object part is an isomorphism, produce an isomorphism of cones.
Functorially postcompose a cone for F by a natural transformation F ⟶ G to give a cone for G.
Postcomposing a cone by the composite natural transformation α ≫ β is the same as
postcomposing by α and then by β.
Equations
Postcomposing by the identity does not change the cone up to isomorphism.
Equations
- category_theory.limits.cones.postcompose_id = category_theory.nat_iso.of_components (λ (s : category_theory.limits.cone F), category_theory.limits.cones.ext (category_theory.iso.refl ((category_theory.limits.cones.postcompose (𝟙 F)).obj s).X) _) category_theory.limits.cones.postcompose_id._proof_2
If F and G are naturally isomorphic functors, then they have equivalent categories of
cones.
Equations
- category_theory.limits.cones.postcompose_equivalence α = {functor := category_theory.limits.cones.postcompose α.hom, inverse := category_theory.limits.cones.postcompose α.inv, unit_iso := category_theory.nat_iso.of_components (λ (s : category_theory.limits.cone F), category_theory.limits.cones.ext (category_theory.iso.refl ((𝟭 (category_theory.limits.cone F)).obj s).X) _) _, counit_iso := category_theory.nat_iso.of_components (λ (s : category_theory.limits.cone G), category_theory.limits.cones.ext (category_theory.iso.refl ((category_theory.limits.cones.postcompose α.inv ⋙ category_theory.limits.cones.postcompose α.hom).obj s).X) _) _, functor_unit_iso_comp' := _}
Whiskering on the left by E : K ⥤ J gives a functor from cone F to cone (E ⋙ F).
Equations
- category_theory.limits.cones.whiskering E = {obj := λ (c : category_theory.limits.cone F), category_theory.limits.cone.whisker E c, map := λ (c c' : category_theory.limits.cone F) (f : c ⟶ c'), {hom := f.hom, w' := _}, map_id' := _, map_comp' := _}
Whiskering by an equivalence gives an equivalence between categories of cones.
Equations
- category_theory.limits.cones.whiskering_equivalence e = {functor := category_theory.limits.cones.whiskering e.functor, inverse := category_theory.limits.cones.whiskering e.inverse ⋙ category_theory.limits.cones.postcompose (e.inv_fun_id_assoc F).hom, unit_iso := category_theory.nat_iso.of_components (λ (s : category_theory.limits.cone F), category_theory.limits.cones.ext (category_theory.iso.refl ((𝟭 (category_theory.limits.cone F)).obj s).X) _) _, counit_iso := category_theory.nat_iso.of_components (λ (s : category_theory.limits.cone (e.functor ⋙ F)), category_theory.limits.cones.ext (category_theory.iso.refl (((category_theory.limits.cones.whiskering e.inverse ⋙ category_theory.limits.cones.postcompose (e.inv_fun_id_assoc F).hom) ⋙ category_theory.limits.cones.whiskering e.functor).obj s).X) _) _, functor_unit_iso_comp' := _}
The categories of cones over F and G are equivalent if F and G are naturally isomorphic
(possibly after changing the indexing category by an equivalence).
Forget the cone structure and obtain just the cone point.
Equations
- category_theory.limits.cones.forget F = {obj := λ (t : category_theory.limits.cone F), t.X, map := λ (s t : category_theory.limits.cone F) (f : s ⟶ t), f.hom, map_id' := _, map_comp' := _}
A functor G : C ⥤ D sends cones over F to cones over F ⋙ G functorially.
Equations
Instances for category_theory.limits.cones.functoriality
Equations
- category_theory.limits.cones.functoriality_full F G = {preimage := λ (X Y : category_theory.limits.cone F) (t : (category_theory.limits.cones.functoriality F G).obj X ⟶ (category_theory.limits.cones.functoriality F G).obj Y), {hom := G.preimage t.hom, w' := _}, witness' := _}
If e : C ≌ D is an equivalence of categories, then functoriality F e.functor induces an
equivalence between cones over F and cones over F ⋙ e.functor.
Equations
- category_theory.limits.cones.functoriality_equivalence F e = let f : (F ⋙ e.functor) ⋙ e.inverse ≅ F := F.associator e.functor e.inverse ≪≫ category_theory.iso_whisker_left F e.unit_iso.symm ≪≫ F.right_unitor in {functor := category_theory.limits.cones.functoriality F e.functor, inverse := category_theory.limits.cones.functoriality (F ⋙ e.functor) e.inverse ⋙ (category_theory.limits.cones.postcompose_equivalence f).functor, unit_iso := category_theory.nat_iso.of_components (λ (c : category_theory.limits.cone F), category_theory.limits.cones.ext (e.unit_iso.app ((𝟭 (category_theory.limits.cone F)).obj c).X) _) _, counit_iso := category_theory.nat_iso.of_components (λ (c : category_theory.limits.cone (F ⋙ e.functor)), category_theory.limits.cones.ext (e.counit_iso.app c.X) _) _, functor_unit_iso_comp' := _}
If F reflects isomorphisms, then cones.functoriality F reflects isomorphisms
as well.
A cocone morphism between two cocones for the same diagram is a morphism of the cocone points which commutes with the cocone legs.
Instances for category_theory.limits.cocone_morphism
- category_theory.limits.cocone_morphism.has_sizeof_inst
- category_theory.limits.inhabited_cocone_morphism
Equations
- category_theory.limits.cocone.category = {to_category_struct := {to_quiver := {hom := λ (A B : category_theory.limits.cocone F), category_theory.limits.cocone_morphism A B}, id := λ (B : category_theory.limits.cocone F), {hom := 𝟙 B.X, w' := _}, comp := λ (_x _x_1 _x_2 : category_theory.limits.cocone F) (f : _x ⟶ _x_1) (g : _x_1 ⟶ _x_2), {hom := f.hom ≫ g.hom, w' := _}}, id_comp' := _, comp_id' := _, assoc' := _}
To give an isomorphism between cocones, it suffices to give an isomorphism between their vertices which commutes with the cocone maps.
Equations
- category_theory.limits.cocones.ext φ w = {hom := {hom := φ.hom, w' := w}, inv := {hom := φ.inv, w' := _}, hom_inv_id' := _, inv_hom_id' := _}
Eta rule for cocones.
Given a cocone morphism whose object part is an isomorphism, produce an isomorphism of cocones.
Functorially precompose a cocone for F by a natural transformation G ⟶ F to give a cocone
for G.
Precomposing a cocone by the composite natural transformation α ≫ β is the same as
precomposing by β and then by α.
Precomposing by the identity does not change the cocone up to isomorphism.
Equations
- category_theory.limits.cocones.precompose_id = category_theory.nat_iso.of_components (λ (s : category_theory.limits.cocone F), category_theory.limits.cocones.ext (category_theory.iso.refl ((category_theory.limits.cocones.precompose (𝟙 F)).obj s).X) _) category_theory.limits.cocones.precompose_id._proof_2
If F and G are naturally isomorphic functors, then they have equivalent categories of
cocones.
Equations
- category_theory.limits.cocones.precompose_equivalence α = {functor := category_theory.limits.cocones.precompose α.hom, inverse := category_theory.limits.cocones.precompose α.inv, unit_iso := category_theory.nat_iso.of_components (λ (s : category_theory.limits.cocone F), category_theory.limits.cocones.ext (category_theory.iso.refl ((𝟭 (category_theory.limits.cocone F)).obj s).X) _) _, counit_iso := category_theory.nat_iso.of_components (λ (s : category_theory.limits.cocone G), category_theory.limits.cocones.ext (category_theory.iso.refl ((category_theory.limits.cocones.precompose α.inv ⋙ category_theory.limits.cocones.precompose α.hom).obj s).X) _) _, functor_unit_iso_comp' := _}
Whiskering on the left by E : K ⥤ J gives a functor from cocone F to cocone (E ⋙ F).
Equations
- category_theory.limits.cocones.whiskering E = {obj := λ (c : category_theory.limits.cocone F), category_theory.limits.cocone.whisker E c, map := λ (c c' : category_theory.limits.cocone F) (f : c ⟶ c'), {hom := f.hom, w' := _}, map_id' := _, map_comp' := _}
Whiskering by an equivalence gives an equivalence between categories of cones.
Equations
- category_theory.limits.cocones.whiskering_equivalence e = {functor := category_theory.limits.cocones.whiskering e.functor, inverse := category_theory.limits.cocones.whiskering e.inverse ⋙ category_theory.limits.cocones.precompose (F.left_unitor.inv ≫ category_theory.whisker_right e.counit_iso.inv F ≫ (e.inverse.associator e.functor F).inv), unit_iso := category_theory.nat_iso.of_components (λ (s : category_theory.limits.cocone F), category_theory.limits.cocones.ext (category_theory.iso.refl ((𝟭 (category_theory.limits.cocone F)).obj s).X) _) _, counit_iso := category_theory.nat_iso.of_components (λ (s : category_theory.limits.cocone (e.functor ⋙ F)), category_theory.limits.cocones.ext (category_theory.iso.refl (((category_theory.limits.cocones.whiskering e.inverse ⋙ category_theory.limits.cocones.precompose (F.left_unitor.inv ≫ category_theory.whisker_right e.counit_iso.inv F ≫ (e.inverse.associator e.functor F).inv)) ⋙ category_theory.limits.cocones.whiskering e.functor).obj s).X) _) _, functor_unit_iso_comp' := _}
The categories of cocones over F and G are equivalent if F and G are naturally isomorphic
(possibly after changing the indexing category by an equivalence).
Forget the cocone structure and obtain just the cocone point.
Equations
- category_theory.limits.cocones.forget F = {obj := λ (t : category_theory.limits.cocone F), t.X, map := λ (s t : category_theory.limits.cocone F) (f : s ⟶ t), f.hom, map_id' := _, map_comp' := _}
A functor G : C ⥤ D sends cocones over F to cocones over F ⋙ G functorially.
Equations
- category_theory.limits.cocones.functoriality F G = {obj := λ (A : category_theory.limits.cocone F), {X := G.obj A.X, ι := {app := λ (j : J), G.map (A.ι.app j), naturality' := _}}, map := λ (_x _x_1 : category_theory.limits.cocone F) (f : _x ⟶ _x_1), {hom := G.map f.hom, w' := _}, map_id' := _, map_comp' := _}
Instances for category_theory.limits.cocones.functoriality
Equations
- category_theory.limits.cocones.functoriality_full F G = {preimage := λ (X Y : category_theory.limits.cocone F) (t : (category_theory.limits.cocones.functoriality F G).obj X ⟶ (category_theory.limits.cocones.functoriality F G).obj Y), {hom := G.preimage t.hom, w' := _}, witness' := _}
If e : C ≌ D is an equivalence of categories, then functoriality F e.functor induces an
equivalence between cocones over F and cocones over F ⋙ e.functor.
Equations
- category_theory.limits.cocones.functoriality_equivalence F e = let f : (F ⋙ e.functor) ⋙ e.inverse ≅ F := F.associator e.functor e.inverse ≪≫ category_theory.iso_whisker_left F e.unit_iso.symm ≪≫ F.right_unitor in {functor := category_theory.limits.cocones.functoriality F e.functor, inverse := category_theory.limits.cocones.functoriality (F ⋙ e.functor) e.inverse ⋙ (category_theory.limits.cocones.precompose_equivalence f.symm).functor, unit_iso := category_theory.nat_iso.of_components (λ (c : category_theory.limits.cocone F), category_theory.limits.cocones.ext (e.unit_iso.app ((𝟭 (category_theory.limits.cocone F)).obj c).X) _) _, counit_iso := category_theory.nat_iso.of_components (λ (c : category_theory.limits.cocone (F ⋙ e.functor)), category_theory.limits.cocones.ext (e.counit_iso.app c.X) _) _, functor_unit_iso_comp' := _}
If F reflects isomorphisms, then cocones.functoriality F reflects isomorphisms
as well.
The image of a cone in C under a functor G : C ⥤ D is a cone in D.
Equations
- H.map_cone c = (category_theory.limits.cones.functoriality F H).obj c
The image of a cocone in C under a functor G : C ⥤ D is a cocone in D.
Equations
- H.map_cocone c = (category_theory.limits.cocones.functoriality F H).obj c
Given a cone morphism c ⟶ c', construct a cone morphism on the mapped cones functorially.
Equations
Given a cocone morphism c ⟶ c', construct a cocone morphism on the mapped cocones
functorially.
Equations
If H is an equivalence, we invert H.map_cone and get a cone for F from a cone
for F ⋙ H.
Equations
map_cone is the left inverse to map_cone_inv.
Equations
map_cone is the right inverse to map_cone_inv.
Equations
If H is an equivalence, we invert H.map_cone and get a cone for F from a cone
for F ⋙ H.
Equations
map_cocone is the left inverse to map_cocone_inv.
map_cocone is the right inverse to map_cocone_inv.
Equations
functoriality F _ ⋙ postcompose (whisker_left F _) simplifies to functoriality F _.
Equations
For F : J ⥤ C, given a cone c : cone F, and a natural isomorphism α : H ≅ H' for functors
H H' : C ⥤ D, the postcomposition of the cone H.map_cone using the isomorphism α is
isomorphic to the cone H'.map_cone.
map_cone commutes with postcompose. In particular, for F : J ⥤ C, given a cone c : cone F, a
natural transformation α : F ⟶ G and a functor H : C ⥤ D, we have two obvious ways of producing
a cone over G ⋙ H, and they are both isomorphic.
Equations
map_cone commutes with postcompose_equivalence
functoriality F _ ⋙ precompose (whisker_left F _) simplifies to functoriality F _.
Equations
For F : J ⥤ C, given a cocone c : cocone F, and a natural isomorphism α : H ≅ H' for functors
H H' : C ⥤ D, the precomposition of the cocone H.map_cocone using the isomorphism α is
isomorphic to the cocone H'.map_cocone.
map_cocone commutes with precompose. In particular, for F : J ⥤ C, given a cocone
c : cocone F, a natural transformation α : F ⟶ G and a functor H : C ⥤ D, we have two obvious
ways of producing a cocone over G ⋙ H, and they are both isomorphic.
Equations
map_cocone commutes with precompose_equivalence
map_cone commutes with whisker
Equations
map_cocone commutes with whisker
Equations
Change a cocone F into a cone F.op.
Equations
- c.op = {X := opposite.op c.X, π := category_theory.nat_trans.op c.ι}
Change a cone F into a cocone F.op.
Equations
- c.op = {X := opposite.op c.X, ι := category_theory.nat_trans.op c.π}
Change a cocone F.op into a cone F.
Equations
- c.unop = {X := opposite.unop c.X, π := category_theory.nat_trans.remove_op c.ι}
Change a cone F.op into a cocone F.
Equations
- c.unop = {X := opposite.unop c.X, ι := category_theory.nat_trans.remove_op c.π}
The category of cocones on F
is equivalent to the opposite category of
the category of cones on the opposite of F.
Equations
- category_theory.limits.cocone_equivalence_op_cone_op F = {functor := {obj := λ (c : category_theory.limits.cocone F), opposite.op c.op, map := λ (X Y : category_theory.limits.cocone F) (f : X ⟶ Y), quiver.hom.op {hom := f.hom.op, w' := _}, map_id' := _, map_comp' := _}, inverse := {obj := λ (c : (category_theory.limits.cone F.op)ᵒᵖ), (opposite.unop c).unop, map := λ (X Y : (category_theory.limits.cone F.op)ᵒᵖ) (f : X ⟶ Y), {hom := f.unop.hom.unop, w' := _}, map_id' := _, map_comp' := _}, unit_iso := category_theory.nat_iso.of_components (λ (c : category_theory.limits.cocone F), category_theory.limits.cocones.ext (category_theory.iso.refl ((𝟭 (category_theory.limits.cocone F)).obj c).X) _) _, counit_iso := category_theory.nat_iso.of_components (λ (c : (category_theory.limits.cone F.op)ᵒᵖ), opposite.rec (λ (c : category_theory.limits.cone F.op), id (category_theory.limits.cones.ext (category_theory.iso.refl c.X) _).op) c) _, functor_unit_iso_comp' := _}
Change a cocone on F.left_op : Jᵒᵖ ⥤ C to a cocone on F : J ⥤ Cᵒᵖ.
Equations
Change a cone on F : J ⥤ Cᵒᵖ to a cocone on F.left_op : Jᵒᵖ ⥤ C.
Equations
Change a cone on F.left_op : Jᵒᵖ ⥤ C to a cocone on F : J ⥤ Cᵒᵖ.
Equations
Change a cocone on F : J ⥤ Cᵒᵖ to a cone on F.left_op : Jᵒᵖ ⥤ C.
Equations
Change a cocone on F.right_op : J ⥤ Cᵒᵖ to a cone on F : Jᵒᵖ ⥤ C.
Equations
Change a cone on F : Jᵒᵖ ⥤ C to a cocone on F.right_op : Jᵒᵖ ⥤ C.
Equations
Change a cone on F.right_op : J ⥤ Cᵒᵖ to a cocone on F : Jᵒᵖ ⥤ C.
Equations
Change a cocone on F : Jᵒᵖ ⥤ C to a cone on F.right_op : J ⥤ Cᵒᵖ.
Equations
Change a cocone on F.unop : J ⥤ C into a cone on F : Jᵒᵖ ⥤ Cᵒᵖ.
Equations
Change a cone on F : Jᵒᵖ ⥤ Cᵒᵖ into a cocone on F.unop : J ⥤ C.
Equations
Change a cone on F.unop : J ⥤ C into a cocone on F : Jᵒᵖ ⥤ Cᵒᵖ.
Equations
Change a cocone on F : Jᵒᵖ ⥤ Cᵒᵖ into a cone on F.unop : J ⥤ C.
Equations
The opposite cocone of the image of a cone is the image of the opposite cocone.
Equations
The opposite cone of the image of a cocone is the image of the opposite cone.