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
IsLimit c
, forc : Cone F
,F : J ⥤ C
, expressing thatc
is a limit cone,
See also CategoryTheory.Limits.HasLimits
which further builds:
LimitCone F
, which consists of a choice of cone forF
and the fact it is a limit cone, andHasLimit 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 #
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.
- lift : (s : CategoryTheory.Limits.Cone F) → s.pt ⟶ t.pt
There is a morphism from any cone point to
t.pt
- fac : ∀ (s : CategoryTheory.Limits.Cone F) (j : J), CategoryTheory.CategoryStruct.comp (self.lift s) (t.π.app j) = s.π.app j
The map makes the triangle with the two natural transformations commute
- uniq : ∀ (s : CategoryTheory.Limits.Cone F) (m : s.pt ⟶ t.pt), (∀ (j : J), CategoryTheory.CategoryStruct.comp m (t.π.app j) = s.π.app j) → m = self.lift s
It is the unique such map to do this
Instances For
Equations
- ⋯ = ⋯
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
- CategoryTheory.Limits.IsLimit.map s P α = P.lift ((CategoryTheory.Limits.Cones.postcompose α).obj s)
Instances For
The universal morphism from any other cone to a limit cone.
Equations
- h.liftConeMorphism s = { hom := h.lift s, w := ⋯ }
Instances For
Restating the definition of a limit cone in terms of the ∃! operator.
Noncomputably make a limit cone from the existence of unique factorizations.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Alternative constructor for isLimit
,
providing a morphism of cones rather than a morphism between the cone points
and separately the factorisation condition.
Equations
- CategoryTheory.Limits.IsLimit.mkConeMorphism lift uniq = { lift := fun (s : CategoryTheory.Limits.Cone F) => (lift s).hom, fac := ⋯, uniq := ⋯ }
Instances For
Limit cones on F
are unique up to isomorphism.
Equations
- P.uniqueUpToIso Q = { hom := Q.liftConeMorphism s, inv := P.liftConeMorphism t, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
Any cone morphism between limit cones is an isomorphism.
Limits of F
are unique up to isomorphism.
Equations
- P.conePointUniqueUpToIso Q = (CategoryTheory.Limits.Cones.forget F).mapIso (P.uniqueUpToIso Q)
Instances For
Transport evidence that a cone is a limit cone across an isomorphism of cones.
Equations
- P.ofIsoLimit i = CategoryTheory.Limits.IsLimit.mkConeMorphism (fun (s : CategoryTheory.Limits.Cone F) => CategoryTheory.CategoryStruct.comp (P.liftConeMorphism s) i.hom) ⋯
Instances For
Isomorphism of cones preserves whether or not they are limiting cones.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If the canonical morphism from a cone point to a limiting cone point is an iso, then the first cone was limiting also.
Equations
- P.ofPointIso = P.ofIsoLimit (CategoryTheory.asIso (P.liftConeMorphism t)).symm
Instances For
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
- One or more equations did not get rendered due to their size.
Instances For
Given two functors which have equivalent categories of cones, we can transport a limiting cone across the equivalence.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A cone postcomposed with a natural isomorphism is a limit cone if and only if the original cone is.
Equations
Instances For
A cone postcomposed with the inverse of a natural isomorphism is a limit cone if and only if the original cone is.
Equations
Instances For
Constructing an equivalence IsLimit c ≃ IsLimit d
from a natural isomorphism
between the underlying functors, and then an isomorphism between c
transported along this and d
.
Equations
Instances For
The cone points of two limit cones for naturally isomorphic functors are themselves isomorphic.
Equations
- P.conePointsIsoOfNatIso Q w = { hom := CategoryTheory.Limits.IsLimit.map s Q w.hom, inv := CategoryTheory.Limits.IsLimit.map t P w.inv, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
If s : Cone F
is a limit cone, so is s
whiskered by an equivalence e
.
Equations
- P.whiskerEquivalence e = CategoryTheory.Limits.IsLimit.ofRightAdjoint (CategoryTheory.Limits.Cones.whiskeringEquivalence e).symm.toAdjunction P
Instances For
If s : Cone F
whiskered by an equivalence e
is a limit cone, so is s
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given an equivalence of diagrams e
, s
is a limit cone iff s.whisker e.functor
is.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A limit cone extended by an isomorphism is a limit cone.
Equations
- CategoryTheory.Limits.IsLimit.extendIso i hs = hs.ofIsoLimit (CategoryTheory.Limits.Cones.extendIso s (CategoryTheory.asIso i)).symm
Instances For
A cone is a limit cone if its extension by an isomorphism is.
Equations
- CategoryTheory.Limits.IsLimit.ofExtendIso i hs = hs.ofIsoLimit (CategoryTheory.Limits.Cones.extendIso s (CategoryTheory.asIso i))
Instances For
A cone is a limit cone iff its extension by an isomorphism is.
Equations
Instances For
We can prove two cone points (s : Cone F).pt
and (t : Cone G).pt
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
- One or more equations did not get rendered due to their size.
Instances For
The universal property of a limit cone: a map W ⟶ X
is the same as
a cone on F
with cone point W
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The limit of F
represents the functor taking W
to
the set of cones on F
with cone point W
.
Equations
- h.natIso = CategoryTheory.NatIso.ofComponents (fun (W : Cᵒᵖ) => h.homIso (Opposite.unop W)) ⋯
Instances For
Another, more explicit, formulation of the universal property of a limit cone.
See also homIso
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
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.
Equations
- CategoryTheory.Limits.IsLimit.ofFaithful G ht lift h = { lift := lift, fac := ⋯, uniq := ⋯ }
Instances For
If F
and G
are naturally isomorphic, then F.mapCone c
being a limit implies
G.mapCone c
is also a limit.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A cone is a limit cone exactly if there is a unique cone morphism from any other cone.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If F.cones
is represented by X
, each morphism f : Y ⟶ X
gives a cone with cone point
Y
.
Equations
- CategoryTheory.Limits.IsLimit.OfNatIso.coneOfHom h f = { pt := Y, π := h.hom.app (Opposite.op Y) { down := f } }
Instances For
If F.cones
is represented by X
, each cone s
gives a morphism s.pt ⟶ X
.
Equations
- CategoryTheory.Limits.IsLimit.OfNatIso.homOfCone h s = (h.inv.app (Opposite.op s.pt) s.π).down
Instances For
If F.cones
is represented by X
, the cone corresponding to the identity morphism on X
will be a limit cone.
Equations
Instances For
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
- CategoryTheory.Limits.IsLimit.ofNatIso h = { lift := fun (s : CategoryTheory.Limits.Cone F) => CategoryTheory.Limits.IsLimit.OfNatIso.homOfCone h s, fac := ⋯, uniq := ⋯ }
Instances For
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.
- desc : (s : CategoryTheory.Limits.Cocone F) → t.pt ⟶ s.pt
t.pt
maps to all other cocone covertices - fac : ∀ (s : CategoryTheory.Limits.Cocone F) (j : J), CategoryTheory.CategoryStruct.comp (t.ι.app j) (self.desc s) = s.ι.app j
The map
desc
makes the diagram with the natural transformations commute - uniq : ∀ (s : CategoryTheory.Limits.Cocone F) (m : t.pt ⟶ s.pt), (∀ (j : J), CategoryTheory.CategoryStruct.comp (t.ι.app j) m = s.ι.app j) → m = self.desc s
desc
is the unique such map
Instances For
Equations
- ⋯ = ⋯
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 ((CategoryTheory.Limits.Cocones.precompose α).obj t)
Instances For
The universal morphism from a colimit cocone to any other cocone.
Equations
- h.descCoconeMorphism s = { hom := h.desc s, w := ⋯ }
Instances For
Restating the definition of a colimit cocone in terms of the ∃! operator.
Noncomputably make a colimit cocone from the existence of unique factorizations.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Alternative constructor for IsColimit
,
providing a morphism of cocones rather than a morphism between the cocone points
and separately the factorisation condition.
Equations
- CategoryTheory.Limits.IsColimit.mkCoconeMorphism desc uniq' = { desc := fun (s : CategoryTheory.Limits.Cocone F) => (desc s).hom, fac := ⋯, uniq := ⋯ }
Instances For
Colimit cocones on F
are unique up to isomorphism.
Equations
- P.uniqueUpToIso Q = { hom := P.descCoconeMorphism t, inv := Q.descCoconeMorphism s, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
Any cocone morphism between colimit cocones is an isomorphism.
Colimits of F
are unique up to isomorphism.
Equations
- P.coconePointUniqueUpToIso Q = (CategoryTheory.Limits.Cocones.forget F).mapIso (P.uniqueUpToIso Q)
Instances For
Transport evidence that a cocone is a colimit cocone across an isomorphism of cocones.
Equations
- P.ofIsoColimit i = CategoryTheory.Limits.IsColimit.mkCoconeMorphism (fun (s : CategoryTheory.Limits.Cocone F) => CategoryTheory.CategoryStruct.comp i.inv (P.descCoconeMorphism s)) ⋯
Instances For
Isomorphism of cocones preserves whether or not they are colimiting cocones.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If the canonical morphism to a cocone point from a colimiting cocone point is an iso, then the first cocone was colimiting also.
Equations
- P.ofPointIso = P.ofIsoColimit (CategoryTheory.asIso (P.descCoconeMorphism t))
Instances For
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
- One or more equations did not get rendered due to their size.
Instances For
Given two functors which have equivalent categories of cocones, we can transport a colimiting cocone across the equivalence.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A cocone precomposed with a natural isomorphism is a colimit cocone if and only if the original cocone is.
Equations
Instances For
A cocone precomposed with the inverse of a natural isomorphism is a colimit cocone if and only if the original cocone is.
Equations
Instances For
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
.
Equations
Instances For
The cocone points of two colimit cocones for naturally isomorphic functors are themselves isomorphic.
Equations
- P.coconePointsIsoOfNatIso Q w = { hom := P.map t w.hom, inv := Q.map s w.inv, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
If s : Cocone F
is a colimit cocone, so is s
whiskered by an equivalence e
.
Equations
- P.whiskerEquivalence e = CategoryTheory.Limits.IsColimit.ofLeftAdjoint (CategoryTheory.Limits.Cocones.whiskeringEquivalence e).toAdjunction P
Instances For
If s : Cocone F
whiskered by an equivalence e
is a colimit cocone, so is s
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given an equivalence of diagrams e
, s
is a colimit cocone iff s.whisker e.functor
is.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A colimit cocone extended by an isomorphism is a colimit cocone.
Equations
- CategoryTheory.Limits.IsColimit.extendIso i hs = hs.ofIsoColimit (CategoryTheory.Limits.Cocones.extendIso s (CategoryTheory.asIso i))
Instances For
A cocone is a colimit cocone if its extension by an isomorphism is.
Equations
- CategoryTheory.Limits.IsColimit.ofExtendIso i hs = hs.ofIsoColimit (CategoryTheory.Limits.Cocones.extendIso s (CategoryTheory.asIso i)).symm
Instances For
A cocone is a colimit cocone iff its extension by an isomorphism is.
Equations
Instances For
We can prove two cocone points (s : Cocone F).pt
and (t : Cocone G).pt
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
- One or more equations did not get rendered due to their size.
Instances For
The universal property of a colimit cocone: a map X ⟶ W
is the same as
a cocone on F
with cone point W
.
Equations
- h.homEquiv W = { toFun := fun (f : t.pt ⟶ W) => (t.extend f).ι, invFun := fun (ι : F ⟶ (CategoryTheory.Functor.const J).obj W) => h.desc { pt := W, ι := ι }, left_inv := ⋯, right_inv := ⋯ }
Instances For
The universal property of a colimit cocone: a map X ⟶ W
is the same as
a cocone on F
with cone point W
.
Equations
- h.homIso W = (Equiv.ulift.trans (h.homEquiv W)).toIso
Instances For
The colimit of F
represents the functor taking W
to
the set of cocones on F
with cone point W
.
Equations
- h.natIso = CategoryTheory.NatIso.ofComponents h.homIso ⋯
Instances For
Another, more explicit, formulation of the universal property of a colimit cocone.
See also homIso
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
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.
Equations
- CategoryTheory.Limits.IsColimit.ofFaithful G ht desc h = { desc := desc, fac := ⋯, uniq := ⋯ }
Instances For
If F
and G
are naturally isomorphic, then F.mapCocone c
being a colimit implies
G.mapCocone c
is also a colimit.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A cocone is a colimit cocone exactly if there is a unique cocone morphism from any other cocone.
Equations
- One or more equations did not get rendered due to their size.
Instances For
If F.cocones
is corepresented by X
, each morphism f : X ⟶ Y
gives a cocone with cone
point Y
.
Equations
- CategoryTheory.Limits.IsColimit.OfNatIso.coconeOfHom h f = { pt := Y, ι := h.hom.app Y { down := f } }
Instances For
If F.cocones
is corepresented by X
, each cocone s
gives a morphism X ⟶ s.pt
.
Equations
- CategoryTheory.Limits.IsColimit.OfNatIso.homOfCocone h s = (h.inv.app s.pt s.ι).down
Instances For
If F.cocones
is corepresented by X
, the cocone corresponding to the identity morphism on X
will be a colimit cocone.
Equations
Instances For
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
- CategoryTheory.Limits.IsColimit.ofNatIso h = { desc := fun (s : CategoryTheory.Limits.Cocone F) => CategoryTheory.Limits.IsColimit.OfNatIso.homOfCocone h s, fac := ⋯, uniq := ⋯ }