Wide equalizers and wide coequalizers #
This file defines wide (co)equalizers as special cases of (co)limits.
A wide equalizer for the family of morphisms X ⟶ Y indexed by J is the categorical
generalization of the subobject {a ∈ A | ∀ j₁ j₂, f(j₁, a) = f(j₂, a)}. Note that if J has
fewer than two morphisms this condition is trivial, so some lemmas and definitions assume J is
nonempty.
Main definitions #
WalkingParallelFamilyis the indexing category used for wide (co)equalizer diagramsparallelFamilyis a functor fromWalkingParallelFamilyto our categoryC.- a
Tridentis a cone over a parallel family.- there is really only one interesting morphism in a trident: the arrow from the vertex of the
trident to the domain of f and g. It is called
Trident.ι.
- there is really only one interesting morphism in a trident: the arrow from the vertex of the
trident to the domain of f and g. It is called
- a
wideEqualizeris now just alimit (parallelFamily f)
Each of these has a dual.
Main statements #
wideEqualizer.ι_monostates that every wideEqualizer map is a monomorphism
Implementation notes #
As with the other special shapes in the limits library, all the definitions here are given as
abbreviations of the general statements for limits, so all the simp lemmas and theorems about
general limits can be used.
References #
The type of objects for the diagram indexing a wide (co)equalizer.
- zero {J : Type w} : WalkingParallelFamily J
- one {J : Type w} : WalkingParallelFamily J
Instances For
Equations
- CategoryTheory.Limits.instDecidableEqWalkingParallelFamily CategoryTheory.Limits.WalkingParallelFamily.zero CategoryTheory.Limits.WalkingParallelFamily.zero = isTrue ⋯
- CategoryTheory.Limits.instDecidableEqWalkingParallelFamily CategoryTheory.Limits.WalkingParallelFamily.zero CategoryTheory.Limits.WalkingParallelFamily.one = isFalse ⋯
- CategoryTheory.Limits.instDecidableEqWalkingParallelFamily CategoryTheory.Limits.WalkingParallelFamily.one CategoryTheory.Limits.WalkingParallelFamily.zero = isFalse ⋯
- CategoryTheory.Limits.instDecidableEqWalkingParallelFamily CategoryTheory.Limits.WalkingParallelFamily.one CategoryTheory.Limits.WalkingParallelFamily.one = isTrue ⋯
The type family of morphisms for the diagram indexing a wide (co)equalizer.
Instances For
Equations
- One or more equations did not get rendered due to their size.
- CategoryTheory.Limits.WalkingParallelFamily.instDecidableEqHom.decEq (CategoryTheory.Limits.WalkingParallelFamily.Hom.id a✝) (CategoryTheory.Limits.WalkingParallelFamily.Hom.id a✝) = isTrue ⋯
Instances For
Satisfying the inhabited linter
Composition of morphisms in the indexing diagram for wide (co)equalizers.
Equations
- One or more equations did not get rendered due to their size.
- (CategoryTheory.Limits.WalkingParallelFamily.Hom.id x✝²).comp x✝ = x✝
Instances For
Equations
- One or more equations did not get rendered due to their size.
Arrow (WalkingParallelFamily J) identifies to the type obtained
by adding two elements to T.
Equations
- One or more equations did not get rendered due to their size.
Instances For
parallelFamily f is the diagram in C consisting of the given family of morphisms, each with
common domain and codomain.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Every functor indexing a wide (co)equalizer is naturally isomorphic (actually, equal) to a
parallelFamily
Equations
Instances For
WalkingParallelPair as a category is equivalent to a special case of
WalkingParallelFamily.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A trident on f is just a Cone (parallelFamily f).
Equations
Instances For
A cotrident on f and g is just a Cocone (parallelFamily f).
Equations
Instances For
A trident t on the parallel family f : J → (X ⟶ Y) consists of two morphisms
t.π.app zero : t.X ⟶ X and t.π.app one : t.X ⟶ Y. Of these, only the first one is
interesting, and we give it the shorter name Trident.ι t.
Equations
Instances For
A cotrident t on the parallel family f : J → (X ⟶ Y) consists of two morphisms
t.ι.app zero : X ⟶ t.X and t.ι.app one : Y ⟶ t.X. Of these, only the second one is
interesting, and we give it the shorter name Cotrident.π t.
Equations
Instances For
A trident on f : J → (X ⟶ Y) is determined by the morphism ι : P ⟶ X satisfying
∀ j₁ j₂, ι ≫ f j₁ = ι ≫ f j₂.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A cotrident on f : J → (X ⟶ Y) is determined by the morphism π : Y ⟶ P satisfying
∀ j₁ j₂, f j₁ ≫ π = f j₂ ≫ π.
Equations
- One or more equations did not get rendered due to their size.
Instances For
To check whether two maps are equalized by both maps of a trident, it suffices to check it for the first map
To check whether two maps are coequalized by both maps of a cotrident, it suffices to check it for the second map
If s is a limit trident over f, then a morphism k : W ⟶ X satisfying
∀ j₁ j₂, k ≫ f j₁ = k ≫ f j₂ induces a morphism l : W ⟶ s.X such that
l ≫ Trident.ι s = k.
Equations
- CategoryTheory.Limits.Trident.IsLimit.lift' hs k h = ⟨hs.lift (CategoryTheory.Limits.Trident.ofι k h), ⋯⟩
Instances For
If s is a colimit cotrident over f, then a morphism k : Y ⟶ W satisfying
∀ j₁ j₂, f j₁ ≫ k = f j₂ ≫ k induces a morphism l : s.X ⟶ W such that
Cotrident.π s ≫ l = k.
Equations
Instances For
This is a slightly more convenient method to verify that a trident is a limit cone. It only asks for a proof of facts that carry any mathematical content
Equations
- CategoryTheory.Limits.Trident.IsLimit.mk t lift fac uniq = { lift := lift, fac := ⋯, uniq := uniq }
Instances For
This is another convenient method to verify that a trident is a limit cone. It
only asks for a proof of facts that carry any mathematical content, and allows access to the
same s for all parts.
Equations
- CategoryTheory.Limits.Trident.IsLimit.mk' t create = CategoryTheory.Limits.Trident.IsLimit.mk t (fun (s : CategoryTheory.Limits.Trident f) => ↑(create s)) ⋯ ⋯
Instances For
This is a slightly more convenient method to verify that a cotrident is a colimit cocone. It only asks for a proof of facts that carry any mathematical content
Equations
- CategoryTheory.Limits.Cotrident.IsColimit.mk t desc fac uniq = { desc := desc, fac := ⋯, uniq := uniq }
Instances For
This is another convenient method to verify that a cotrident is a colimit cocone. It
only asks for a proof of facts that carry any mathematical content, and allows access to the
same s for all parts.
Equations
- CategoryTheory.Limits.Cotrident.IsColimit.mk' t create = CategoryTheory.Limits.Cotrident.IsColimit.mk t (fun (s : CategoryTheory.Limits.Cotrident f) => ↑(create s)) ⋯ ⋯
Instances For
Given a limit cone for the family f : J → (X ⟶ Y), for any Z, morphisms from Z to its point
are in bijection with morphisms h : Z ⟶ X such that ∀ j₁ j₂, h ≫ f j₁ = h ≫ f j₂.
Further, this bijection is natural in Z: see Trident.Limits.homIso_natural.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The bijection of Trident.IsLimit.homIso is natural in Z.
Given a colimit cocone for the family f : J → (X ⟶ Y), for any Z, morphisms from the cocone
point to Z are in bijection with morphisms h : Z ⟶ X such that
∀ j₁ j₂, f j₁ ≫ h = f j₂ ≫ h. Further, this bijection is natural in Z: see
Cotrident.IsColimit.homIso_natural.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The bijection of Cotrident.IsColimit.homIso is natural in Z.
This is a helper construction that can be useful when verifying that a category has certain wide
equalizers. Given F : WalkingParallelFamily ⥤ C, which is really the same as
parallelFamily (fun j ↦ F.map (line j)), and a trident on fun j ↦ F.map (line j),
we get a cone on F.
If you're thinking about using this, have a look at
hasWideEqualizers_of_hasLimit_parallelFamily, which you may find to be an easier way of
achieving your goal.
Equations
- One or more equations did not get rendered due to their size.
Instances For
This is a helper construction that can be useful when verifying that a category has all
coequalizers. Given F : WalkingParallelFamily ⥤ C, which is really the same as
parallelFamily (fun j ↦ F.map (line j)), and a cotrident on fun j ↦ F.map (line j) we get a
cocone on F.
If you're thinking about using this, have a look at
hasWideCoequalizers_of_hasColimit_parallelFamily, which you may find to be an easier way
of achieving your goal.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given F : WalkingParallelFamily ⥤ C, which is really the same as
parallelFamily (fun j ↦ F.map (line j)) and a cone on F, we get a trident on
fun j ↦ F.map (line j).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given F : WalkingParallelFamily ⥤ C, which is really the same as
parallelFamily (F.map left) (F.map right) and a cocone on F, we get a cotrident on
fun j ↦ F.map (line j).
Equations
- One or more equations did not get rendered due to their size.
Instances For
Helper function for constructing morphisms between wide equalizer tridents.
Equations
- CategoryTheory.Limits.Trident.mkHom k w = { hom := k, w := ⋯ }
Instances For
To construct an isomorphism between tridents,
it suffices to give an isomorphism between the cone points
and check that it commutes with the ι morphisms.
Equations
- CategoryTheory.Limits.Trident.ext i w = { hom := CategoryTheory.Limits.Trident.mkHom i.hom w, inv := CategoryTheory.Limits.Trident.mkHom i.inv ⋯, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
Helper function for constructing morphisms between coequalizer cotridents.
Equations
- CategoryTheory.Limits.Cotrident.mkHom k w = { hom := k, w := ⋯ }
Instances For
To construct an isomorphism between cotridents,
it suffices to give an isomorphism between the cocone points
and check that it commutes with the π morphisms.
Equations
- CategoryTheory.Limits.Cotrident.ext i w = { hom := CategoryTheory.Limits.Cotrident.mkHom i.hom w, inv := CategoryTheory.Limits.Cotrident.mkHom i.inv ⋯, hom_inv_id := ⋯, inv_hom_id := ⋯ }
Instances For
A family f of parallel morphisms has a wide equalizer if the diagram parallelFamily f has a
limit.
Equations
Instances For
If a wide equalizer of f exists, we can access an arbitrary choice of such by
saying wideEqualizer f.
Equations
Instances For
If a wide equalizer of f exists, we can access the inclusion wideEqualizer f ⟶ X by
saying wideEqualizer.ι f.
Equations
Instances For
A wide equalizer cone for a parallel family f.
Equations
Instances For
The wideEqualizer built from wideEqualizer.ι f is limiting.
Equations
- One or more equations did not get rendered due to their size.
Instances For
A morphism k : W ⟶ X satisfying ∀ j₁ j₂, k ≫ f j₁ = k ≫ f j₂ factors through the
wide equalizer of f via wideEqualizer.lift : W ⟶ wideEqualizer f.
Equations
Instances For
A morphism k : W ⟶ X satisfying ∀ j₁ j₂, k ≫ f j₁ = k ≫ f j₂ induces a morphism
l : W ⟶ wideEqualizer f satisfying l ≫ wideEqualizer.ι f = k.
Equations
Instances For
Two maps into a wide equalizer are equal if they are equal when composed with the wide equalizer map.
A wide equalizer morphism is a monomorphism
The wide equalizer morphism in any limit cone is a monomorphism.
A family f of parallel morphisms has a wide coequalizer if the diagram parallelFamily f has
a colimit.
Equations
Instances For
If a wide coequalizer of f exists, we can access an arbitrary choice of such by
saying wideCoequalizer f.
Equations
Instances For
If a wideCoequalizer of f exists, we can access the corresponding projection by
saying wideCoequalizer.π f.
Equations
Instances For
An arbitrary choice of coequalizer cocone for a parallel family f.
Equations
Instances For
The cotrident built from wideCoequalizer.π f is colimiting.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Any morphism k : Y ⟶ W satisfying ∀ j₁ j₂, f j₁ ≫ k = f j₂ ≫ k factors through the
wide coequalizer of f via wideCoequalizer.desc : wideCoequalizer f ⟶ W.
Equations
Instances For
Any morphism k : Y ⟶ W satisfying ∀ j₁ j₂, f j₁ ≫ k = f j₂ ≫ k induces a morphism
l : wideCoequalizer f ⟶ W satisfying wideCoequalizer.π ≫ g = l.
Equations
Instances For
Two maps from a wide coequalizer are equal if they are equal when composed with the wide coequalizer map
A wide coequalizer morphism is an epimorphism
The wide coequalizer morphism in any colimit cocone is an epimorphism.
A category HasWideEqualizers if it has all limits of shape WalkingParallelFamily J, i.e.
if it has a wide equalizer for every family of parallel morphisms.
Equations
Instances For
A category HasWideCoequalizers if it has all colimits of shape WalkingParallelFamily J, i.e.
if it has a wide coequalizer for every family of parallel morphisms.
Equations
Instances For
If C has all limits of diagrams parallelFamily f, then it has all wide equalizers
If C has all colimits of diagrams parallelFamily f, then it has all wide coequalizers