Documentation

Mathlib.CategoryTheory.Limits.Cones

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.pt and a natural transformation c.π from the constant c.pt 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.pt 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.

def CategoryTheory.Functor.cones {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) :
Functor Cᵒᵖ (Type (max u₁ v₃))

If F : J ⥤ C then F.cones is the functor assigning to an object X : C 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
@[simp]
theorem CategoryTheory.Functor.cones_map_app {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) {X✝ Y✝ : Cᵒᵖ} (f : X✝ Y✝) (a✝ : (yoneda.obj F).obj ((const J).op.obj X✝)) (X : J) :
(F.cones.map f a✝).app X = CategoryStruct.comp f.unop (a✝.app X)
@[simp]
def CategoryTheory.Functor.cocones {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) :
Functor C (Type (max u₁ v₃))

If F : J ⥤ C then F.cocones is the functor assigning to an object (X : C) 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
@[simp]
theorem CategoryTheory.Functor.cocones_obj {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) (X : C) :
F.cocones.obj X = (F (const J).obj X)
@[simp]
theorem CategoryTheory.Functor.cocones_map_app {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) {X✝ Y✝ : C} (f : X✝ Y✝) (a✝ : (coyoneda.obj (Opposite.op F)).obj ((const J).obj X✝)) (X : J) :
(F.cocones.map f a✝).app X = CategoryStruct.comp (a✝.app X) f
def CategoryTheory.cones (J : Type u₁) [Category.{v₁, u₁} J] (C : Type u₃) [Category.{v₃, u₃} C] :
Functor (Functor J C) (Functor Cᵒᵖ (Type (max u₁ v₃)))

Functorially associated to each functor J ⥤ C, we have the C-presheaf consisting of cones with a given cone point.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.cones_map_app_app (J : Type u₁) [Category.{v₁, u₁} J] (C : Type u₃) [Category.{v₃, u₃} C] {X✝ Y✝ : Functor J C} (f : X✝ Y✝) (X : Cᵒᵖ) (a✝ : (yoneda.obj X✝).obj ((Functor.const J).op.obj X)) (X✝¹ : J) :
(((cones J C).map f).app X a✝).app X✝¹ = CategoryStruct.comp (a✝.app X✝¹) (f.app X✝¹)
@[simp]
theorem CategoryTheory.cones_obj_obj (J : Type u₁) [Category.{v₁, u₁} J] (C : Type u₃) [Category.{v₃, u₃} C] (F : Functor J C) (X : Cᵒᵖ) :
((cones J C).obj F).obj X = ((Functor.const J).obj (Opposite.unop X) F)
@[simp]
theorem CategoryTheory.cones_obj_map_app (J : Type u₁) [Category.{v₁, u₁} J] (C : Type u₃) [Category.{v₃, u₃} C] (F : Functor J C) {X✝ Y✝ : Cᵒᵖ} (f : X✝ Y✝) (a✝ : (yoneda.obj F).obj ((Functor.const J).op.obj X✝)) (X : J) :
(((cones J C).obj F).map f a✝).app X = CategoryStruct.comp f.unop (a✝.app X)
def CategoryTheory.cocones (J : Type u₁) [Category.{v₁, u₁} J] (C : Type u₃) [Category.{v₃, u₃} C] :
Functor (Functor J C)ᵒᵖ (Functor C (Type (max u₁ v₃)))

Contravariantly associated to each functor J ⥤ C, we have the C-copresheaf consisting of cocones with a given cocone point.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.cocones_obj_map_app (J : Type u₁) [Category.{v₁, u₁} J] (C : Type u₃) [Category.{v₃, u₃} C] (F : (Functor J C)ᵒᵖ) {X✝ Y✝ : C} (f : X✝ Y✝) (a✝ : (coyoneda.obj (Opposite.op (Opposite.unop F))).obj ((Functor.const J).obj X✝)) (X : J) :
(((cocones J C).obj F).map f a✝).app X = CategoryStruct.comp (a✝.app X) f
@[simp]
theorem CategoryTheory.cocones_obj_obj (J : Type u₁) [Category.{v₁, u₁} J] (C : Type u₃) [Category.{v₃, u₃} C] (F : (Functor J C)ᵒᵖ) (X : C) :
@[simp]
theorem CategoryTheory.cocones_map_app_app (J : Type u₁) [Category.{v₁, u₁} J] (C : Type u₃) [Category.{v₃, u₃} C] {X✝ Y✝ : (Functor J C)ᵒᵖ} (f : X✝ Y✝) (X : C) (a✝ : (coyoneda.obj (Opposite.op (Opposite.unop X✝))).obj ((Functor.const J).obj X)) (X✝¹ : J) :
(((cocones J C).map f).app X a✝).app X✝¹ = CategoryStruct.comp (f.unop.app X✝¹) (a✝.app X✝¹)
structure CategoryTheory.Limits.Cone {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) :
Type (max (max u₁ u₃) v₃)

A c : Cone F is:

  • an object c.pt and
  • a natural transformation c.π : c.pt ⟶ F from the constant c.pt functor to F.

Example: if J is a category coming from a poset then the data required to make a term of type Cone F is morphisms πⱼ : c.pt ⟶ F j for all j : J and, for all i ≤ j in J, morphisms πᵢⱼ : F i ⟶ F j such that πᵢ ≫ πᵢⱼ = πᵢ.

Cone F is equivalent, via cone.equiv below, to Σ X, F.cones.obj X.

  • pt : C

    An object of C

  • π : (Functor.const J).obj self.pt F

    A natural transformation from the constant functor at X to F

Instances For
Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Limits.Cone.w {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (c : Cone F) {j j' : J} (f : j j') :
CategoryStruct.comp (c.π.app j) (F.map f) = c.π.app j'
@[simp]
theorem CategoryTheory.Limits.Cone.w_assoc {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (c : Cone F) {j j' : J} (f : j j') {Z : C} (h : F.obj j' Z) :
structure CategoryTheory.Limits.Cocone {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) :
Type (max (max u₁ u₃) v₃)

A c : Cocone F is

  • an object c.pt and
  • a natural transformation c.ι : F ⟶ c.pt from F to the constant c.pt functor.

For example, if the source J of F is a partially ordered set, then to give c : Cocone F is to give a collection of morphisms ιⱼ : F j ⟶ c.pt and, for all j ≤ k in J, morphisms ιⱼₖ : F j ⟶ F k such that Fⱼₖ ≫ Fₖ = Fⱼ for all j ≤ k.

Cocone F is equivalent, via Cone.equiv below, to Σ X, F.cocones.obj X.

  • pt : C

    An object of C

  • ι : F (Functor.const J).obj self.pt

    A natural transformation from F to the constant functor at pt

Instances For
Equations
  • One or more equations did not get rendered due to their size.
theorem CategoryTheory.Limits.Cocone.w {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (c : Cocone F) {j j' : J} (f : j j') :
CategoryStruct.comp (F.map f) (c.ι.app j') = c.ι.app j
theorem CategoryTheory.Limits.Cocone.w_assoc {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (c : Cocone F) {j j' : J} (f : j j') {Z : C} (h : ((Functor.const J).obj c.pt).obj j' Z) :

The isomorphism between a cone on F and an element of the functor F.cones.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Limits.Cone.equiv_inv_pt {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) (c : (X : Cᵒᵖ) × F.cones.obj X) :
@[simp]
theorem CategoryTheory.Limits.Cone.equiv_hom_snd {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) (c : Cone F) :
((equiv F).hom c).snd = c.π
@[simp]
theorem CategoryTheory.Limits.Cone.equiv_inv_π {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) (c : (X : Cᵒᵖ) × F.cones.obj X) :
((equiv F).inv c).π = c.snd

A map to the vertex of a cone naturally induces a cone by composition.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Limits.Cone.extend {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (c : Cone F) {X : C} (f : X c.pt) :

A map to the vertex of a cone induces a cone by composition.

Equations
@[simp]
theorem CategoryTheory.Limits.Cone.extend_π {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (c : Cone F) {X : C} (f : X c.pt) :
(c.extend f).π = c.extensions.app (Opposite.op X) { down := f }
@[simp]
theorem CategoryTheory.Limits.Cone.extend_pt {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (c : Cone F) {X : C} (f : X c.pt) :
(c.extend f).pt = X
def CategoryTheory.Limits.Cone.whisker {J : Type u₁} [Category.{v₁, u₁} J] {K : Type u₂} [Category.{v₂, u₂} K] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (E : Functor K J) (c : Cone F) :
Cone (E.comp F)

Whisker a cone by precomposition of a functor.

Equations
@[simp]
theorem CategoryTheory.Limits.Cone.whisker_π {J : Type u₁} [Category.{v₁, u₁} J] {K : Type u₂} [Category.{v₂, u₂} K] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (E : Functor K J) (c : Cone F) :
@[simp]
theorem CategoryTheory.Limits.Cone.whisker_pt {J : Type u₁} [Category.{v₁, u₁} J] {K : Type u₂} [Category.{v₂, u₂} K] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (E : Functor K J) (c : Cone F) :
(whisker E c).pt = c.pt

The isomorphism between a cocone on F and an element of the functor F.cocones.

Equations
  • One or more equations did not get rendered due to their size.

A map from the vertex of a cocone naturally induces a cocone by composition.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Limits.Cocone.extend {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (c : Cocone F) {Y : C} (f : c.pt Y) :

A map from the vertex of a cocone induces a cocone by composition.

Equations
@[simp]
theorem CategoryTheory.Limits.Cocone.extend_pt {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (c : Cocone F) {Y : C} (f : c.pt Y) :
(c.extend f).pt = Y
@[simp]
theorem CategoryTheory.Limits.Cocone.extend_ι {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (c : Cocone F) {Y : C} (f : c.pt Y) :
(c.extend f).ι = c.extensions.app Y { down := f }
def CategoryTheory.Limits.Cocone.whisker {J : Type u₁} [Category.{v₁, u₁} J] {K : Type u₂} [Category.{v₂, u₂} K] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (E : Functor K J) (c : Cocone F) :
Cocone (E.comp F)

Whisker a cocone by precomposition of a functor. See whiskering for a functorial version.

Equations
@[simp]
theorem CategoryTheory.Limits.Cocone.whisker_pt {J : Type u₁} [Category.{v₁, u₁} J] {K : Type u₂} [Category.{v₂, u₂} K] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (E : Functor K J) (c : Cocone F) :
(whisker E c).pt = c.pt
@[simp]
theorem CategoryTheory.Limits.Cocone.whisker_ι {J : Type u₁} [Category.{v₁, u₁} J] {K : Type u₂} [Category.{v₂, u₂} K] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (E : Functor K J) (c : Cocone F) :
structure CategoryTheory.Limits.ConeMorphism {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (A B : Cone F) :
Type v₃

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
@[simp]
theorem CategoryTheory.Limits.ConeMorphism.w_assoc {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {A B : Cone F} (self : ConeMorphism A B) (j : J) {Z : C} (h : F.obj j Z) :
@[simp]
theorem CategoryTheory.Limits.Cone.category_comp_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {X✝ Y✝ Z✝ : Cone F} (f : X✝ Y✝) (g : Y✝ Z✝) :
theorem CategoryTheory.Limits.ConeMorphism.ext {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {c c' : Cone F} (f g : c c') (w : f.hom = g.hom) :
f = g
def CategoryTheory.Limits.Cones.ext {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {c c' : Cone F} (φ : c.pt c'.pt) (w : ∀ (j : J), c.π.app j = CategoryStruct.comp φ.hom (c'.π.app j) := by aesop_cat) :
c c'

To give an isomorphism between cones, it suffices to give an isomorphism between their vertices which commutes with the cone maps.

Equations
@[simp]
theorem CategoryTheory.Limits.Cones.ext_inv_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {c c' : Cone F} (φ : c.pt c'.pt) (w : ∀ (j : J), c.π.app j = CategoryStruct.comp φ.hom (c'.π.app j) := by aesop_cat) :
(ext φ w).inv.hom = φ.inv
@[simp]
theorem CategoryTheory.Limits.Cones.ext_hom_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {c c' : Cone F} (φ : c.pt c'.pt) (w : ∀ (j : J), c.π.app j = CategoryStruct.comp φ.hom (c'.π.app j) := by aesop_cat) :
(ext φ w).hom.hom = φ.hom
theorem CategoryTheory.Limits.Cones.cone_iso_of_hom_iso {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {K : Functor J C} {c d : Cone K} (f : c d) [i : IsIso f.hom] :

Given a cone morphism whose object part is an isomorphism, produce an isomorphism of cones.

def CategoryTheory.Limits.Cones.extend {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cone F) {X : C} (f : X s.pt) :
s.extend f s

There is a morphism from an extended cone to the original cone.

Equations
Instances For
@[simp]
theorem CategoryTheory.Limits.Cones.extend_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cone F) {X : C} (f : X s.pt) :
(extend s f).hom = f
def CategoryTheory.Limits.Cones.extendComp {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cone F) {X Y : C} (f : X Y) (g : Y s.pt) :

Extending a cone by a composition is the same as extending the cone twice.

Equations
@[simp]
theorem CategoryTheory.Limits.Cones.extendComp_inv_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cone F) {X Y : C} (f : X Y) (g : Y s.pt) :
@[simp]
theorem CategoryTheory.Limits.Cones.extendComp_hom_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cone F) {X Y : C} (f : X Y) (g : Y s.pt) :
def CategoryTheory.Limits.Cones.extendIso {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cone F) {X : C} (f : X s.pt) :
s.extend f.hom s

A cone extended by an isomorphism is isomorphic to the original cone.

Equations
@[simp]
theorem CategoryTheory.Limits.Cones.extendIso_inv_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cone F) {X : C} (f : X s.pt) :
@[simp]
theorem CategoryTheory.Limits.Cones.extendIso_hom_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cone F) {X : C} (f : X s.pt) :
instance CategoryTheory.Limits.Cones.instIsIsoConeExtend {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {s : Cone F} {X : C} (f : X s.pt) [IsIso f] :

Functorially postcompose a cone for F by a natural transformation F ⟶ G to give a cone for G.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Limits.Cones.postcompose_obj_pt {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor J C} (α : F G) (c : Cone F) :
((postcompose α).obj c).pt = c.pt
@[simp]
theorem CategoryTheory.Limits.Cones.postcompose_map_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor J C} (α : F G) {X✝ Y✝ : Cone F} (f : X✝ Y✝) :
((postcompose α).map f).hom = f.hom
@[simp]

Postcomposing a cone by the composite natural transformation α ≫ β is the same as postcomposing by α and then by β.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Limits.Cones.postcomposeComp_hom_app_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F G H : Functor J C} (α : F G) (β : G H) (X : Cone F) :
@[simp]
theorem CategoryTheory.Limits.Cones.postcomposeComp_inv_app_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F G H : Functor J C} (α : F G) (β : G H) (X : Cone F) :

Postcomposing by the identity does not change the cone up to isomorphism.

Equations
  • One or more equations did not get rendered due to their size.

If F and G are naturally isomorphic functors, then they have equivalent categories of cones.

Equations
  • One or more equations did not get rendered due to their size.

Whiskering on the left by E : K ⥤ J gives a functor from Cone F to Cone (E ⋙ F).

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Limits.Cones.whiskering_map_hom {J : Type u₁} [Category.{v₁, u₁} J] {K : Type u₂} [Category.{v₂, u₂} K] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (E : Functor K J) {X✝ Y✝ : Cone F} (f : X✝ Y✝) :
((whiskering E).map f).hom = f.hom
@[simp]

Whiskering by an equivalence gives an equivalence between categories of cones.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Limits.Cones.equivalenceOfReindexing {J : Type u₁} [Category.{v₁, u₁} J] {K : Type u₂} [Category.{v₂, u₂} K] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {G : Functor K C} (e : K J) (α : e.functor.comp F G) :

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).

Equations

Forget the cone structure and obtain just the cone point.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Limits.Cones.forget_map {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) {X✝ Y✝ : Cone F} (f : X✝ Y✝) :
(forget F).map f = f.hom
@[simp]
theorem CategoryTheory.Limits.Cones.forget_obj {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) (t : Cone F) :
(forget F).obj t = t.pt

A functor G : C ⥤ D sends cones over F to cones over F ⋙ G functorially.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
@[simp]
theorem CategoryTheory.Limits.Cones.functoriality_obj_π_app {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor J C) (G : Functor C D) (A : Cone F) (j : J) :
((functoriality F G).obj A).π.app j = G.map (A.π.app j)
@[simp]
theorem CategoryTheory.Limits.Cones.functoriality_map_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor J C) (G : Functor C D) {X✝ Y✝ : Cone F} (f : X✝ Y✝) :
((functoriality F G).map f).hom = G.map f.hom
@[simp]
theorem CategoryTheory.Limits.Cones.functoriality_obj_pt {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor J C) (G : Functor C D) (A : Cone F) :
((functoriality F G).obj A).pt = G.obj A.pt

Functoriality is functorial.

Equations
  • One or more equations did not get rendered due to their size.

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
  • One or more equations did not get rendered due to their size.

If F reflects isomorphisms, then Cones.functoriality F reflects isomorphisms as well.

structure CategoryTheory.Limits.CoconeMorphism {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (A B : Cocone F) :
Type v₃

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
@[simp]
theorem CategoryTheory.Limits.CoconeMorphism.w_assoc {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {A B : Cocone F} (self : CoconeMorphism A B) (j : J) {Z : C} (h : B.pt Z) :
@[simp]
theorem CategoryTheory.Limits.Cocone.category_comp_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {X✝ Y✝ Z✝ : Cocone F} (f : X✝ Y✝) (g : Y✝ Z✝) :
theorem CategoryTheory.Limits.CoconeMorphism.ext {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {c c' : Cocone F} (f g : c c') (w : f.hom = g.hom) :
f = g
def CategoryTheory.Limits.Cocones.ext {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {c c' : Cocone F} (φ : c.pt c'.pt) (w : ∀ (j : J), CategoryStruct.comp (c.ι.app j) φ.hom = c'.ι.app j := by aesop_cat) :
c c'

To give an isomorphism between cocones, it suffices to give an isomorphism between their vertices which commutes with the cocone maps.

Equations
@[simp]
theorem CategoryTheory.Limits.Cocones.ext_inv_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {c c' : Cocone F} (φ : c.pt c'.pt) (w : ∀ (j : J), CategoryStruct.comp (c.ι.app j) φ.hom = c'.ι.app j := by aesop_cat) :
(ext φ w).inv.hom = φ.inv
@[simp]
theorem CategoryTheory.Limits.Cocones.ext_hom_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {c c' : Cocone F} (φ : c.pt c'.pt) (w : ∀ (j : J), CategoryStruct.comp (c.ι.app j) φ.hom = c'.ι.app j := by aesop_cat) :
(ext φ w).hom.hom = φ.hom
theorem CategoryTheory.Limits.Cocones.cocone_iso_of_hom_iso {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {K : Functor J C} {c d : Cocone K} (f : c d) [i : IsIso f.hom] :

Given a cocone morphism whose object part is an isomorphism, produce an isomorphism of cocones.

def CategoryTheory.Limits.Cocones.extend {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cocone F) {X : C} (f : s.pt X) :
s s.extend f

There is a morphism from a cocone to its extension.

Equations
Instances For
@[simp]
theorem CategoryTheory.Limits.Cocones.extend_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cocone F) {X : C} (f : s.pt X) :
(extend s f).hom = f
def CategoryTheory.Limits.Cocones.extendComp {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cocone F) {X Y : C} (f : s.pt X) (g : X Y) :

Extending a cocone by a composition is the same as extending the cone twice.

Equations
@[simp]
theorem CategoryTheory.Limits.Cocones.extendComp_hom_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cocone F) {X Y : C} (f : s.pt X) (g : X Y) :
@[simp]
theorem CategoryTheory.Limits.Cocones.extendComp_inv_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cocone F) {X Y : C} (f : s.pt X) (g : X Y) :
def CategoryTheory.Limits.Cocones.extendIso {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cocone F) {X : C} (f : s.pt X) :
s s.extend f.hom

A cocone extended by an isomorphism is isomorphic to the original cone.

Equations
@[simp]
theorem CategoryTheory.Limits.Cocones.extendIso_hom_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cocone F) {X : C} (f : s.pt X) :
@[simp]
theorem CategoryTheory.Limits.Cocones.extendIso_inv_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (s : Cocone F) {X : C} (f : s.pt X) :
instance CategoryTheory.Limits.Cocones.instIsIsoCoconeExtend {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} {s : Cocone F} {X : C} (f : s.pt X) [IsIso f] :

Functorially precompose a cocone for F by a natural transformation G ⟶ F to give a cocone for G.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Limits.Cocones.precompose_obj_pt {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor J C} (α : G F) (c : Cocone F) :
((precompose α).obj c).pt = c.pt
@[simp]
theorem CategoryTheory.Limits.Cocones.precompose_map_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {F G : Functor J C} (α : G F) {X✝ Y✝ : Cocone F} (f : X✝ Y✝) :
((precompose α).map f).hom = f.hom
@[simp]

Precomposing a cocone by the composite natural transformation α ≫ β is the same as precomposing by β and then by α.

Equations
  • One or more equations did not get rendered due to their size.

Precomposing by the identity does not change the cocone up to isomorphism.

Equations
  • One or more equations did not get rendered due to their size.

If F and G are naturally isomorphic functors, then they have equivalent categories of cocones.

Equations
  • One or more equations did not get rendered due to their size.

Whiskering on the left by E : K ⥤ J gives a functor from Cocone F to Cocone (E ⋙ F).

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Limits.Cocones.whiskering_map_hom {J : Type u₁} [Category.{v₁, u₁} J] {K : Type u₂} [Category.{v₂, u₂} K] {C : Type u₃} [Category.{v₃, u₃} C] {F : Functor J C} (E : Functor K J) {X✝ Y✝ : Cocone F} (f : X✝ Y✝) :
((whiskering E).map f).hom = f.hom

Whiskering by an equivalence gives an equivalence between categories of cones.

Equations
  • One or more equations did not get rendered due to their size.

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).

Equations

Forget the cocone structure and obtain just the cocone point.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Limits.Cocones.forget_map {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] (F : Functor J C) {X✝ Y✝ : Cocone F} (f : X✝ Y✝) :
(forget F).map f = f.hom
@[simp]

A functor G : C ⥤ D sends cocones over F to cocones over F ⋙ G functorially.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
@[simp]
@[simp]
theorem CategoryTheory.Limits.Cocones.functoriality_obj_ι_app {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor J C) (G : Functor C D) (A : Cocone F) (j : J) :
((functoriality F G).obj A).ι.app j = G.map (A.ι.app j)
@[simp]
theorem CategoryTheory.Limits.Cocones.functoriality_map_hom {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (F : Functor J C) (G : Functor C D) {X✝ Y✝ : Cocone F} (f : X✝ Y✝) :
((functoriality F G).map f).hom = G.map f.hom

Functoriality is functorial.

Equations
  • One or more equations did not get rendered due to their size.

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
  • One or more equations did not get rendered due to their size.

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
@[simp]
theorem CategoryTheory.Functor.mapCone_π_app {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (H : Functor C D) {F : Functor J C} (c : Limits.Cone F) (j : J) :
(H.mapCone c).π.app j = H.map (c.π.app j)
@[simp]
theorem CategoryTheory.Functor.mapCone_pt {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (H : Functor C D) {F : Functor J C} (c : Limits.Cone F) :
(H.mapCone c).pt = H.obj c.pt
noncomputable def CategoryTheory.Functor.mapConeMapCone {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] {E : Type u₅} [Category.{v₅, u₅} E] {F : Functor J C} {H : Functor C D} {H' : Functor D E} (c : Limits.Cone F) :
H'.mapCone (H.mapCone c) (H.comp H').mapCone c

The construction mapCone respects functor composition.

Equations

The image of a cocone in C under a functor G : C ⥤ D is a cocone in D.

Equations
@[simp]
theorem CategoryTheory.Functor.mapCocone_pt {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (H : Functor C D) {F : Functor J C} (c : Limits.Cocone F) :
(H.mapCocone c).pt = H.obj c.pt
@[simp]
theorem CategoryTheory.Functor.mapCocone_ι_app {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (H : Functor C D) {F : Functor J C} (c : Limits.Cocone F) (j : J) :
(H.mapCocone c).ι.app j = H.map (c.ι.app j)
noncomputable def CategoryTheory.Functor.mapCoconeMapCocone {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] {E : Type u₅} [Category.{v₅, u₅} E] {F : Functor J C} {H : Functor C D} {H' : Functor D E} (c : Limits.Cocone F) :

The construction mapCocone respects functor composition.

Equations
def CategoryTheory.Functor.mapConeMorphism {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (H : Functor C D) {F : Functor J C} {c c' : Limits.Cone F} (f : c c') :

Given a cone morphism c ⟶ c', construct a cone morphism on the mapped cones functorially.

Equations
def CategoryTheory.Functor.mapCoconeMorphism {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (H : Functor C D) {F : Functor J C} {c c' : Limits.Cocone F} (f : c c') :

Given a cocone morphism c ⟶ c', construct a cocone morphism on the mapped cocones functorially.

Equations
noncomputable def CategoryTheory.Functor.mapConeInv {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (H : Functor C D) {F : Functor J C} [H.IsEquivalence] (c : Limits.Cone (F.comp H)) :

If H is an equivalence, we invert H.mapCone and get a cone for F from a cone for F ⋙ H.

Equations
noncomputable def CategoryTheory.Functor.mapCoconeInv {J : Type u₁} [Category.{v₁, u₁} J] {C : Type u₃} [Category.{v₃, u₃} C] {D : Type u₄} [Category.{v₄, u₄} D] (H : Functor C D) {F : Functor J C} [H.IsEquivalence] (c : Limits.Cocone (F.comp H)) :

If H is an equivalence, we invert H.mapCone and get a cone for F from a cone for F ⋙ H.

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.mapCone using the isomorphism α is isomorphic to the cone H'.mapCone.

Equations

mapCone 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

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.mapCocone using the isomorphism α is isomorphic to the cocone H'.mapCocone.

Equations

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

Change a Cocone F into a Cone F.op.

Equations

Change a Cone F into a Cocone F.op.

Equations
@[simp]
@[simp]

Change a Cocone F.op into a Cone F.

Equations

Change a Cone F.op into a Cocone F.

Equations

The category of cocones on F is equivalent to the opposite category of the category of cones on the opposite of F.

Equations
  • One or more equations did not get rendered due to their size.

Change a cocone on F.leftOp : Jᵒᵖ ⥤ C to a cocone on F : J ⥤ Cᵒᵖ.

Equations

Change a cone on F : J ⥤ Cᵒᵖ to a cocone on F.leftOp : Jᵒᵖ ⥤ C.

Equations

Change a cone on F.leftOp : Jᵒᵖ ⥤ C to a cocone on F : J ⥤ Cᵒᵖ.

Equations

Change a cocone on F : J ⥤ Cᵒᵖ to a cone on F.leftOp : Jᵒᵖ ⥤ C.

Equations

Change a cocone on F.rightOp : J ⥤ Cᵒᵖ to a cone on F : Jᵒᵖ ⥤ C.

Equations

Change a cone on F : Jᵒᵖ ⥤ C to a cocone on F.rightOp : Jᵒᵖ ⥤ C.

Equations

Change a cone on F.rightOp : J ⥤ Cᵒᵖ to a cocone on F : Jᵒᵖ ⥤ C.

Equations

Change a cocone on F : Jᵒᵖ ⥤ C to a cone on F.rightOp : 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.

Equations