Limits and colimits #
We set up the general theory of limits and colimits in a category. In this introduction we only describe the setup for limits; it is repeated, with slightly different names, for colimits.
The main structures defined in this file is
is_limit c, forc : cone F,F : J ⥤ C, expressing thatcis a limit cone,
See also category_theory.limits.has_limits which further builds:
limit_cone F, which consists of a choice of cone forFand the fact it is a limit cone, andhas_limit F, asserting the mere existence of some limit cone forF.
Implementation #
At present we simply say everything twice, in order to handle both limits and colimits.
It would be highly desirable to have some automation support,
e.g. a @[dualize] attribute that behaves similarly to @[to_additive].
References #
- lift : Π (s : category_theory.limits.cone F), s.X ⟶ t.X
- fac' : (∀ (s : category_theory.limits.cone F) (j : J), self.lift s ≫ t.π.app j = s.π.app j) . "obviously"
- uniq' : (∀ (s : category_theory.limits.cone F) (m : s.X ⟶ t.X), (∀ (j : J), m ≫ t.π.app j = s.π.app j) → m = self.lift s) . "obviously"
A cone t on F is a limit cone if each cone on F admits a unique
cone morphism to t.
See https://stacks.math.columbia.edu/tag/002E.
Instances for category_theory.limits.is_limit
- category_theory.limits.is_limit.has_sizeof_inst
- category_theory.limits.is_limit.subsingleton
Given a natural transformation α : F ⟶ G, we give a morphism from the cone point
of any cone over F to the cone point of a limit cone over G.
Equations
The universal morphism from any other cone to a limit cone.
Restating the definition of a limit cone in terms of the ∃! operator.
Noncomputably make a colimit cocone from the existence of unique factorizations.
Equations
- category_theory.limits.is_limit.of_exists_unique ht = (λ (_x : ∀ (s : category_theory.limits.cone F), (λ (l : s.X ⟶ t.X), ∀ (j : J), l ≫ t.π.app j = s.π.app j) ((λ (s : category_theory.limits.cone F), classical.some _) s) ∧ ∀ (y : s.X ⟶ t.X), (λ (l : s.X ⟶ t.X), ∀ (j : J), l ≫ t.π.app j = s.π.app j) y → y = (λ (s : category_theory.limits.cone F), classical.some _) s), {lift := λ (s : category_theory.limits.cone F), classical.some _, fac' := _, uniq' := _}) _
Alternative constructor for is_limit,
providing a morphism of cones rather than a morphism between the cone points
and separately the factorisation condition.
Equations
- category_theory.limits.is_limit.mk_cone_morphism lift uniq' = {lift := λ (s : category_theory.limits.cone F), (lift s).hom, fac' := _, uniq' := _}
Limit cones on F are unique up to isomorphism.
Equations
- P.unique_up_to_iso Q = {hom := Q.lift_cone_morphism s, inv := P.lift_cone_morphism t, hom_inv_id' := _, inv_hom_id' := _}
Any cone morphism between limit cones is an isomorphism.
Limits of F are unique up to isomorphism.
Equations
Transport evidence that a cone is a limit cone across an isomorphism of cones.
Equations
- P.of_iso_limit i = category_theory.limits.is_limit.mk_cone_morphism (λ (s : category_theory.limits.cone F), P.lift_cone_morphism s ≫ i.hom) _
Isomorphism of cones preserves whether or not they are limiting cones.
Equations
- category_theory.limits.is_limit.equiv_iso_limit i = {to_fun := λ (h : category_theory.limits.is_limit r), h.of_iso_limit i, inv_fun := λ (h : category_theory.limits.is_limit t), h.of_iso_limit i.symm, left_inv := _, right_inv := _}
If the canonical morphism from a cone point to a limiting cone point is an iso, then the first cone was limiting also.
Equations
Two morphisms into a limit are equal if their compositions with each cone morphism are equal.
Given a right adjoint functor between categories of cones, the image of a limit cone is a limit cone.
Equations
Given two functors which have equivalent categories of cones, we can transport a limiting cone across the equivalence.
Equations
- category_theory.limits.is_limit.of_cone_equiv h = {to_fun := λ (P : category_theory.limits.is_limit (h.functor.obj c)), (category_theory.limits.is_limit.of_right_adjoint h.inverse P).of_iso_limit (h.unit_iso.symm.app c), inv_fun := category_theory.limits.is_limit.of_right_adjoint h.functor c, left_inv := _, right_inv := _}
A cone postcomposed with a natural isomorphism is a limit cone if and only if the original cone is.
A cone postcomposed with the inverse of a natural isomorphism is a limit cone if and only if the original cone is.
Constructing an equivalence is_limit c ≃ is_limit d from a natural isomorphism
between the underlying functors, and then an isomorphism between c transported along this and d.
The cone points of two limit cones for naturally isomorphic functors are themselves isomorphic.
Equations
- P.cone_points_iso_of_nat_iso Q w = {hom := category_theory.limits.is_limit.map s Q w.hom, inv := category_theory.limits.is_limit.map t P w.inv, hom_inv_id' := _, inv_hom_id' := _}
If s : cone F is a limit cone, so is s whiskered by an equivalence e.
If s : cone F whiskered by an equivalence e is a limit cone, so is s.
Equations
- category_theory.limits.is_limit.of_whisker_equivalence e P = ⇑(category_theory.limits.is_limit.equiv_iso_limit ((category_theory.limits.cones.whiskering_equivalence e).unit_iso.app s).symm) (category_theory.limits.is_limit.of_right_adjoint (category_theory.limits.cones.whiskering_equivalence e).inverse P)
Given an equivalence of diagrams e, s is a limit cone iff s.whisker e.functor is.
Equations
We can prove two cone points (s : cone F).X and (t.cone G).X are isomorphic if
- both cones are limit cones
- their indexing categories are equivalent via some
e : J ≌ K, - the triangle of functors commutes up to a natural isomorphism:
e.functor ⋙ G ≅ F.
This is the most general form of uniqueness of cone points, allowing relabelling of both the indexing category (up to equivalence) and the functor (up to natural isomorphism).
Equations
- P.cone_points_iso_of_equivalence Q e w = let w' : e.inverse ⋙ F ≅ G := (category_theory.iso_whisker_left e.inverse w).symm ≪≫ e.inv_fun_id_assoc G in {hom := Q.lift ((category_theory.limits.cones.equivalence_of_reindexing e.symm w').functor.obj s), inv := P.lift ((category_theory.limits.cones.equivalence_of_reindexing e w).functor.obj t), hom_inv_id' := _, inv_hom_id' := _}
The universal property of a limit cone: a map W ⟶ X is the same as
a cone on F with vertex W.
The limit of F represents the functor taking W to
the set of cones on F with vertex W.
Equations
- h.nat_iso = category_theory.nat_iso.of_components (λ (W : Cᵒᵖ), h.hom_iso (opposite.unop W)) _
Another, more explicit, formulation of the universal property of a limit cone.
See also hom_iso.
If G : C → D is a faithful functor which sends t to a limit cone, then it suffices to check that the induced maps for the image of t can be lifted to maps of C.
If F and G are naturally isomorphic, then F.map_cone c being a limit implies
G.map_cone c is also a limit.
A cone is a limit cone exactly if there is a unique cone morphism from any other cone.
Equations
- category_theory.limits.is_limit.iso_unique_cone_morphism = {hom := λ (h : category_theory.limits.is_limit t) (s : category_theory.limits.cone F), {to_inhabited := {default := h.lift_cone_morphism s}, uniq := _}, inv := λ (h : Π (s : category_theory.limits.cone F), unique (s ⟶ t)), {lift := λ (s : category_theory.limits.cone F), inhabited.default.hom, fac' := _, uniq' := _}, hom_inv_id' := _, inv_hom_id' := _}
If F.cones is represented by X, each morphism f : Y ⟶ X gives a cone with cone point
Y.
Equations
- category_theory.limits.is_limit.of_nat_iso.cone_of_hom h f = {X := Y, π := h.hom.app (opposite.op Y) {down := f}}
If F.cones is represented by X, each cone s gives a morphism s.X ⟶ X.
Equations
- category_theory.limits.is_limit.of_nat_iso.hom_of_cone h s = (h.inv.app (opposite.op s.X) s.π).down
If F.cones is represented by X, the cone corresponding to the identity morphism on X
will be a limit cone.
If F.cones is represented by X, the cone corresponding to a morphism f : Y ⟶ X is
the limit cone extended by f.
If F.cones is represented by X, any cone is the extension of the limit cone by the
corresponding morphism.
If F.cones is representable, then the cone corresponding to the identity morphism on
the representing object is a limit cone.
Equations
- category_theory.limits.is_limit.of_nat_iso h = {lift := λ (s : category_theory.limits.cone F), category_theory.limits.is_limit.of_nat_iso.hom_of_cone h s, fac' := _, uniq' := _}
- desc : Π (s : category_theory.limits.cocone F), t.X ⟶ s.X
- fac' : (∀ (s : category_theory.limits.cocone F) (j : J), t.ι.app j ≫ self.desc s = s.ι.app j) . "obviously"
- uniq' : (∀ (s : category_theory.limits.cocone F) (m : t.X ⟶ s.X), (∀ (j : J), t.ι.app j ≫ m = s.ι.app j) → m = self.desc s) . "obviously"
A cocone t on F is a colimit cocone if each cocone on F admits a unique
cocone morphism from t.
See https://stacks.math.columbia.edu/tag/002F.
Instances for category_theory.limits.is_colimit
- category_theory.limits.is_colimit.has_sizeof_inst
- category_theory.limits.is_colimit.subsingleton
Given a natural transformation α : F ⟶ G, we give a morphism from the cocone point
of a colimit cocone over F to the cocone point of any cocone over G.
Equations
- P.map t α = P.desc ((category_theory.limits.cocones.precompose α).obj t)
The universal morphism from a colimit cocone to any other cocone.
Restating the definition of a colimit cocone in terms of the ∃! operator.
Noncomputably make a colimit cocone from the existence of unique factorizations.
Equations
- category_theory.limits.is_colimit.of_exists_unique ht = (λ (_x : ∀ (s : category_theory.limits.cocone F), (λ (d : t.X ⟶ s.X), ∀ (j : J), t.ι.app j ≫ d = s.ι.app j) ((λ (s : category_theory.limits.cocone F), classical.some _) s) ∧ ∀ (y : t.X ⟶ s.X), (λ (d : t.X ⟶ s.X), ∀ (j : J), t.ι.app j ≫ d = s.ι.app j) y → y = (λ (s : category_theory.limits.cocone F), classical.some _) s), {desc := λ (s : category_theory.limits.cocone F), classical.some _, fac' := _, uniq' := _}) _
Alternative constructor for is_colimit,
providing a morphism of cocones rather than a morphism between the cocone points
and separately the factorisation condition.
Equations
- category_theory.limits.is_colimit.mk_cocone_morphism desc uniq' = {desc := λ (s : category_theory.limits.cocone F), (desc s).hom, fac' := _, uniq' := _}
Colimit cocones on F are unique up to isomorphism.
Equations
- P.unique_up_to_iso Q = {hom := P.desc_cocone_morphism t, inv := Q.desc_cocone_morphism s, hom_inv_id' := _, inv_hom_id' := _}
Any cocone morphism between colimit cocones is an isomorphism.
Colimits of F are unique up to isomorphism.
Equations
Transport evidence that a cocone is a colimit cocone across an isomorphism of cocones.
Equations
- P.of_iso_colimit i = category_theory.limits.is_colimit.mk_cocone_morphism (λ (s : category_theory.limits.cocone F), i.inv ≫ P.desc_cocone_morphism s) _
Isomorphism of cocones preserves whether or not they are colimiting cocones.
Equations
- category_theory.limits.is_colimit.equiv_iso_colimit i = {to_fun := λ (h : category_theory.limits.is_colimit r), h.of_iso_colimit i, inv_fun := λ (h : category_theory.limits.is_colimit t), h.of_iso_colimit i.symm, left_inv := _, right_inv := _}
If the canonical morphism to a cocone point from a colimiting cocone point is an iso, then the first cocone was colimiting also.
Equations
Two morphisms out of a colimit are equal if their compositions with each cocone morphism are equal.
Given a left adjoint functor between categories of cocones, the image of a colimit cocone is a colimit cocone.
Equations
Given two functors which have equivalent categories of cocones, we can transport a colimiting cocone across the equivalence.
Equations
- category_theory.limits.is_colimit.of_cocone_equiv h = {to_fun := λ (P : category_theory.limits.is_colimit (h.functor.obj c)), (category_theory.limits.is_colimit.of_left_adjoint h.inverse P).of_iso_colimit (h.unit_iso.symm.app c), inv_fun := category_theory.limits.is_colimit.of_left_adjoint h.functor c, left_inv := _, right_inv := _}
A cocone precomposed with a natural isomorphism is a colimit cocone if and only if the original cocone is.
A cocone precomposed with the inverse of a natural isomorphism is a colimit cocone if and only if the original cocone is.
Constructing an equivalence is_colimit c ≃ is_colimit d from a natural isomorphism
between the underlying functors, and then an isomorphism between c transported along this and d.
The cocone points of two colimit cocones for naturally isomorphic functors are themselves isomorphic.
Equations
- P.cocone_points_iso_of_nat_iso Q w = {hom := P.map t w.hom, inv := Q.map s w.inv, hom_inv_id' := _, inv_hom_id' := _}
If s : cocone F is a colimit cocone, so is s whiskered by an equivalence e.
If s : cocone F whiskered by an equivalence e is a colimit cocone, so is s.
Equations
- category_theory.limits.is_colimit.of_whisker_equivalence e P = ⇑(category_theory.limits.is_colimit.equiv_iso_colimit ((category_theory.limits.cocones.whiskering_equivalence e).unit_iso.app s).symm) (category_theory.limits.is_colimit.of_left_adjoint (category_theory.limits.cocones.whiskering_equivalence e).inverse P)
Given an equivalence of diagrams e, s is a colimit cocone iff s.whisker e.functor is.
Equations
We can prove two cocone points (s : cocone F).X and (t.cocone G).X are isomorphic if
- both cocones are colimit cocones
- their indexing categories are equivalent via some
e : J ≌ K, - the triangle of functors commutes up to a natural isomorphism:
e.functor ⋙ G ≅ F.
This is the most general form of uniqueness of cocone points, allowing relabelling of both the indexing category (up to equivalence) and the functor (up to natural isomorphism).
Equations
- P.cocone_points_iso_of_equivalence Q e w = let w' : e.inverse ⋙ F ≅ G := (category_theory.iso_whisker_left e.inverse w).symm ≪≫ e.inv_fun_id_assoc G in {hom := P.desc ((category_theory.limits.cocones.equivalence_of_reindexing e w).functor.obj t), inv := Q.desc ((category_theory.limits.cocones.equivalence_of_reindexing e.symm w').functor.obj s), hom_inv_id' := _, inv_hom_id' := _}
The universal property of a colimit cocone: a map X ⟶ W is the same as
a cocone on F with vertex W.
The colimit of F represents the functor taking W to
the set of cocones on F with vertex W.
Equations
Another, more explicit, formulation of the universal property of a colimit cocone.
See also hom_iso.
If G : C → D is a faithful functor which sends t to a colimit cocone, then it suffices to check that the induced maps for the image of t can be lifted to maps of C.
If F and G are naturally isomorphic, then F.map_cone c being a colimit implies
G.map_cone c is also a colimit.
A cocone is a colimit cocone exactly if there is a unique cocone morphism from any other cocone.
Equations
- category_theory.limits.is_colimit.iso_unique_cocone_morphism = {hom := λ (h : category_theory.limits.is_colimit t) (s : category_theory.limits.cocone F), {to_inhabited := {default := h.desc_cocone_morphism s}, uniq := _}, inv := λ (h : Π (s : category_theory.limits.cocone F), unique (t ⟶ s)), {desc := λ (s : category_theory.limits.cocone F), inhabited.default.hom, fac' := _, uniq' := _}, hom_inv_id' := _, inv_hom_id' := _}
If F.cocones is corepresented by X, each morphism f : X ⟶ Y gives a cocone with cone
point Y.
If F.cocones is corepresented by X, each cocone s gives a morphism X ⟶ s.X.
If F.cocones is corepresented by X, the cocone corresponding to the identity morphism on X
will be a colimit cocone.
If F.cocones is corepresented by X, the cocone corresponding to a morphism f : Y ⟶ X is
the colimit cocone extended by f.
If F.cocones is corepresented by X, any cocone is the extension of the colimit cocone by the
corresponding morphism.
If F.cocones is corepresentable, then the cocone corresponding to the identity morphism on
the representing object is a colimit cocone.
Equations
- category_theory.limits.is_colimit.of_nat_iso h = {desc := λ (s : category_theory.limits.cocone F), category_theory.limits.is_colimit.of_nat_iso.hom_of_cocone h s, fac' := _, uniq' := _}