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 #
WalkingParallelFamily
is the indexing category used for wide (co)equalizer diagramsparallelFamily
is a functor fromWalkingParallelFamily
to our categoryC
.- a
Trident
is 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
wideEqualizer
is now just alimit (parallelFamily f)
Each of these has a dual.
Main statements #
wideEqualizer.ι_mono
states 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
abbreviation
s 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} → CategoryTheory.Limits.WalkingParallelFamily J
- one: {J : Type w} → CategoryTheory.Limits.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 ⋯
Equations
- CategoryTheory.Limits.instInhabitedWalkingParallelFamily = { default := CategoryTheory.Limits.WalkingParallelFamily.zero }
The type family of morphisms for the diagram indexing a wide (co)equalizer.
- id: {J : Type w} → (X : CategoryTheory.Limits.WalkingParallelFamily J) → CategoryTheory.Limits.WalkingParallelFamily.Hom J X X
- line: {J : Type w} → J → CategoryTheory.Limits.WalkingParallelFamily.Hom J CategoryTheory.Limits.WalkingParallelFamily.zero CategoryTheory.Limits.WalkingParallelFamily.one
Instances For
Equations
- CategoryTheory.Limits.WalkingParallelFamily.instDecidableEqHom = CategoryTheory.Limits.WalkingParallelFamily.decEqHom✝
Satisfying the inhabited linter
Equations
- CategoryTheory.Limits.instInhabitedHomZero J = { default := CategoryTheory.Limits.WalkingParallelFamily.Hom.id CategoryTheory.Limits.WalkingParallelFamily.zero }
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
- CategoryTheory.Limits.WalkingParallelFamily.category = CategoryTheory.Category.mk ⋯ ⋯ ⋯
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
- t.ι = t.π.app CategoryTheory.Limits.WalkingParallelFamily.zero
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
- t.π = t.ι.app CategoryTheory.Limits.WalkingParallelFamily.one
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
- CategoryTheory.Limits.Cotrident.IsColimit.desc' hs k h = ⟨hs.desc (CategoryTheory.Limits.Cotrident.ofπ k h), ⋯⟩
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
HasWideEqualizer f
represents a particular choice of limiting cone for the parallel family of
morphisms f
.
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
- CategoryTheory.Limits.wideEqualizer.ι f = CategoryTheory.Limits.limit.π (CategoryTheory.Limits.parallelFamily f) CategoryTheory.Limits.WalkingParallelFamily.zero
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
Equations
- ⋯ = ⋯
The wide equalizer morphism in any limit cone is a monomorphism.
HasWideCoequalizer f g
represents a particular choice of colimiting cocone
for the parallel family of morphisms f
.
Equations
Instances For
If a wide coequalizer of f
, 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
- CategoryTheory.Limits.wideCoequalizer.π f = CategoryTheory.Limits.colimit.ι (CategoryTheory.Limits.parallelFamily f) CategoryTheory.Limits.WalkingParallelFamily.one
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
Equations
- ⋯ = ⋯
The wide coequalizer morphism in any colimit cocone is an epimorphism.
HasWideEqualizers
represents a choice of wide equalizer for every family of morphisms
Equations
Instances For
HasWideCoequalizers
represents a choice of wide coequalizer for every family of 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
Equations
- ⋯ = ⋯
Equations
- ⋯ = ⋯