Documentation

Mathlib.CategoryTheory.Limits.Shapes.Equalizers

Equalizers and coequalizers #

This file defines (co)equalizers as special cases of (co)limits.

An equalizer is the categorical generalization of the subobject {a ∈ A | f(a) = g(a)} known from abelian groups or modules. It is a limit cone over the diagram formed by f and g.

A coequalizer is the dual concept.

Main definitions #

Each of these has a dual.

Main statements #

Implementation notes #

As with the other special shapes in the limits library, all the definitions here are given as abbrevs 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 (co)equalizer.

Instances For
    def CategoryTheory.Limits.instDecidableEqWalkingParallelPairHom.decEq {a✝ a✝¹ : WalkingParallelPair} (x✝ x✝¹ : WalkingParallelPairHom a✝ a✝¹) :
    Decidable (x✝ = x✝¹)
    Instances For

      Composition of morphisms in the indexing diagram for (co)equalizers.

      Instances For

        The functor WalkingParallelPair ⥤ WalkingParallelPairᵒᵖ sending left to left and right to right.

        Instances For

          The equivalence WalkingParallelPair ⥤ WalkingParallelPairᵒᵖ sending left to left and right to right.

          Instances For

            parallelPair f g is the diagram in C consisting of the two morphisms f and g with common domain and codomain.

            Instances For

              Every functor indexing a (co)equalizer is naturally isomorphic (actually, equal) to a parallelPair

              Instances For
                def CategoryTheory.Limits.parallelPairHom {C : Type u} [Category.{v, u} C] {X Y X' Y' : C} (f g : X Y) (f' g' : X' Y') (p : X X') (q : Y Y') (wf : CategoryStruct.comp f q = CategoryStruct.comp p f') (wg : CategoryStruct.comp g q = CategoryStruct.comp p g') :

                Construct a morphism between parallel pairs.

                Instances For
                  def CategoryTheory.Limits.parallelPairIso {C : Type u} [Category.{v, u} C] {X Y X' Y' : C} (f g : X Y) (f' g' : X' Y') (p : X X') (q : Y Y') (wf : CategoryStruct.comp f q.hom = CategoryStruct.comp p.hom f') (wg : CategoryStruct.comp g q.hom = CategoryStruct.comp p.hom g') :

                  Construct a isomorphism between parallel pairs.

                  Instances For
                    @[simp]
                    theorem CategoryTheory.Limits.parallelPairHom_app_zero {C : Type u} [Category.{v, u} C] {X Y X' Y' : C} (f g : X Y) (f' g' : X' Y') (p : X X') (q : Y Y') (wf : CategoryStruct.comp f q = CategoryStruct.comp p f') (wg : CategoryStruct.comp g q = CategoryStruct.comp p g') :
                    (parallelPairHom f g f' g' p q wf wg).app WalkingParallelPair.zero = p
                    @[simp]
                    theorem CategoryTheory.Limits.parallelPairHom_app_one {C : Type u} [Category.{v, u} C] {X Y X' Y' : C} (f g : X Y) (f' g' : X' Y') (p : X X') (q : Y Y') (wf : CategoryStruct.comp f q = CategoryStruct.comp p f') (wg : CategoryStruct.comp g q = CategoryStruct.comp p g') :
                    (parallelPairHom f g f' g' p q wf wg).app WalkingParallelPair.one = q

                    Construct a natural isomorphism between functors out of the walking parallel pair from its components.

                    Instances For
                      def CategoryTheory.Limits.parallelPair.eqOfHomEq {C : Type u} [Category.{v, u} C] {X Y : C} {f g f' g' : X Y} (hf : f = f') (hg : g = g') :

                      Construct a natural isomorphism between parallelPair f g and parallelPair f' g' given equalities f = f' and g = g'.

                      Instances For
                        @[simp]
                        theorem CategoryTheory.Limits.parallelPair.eqOfHomEq_hom_app {C : Type u} [Category.{v, u} C] {X Y : C} {f g f' g' : X Y} (hf : f = f') (hg : g = g') (X✝ : WalkingParallelPair) :
                        @[simp]
                        theorem CategoryTheory.Limits.parallelPair.eqOfHomEq_inv_app {C : Type u} [Category.{v, u} C] {X Y : C} {f g f' g' : X Y} (hf : f = f') (hg : g = g') (X✝ : WalkingParallelPair) :
                        @[reducible, inline]
                        abbrev CategoryTheory.Limits.Fork {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) :
                        Type (max u v)

                        A fork on f and g is just a Cone (parallelPair f g).

                        Instances For
                          @[reducible, inline]
                          abbrev CategoryTheory.Limits.Cofork {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) :
                          Type (max u v)

                          A cofork on f and g is just a Cocone (parallelPair f g).

                          Instances For
                            def CategoryTheory.Limits.Fork.ι {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (t : Fork f g) :
                            t.pt X

                            A fork t on the parallel pair f g : X ⟶ Y consists of two morphisms t.π.app zero : t.pt ⟶ X and t.π.app one : t.pt ⟶ Y. Of these, only the first one is interesting, and we give it the shorter name Fork.ι t.

                            Instances For
                              def CategoryTheory.Limits.Cofork.π {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (t : Cofork f g) :
                              Y t.pt

                              A cofork t on the parallelPair f g : X ⟶ Y consists of two morphisms t.ι.app zero : X ⟶ t.pt and t.ι.app one : Y ⟶ t.pt. Of these, only the second one is interesting, and we give it the shorter name Cofork.π t.

                              Instances For
                                def CategoryTheory.Limits.Fork.ofι {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {P : C} (ι : P X) (w : CategoryStruct.comp ι f = CategoryStruct.comp ι g) :
                                Fork f g

                                A fork on f g : X ⟶ Y is determined by the morphism ι : P ⟶ X satisfying ι ≫ f = ι ≫ g.

                                Instances For
                                  @[simp]
                                  theorem CategoryTheory.Limits.Fork.ofι_π_app {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {P : C} (ι : P X) (w : CategoryStruct.comp ι f = CategoryStruct.comp ι g) (X✝ : WalkingParallelPair) :
                                  (ofι ι w).π.app X✝ = WalkingParallelPair.casesOn (motive := fun (t : WalkingParallelPair) => X✝ = t → (((Functor.const WalkingParallelPair).obj P).obj X✝ (parallelPair f g).obj X✝)) X✝ (fun (h : X✝ = WalkingParallelPair.zero) => ι) (fun (h : X✝ = WalkingParallelPair.one) => CategoryStruct.comp ι f)
                                  @[simp]
                                  theorem CategoryTheory.Limits.Fork.ofι_pt {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {P : C} (ι : P X) (w : CategoryStruct.comp ι f = CategoryStruct.comp ι g) :
                                  (ofι ι w).pt = P
                                  def CategoryTheory.Limits.Cofork.ofπ {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {P : C} (π : Y P) (w : CategoryStruct.comp f π = CategoryStruct.comp g π) :
                                  Cofork f g

                                  A cofork on f g : X ⟶ Y is determined by the morphism π : Y ⟶ P satisfying f ≫ π = g ≫ π.

                                  Instances For
                                    @[simp]
                                    theorem CategoryTheory.Limits.Cofork.ofπ_pt {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {P : C} (π : Y P) (w : CategoryStruct.comp f π = CategoryStruct.comp g π) :
                                    (ofπ π w).pt = P
                                    @[simp]
                                    theorem CategoryTheory.Limits.Cofork.ofπ_ι_app {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {P : C} (π : Y P) (w : CategoryStruct.comp f π = CategoryStruct.comp g π) (X✝ : WalkingParallelPair) :
                                    @[simp]
                                    theorem CategoryTheory.Limits.Fork.ι_ofι {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {P : C} (ι : P X) (w : CategoryStruct.comp ι f = CategoryStruct.comp ι g) :
                                    (ofι ι w).ι = ι
                                    @[simp]
                                    theorem CategoryTheory.Limits.Cofork.π_ofπ {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {P : C} (π : Y P) (w : CategoryStruct.comp f π = CategoryStruct.comp g π) :
                                    (ofπ π w).π = π
                                    theorem CategoryTheory.Limits.Fork.equalizer_ext {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (s : Fork f g) {W : C} {k l : W s.pt} (h : CategoryStruct.comp k s.ι = CategoryStruct.comp l s.ι) (j : WalkingParallelPair) :

                                    To check whether two maps are equalized by both maps of a fork, it suffices to check it for the first map

                                    theorem CategoryTheory.Limits.Cofork.coequalizer_ext {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (s : Cofork f g) {W : C} {k l : s.pt W} (h : CategoryStruct.comp s.π k = CategoryStruct.comp s.π l) (j : WalkingParallelPair) :

                                    To check whether two maps are coequalized by both maps of a cofork, it suffices to check it for the second map

                                    theorem CategoryTheory.Limits.Fork.IsLimit.hom_ext {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Fork f g} (hs : IsLimit s) {W : C} {k l : W s.pt} (h : CategoryStruct.comp k s.ι = CategoryStruct.comp l s.ι) :
                                    k = l
                                    theorem CategoryTheory.Limits.Cofork.IsColimit.hom_ext {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Cofork f g} (hs : IsColimit s) {W : C} {k l : s.pt W} (h : CategoryStruct.comp s.π k = CategoryStruct.comp s.π l) :
                                    k = l
                                    @[simp]
                                    theorem CategoryTheory.Limits.Fork.IsLimit.lift_ι {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Fork f g} (hs : IsLimit s) :
                                    @[simp]
                                    theorem CategoryTheory.Limits.Fork.IsLimit.lift_ι_assoc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Fork f g} (hs : IsLimit s) {Z : C} (h : X Z) :
                                    @[simp]
                                    theorem CategoryTheory.Limits.Cofork.IsColimit.π_desc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Cofork f g} (hs : IsColimit s) :
                                    @[simp]
                                    theorem CategoryTheory.Limits.Cofork.IsColimit.π_desc_assoc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Cofork f g} (hs : IsColimit s) {Z : C} (h : t.pt Z) :
                                    def CategoryTheory.Limits.Fork.IsLimit.lift {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Fork f g} (hs : IsLimit s) {W : C} (k : W X) (h : CategoryStruct.comp k f = CategoryStruct.comp k g) :
                                    W s.pt

                                    If s is a limit fork over f and g, then a morphism k : W ⟶ X satisfying k ≫ f = k ≫ g induces a morphism l : W ⟶ s.pt such that l ≫ fork.ι s = k.

                                    Instances For
                                      @[simp]
                                      theorem CategoryTheory.Limits.Fork.IsLimit.lift_ι' {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Fork f g} (hs : IsLimit s) {W : C} (k : W X) (h : CategoryStruct.comp k f = CategoryStruct.comp k g) :
                                      CategoryStruct.comp (lift hs k h) s.ι = k
                                      @[simp]
                                      theorem CategoryTheory.Limits.Fork.IsLimit.lift_ι'_assoc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Fork f g} (hs : IsLimit s) {W : C} (k : W X) (h : CategoryStruct.comp k f = CategoryStruct.comp k g) {Z : C} (h✝ : X Z) :
                                      def CategoryTheory.Limits.Fork.IsLimit.lift' {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Fork f g} (hs : IsLimit s) {W : C} (k : W X) (h : CategoryStruct.comp k f = CategoryStruct.comp k g) :
                                      { l : W s.pt // CategoryStruct.comp l s.ι = k }

                                      If s is a limit fork over f and g, then a morphism k : W ⟶ X satisfying k ≫ f = k ≫ g induces a morphism l : W ⟶ s.pt such that l ≫ fork.ι s = k.

                                      Instances For
                                        theorem CategoryTheory.Limits.Fork.IsLimit.mono {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Fork f g} (hs : IsLimit s) :
                                        def CategoryTheory.Limits.Cofork.IsColimit.desc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Cofork f g} (hs : IsColimit s) {W : C} (k : Y W) (h : CategoryStruct.comp f k = CategoryStruct.comp g k) :
                                        s.pt W

                                        If s is a colimit cofork over f and g, then a morphism k : Y ⟶ W satisfying f ≫ k = g ≫ k induces a morphism l : s.pt ⟶ W such that cofork.π s ≫ l = k.

                                        Instances For
                                          @[simp]
                                          theorem CategoryTheory.Limits.Cofork.IsColimit.π_desc' {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Cofork f g} (hs : IsColimit s) {W : C} (k : Y W) (h : CategoryStruct.comp f k = CategoryStruct.comp g k) :
                                          CategoryStruct.comp s.π (desc hs k h) = k
                                          @[simp]
                                          theorem CategoryTheory.Limits.Cofork.IsColimit.π_desc'_assoc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Cofork f g} (hs : IsColimit s) {W : C} (k : Y W) (h : CategoryStruct.comp f k = CategoryStruct.comp g k) {Z : C} (h✝ : W Z) :
                                          def CategoryTheory.Limits.Cofork.IsColimit.desc' {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Cofork f g} (hs : IsColimit s) {W : C} (k : Y W) (h : CategoryStruct.comp f k = CategoryStruct.comp g k) :
                                          { l : s.pt W // CategoryStruct.comp s.π l = k }

                                          If s is a colimit cofork over f and g, then a morphism k : Y ⟶ W satisfying f ≫ k = g ≫ k induces a morphism l : s.pt ⟶ W such that cofork.π s ≫ l = k.

                                          Instances For
                                            theorem CategoryTheory.Limits.Cofork.IsColimit.epi {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Cofork f g} (hs : IsColimit s) :
                                            theorem CategoryTheory.Limits.Fork.IsLimit.existsUnique {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Fork f g} (hs : IsLimit s) {W : C} (k : W X) (h : CategoryStruct.comp k f = CategoryStruct.comp k g) :
                                            theorem CategoryTheory.Limits.Cofork.IsColimit.existsUnique {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s : Cofork f g} (hs : IsColimit s) {W : C} (k : Y W) (h : CategoryStruct.comp f k = CategoryStruct.comp g k) :
                                            def CategoryTheory.Limits.Fork.IsLimit.mk {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (t : Fork f g) (lift : (s : Fork f g) → s.pt t.pt) (fac : ∀ (s : Fork f g), CategoryStruct.comp (lift s) t.ι = s.ι) (uniq : ∀ (s : Fork f g) (m : s.pt t.pt), CategoryStruct.comp m t.ι = s.ιm = lift s) :

                                            This is a slightly more convenient method to verify that a fork is a limit cone. It only asks for a proof of facts that carry any mathematical content

                                            Instances For
                                              @[simp]
                                              theorem CategoryTheory.Limits.Fork.IsLimit.mk_lift {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (t : Fork f g) (lift : (s : Fork f g) → s.pt t.pt) (fac : ∀ (s : Fork f g), CategoryStruct.comp (lift s) t.ι = s.ι) (uniq : ∀ (s : Fork f g) (m : s.pt t.pt), CategoryStruct.comp m t.ι = s.ιm = lift s) (s : Fork f g) :
                                              (mk t lift fac uniq).lift s = lift s
                                              def CategoryTheory.Limits.Fork.IsLimit.mk' {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (t : Fork f g) (create : (s : Fork f g) → { l : s.pt t.pt // CategoryStruct.comp l t.ι = s.ι ∀ {m : s.pt t.pt}, CategoryStruct.comp m t.ι = s.ιm = l }) :

                                              This is another convenient method to verify that a fork 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.

                                              Instances For
                                                def CategoryTheory.Limits.Cofork.IsColimit.mk {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (t : Cofork f g) (desc : (s : Cofork f g) → t.pt s.pt) (fac : ∀ (s : Cofork f g), CategoryStruct.comp t.π (desc s) = s.π) (uniq : ∀ (s : Cofork f g) (m : t.pt s.pt), CategoryStruct.comp t.π m = s.πm = desc s) :

                                                This is a slightly more convenient method to verify that a cofork is a colimit cocone. It only asks for a proof of facts that carry any mathematical content

                                                Instances For
                                                  def CategoryTheory.Limits.Cofork.IsColimit.mk' {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (t : Cofork f g) (create : (s : Cofork f g) → { l : t.pt s.pt // CategoryStruct.comp t.π l = s.π ∀ {m : t.pt s.pt}, CategoryStruct.comp t.π m = s.πm = l }) :

                                                  This is another convenient method to verify that a fork 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.

                                                  Instances For
                                                    noncomputable def CategoryTheory.Limits.Fork.IsLimit.ofExistsUnique {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {t : Fork f g} (hs : ∀ (s : Fork f g), ∃! l : s.pt t.pt, CategoryStruct.comp l t.ι = s.ι) :

                                                    Noncomputably make a limit cone from the existence of unique factorizations.

                                                    Instances For
                                                      noncomputable def CategoryTheory.Limits.Cofork.IsColimit.ofExistsUnique {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {t : Cofork f g} (hs : ∀ (s : Cofork f g), ∃! d : t.pt s.pt, CategoryStruct.comp t.π d = s.π) :

                                                      Noncomputably make a colimit cocone from the existence of unique factorizations.

                                                      Instances For
                                                        def CategoryTheory.Limits.Fork.IsLimit.homIso {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {t : Fork f g} (ht : IsLimit t) (Z : C) :
                                                        (Z t.pt) { h : Z X // CategoryStruct.comp h f = CategoryStruct.comp h g }

                                                        Given a limit cone for the pair f g : X ⟶ Y, for any Z, morphisms from Z to its point are in bijection with morphisms h : Z ⟶ X such that h ≫ f = h ≫ g. Further, this bijection is natural in Z: see Fork.IsLimit.homIso_natural. This is a special case of IsLimit.homIso', often useful to construct adjunctions.

                                                        Instances For
                                                          @[simp]
                                                          theorem CategoryTheory.Limits.Fork.IsLimit.homIso_symm_apply {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {t : Fork f g} (ht : IsLimit t) (Z : C) (h : { h : Z X // CategoryStruct.comp h f = CategoryStruct.comp h g }) :
                                                          (homIso ht Z).symm h = (lift' ht h )
                                                          @[simp]
                                                          theorem CategoryTheory.Limits.Fork.IsLimit.homIso_apply_coe {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {t : Fork f g} (ht : IsLimit t) (Z : C) (k : Z t.pt) :
                                                          ((homIso ht Z) k) = CategoryStruct.comp k t.ι
                                                          theorem CategoryTheory.Limits.Fork.IsLimit.homIso_natural {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {t : Fork f g} (ht : IsLimit t) {Z Z' : C} (q : Z' Z) (k : Z t.pt) :
                                                          ((homIso ht Z') (CategoryStruct.comp q k)) = CategoryStruct.comp q ((homIso ht Z) k)

                                                          The bijection of Fork.IsLimit.homIso is natural in Z.

                                                          def CategoryTheory.Limits.Cofork.IsColimit.homIso {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {t : Cofork f g} (ht : IsColimit t) (Z : C) :
                                                          (t.pt Z) { h : Y Z // CategoryStruct.comp f h = CategoryStruct.comp g h }

                                                          Given a colimit cocone for the pair f g : X ⟶ Y, for any Z, morphisms from the cocone point to Z are in bijection with morphisms h : Y ⟶ Z such that f ≫ h = g ≫ h. Further, this bijection is natural in Z: see Cofork.IsColimit.homIso_natural. This is a special case of IsColimit.homIso', often useful to construct adjunctions.

                                                          Instances For
                                                            @[simp]
                                                            theorem CategoryTheory.Limits.Cofork.IsColimit.homIso_symm_apply {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {t : Cofork f g} (ht : IsColimit t) (Z : C) (h : { h : Y Z // CategoryStruct.comp f h = CategoryStruct.comp g h }) :
                                                            (homIso ht Z).symm h = (desc' ht h )
                                                            @[simp]
                                                            theorem CategoryTheory.Limits.Cofork.IsColimit.homIso_apply_coe {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {t : Cofork f g} (ht : IsColimit t) (Z : C) (k : t.pt Z) :
                                                            ((homIso ht Z) k) = CategoryStruct.comp t.π k
                                                            theorem CategoryTheory.Limits.Cofork.IsColimit.homIso_natural {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {t : Cofork f g} {Z Z' : C} (q : Z Z') (ht : IsColimit t) (k : t.pt Z) :
                                                            ((homIso ht Z') (CategoryStruct.comp k q)) = CategoryStruct.comp (↑((homIso ht Z) k)) q

                                                            The bijection of Cofork.IsColimit.homIso is natural in Z.

                                                            This is a helper construction that can be useful when verifying that a category has all equalizers. Given F : WalkingParallelPair ⥤ C, which is really the same as parallelPair (F.map left) (F.map right), and a fork on F.map left and F.map right, we get a cone on F.

                                                            If you're thinking about using this, have a look at hasEqualizers_of_hasLimit_parallelPair, which you may find to be an easier way of achieving your goal.

                                                            Instances For

                                                              This is a helper construction that can be useful when verifying that a category has all coequalizers. Given F : WalkingParallelPair ⥤ C, which is really the same as parallelPair (F.map left) (F.map right), and a cofork on F.map left and F.map right, we get a cocone on F.

                                                              If you're thinking about using this, have a look at hasCoequalizers_of_hasColimit_parallelPair, which you may find to be an easier way of achieving your goal.

                                                              Instances For

                                                                Given F : WalkingParallelPair ⥤ C, which is really the same as parallelPair (F.map left) (F.map right) and a cone on F, we get a fork on F.map left and F.map right.

                                                                Instances For

                                                                  Given F : WalkingParallelPair ⥤ C, which is really the same as parallelPair (F.map left) (F.map right) and a cocone on F, we get a cofork on F.map left and F.map right.

                                                                  Instances For
                                                                    def CategoryTheory.Limits.Fork.mkHom {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Fork f g} (k : s.pt t.pt) (w : CategoryStruct.comp k t.ι = s.ι) :
                                                                    s t

                                                                    Helper function for constructing morphisms between equalizer forks.

                                                                    Instances For
                                                                      @[simp]
                                                                      theorem CategoryTheory.Limits.Fork.mkHom_hom {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Fork f g} (k : s.pt t.pt) (w : CategoryStruct.comp k t.ι = s.ι) :
                                                                      (mkHom k w).hom = k
                                                                      def CategoryTheory.Limits.Fork.ext {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Fork f g} (i : s.pt t.pt) (w : CategoryStruct.comp i.hom t.ι = s.ι := by cat_disch) :
                                                                      s t

                                                                      To construct an isomorphism between forks, it suffices to give an isomorphism between the cone points and check that it commutes with the ι morphisms.

                                                                      Instances For
                                                                        @[simp]
                                                                        theorem CategoryTheory.Limits.Fork.ext_inv {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Fork f g} (i : s.pt t.pt) (w : CategoryStruct.comp i.hom t.ι = s.ι := by cat_disch) :
                                                                        (ext i w).inv = mkHom i.inv
                                                                        @[simp]
                                                                        theorem CategoryTheory.Limits.Fork.ext_hom {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Fork f g} (i : s.pt t.pt) (w : CategoryStruct.comp i.hom t.ι = s.ι := by cat_disch) :
                                                                        (ext i w).hom = mkHom i.hom w
                                                                        def CategoryTheory.Limits.ForkOfι.ext {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {P : C} {ι ι' : P X} (w : CategoryStruct.comp ι f = CategoryStruct.comp ι g) (w' : CategoryStruct.comp ι' f = CategoryStruct.comp ι' g) (h : ι = ι') :
                                                                        Fork.ofι ι w Fork.ofι ι' w'

                                                                        Two forks of the form ofι are isomorphic whenever their ι's are equal.

                                                                        Instances For
                                                                          def CategoryTheory.Limits.Fork.isoForkOfι {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (c : Fork f g) :
                                                                          c ofι c.ι

                                                                          Every fork is isomorphic to one of the form Fork.of_ι _ _.

                                                                          Instances For
                                                                            def CategoryTheory.Limits.Fork.equivOfIsos {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {X' Y' : C} {f' g' : X' Y'} (e₀ : X X') (e₁ : Y Y') (comm₁ : CategoryStruct.comp e₀.hom f' = CategoryStruct.comp f e₁.hom := by cat_disch) (comm₂ : CategoryStruct.comp e₀.hom g' = CategoryStruct.comp g e₁.hom := by cat_disch) :
                                                                            Fork f g Fork f' g'

                                                                            If f, g : X ⟶ Y and f', g : X' ⟶ Y' pairwise form a commutative square with isomorphisms X ≅ X' and Y ≅ Y', the categories of forks are equivalent.

                                                                            Instances For
                                                                              @[simp]
                                                                              theorem CategoryTheory.Limits.Fork.equivOfIsos_functor_obj_ι {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {X' Y' : C} {f' g' : X' Y'} (e₀ : X X') (e₁ : Y Y') (comm₁ : CategoryStruct.comp e₀.hom f' = CategoryStruct.comp f e₁.hom := by cat_disch) (comm₂ : CategoryStruct.comp e₀.hom g' = CategoryStruct.comp g e₁.hom := by cat_disch) (c : Fork f g) :
                                                                              ((equivOfIsos e₀ e₁ comm₁ comm₂).functor.obj c).ι = CategoryStruct.comp c.ι e₀.hom
                                                                              @[simp]
                                                                              theorem CategoryTheory.Limits.Fork.equivOfIsos_inverse_obj_ι {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {X' Y' : C} {f' g' : X' Y'} (e₀ : X X') (e₁ : Y Y') (comm₁ : CategoryStruct.comp e₀.hom f' = CategoryStruct.comp f e₁.hom := by cat_disch) (comm₂ : CategoryStruct.comp e₀.hom g' = CategoryStruct.comp g e₁.hom := by cat_disch) (c : Fork f' g') :
                                                                              ((equivOfIsos e₀ e₁ comm₁ comm₂).inverse.obj c).ι = CategoryStruct.comp c.ι e₀.inv
                                                                              def CategoryTheory.Limits.Fork.isLimitEquivOfIsos {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {X' Y' : C} (c : Fork f g) {f' g' : X' Y'} (c' : Fork f' g') (e₀ : X X') (e₁ : Y Y') (e : c.pt c'.pt) (comm₁ : CategoryStruct.comp e₀.hom f' = CategoryStruct.comp f e₁.hom := by cat_disch) (comm₂ : CategoryStruct.comp e₀.hom g' = CategoryStruct.comp g e₁.hom := by cat_disch) (comm₃ : CategoryStruct.comp e.hom c'.ι = CategoryStruct.comp c.ι e₀.hom := by cat_disch) :

                                                                              Given two forks with isomorphic components in such a way that the natural diagrams commute, then one is a limit if and only if the other one is.

                                                                              Instances For
                                                                                def CategoryTheory.Limits.Fork.isLimitOfIsos {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {X' Y' : C} (c : Fork f g) (hc : IsLimit c) {f' g' : X' Y'} (c' : Fork f' g') (e₀ : X X') (e₁ : Y Y') (e : c.pt c'.pt) (comm₁ : CategoryStruct.comp e₀.hom f' = CategoryStruct.comp f e₁.hom := by cat_disch) (comm₂ : CategoryStruct.comp e₀.hom g' = CategoryStruct.comp g e₁.hom := by cat_disch) (comm₃ : CategoryStruct.comp e.hom c'.ι = CategoryStruct.comp c.ι e₀.hom := by cat_disch) :

                                                                                Given two forks with isomorphic components in such a way that the natural diagrams commute, then if one is a limit, then the other one is as well.

                                                                                Instances For
                                                                                  def CategoryTheory.Limits.Cofork.mkHom {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Cofork f g} (k : s.pt t.pt) (w : CategoryStruct.comp s.π k = t.π) :
                                                                                  s t

                                                                                  Helper function for constructing morphisms between coequalizer coforks.

                                                                                  Instances For
                                                                                    @[simp]
                                                                                    theorem CategoryTheory.Limits.Cofork.mkHom_hom {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Cofork f g} (k : s.pt t.pt) (w : CategoryStruct.comp s.π k = t.π) :
                                                                                    (mkHom k w).hom = k
                                                                                    @[simp]
                                                                                    theorem CategoryTheory.Limits.Fork.hom_comp_ι {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Fork f g} (f✝ : s t) :
                                                                                    @[simp]
                                                                                    theorem CategoryTheory.Limits.Fork.hom_comp_ι_assoc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Fork f g} (f✝ : s t) {Z : C} (h : X Z) :
                                                                                    @[simp]
                                                                                    theorem CategoryTheory.Limits.Fork.π_comp_hom {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Cofork f g} (f✝ : s t) :
                                                                                    @[simp]
                                                                                    theorem CategoryTheory.Limits.Fork.π_comp_hom_assoc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Cofork f g} (f✝ : s t) {Z : C} (h : t.pt Z) :
                                                                                    def CategoryTheory.Limits.Cofork.ext {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Cofork f g} (i : s.pt t.pt) (w : CategoryStruct.comp s.π i.hom = t.π := by cat_disch) :
                                                                                    s t

                                                                                    To construct an isomorphism between coforks, it suffices to give an isomorphism between the cocone points and check that it commutes with the π morphisms.

                                                                                    Instances For
                                                                                      @[simp]
                                                                                      theorem CategoryTheory.Limits.Cofork.ext_inv {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Cofork f g} (i : s.pt t.pt) (w : CategoryStruct.comp s.π i.hom = t.π := by cat_disch) :
                                                                                      (ext i w).inv = mkHom i.inv
                                                                                      @[simp]
                                                                                      theorem CategoryTheory.Limits.Cofork.ext_hom {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {s t : Cofork f g} (i : s.pt t.pt) (w : CategoryStruct.comp s.π i.hom = t.π := by cat_disch) :
                                                                                      (ext i w).hom = mkHom i.hom w
                                                                                      def CategoryTheory.Limits.CoforkOfπ.ext {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {P : C} {π π' : Y P} (w : CategoryStruct.comp f π = CategoryStruct.comp g π) (w' : CategoryStruct.comp f π' = CategoryStruct.comp g π') (h : π = π') :

                                                                                      Two coforks of the form ofπ are isomorphic whenever their π's are equal.

                                                                                      Instances For
                                                                                        def CategoryTheory.Limits.Cofork.isoCoforkOfπ {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (c : Cofork f g) :
                                                                                        c ofπ c.π

                                                                                        Every cofork is isomorphic to one of the form Cofork.ofπ _ _.

                                                                                        Instances For
                                                                                          def CategoryTheory.Limits.Cofork.isColimitEquivOfIsos {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {X' Y' : C} (c : Cofork f g) {f' g' : X' Y'} (c' : Cofork f' g') (e₀ : X X') (e₁ : Y Y') (e : c.pt c'.pt) (comm₁ : CategoryStruct.comp e₀.hom f' = CategoryStruct.comp f e₁.hom := by cat_disch) (comm₂ : CategoryStruct.comp e₀.hom g' = CategoryStruct.comp g e₁.hom := by cat_disch) (comm₃ : CategoryStruct.comp e₁.inv (CategoryStruct.comp c.π e.hom) = c'.π := by cat_disch) :

                                                                                          Given two coforks with isomorphic components in such a way that the natural diagrams commute, then one is a colimit if and only if the other one is.

                                                                                          Instances For
                                                                                            def CategoryTheory.Limits.Cofork.isColimitOfIsos {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {X' Y' : C} (c : Cofork f g) (hc : IsColimit c) {f' g' : X' Y'} (c' : Cofork f' g') (e₀ : X X') (e₁ : Y Y') (e : c.pt c'.pt) (comm₁ : CategoryStruct.comp e₀.hom f' = CategoryStruct.comp f e₁.hom := by cat_disch) (comm₂ : CategoryStruct.comp e₀.hom g' = CategoryStruct.comp g e₁.hom := by cat_disch) (comm₃ : CategoryStruct.comp e₁.inv (CategoryStruct.comp c.π e.hom) = c'.π := by cat_disch) :

                                                                                            Given two coforks with isomorphic components in such a way that the natural diagrams commute, then if one is a colimit, then the other one is as well.

                                                                                            Instances For
                                                                                              @[reducible, inline]
                                                                                              abbrev CategoryTheory.Limits.HasEqualizer {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) :

                                                                                              Two parallel morphisms f and g have an equalizer if the diagram parallelPair f g has a limit.

                                                                                              Instances For
                                                                                                @[reducible, inline]
                                                                                                noncomputable abbrev CategoryTheory.Limits.equalizer {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) [HasEqualizer f g] :
                                                                                                C

                                                                                                If an equalizer of f and g exists, we can access an arbitrary choice of such by saying equalizer f g.

                                                                                                Instances For
                                                                                                  @[reducible, inline]
                                                                                                  noncomputable abbrev CategoryTheory.Limits.equalizer.ι {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) [HasEqualizer f g] :

                                                                                                  If an equalizer of f and g exists, we can access the inclusion equalizer f g ⟶ X by saying equalizer.ι f g.

                                                                                                  Instances For
                                                                                                    @[reducible, inline]
                                                                                                    noncomputable abbrev CategoryTheory.Limits.equalizer.fork {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) [HasEqualizer f g] :
                                                                                                    Fork f g

                                                                                                    An equalizer cone for a parallel pair f and g

                                                                                                    Instances For
                                                                                                      @[simp]
                                                                                                      theorem CategoryTheory.Limits.equalizer.fork_ι {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) [HasEqualizer f g] :
                                                                                                      (fork f g).ι = ι f g
                                                                                                      noncomputable def CategoryTheory.Limits.equalizerIsEqualizer {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) [HasEqualizer f g] :

                                                                                                      The equalizer built from equalizer.ι f g is limiting.

                                                                                                      Instances For
                                                                                                        @[reducible, inline]
                                                                                                        noncomputable abbrev CategoryTheory.Limits.equalizer.lift {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasEqualizer f g] {W : C} (k : W X) (h : CategoryStruct.comp k f = CategoryStruct.comp k g) :

                                                                                                        A morphism k : W ⟶ X satisfying k ≫ f = k ≫ g factors through the equalizer of f and g via equalizer.lift : W ⟶ equalizer f g.

                                                                                                        Instances For
                                                                                                          theorem CategoryTheory.Limits.equalizer.lift_ι {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasEqualizer f g] {W : C} (k : W X) (h : CategoryStruct.comp k f = CategoryStruct.comp k g) :
                                                                                                          CategoryStruct.comp (lift k h) (ι f g) = k
                                                                                                          theorem CategoryTheory.Limits.equalizer.lift_ι_assoc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasEqualizer f g] {W : C} (k : W X) (h : CategoryStruct.comp k f = CategoryStruct.comp k g) {Z : C} (h✝ : X Z) :
                                                                                                          noncomputable def CategoryTheory.Limits.equalizer.lift' {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasEqualizer f g] {W : C} (k : W X) (h : CategoryStruct.comp k f = CategoryStruct.comp k g) :
                                                                                                          { l : W equalizer f g // CategoryStruct.comp l (ι f g) = k }

                                                                                                          A morphism k : W ⟶ X satisfying k ≫ f = k ≫ g induces a morphism l : W ⟶ equalizer f g satisfying l ≫ equalizer.ι f g = k.

                                                                                                          Instances For
                                                                                                            theorem CategoryTheory.Limits.equalizer.hom_ext {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasEqualizer f g] {W : C} {k l : W equalizer f g} (h : CategoryStruct.comp k (ι f g) = CategoryStruct.comp l (ι f g)) :
                                                                                                            k = l

                                                                                                            Two maps into an equalizer are equal if they are equal when composed with the equalizer map.

                                                                                                            theorem CategoryTheory.Limits.equalizer.hom_ext_iff {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasEqualizer f g] {W : C} {k l : W equalizer f g} :
                                                                                                            k = l CategoryStruct.comp k (ι f g) = CategoryStruct.comp l (ι f g)
                                                                                                            theorem CategoryTheory.Limits.equalizer.existsUnique {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasEqualizer f g] {W : C} (k : W X) (h : CategoryStruct.comp k f = CategoryStruct.comp k g) :
                                                                                                            instance CategoryTheory.Limits.equalizer.ι_mono {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasEqualizer f g] :
                                                                                                            Mono (ι f g)

                                                                                                            An equalizer morphism is a monomorphism

                                                                                                            theorem CategoryTheory.Limits.mono_of_isLimit_fork {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {c : Fork f g} (i : IsLimit c) :

                                                                                                            The equalizer morphism in any limit cone is a monomorphism.

                                                                                                            def CategoryTheory.Limits.idFork {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (h : f = g) :
                                                                                                            Fork f g

                                                                                                            The identity determines a cone on the equalizer diagram of f and g if f = g.

                                                                                                            Instances For
                                                                                                              def CategoryTheory.Limits.isLimitIdFork {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (h : f = g) :

                                                                                                              The identity on X is an equalizer of (f, g), if f = g.

                                                                                                              Instances For
                                                                                                                theorem CategoryTheory.Limits.isIso_limit_cone_parallelPair_of_eq {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (h₀ : f = g) {c : Fork f g} (h : IsLimit c) :

                                                                                                                Every equalizer of (f, g), where f = g, is an isomorphism.

                                                                                                                theorem CategoryTheory.Limits.equalizer.ι_of_eq {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasEqualizer f g] (h : f = g) :
                                                                                                                IsIso (ι f g)

                                                                                                                The equalizer of (f, g), where f = g, is an isomorphism.

                                                                                                                theorem CategoryTheory.Limits.isIso_limit_cone_parallelPair_of_self {C : Type u} [Category.{v, u} C] {X Y : C} {f : X Y} {c : Fork f f} (h : IsLimit c) :

                                                                                                                Every equalizer of (f, f) is an isomorphism.

                                                                                                                theorem CategoryTheory.Limits.isIso_limit_cone_parallelPair_of_epi {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {c : Fork f g} (h : IsLimit c) [Epi c.ι] :

                                                                                                                An equalizer that is an epimorphism is an isomorphism.

                                                                                                                theorem CategoryTheory.Limits.eq_of_epi_fork_ι {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (t : Fork f g) [Epi t.ι] :
                                                                                                                f = g

                                                                                                                Two morphisms are equal if there is a fork whose inclusion is epi.

                                                                                                                theorem CategoryTheory.Limits.eq_of_epi_equalizer {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasEqualizer f g] [Epi (equalizer.ι f g)] :
                                                                                                                f = g

                                                                                                                If the equalizer of two morphisms is an epimorphism, then the two morphisms are equal.

                                                                                                                instance CategoryTheory.Limits.equalizer.ι_of_self {C : Type u} [Category.{v, u} C] {X Y : C} (f : X Y) :
                                                                                                                IsIso (ι f f)

                                                                                                                The equalizer inclusion for (f, f) is an isomorphism.

                                                                                                                noncomputable def CategoryTheory.Limits.equalizer.isoSourceOfSelf {C : Type u} [Category.{v, u} C] {X Y : C} (f : X Y) :

                                                                                                                The equalizer of a morphism with itself is isomorphic to the source.

                                                                                                                Instances For
                                                                                                                  def CategoryTheory.Limits.precompFork {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {Z : C} (h : Z X) (s : Fork f g) (c : PullbackCone s.ι h) :

                                                                                                                  Given a fork s on morphisms f, g : X ⟶ Y and a pullback cone c on s.ι : s.pt ⟶ X and a morphism h : Z ⟶ X, the projection c.snd : c.pt ⟶ Z induces a fork on h ≫ f and h ≫ g.

                                                                                                                  c.pt → Z
                                                                                                                  |      |
                                                                                                                  v      v
                                                                                                                  s.pt → X ⇉ Y
                                                                                                                  
                                                                                                                  Instances For
                                                                                                                    def CategoryTheory.Limits.liftPrecomp {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {Z : C} (h : Z X) {s : Fork f g} (hs : IsLimit s) {c : PullbackCone s.ι h} (hc : IsLimit c) (s' : Fork (CategoryStruct.comp h f) (CategoryStruct.comp h g)) :
                                                                                                                    s'.pt (precompFork h s c).pt

                                                                                                                    Any fork on h ≫ f and h ≫ g lifts to a pullback along h of an equalizer of f and g.

                                                                                                                    Instances For
                                                                                                                      def CategoryTheory.Limits.isLimitPrecompFork {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {Z : C} (h : Z X) {s : Fork f g} (hs : IsLimit s) {c : PullbackCone s.ι h} (hc : IsLimit c) :

                                                                                                                      The pullback of an equalizer is an equalizer.

                                                                                                                      Instances For
                                                                                                                        theorem CategoryTheory.Limits.hasEqualizer_precomp_of_equalizer {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {Z : C} (h : Z X) {s : Fork f g} (hs : IsLimit s) {c : PullbackCone s.ι h} (hc : IsLimit c) :
                                                                                                                        @[reducible, inline]
                                                                                                                        abbrev CategoryTheory.Limits.HasCoequalizer {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) :

                                                                                                                        Two parallel morphisms f and g have a coequalizer if the diagram parallelPair f g has a colimit.

                                                                                                                        Instances For
                                                                                                                          @[reducible, inline]
                                                                                                                          noncomputable abbrev CategoryTheory.Limits.coequalizer {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) [HasCoequalizer f g] :
                                                                                                                          C

                                                                                                                          If a coequalizer of f and g exists, we can access an arbitrary choice of such by saying coequalizer f g.

                                                                                                                          Instances For
                                                                                                                            @[reducible, inline]
                                                                                                                            noncomputable abbrev CategoryTheory.Limits.coequalizer.π {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) [HasCoequalizer f g] :

                                                                                                                            If a coequalizer of f and g exists, we can access the corresponding projection by saying coequalizer.π f g.

                                                                                                                            Instances For
                                                                                                                              @[reducible, inline]
                                                                                                                              noncomputable abbrev CategoryTheory.Limits.coequalizer.cofork {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) [HasCoequalizer f g] :
                                                                                                                              Cofork f g

                                                                                                                              An arbitrary choice of coequalizer cocone for a parallel pair f and g.

                                                                                                                              Instances For
                                                                                                                                @[simp]
                                                                                                                                theorem CategoryTheory.Limits.coequalizer.cofork_π {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) [HasCoequalizer f g] :
                                                                                                                                (cofork f g).π = π f g
                                                                                                                                noncomputable def CategoryTheory.Limits.coequalizerIsCoequalizer {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) [HasCoequalizer f g] :

                                                                                                                                The cofork built from coequalizer.π f g is colimiting.

                                                                                                                                Instances For
                                                                                                                                  @[reducible, inline]
                                                                                                                                  noncomputable abbrev CategoryTheory.Limits.coequalizer.desc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasCoequalizer f g] {W : C} (k : Y W) (h : CategoryStruct.comp f k = CategoryStruct.comp g k) :

                                                                                                                                  Any morphism k : Y ⟶ W satisfying f ≫ k = g ≫ k factors through the coequalizer of f and g via coequalizer.desc : coequalizer f g ⟶ W.

                                                                                                                                  Instances For
                                                                                                                                    theorem CategoryTheory.Limits.coequalizer.π_desc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasCoequalizer f g] {W : C} (k : Y W) (h : CategoryStruct.comp f k = CategoryStruct.comp g k) :
                                                                                                                                    CategoryStruct.comp (π f g) (desc k h) = k
                                                                                                                                    theorem CategoryTheory.Limits.coequalizer.π_desc_assoc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasCoequalizer f g] {W : C} (k : Y W) (h : CategoryStruct.comp f k = CategoryStruct.comp g k) {Z : C} (h✝ : W Z) :
                                                                                                                                    theorem CategoryTheory.Limits.coequalizer.π_colimMap_desc {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasCoequalizer f g] {X' Y' Z : C} (f' g' : X' Y') [HasCoequalizer f' g'] (p : X X') (q : Y Y') (wf : CategoryStruct.comp f q = CategoryStruct.comp p f') (wg : CategoryStruct.comp g q = CategoryStruct.comp p g') (h : Y' Z) (wh : CategoryStruct.comp f' h = CategoryStruct.comp g' h) :
                                                                                                                                    noncomputable def CategoryTheory.Limits.coequalizer.desc' {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasCoequalizer f g] {W : C} (k : Y W) (h : CategoryStruct.comp f k = CategoryStruct.comp g k) :
                                                                                                                                    { l : coequalizer f g W // CategoryStruct.comp (π f g) l = k }

                                                                                                                                    Any morphism k : Y ⟶ W satisfying f ≫ k = g ≫ k induces a morphism l : coequalizer f g ⟶ W satisfying coequalizer.π ≫ g = l.

                                                                                                                                    Instances For
                                                                                                                                      theorem CategoryTheory.Limits.coequalizer.hom_ext {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasCoequalizer f g] {W : C} {k l : coequalizer f g W} (h : CategoryStruct.comp (π f g) k = CategoryStruct.comp (π f g) l) :
                                                                                                                                      k = l

                                                                                                                                      Two maps from a coequalizer are equal if they are equal when composed with the coequalizer map

                                                                                                                                      theorem CategoryTheory.Limits.coequalizer.hom_ext_iff {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasCoequalizer f g] {W : C} {k l : coequalizer f g W} :
                                                                                                                                      k = l CategoryStruct.comp (π f g) k = CategoryStruct.comp (π f g) l
                                                                                                                                      instance CategoryTheory.Limits.coequalizer.π_epi {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasCoequalizer f g] :
                                                                                                                                      Epi (π f g)

                                                                                                                                      A coequalizer morphism is an epimorphism

                                                                                                                                      theorem CategoryTheory.Limits.epi_of_isColimit_cofork {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {c : Cofork f g} (i : IsColimit c) :

                                                                                                                                      The coequalizer morphism in any colimit cocone is an epimorphism.

                                                                                                                                      def CategoryTheory.Limits.idCofork {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (h : f = g) :
                                                                                                                                      Cofork f g

                                                                                                                                      The identity determines a cocone on the coequalizer diagram of f and g, if f = g.

                                                                                                                                      Instances For
                                                                                                                                        def CategoryTheory.Limits.isColimitIdCofork {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (h : f = g) :

                                                                                                                                        The identity on Y is a coequalizer of (f, g), where f = g.

                                                                                                                                        Instances For
                                                                                                                                          theorem CategoryTheory.Limits.isIso_colimit_cocone_parallelPair_of_eq {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (h₀ : f = g) {c : Cofork f g} (h : IsColimit c) :

                                                                                                                                          Every coequalizer of (f, g), where f = g, is an isomorphism.

                                                                                                                                          theorem CategoryTheory.Limits.coequalizer.π_of_eq {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasCoequalizer f g] (h : f = g) :
                                                                                                                                          IsIso (π f g)

                                                                                                                                          The coequalizer of (f, g), where f = g, is an isomorphism.

                                                                                                                                          Every coequalizer of (f, f) is an isomorphism.

                                                                                                                                          theorem CategoryTheory.Limits.isIso_limit_cocone_parallelPair_of_epi {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {c : Cofork f g} (h : IsColimit c) [Mono c.π] :

                                                                                                                                          A coequalizer that is a monomorphism is an isomorphism.

                                                                                                                                          theorem CategoryTheory.Limits.eq_of_mono_cofork_π {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} (t : Cofork f g) [Mono t.π] :
                                                                                                                                          f = g

                                                                                                                                          Two morphisms are equal if there is a cofork whose projection is mono.

                                                                                                                                          theorem CategoryTheory.Limits.eq_of_mono_coequalizer {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} [HasCoequalizer f g] [Mono (coequalizer.π f g)] :
                                                                                                                                          f = g

                                                                                                                                          If the coequalizer of two morphisms is a monomorphism, then the two morphisms are equal.

                                                                                                                                          instance CategoryTheory.Limits.coequalizer.π_of_self {C : Type u} [Category.{v, u} C] {X Y : C} (f : X Y) :
                                                                                                                                          IsIso (π f f)

                                                                                                                                          The coequalizer projection for (f, f) is an isomorphism.

                                                                                                                                          noncomputable def CategoryTheory.Limits.coequalizer.isoTargetOfSelf {C : Type u} [Category.{v, u} C] {X Y : C} (f : X Y) :

                                                                                                                                          The coequalizer of a morphism with itself is isomorphic to the target.

                                                                                                                                          Instances For
                                                                                                                                            noncomputable def CategoryTheory.Limits.equalizerComparison {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) [HasEqualizer f g] [HasEqualizer (G.map f) (G.map g)] :
                                                                                                                                            G.obj (equalizer f g) equalizer (G.map f) (G.map g)

                                                                                                                                            The comparison morphism for the equalizer of f,g. This is an isomorphism iff G preserves the equalizer of f,g; see Mathlib/CategoryTheory/Limits/Preserves/Shapes/Equalizers.lean

                                                                                                                                            Instances For
                                                                                                                                              @[simp]
                                                                                                                                              theorem CategoryTheory.Limits.map_lift_equalizerComparison {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) [HasEqualizer f g] [HasEqualizer (G.map f) (G.map g)] {Z : C} {h : Z X} (w : CategoryStruct.comp h f = CategoryStruct.comp h g) :
                                                                                                                                              @[simp]
                                                                                                                                              theorem CategoryTheory.Limits.map_lift_equalizerComparison_assoc {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) [HasEqualizer f g] [HasEqualizer (G.map f) (G.map g)] {Z : C} {h : Z X} (w : CategoryStruct.comp h f = CategoryStruct.comp h g) {Z✝ : D} (h✝ : equalizer (G.map f) (G.map g) Z✝) :
                                                                                                                                              noncomputable def CategoryTheory.Limits.coequalizerComparison {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) [HasCoequalizer f g] [HasCoequalizer (G.map f) (G.map g)] :
                                                                                                                                              coequalizer (G.map f) (G.map g) G.obj (coequalizer f g)

                                                                                                                                              The comparison morphism for the coequalizer of f,g.

                                                                                                                                              Instances For
                                                                                                                                                @[simp]
                                                                                                                                                theorem CategoryTheory.Limits.coequalizerComparison_map_desc_assoc {C : Type u} [Category.{v, u} C] {X Y : C} (f g : X Y) {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) [HasCoequalizer f g] [HasCoequalizer (G.map f) (G.map g)] {Z : C} {h : Y Z} (w : CategoryStruct.comp f h = CategoryStruct.comp g h) {Z✝ : D} (h✝ : G.obj Z Z✝) :
                                                                                                                                                @[reducible, inline]

                                                                                                                                                A category HasEqualizers if it has all limits of shape WalkingParallelPair, i.e. if it has an equalizer for every parallel pair of morphisms.

                                                                                                                                                Instances For
                                                                                                                                                  @[reducible, inline]

                                                                                                                                                  A category HasCoequalizers if it has all colimits of shape WalkingParallelPair, i.e. if it has a coequalizer for every parallel pair of morphisms.

                                                                                                                                                  Instances For

                                                                                                                                                    If C has all limits of diagrams parallelPair f g, then it has all equalizers

                                                                                                                                                    If C has all colimits of diagrams parallelPair f g, then it has all coequalizers

                                                                                                                                                    A split mono f equalizes (retraction f ≫ f) and (𝟙 Y). Here we build the cone, and show in isSplitMonoEqualizes that it is a limit cone.

                                                                                                                                                    Instances For

                                                                                                                                                      A split mono f equalizes (retraction f ≫ f) and (𝟙 Y).

                                                                                                                                                      Instances For
                                                                                                                                                        def CategoryTheory.Limits.splitMonoOfEqualizer (C : Type u) [Category.{v, u} C] {X Y : C} {f : X Y} {r : Y X} (hr : CategoryStruct.comp f (CategoryStruct.comp r f) = f) (h : IsLimit (Fork.ofι f )) :

                                                                                                                                                        We show that the converse to isSplitMonoEqualizes is true: Whenever f equalizes (r ≫ f) and (𝟙 Y), then r is a retraction of f.

                                                                                                                                                        Instances For
                                                                                                                                                          def CategoryTheory.Limits.isEqualizerCompMono {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {c : Fork f g} (i : IsLimit c) {Z : C} (h : Y Z) [hm : Mono h] :
                                                                                                                                                          have this := ; IsLimit (Fork.ofι c.ι )

                                                                                                                                                          The fork obtained by postcomposing an equalizer fork with a monomorphism is an equalizer.

                                                                                                                                                          Instances For

                                                                                                                                                            An equalizer of an idempotent morphism and the identity is split mono.

                                                                                                                                                            Instances For

                                                                                                                                                              The equalizer of an idempotent morphism and the identity is split mono.

                                                                                                                                                              Instances For

                                                                                                                                                                A split epi f coequalizes (f ≫ section_ f) and (𝟙 X). Here we build the cocone, and show in isSplitEpiCoequalizes that it is a colimit cocone.

                                                                                                                                                                Instances For

                                                                                                                                                                  A split epi f coequalizes (f ≫ section_ f) and (𝟙 X).

                                                                                                                                                                  Instances For
                                                                                                                                                                    def CategoryTheory.Limits.splitEpiOfCoequalizer (C : Type u) [Category.{v, u} C] {X Y : C} {f : X Y} {s : Y X} (hs : CategoryStruct.comp f (CategoryStruct.comp s f) = f) (h : IsColimit (Cofork.ofπ f )) :

                                                                                                                                                                    We show that the converse to isSplitEpiEqualizes is true: Whenever f coequalizes (f ≫ s) and (𝟙 X), then s is a section of f.

                                                                                                                                                                    Instances For
                                                                                                                                                                      def CategoryTheory.Limits.isCoequalizerEpiComp {C : Type u} [Category.{v, u} C] {X Y : C} {f g : X Y} {c : Cofork f g} (i : IsColimit c) {W : C} (h : W X) [hm : Epi h] :
                                                                                                                                                                      have this := ; IsColimit (Cofork.ofπ c.π this)

                                                                                                                                                                      The cofork obtained by precomposing a coequalizer cofork with an epimorphism is a coequalizer.

                                                                                                                                                                      Instances For

                                                                                                                                                                        A coequalizer of an idempotent morphism and the identity is split epi.

                                                                                                                                                                        Instances For

                                                                                                                                                                          The coequalizer of an idempotent morphism and the identity is split epi.

                                                                                                                                                                          Instances For