Documentation

Mathlib.CategoryTheory.Limits.Shapes.Multiequalizer

Multi-(co)equalizers #

A multiequalizer is an equalizer of two morphisms between two products. Since both products and equalizers are limits, such an object is again a limit. This file provides the diagram whose limit is indeed such an object. In fact, it is well-known that any limit can be obtained as a multiequalizer. The dual construction (multicoequalizers) is also provided.

Projects #

Prove that a multiequalizer can be identified with an equalizer between products (and analogously for multicoequalizers).

Prove that the limit of any diagram is a multiequalizer (and similarly for colimits).

structure CategoryTheory.Limits.MulticospanShape :
Type (max (w + 1) (w' + 1))

The shape of a multiequalizer diagram. It involves two types L and R, and two maps RL.

  • L : Type w

    the left type

  • R : Type w'

    the right type

  • fst : self.Rself.L

    the first map RL

  • snd : self.Rself.L

    the second map RL

Instances For

    Given a type ι, this is the shape of multiequalizer diagrams corresponding to situations where we want to equalize two families of maps U i ⟶ V ⟨i, j⟩ and U j ⟶ V ⟨i, j⟩ with i : ι and j : ι.

    Instances For
      @[simp]
      theorem CategoryTheory.Limits.MulticospanShape.prod_snd (ι : Type w) (self : ι × ι) :
      (prod ι).snd self = self.2
      @[simp]
      theorem CategoryTheory.Limits.MulticospanShape.prod_R (ι : Type w) :
      (prod ι).R = (ι × ι)
      @[simp]
      theorem CategoryTheory.Limits.MulticospanShape.prod_fst (ι : Type w) (self : ι × ι) :
      (prod ι).fst self = self.1
      structure CategoryTheory.Limits.MultispanShape :
      Type (max (w + 1) (w' + 1))

      The shape of a multicoequalizer diagram. It involves two types L and R, and two maps LR.

      • L : Type w

        the left type

      • R : Type w'

        the right type

      • fst : self.Lself.R

        the first map LR

      • snd : self.Lself.R

        the second map LR

      Instances For

        Given a type ι, this is the shape of multicoequalizer diagrams corresponding to situations where we want to coequalize two families of maps V ⟨i, j⟩ ⟶ U i and V ⟨i, j⟩ ⟶ U j with i : ι and j : ι.

        Instances For
          @[simp]
          theorem CategoryTheory.Limits.MultispanShape.prod_L (ι : Type w) :
          (prod ι).L = (ι × ι)
          @[simp]
          theorem CategoryTheory.Limits.MultispanShape.prod_snd (ι : Type w) (self : ι × ι) :
          (prod ι).snd self = self.2
          @[simp]
          theorem CategoryTheory.Limits.MultispanShape.prod_fst (ι : Type w) (self : ι × ι) :
          (prod ι).fst self = self.1

          Given a linearly ordered type ι, this is the shape of multicoequalizer diagrams corresponding to situations where we want to coequalize two families of maps V ⟨i, j⟩ ⟶ U i and V ⟨i, j⟩ ⟶ U j with i < j.

          Instances For
            @[simp]
            theorem CategoryTheory.Limits.MultispanShape.ofLinearOrder_snd (ι : Type w) [LinearOrder ι] (x : {x : ι × ι | x.1 < x.2}) :
            (ofLinearOrder ι).snd x = (↑x).2
            @[simp]
            theorem CategoryTheory.Limits.MultispanShape.ofLinearOrder_fst (ι : Type w) [LinearOrder ι] (x : {x : ι × ι | x.1 < x.2}) :
            (ofLinearOrder ι).fst x = (↑x).1

            The type underlying the multiequalizer diagram.

            Instances For

              The type underlying the multicoequalizer diagram.

              Instances For

                Morphisms for WalkingMulticospan.

                Instances For

                  Composition of morphisms for WalkingMulticospan.

                  Instances For
                    def CategoryTheory.Limits.WalkingMulticospan.functorExt {J : MulticospanShape} {C : Type u_1} [Category.{v_1, u_1} C] {F G : Functor (WalkingMulticospan J) C} (left : (i : J.L) → F.obj (left i) G.obj (left i)) (right : (i : J.R) → F.obj (right i) G.obj (right i)) (wl : ∀ (i : J.R), CategoryStruct.comp (F.map (Hom.fst i)) (right i).hom = CategoryStruct.comp (left (J.fst i)).hom (G.map (Hom.fst i)) := by cat_disch) (wr : ∀ (i : J.R), CategoryStruct.comp (F.map (Hom.snd i)) (right i).hom = CategoryStruct.comp (left (J.snd i)).hom (G.map (Hom.snd i)) := by cat_disch) :
                    F G

                    Construct a natural isomorphism between functors out of a walking multicospan from its components.

                    Instances For
                      @[simp]
                      theorem CategoryTheory.Limits.WalkingMulticospan.functorExt_hom_app {J : MulticospanShape} {C : Type u_1} [Category.{v_1, u_1} C] {F G : Functor (WalkingMulticospan J) C} (left : (i : J.L) → F.obj (left i) G.obj (left i)) (right : (i : J.R) → F.obj (right i) G.obj (right i)) (wl : ∀ (i : J.R), CategoryStruct.comp (F.map (Hom.fst i)) (right i).hom = CategoryStruct.comp (left (J.fst i)).hom (G.map (Hom.fst i)) := by cat_disch) (wr : ∀ (i : J.R), CategoryStruct.comp (F.map (Hom.snd i)) (right i).hom = CategoryStruct.comp (left (J.snd i)).hom (G.map (Hom.snd i)) := by cat_disch) (X : WalkingMulticospan J) :
                      (functorExt left right wl wr).hom.app X = (match X with | WalkingMulticospan.left i => left i | WalkingMulticospan.right i => right i).hom
                      @[simp]
                      theorem CategoryTheory.Limits.WalkingMulticospan.functorExt_inv_app {J : MulticospanShape} {C : Type u_1} [Category.{v_1, u_1} C] {F G : Functor (WalkingMulticospan J) C} (left : (i : J.L) → F.obj (left i) G.obj (left i)) (right : (i : J.R) → F.obj (right i) G.obj (right i)) (wl : ∀ (i : J.R), CategoryStruct.comp (F.map (Hom.fst i)) (right i).hom = CategoryStruct.comp (left (J.fst i)).hom (G.map (Hom.fst i)) := by cat_disch) (wr : ∀ (i : J.R), CategoryStruct.comp (F.map (Hom.snd i)) (right i).hom = CategoryStruct.comp (left (J.snd i)).hom (G.map (Hom.snd i)) := by cat_disch) (X : WalkingMulticospan J) :
                      (functorExt left right wl wr).inv.app X = (match X with | WalkingMulticospan.left i => left i | WalkingMulticospan.right i => right i).inv
                      theorem CategoryTheory.Limits.WalkingMulticospan.functor_ext {J : MulticospanShape} {C : Type u_1} [Category.{v_1, u_1} C] {F G : Functor (WalkingMulticospan J) C} (left : ∀ (i : J.L), F.obj (left i) = G.obj (left i)) (right : ∀ (i : J.R), F.obj (right i) = G.obj (right i)) (wl : ∀ (i : J.R), CategoryStruct.comp (F.map (Hom.fst i)) (eqToHom ) = CategoryStruct.comp (eqToHom ) (G.map (Hom.fst i))) (wr : ∀ (i : J.R), CategoryStruct.comp (F.map (Hom.snd i)) (eqToHom ) = CategoryStruct.comp (eqToHom ) (G.map (Hom.snd i))) :
                      F = G
                      @[implicit_reducible]

                      Morphisms for WalkingMultispan.

                      Instances For

                        Composition of morphisms for WalkingMultispan.

                        Instances For
                          def CategoryTheory.Limits.WalkingMultispan.functorExt {J : MultispanShape} {C : Type u_1} [Category.{v_1, u_1} C] {F G : Functor (WalkingMultispan J) C} (left : (i : J.L) → F.obj (left i) G.obj (left i)) (right : (i : J.R) → F.obj (right i) G.obj (right i)) (wl : ∀ (i : J.L), CategoryStruct.comp (F.map (Hom.fst i)) (right (J.fst i)).hom = CategoryStruct.comp (left i).hom (G.map (Hom.fst i)) := by cat_disch) (wr : ∀ (i : J.L), CategoryStruct.comp (F.map (Hom.snd i)) (right (J.snd i)).hom = CategoryStruct.comp (left i).hom (G.map (Hom.snd i)) := by cat_disch) :
                          F G

                          Construct a natural isomorphism between functors out of a walking multispan from its components.

                          Instances For
                            @[simp]
                            theorem CategoryTheory.Limits.WalkingMultispan.functorExt_inv_app {J : MultispanShape} {C : Type u_1} [Category.{v_1, u_1} C] {F G : Functor (WalkingMultispan J) C} (left : (i : J.L) → F.obj (left i) G.obj (left i)) (right : (i : J.R) → F.obj (right i) G.obj (right i)) (wl : ∀ (i : J.L), CategoryStruct.comp (F.map (Hom.fst i)) (right (J.fst i)).hom = CategoryStruct.comp (left i).hom (G.map (Hom.fst i)) := by cat_disch) (wr : ∀ (i : J.L), CategoryStruct.comp (F.map (Hom.snd i)) (right (J.snd i)).hom = CategoryStruct.comp (left i).hom (G.map (Hom.snd i)) := by cat_disch) (X : WalkingMultispan J) :
                            (functorExt left right wl wr).inv.app X = (match X with | WalkingMultispan.left i => left i | WalkingMultispan.right i => right i).inv
                            @[simp]
                            theorem CategoryTheory.Limits.WalkingMultispan.functorExt_hom_app {J : MultispanShape} {C : Type u_1} [Category.{v_1, u_1} C] {F G : Functor (WalkingMultispan J) C} (left : (i : J.L) → F.obj (left i) G.obj (left i)) (right : (i : J.R) → F.obj (right i) G.obj (right i)) (wl : ∀ (i : J.L), CategoryStruct.comp (F.map (Hom.fst i)) (right (J.fst i)).hom = CategoryStruct.comp (left i).hom (G.map (Hom.fst i)) := by cat_disch) (wr : ∀ (i : J.L), CategoryStruct.comp (F.map (Hom.snd i)) (right (J.snd i)).hom = CategoryStruct.comp (left i).hom (G.map (Hom.snd i)) := by cat_disch) (X : WalkingMultispan J) :
                            (functorExt left right wl wr).hom.app X = (match X with | WalkingMultispan.left i => left i | WalkingMultispan.right i => right i).hom

                            The bijection Arrow (WalkingMultispan J) ≃ WalkingMultispan J ⊕ J.R ⊕ J.R.

                            Instances For
                              structure CategoryTheory.Limits.MulticospanIndex (J : MulticospanShape) (C : Type u) [Category.{v, u} C] :
                              Type (max (max (max u v) w) w')

                              This is a structure encapsulating the data necessary to define a Multicospan.

                              Instances For
                                structure CategoryTheory.Limits.MultispanIndex (J : MultispanShape) (C : Type u) [Category.{v, u} C] :
                                Type (max (max (max u v) w) w')

                                This is a structure encapsulating the data necessary to define a Multispan.

                                Instances For

                                  The induced map ∏ᶜ I.left ⟶ ∏ᶜ I.right via I.fst for limiting fans.

                                  Instances For

                                    The induced map ∏ᶜ I.left ⟶ ∏ᶜ I.right via I.snd for limiting fans.

                                    Instances For

                                      Taking the multiequalizer over the multicospan index is equivalent to taking the equalizer over the two morphisms ∏ᶜ I.left ⇉ ∏ᶜ I.right. This is the diagram of the latter for limiting fans.

                                      Instances For

                                        The induced map ∏ᶜ I.left ⟶ ∏ᶜ I.right via I.fst.

                                        Instances For

                                          The induced map ∏ᶜ I.left ⟶ ∏ᶜ I.right via I.snd.

                                          Instances For

                                            Taking the multiequalizer over the multicospan index is equivalent to taking the equalizer over the two morphisms ∏ᶜ I.left ⇉ ∏ᶜ I.right. This is the diagram of the latter.

                                            Instances For

                                              The induced map ∐ I.left ⟶ ∐ I.right via I.fst for colimiting cofans.

                                              Instances For

                                                The induced map ∐ I.left ⟶ ∐ I.right via I.snd for colimiting cofans.

                                                Instances For

                                                  Taking the multicoequalizer over the multispan index is equivalent to taking the coequalizer over the two morphisms ∐ I.left ⇉ ∐ I.right. This is the diagram of the latter for colimiting cofans.

                                                  Instances For

                                                    The induced map ∐ I.left ⟶ ∐ I.right via I.fst.

                                                    Instances For

                                                      The induced map ∐ I.left ⟶ ∐ I.right via I.snd.

                                                      Instances For
                                                        @[reducible, inline]

                                                        Taking the multicoequalizer over the multispan index is equivalent to taking the coequalizer over the two morphisms ∐ I.left ⇉ ∐ I.right. This is the diagram of the latter.

                                                        Instances For
                                                          @[reducible, inline]
                                                          abbrev CategoryTheory.Limits.Multifork {C : Type u} [Category.{v, u} C] {J : MulticospanShape} (I : MulticospanIndex J C) :
                                                          Type (max (max (max w w') u) v)

                                                          A multifork is a cone over a multicospan.

                                                          Instances For
                                                            @[reducible, inline]
                                                            abbrev CategoryTheory.Limits.Multicofork {C : Type u} [Category.{v, u} C] {J : MultispanShape} (I : MultispanIndex J C) :
                                                            Type (max (max (max w w') u) v)

                                                            A multicofork is a cocone over a multispan.

                                                            Instances For

                                                              The maps from the cone point of a multifork to the objects on the left.

                                                              Instances For
                                                                @[simp]
                                                                theorem CategoryTheory.Limits.Multifork.hom_comp_ι {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} (K₁ K₂ : Multifork I) (f : K₁ K₂) (j : J.L) :
                                                                CategoryStruct.comp f.hom (K₂.ι j) = K₁.ι j
                                                                @[simp]
                                                                theorem CategoryTheory.Limits.Multifork.hom_comp_ι_assoc {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} (K₁ K₂ : Multifork I) (f : K₁ K₂) (j : J.L) {Z : C} (h : I.left j Z) :
                                                                def CategoryTheory.Limits.Multifork.ofι {C : Type u} [Category.{v, u} C] {J : MulticospanShape} (I : MulticospanIndex J C) (P : C) (ι : (a : J.L) → P I.left a) (w : ∀ (b : J.R), CategoryStruct.comp (ι (J.fst b)) (I.fst b) = CategoryStruct.comp (ι (J.snd b)) (I.snd b)) :

                                                                Construct a multifork using a collection ι of morphisms.

                                                                Instances For
                                                                  @[simp]
                                                                  theorem CategoryTheory.Limits.Multifork.ofι_pt {C : Type u} [Category.{v, u} C] {J : MulticospanShape} (I : MulticospanIndex J C) (P : C) (ι : (a : J.L) → P I.left a) (w : ∀ (b : J.R), CategoryStruct.comp (ι (J.fst b)) (I.fst b) = CategoryStruct.comp (ι (J.snd b)) (I.snd b)) :
                                                                  (ofι I P ι w).pt = P
                                                                  @[simp]
                                                                  theorem CategoryTheory.Limits.Multifork.ofι_π_app {C : Type u} [Category.{v, u} C] {J : MulticospanShape} (I : MulticospanIndex J C) (P : C) (ι : (a : J.L) → P I.left a) (w : ∀ (b : J.R), CategoryStruct.comp (ι (J.fst b)) (I.fst b) = CategoryStruct.comp (ι (J.snd b)) (I.snd b)) (x : WalkingMulticospan J) :
                                                                  (ofι I P ι w).π.app x = match x with | WalkingMulticospan.left a => ι a | WalkingMulticospan.right b => CategoryStruct.comp (ι (J.fst b)) (I.fst b)
                                                                  @[simp]
                                                                  theorem CategoryTheory.Limits.Multifork.ι_ofι {C : Type u} [Category.{v, u} C] {J : MulticospanShape} (I : MulticospanIndex J C) (P : C) (ι : (a : J.L) → P I.left a) (w : ∀ (b : J.R), CategoryStruct.comp (ι (J.fst b)) (I.fst b) = CategoryStruct.comp (ι (J.snd b)) (I.snd b)) (i : J.L) :
                                                                  (ofι I P ι w).ι i = ι i
                                                                  def CategoryTheory.Limits.Multifork.ext {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} {t s : Multifork I} (e : t.pt s.pt) (h : ∀ (i : J.L), CategoryStruct.comp e.hom (s.ι i) = t.ι i := by cat_disch) :
                                                                  t s

                                                                  Constructor for isomorphisms between multiforks.

                                                                  Instances For
                                                                    @[simp]
                                                                    theorem CategoryTheory.Limits.Multifork.ext_inv_hom {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} {t s : Multifork I} (e : t.pt s.pt) (h : ∀ (i : J.L), CategoryStruct.comp e.hom (s.ι i) = t.ι i := by cat_disch) :
                                                                    (ext e h).inv.hom = e.inv
                                                                    @[simp]
                                                                    theorem CategoryTheory.Limits.Multifork.ext_hom_hom {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} {t s : Multifork I} (e : t.pt s.pt) (h : ∀ (i : J.L), CategoryStruct.comp e.hom (s.ι i) = t.ι i := by cat_disch) :
                                                                    (ext e h).hom.hom = e.hom

                                                                    Every multifork is isomorphic to one of the form Multifork.ofι.

                                                                    Instances For
                                                                      def CategoryTheory.Limits.Multifork.IsLimit.mk {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} (K : Multifork I) (lift : (E : Multifork I) → E.pt K.pt) (fac : ∀ (E : Multifork I) (i : J.L), CategoryStruct.comp (lift E) (K.ι i) = E.ι i) (uniq : ∀ (E : Multifork I) (m : E.pt K.pt), (∀ (i : J.L), CategoryStruct.comp m (K.ι i) = E.ι i)m = lift E) :

                                                                      This definition provides a convenient way to show that a multifork is a limit.

                                                                      Instances For
                                                                        @[simp]
                                                                        theorem CategoryTheory.Limits.Multifork.IsLimit.mk_lift {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} (K : Multifork I) (lift : (E : Multifork I) → E.pt K.pt) (fac : ∀ (E : Multifork I) (i : J.L), CategoryStruct.comp (lift E) (K.ι i) = E.ι i) (uniq : ∀ (E : Multifork I) (m : E.pt K.pt), (∀ (i : J.L), CategoryStruct.comp m (K.ι i) = E.ι i)m = lift E) (E : Multifork I) :
                                                                        (mk K lift fac uniq).lift E = lift E
                                                                        theorem CategoryTheory.Limits.Multifork.IsLimit.hom_ext {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} {K : Multifork I} (hK : IsLimit K) {T : C} {f g : T K.pt} (h : ∀ (a : J.L), CategoryStruct.comp f (K.ι a) = CategoryStruct.comp g (K.ι a)) :
                                                                        f = g
                                                                        def CategoryTheory.Limits.Multifork.IsLimit.lift {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} {K : Multifork I} (hK : IsLimit K) {T : C} (k : (a : J.L) → T I.left a) (hk : ∀ (b : J.R), CategoryStruct.comp (k (J.fst b)) (I.fst b) = CategoryStruct.comp (k (J.snd b)) (I.snd b)) :
                                                                        T K.pt

                                                                        Constructor for morphisms to the point of a limit multifork.

                                                                        Instances For
                                                                          @[simp]
                                                                          theorem CategoryTheory.Limits.Multifork.IsLimit.fac {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} {K : Multifork I} (hK : IsLimit K) {T : C} (k : (a : J.L) → T I.left a) (hk : ∀ (b : J.R), CategoryStruct.comp (k (J.fst b)) (I.fst b) = CategoryStruct.comp (k (J.snd b)) (I.snd b)) (a : J.L) :
                                                                          CategoryStruct.comp (lift hK k hk) (K.ι a) = k a
                                                                          @[simp]
                                                                          theorem CategoryTheory.Limits.Multifork.IsLimit.fac_assoc {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} {K : Multifork I} (hK : IsLimit K) {T : C} (k : (a : J.L) → T I.left a) (hk : ∀ (b : J.R), CategoryStruct.comp (k (J.fst b)) (I.fst b) = CategoryStruct.comp (k (J.snd b)) (I.snd b)) (a : J.L) {Z : C} (h : I.left a Z) :
                                                                          def CategoryTheory.Limits.Multifork.isLimitEquivOfIsos {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I I' : MulticospanIndex J C} (c : Multifork I) (c' : Multifork I') (e : c.pt c'.pt) (el : (i : J.L) → I.left i I'.left i) (er : (i : J.R) → I.right i I'.right i) (hl : ∀ (i : J.R), CategoryStruct.comp (I.fst i) (er i).hom = CategoryStruct.comp (el (J.fst i)).hom (I'.fst i) := by cat_disch) (hr : ∀ (i : J.R), CategoryStruct.comp (I.snd i) (er i).hom = CategoryStruct.comp (el (J.snd i)).hom (I'.snd i) := by cat_disch) (he : ∀ (i : J.L), CategoryStruct.comp e.hom (c'.ι i) = CategoryStruct.comp (c.ι i) (el i).hom := by cat_disch) :

                                                                          Given two multiforks 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

                                                                            Given a multifork, we may obtain a fork over ∏ᶜ I.left ⇉ ∏ᶜ I.right.

                                                                            Instances For
                                                                              @[simp]
                                                                              theorem CategoryTheory.Limits.Multifork.toPiFork_pt {C : Type u} [Category.{v, u} C] {J : MulticospanShape} {I : MulticospanIndex J C} {c : Fan I.left} (hc : IsLimit c) {d : Fan I.right} (hd : IsLimit d) (K : Multifork I) :
                                                                              (toPiFork hc hd K).pt = K.pt

                                                                              Given a fork over ∏ᶜ I.left ⇉ ∏ᶜ I.right, we may obtain a multifork.

                                                                              Instances For
                                                                                @[deprecated CategoryTheory.Limits.Multifork.ofPiFork_ι (since := "2025-12-08")]

                                                                                Alias of CategoryTheory.Limits.Multifork.ofPiFork_ι.

                                                                                @[simp]
                                                                                theorem CategoryTheory.Limits.MulticospanIndex.toPiForkFunctor_map_hom {C : Type u} [Category.{v, u} C] {J : MulticospanShape} (I : MulticospanIndex J C) {c : Fan I.left} (hc : IsLimit c) {d : Fan I.right} (hd : IsLimit d) {K₁ K₂ : Multifork I} (f : K₁ K₂) :
                                                                                ((I.toPiForkFunctor hc hd).map f).hom = f.hom
                                                                                @[simp]
                                                                                theorem CategoryTheory.Limits.MulticospanIndex.ofPiForkFunctor_map_hom {C : Type u} [Category.{v, u} C] {J : MulticospanShape} (I : MulticospanIndex J C) {c : Fan I.left} {d : Fan I.right} (hd : IsLimit d) {K₁ K₂ : Fork (I.fstPiMapOfIsLimit c hd) (I.sndPiMapOfIsLimit c hd)} (f : K₁ K₂) :
                                                                                ((I.ofPiForkFunctor hd).map f).hom = f.hom

                                                                                The category of multiforks is equivalent to the category of forks over ∏ᶜ I.left ⇉ ∏ᶜ I.right. It then follows from CategoryTheory.IsLimit.ofPreservesConeTerminal (or reflects) that it preserves and reflects limit cones.

                                                                                Instances For

                                                                                  The category of multiforks is equivalent to the category of forks over ∏ᶜ I.left ⇉ ∏ᶜ I.right. It then follows from CategoryTheory.IsLimit.ofPreservesConeTerminal (or reflects) that it preserves and reflects limit cones.

                                                                                  Instances For

                                                                                    The constant MulticospanShape for a pair of parallel morphisms.

                                                                                    Instances For
                                                                                      @[simp]
                                                                                      theorem CategoryTheory.Limits.MulticospanIndex.ofParallelHoms_right {C : Type u} [Category.{v, u} C] (J : MulticospanShape) {X Y : C} (f g : X Y) (x✝ : J.R) :
                                                                                      (ofParallelHoms J f g).right x✝ = Y
                                                                                      @[simp]
                                                                                      theorem CategoryTheory.Limits.MulticospanIndex.ofParallelHoms_left {C : Type u} [Category.{v, u} C] (J : MulticospanShape) {X Y : C} (f g : X Y) (x✝ : J.L) :
                                                                                      (ofParallelHoms J f g).left x✝ = X
                                                                                      @[simp]
                                                                                      theorem CategoryTheory.Limits.MulticospanIndex.ofParallelHoms_snd {C : Type u} [Category.{v, u} C] (J : MulticospanShape) {X Y : C} (f g : X Y) (x✝ : J.R) :
                                                                                      (ofParallelHoms J f g).snd x✝ = g
                                                                                      @[simp]
                                                                                      theorem CategoryTheory.Limits.MulticospanIndex.ofParallelHoms_fst {C : Type u} [Category.{v, u} C] (J : MulticospanShape) {X Y : C} (f g : X Y) (x✝ : J.R) :
                                                                                      (ofParallelHoms J f g).fst x✝ = f

                                                                                      A fork on a pair of morphisms f and g is the same as a multifork on the single point index defined by f and g.

                                                                                      Instances For

                                                                                        The maps to the cocone point of a multicofork from the objects on the right.

                                                                                        Instances For
                                                                                          @[simp]
                                                                                          theorem CategoryTheory.Limits.Multicofork.π_comp_hom {C : Type u} [Category.{v, u} C] {J : MultispanShape} {I : MultispanIndex J C} (K₁ K₂ : Multicofork I) (f : K₁ K₂) (b : J.R) :
                                                                                          CategoryStruct.comp (K₁.π b) f.hom = K₂.π b
                                                                                          @[simp]
                                                                                          theorem CategoryTheory.Limits.Multicofork.π_comp_hom_assoc {C : Type u} [Category.{v, u} C] {J : MultispanShape} {I : MultispanIndex J C} (K₁ K₂ : Multicofork I) (f : K₁ K₂) (b : J.R) {Z : C} (h : K₂.pt Z) :
                                                                                          def CategoryTheory.Limits.Multicofork.ofπ {C : Type u} [Category.{v, u} C] {J : MultispanShape} (I : MultispanIndex J C) (P : C) (π : (b : J.R) → I.right b P) (w : ∀ (a : J.L), CategoryStruct.comp (I.fst a) (π (J.fst a)) = CategoryStruct.comp (I.snd a) (π (J.snd a))) :

                                                                                          Construct a multicofork using a collection π of morphisms.

                                                                                          Instances For
                                                                                            @[simp]
                                                                                            theorem CategoryTheory.Limits.Multicofork.ofπ_ι_app {C : Type u} [Category.{v, u} C] {J : MultispanShape} (I : MultispanIndex J C) (P : C) (π : (b : J.R) → I.right b P) (w : ∀ (a : J.L), CategoryStruct.comp (I.fst a) (π (J.fst a)) = CategoryStruct.comp (I.snd a) (π (J.snd a))) (x : WalkingMultispan J) :
                                                                                            (ofπ I P π w).ι.app x = match x with | WalkingMultispan.left a => CategoryStruct.comp (I.fst a) (π (J.fst a)) | WalkingMultispan.right a => π a
                                                                                            @[simp]
                                                                                            theorem CategoryTheory.Limits.Multicofork.ofπ_pt {C : Type u} [Category.{v, u} C] {J : MultispanShape} (I : MultispanIndex J C) (P : C) (π : (b : J.R) → I.right b P) (w : ∀ (a : J.L), CategoryStruct.comp (I.fst a) (π (J.fst a)) = CategoryStruct.comp (I.snd a) (π (J.snd a))) :
                                                                                            (ofπ I P π w).pt = P
                                                                                            def CategoryTheory.Limits.Multicofork.IsColimit.mk {C : Type u} [Category.{v, u} C] {J : MultispanShape} {I : MultispanIndex J C} (K : Multicofork I) (desc : (E : Multicofork I) → K.pt E.pt) (fac : ∀ (E : Multicofork I) (i : J.R), CategoryStruct.comp (K.π i) (desc E) = E.π i) (uniq : ∀ (E : Multicofork I) (m : K.pt E.pt), (∀ (i : J.R), CategoryStruct.comp (K.π i) m = E.π i)m = desc E) :

                                                                                            This definition provides a convenient way to show that a multicofork is a colimit.

                                                                                            Instances For
                                                                                              @[simp]
                                                                                              theorem CategoryTheory.Limits.Multicofork.IsColimit.mk_desc {C : Type u} [Category.{v, u} C] {J : MultispanShape} {I : MultispanIndex J C} (K : Multicofork I) (desc : (E : Multicofork I) → K.pt E.pt) (fac : ∀ (E : Multicofork I) (i : J.R), CategoryStruct.comp (K.π i) (desc E) = E.π i) (uniq : ∀ (E : Multicofork I) (m : K.pt E.pt), (∀ (i : J.R), CategoryStruct.comp (K.π i) m = E.π i)m = desc E) (E : Multicofork I) :
                                                                                              (mk K desc fac uniq).desc E = desc E
                                                                                              theorem CategoryTheory.Limits.Multicofork.IsColimit.hom_ext {C : Type u} [Category.{v, u} C] {J : MultispanShape} {I : MultispanIndex J C} {K : Multicofork I} (hK : IsColimit K) {T : C} {f g : K.pt T} (h : ∀ (a : J.R), CategoryStruct.comp (K.π a) f = CategoryStruct.comp (K.π a) g) :
                                                                                              f = g
                                                                                              def CategoryTheory.Limits.Multicofork.IsColimit.desc {C : Type u} [Category.{v, u} C] {J : MultispanShape} {I : MultispanIndex J C} {K : Multicofork I} (hK : IsColimit K) {T : C} (k : (a : J.R) → I.right a T) (hk : ∀ (b : J.L), CategoryStruct.comp (I.fst b) (k (J.fst b)) = CategoryStruct.comp (I.snd b) (k (J.snd b))) :
                                                                                              K.pt T

                                                                                              Constructor for morphisms from the point of a colimit multicofork.

                                                                                              Instances For
                                                                                                @[simp]
                                                                                                theorem CategoryTheory.Limits.Multicofork.IsColimit.fac {C : Type u} [Category.{v, u} C] {J : MultispanShape} {I : MultispanIndex J C} {K : Multicofork I} (hK : IsColimit K) {T : C} (k : (a : J.R) → I.right a T) (hk : ∀ (b : J.L), CategoryStruct.comp (I.fst b) (k (J.fst b)) = CategoryStruct.comp (I.snd b) (k (J.snd b))) (a : J.R) :
                                                                                                CategoryStruct.comp (K.π a) (desc hK k hk) = k a
                                                                                                @[simp]
                                                                                                theorem CategoryTheory.Limits.Multicofork.IsColimit.fac_assoc {C : Type u} [Category.{v, u} C] {J : MultispanShape} {I : MultispanIndex J C} {K : Multicofork I} (hK : IsColimit K) {T : C} (k : (a : J.R) → I.right a T) (hk : ∀ (b : J.L), CategoryStruct.comp (I.fst b) (k (J.fst b)) = CategoryStruct.comp (I.snd b) (k (J.snd b))) (a : J.R) {Z : C} (h : T Z) :

                                                                                                Given a multicofork, we may obtain a cofork over ∐ I.left ⇉ ∐ I.right.

                                                                                                Instances For

                                                                                                  Given a cofork over ∐ I.left ⇉ ∐ I.right, we may obtain a multicofork.

                                                                                                  Instances For
                                                                                                    @[deprecated CategoryTheory.Limits.Multicofork.ofSigmaCofork_π (since := "2025-12-08")]

                                                                                                    Alias of CategoryTheory.Limits.Multicofork.ofSigmaCofork_π.

                                                                                                    @[deprecated CategoryTheory.Limits.Multicofork.ofSigmaCofork_π (since := "2025-12-08")]

                                                                                                    Alias of CategoryTheory.Limits.Multicofork.ofSigmaCofork_π.

                                                                                                    def CategoryTheory.Limits.Multicofork.ext {C : Type u} [Category.{v, u} C] {J : MultispanShape} {I : MultispanIndex J C} {K K' : Multicofork I} (e : K.pt K'.pt) (h : ∀ (i : J.R), CategoryStruct.comp (K.π i) e.hom = K'.π i := by cat_disch) :
                                                                                                    K K'

                                                                                                    Constructor for isomorphisms between multicoforks.

                                                                                                    Instances For
                                                                                                      @[simp]
                                                                                                      theorem CategoryTheory.Limits.Multicofork.ext_inv_hom {C : Type u} [Category.{v, u} C] {J : MultispanShape} {I : MultispanIndex J C} {K K' : Multicofork I} (e : K.pt K'.pt) (h : ∀ (i : J.R), CategoryStruct.comp (K.π i) e.hom = K'.π i := by cat_disch) :
                                                                                                      (ext e h).inv.hom = e.inv
                                                                                                      @[simp]
                                                                                                      theorem CategoryTheory.Limits.Multicofork.ext_hom_hom {C : Type u} [Category.{v, u} C] {J : MultispanShape} {I : MultispanIndex J C} {K K' : Multicofork I} (e : K.pt K'.pt) (h : ∀ (i : J.R), CategoryStruct.comp (K.π i) e.hom = K'.π i := by cat_disch) :
                                                                                                      (ext e h).hom.hom = e.hom

                                                                                                      Every multicofork is isomorphic to one of the form Multicofork.ofπ.

                                                                                                      Instances For
                                                                                                        @[simp]
                                                                                                        theorem CategoryTheory.Limits.MultispanIndex.toSigmaCoforkFunctor_map_hom {C : Type u} [Category.{v, u} C] {J : MultispanShape} (I : MultispanIndex J C) {c : Cofan I.left} (hc : IsColimit c) {d : Cofan I.right} (hd : IsColimit d) {K₁ K₂ : Multicofork I} (f : K₁ K₂) :
                                                                                                        ((I.toSigmaCoforkFunctor hc hd).map f).hom = f.hom

                                                                                                        The category of multicoforks is equivalent to the category of coforks over ∐ I.left ⇉ ∐ I.right. It then follows from CategoryTheory.IsColimit.ofPreservesCoconeInitial (or reflects) that it preserves and reflects colimit cocones.

                                                                                                        Instances For

                                                                                                          The category of multicoforks is equivalent to the category of coforks over ∐ I.left ⇉ ∐ I.right. It then follows from CategoryTheory.IsColimit.ofPreservesCoconeInitial (or reflects) that it preserves and reflects colimit cocones.

                                                                                                          Instances For
                                                                                                            @[reducible, inline]

                                                                                                            For I : MulticospanIndex J C, we say that it has a multiequalizer if the associated multicospan has a limit.

                                                                                                            Instances For
                                                                                                              @[reducible, inline]

                                                                                                              The multiequalizer of I : MulticospanIndex J C.

                                                                                                              Instances For
                                                                                                                @[reducible, inline]

                                                                                                                For I : MultispanIndex J C, we say that it has a multicoequalizer if the associated multicospan has a limit.

                                                                                                                Instances For
                                                                                                                  @[reducible, inline]

                                                                                                                  The multicoequalizer of I : MultispanIndex J C.

                                                                                                                  Instances For
                                                                                                                    @[reducible, inline]

                                                                                                                    The canonical map from the multiequalizer to the objects on the left.

                                                                                                                    Instances For
                                                                                                                      @[reducible, inline]

                                                                                                                      The multifork associated to the multiequalizer.

                                                                                                                      Instances For
                                                                                                                        @[reducible, inline]
                                                                                                                        noncomputable abbrev CategoryTheory.Limits.Multiequalizer.lift {C : Type u} [Category.{v, u} C] {J : MulticospanShape} (I : MulticospanIndex J C) [HasMultiequalizer I] (W : C) (k : (a : J.L) → W I.left a) (h : ∀ (b : J.R), CategoryStruct.comp (k (J.fst b)) (I.fst b) = CategoryStruct.comp (k (J.snd b)) (I.snd b)) :

                                                                                                                        Construct a morphism to the multiequalizer from its universal property.

                                                                                                                        Instances For
                                                                                                                          theorem CategoryTheory.Limits.Multiequalizer.lift_ι {C : Type u} [Category.{v, u} C] {J : MulticospanShape} (I : MulticospanIndex J C) [HasMultiequalizer I] (W : C) (k : (a : J.L) → W I.left a) (h : ∀ (b : J.R), CategoryStruct.comp (k (J.fst b)) (I.fst b) = CategoryStruct.comp (k (J.snd b)) (I.snd b)) (a : J.L) :
                                                                                                                          CategoryStruct.comp (lift I W k h) (ι I a) = k a
                                                                                                                          theorem CategoryTheory.Limits.Multiequalizer.lift_ι_assoc {C : Type u} [Category.{v, u} C] {J : MulticospanShape} (I : MulticospanIndex J C) [HasMultiequalizer I] (W : C) (k : (a : J.L) → W I.left a) (h : ∀ (b : J.R), CategoryStruct.comp (k (J.fst b)) (I.fst b) = CategoryStruct.comp (k (J.snd b)) (I.snd b)) (a : J.L) {Z : C} (h✝ : I.left a Z) :

                                                                                                                          The multiequalizer is isomorphic to the equalizer of ∏ᶜ I.left ⇉ ∏ᶜ I.right.

                                                                                                                          Instances For
                                                                                                                            @[reducible, inline]

                                                                                                                            The canonical map from the multiequalizer to the objects on the left.

                                                                                                                            Instances For
                                                                                                                              @[reducible, inline]

                                                                                                                              The multicofork associated to the multicoequalizer.

                                                                                                                              Instances For
                                                                                                                                @[reducible, inline]
                                                                                                                                noncomputable abbrev CategoryTheory.Limits.Multicoequalizer.desc {C : Type u} [Category.{v, u} C] {J : MultispanShape} (I : MultispanIndex J C) [HasMulticoequalizer I] (W : C) (k : (b : J.R) → I.right b W) (h : ∀ (a : J.L), CategoryStruct.comp (I.fst a) (k (J.fst a)) = CategoryStruct.comp (I.snd a) (k (J.snd a))) :

                                                                                                                                Construct a morphism from the multicoequalizer from its universal property.

                                                                                                                                Instances For
                                                                                                                                  theorem CategoryTheory.Limits.Multicoequalizer.π_desc {C : Type u} [Category.{v, u} C] {J : MultispanShape} (I : MultispanIndex J C) [HasMulticoequalizer I] (W : C) (k : (b : J.R) → I.right b W) (h : ∀ (a : J.L), CategoryStruct.comp (I.fst a) (k (J.fst a)) = CategoryStruct.comp (I.snd a) (k (J.snd a))) (b : J.R) :
                                                                                                                                  CategoryStruct.comp (π I b) (desc I W k h) = k b
                                                                                                                                  theorem CategoryTheory.Limits.Multicoequalizer.π_desc_assoc {C : Type u} [Category.{v, u} C] {J : MultispanShape} (I : MultispanIndex J C) [HasMulticoequalizer I] (W : C) (k : (b : J.R) → I.right b W) (h : ∀ (a : J.L), CategoryStruct.comp (I.fst a) (k (J.fst a)) = CategoryStruct.comp (I.snd a) (k (J.snd a))) (b : J.R) {Z : C} (h✝ : W Z) :

                                                                                                                                  The multicoequalizer is isomorphic to the coequalizer of ∐ I.left ⇉ ∐ I.right.

                                                                                                                                  Instances For
                                                                                                                                    @[simp]
                                                                                                                                    theorem CategoryTheory.Limits.WalkingMultispan.inclusionOfLinearOrder_map (ι : Type w) [LinearOrder ι] {x y : WalkingMultispan (MultispanShape.ofLinearOrder ι)} (f : x y) :
                                                                                                                                    (inclusionOfLinearOrder ι).map f = match x, y, f with | x, .(x), Hom.id .(x) => CategoryStruct.id (match x with | left a => left a | right b => right b) | .(left b), .(right ((MultispanShape.ofLinearOrder ι).fst b)), Hom.fst b => Hom.fst b | .(left b), .(right ((MultispanShape.ofLinearOrder ι).snd b)), Hom.snd b => Hom.snd b

                                                                                                                                    Structure expressing a symmetry of I : MultispanIndex (.prod ι) C which allows to compare the corresponding multicoequalizer to the multicoequalizer of I.toLinearOrder.

                                                                                                                                    Instances For

                                                                                                                                      The multispan index for MultispanShape.ofLinearOrder ι deduced from a multispan index for MultispanShape.prod ι when ι is linearly ordered.

                                                                                                                                      Instances For

                                                                                                                                        Given a linearly ordered type ι and I : MultispanIndex (.prod ι) C, this is the isomorphism of functors between WalkingMultispan.inclusionOfLinearOrder ι ⋙ I.multispan and I.toLinearOrder.multispan.

                                                                                                                                        Instances For

                                                                                                                                          The multicofork for I.toLinearOrder deduced from a multicofork for I : MultispanIndex (.prod ι) C when ι is linearly ordered.

                                                                                                                                          Instances For

                                                                                                                                            The multicofork for I : MultispanIndex (.prod ι) C deduced from a multicofork for I.toLinearOrder when ι is linearly ordered and I is symmetric.

                                                                                                                                            Instances For

                                                                                                                                              If ι is a linearly ordered type, I : MultispanIndex (.prod ι) C, and c a colimit multicofork for I, then c.toLinearOrder is a colimit multicofork for I.toLinearOrder.

                                                                                                                                              Instances For