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).

inductive CategoryTheory.Limits.WalkingMulticospan {L : Type w} {R : Type w'} (fst snd : RL) :
Type (max w w')

The type underlying the multiequalizer diagram.

Instances For
    inductive CategoryTheory.Limits.WalkingMultispan {L : Type w} {R : Type w'} (fst snd : LR) :
    Type (max w w')

    The type underlying the multiecoqualizer diagram.

    Instances For
      inductive CategoryTheory.Limits.WalkingMulticospan.Hom {L : Type w} {R : Type w'} {fst snd : RL} :
      WalkingMulticospan fst sndWalkingMulticospan fst sndType (max w w')

      Morphisms for WalkingMulticospan.

      Instances For
        def CategoryTheory.Limits.WalkingMulticospan.Hom.comp {L : Type w} {R : Type w'} {fst snd : RL} {A B C : WalkingMulticospan fst snd} :
        A.Hom BB.Hom CA.Hom C

        Composition of morphisms for WalkingMulticospan.

        Equations
        Instances For
          @[simp]
          theorem CategoryTheory.Limits.WalkingMulticospan.Hom.id_eq_id {L : Type w} {R : Type w'} {fst snd : RL} (X : WalkingMulticospan fst snd) :
          @[simp]
          theorem CategoryTheory.Limits.WalkingMulticospan.Hom.comp_eq_comp {L : Type w} {R : Type w'} {fst snd : RL} {X Y Z : WalkingMulticospan fst snd} (f : X Y) (g : Y Z) :
          inductive CategoryTheory.Limits.WalkingMultispan.Hom {L : Type w} {R : Type w'} {fst snd : LR} :
          WalkingMultispan fst sndWalkingMultispan fst sndType (max w w')

          Morphisms for WalkingMultispan.

          Instances For
            def CategoryTheory.Limits.WalkingMultispan.Hom.comp {L : Type w} {R : Type w'} {fst snd : LR} {A B C : WalkingMultispan fst snd} :
            A.Hom BB.Hom CA.Hom C

            Composition of morphisms for WalkingMultispan.

            Equations
            Instances For
              @[simp]
              theorem CategoryTheory.Limits.WalkingMultispan.Hom.id_eq_id {L : Type w} {R : Type w'} {fst snd : LR} (X : WalkingMultispan fst snd) :
              @[simp]
              theorem CategoryTheory.Limits.WalkingMultispan.Hom.comp_eq_comp {L : Type w} {R : Type w'} {fst snd : LR} {X Y Z : WalkingMultispan fst snd} (f : X Y) (g : Y Z) :
              structure CategoryTheory.Limits.MulticospanIndex (C : Type u) [Category.{v, u} C] :
              Type (max (max (max u v) (w + 1)) (w' + 1))

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

              • L : Type w
              • R : Type w'
              • fstTo : self.Rself.L
              • sndTo : self.Rself.L
              • left : self.LC
              • right : self.RC
              • fst (b : self.R) : self.left (self.fstTo b) self.right b
              • snd (b : self.R) : self.left (self.sndTo b) self.right b
              Instances For
                structure CategoryTheory.Limits.MultispanIndex (C : Type u) [Category.{v, u} C] :
                Type (max (max (max u v) (w + 1)) (w' + 1))

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

                • L : Type w
                • R : Type w'
                • fstFrom : self.Lself.R
                • sndFrom : self.Lself.R
                • left : self.LC
                • right : self.RC
                • fst (a : self.L) : self.left a self.right (self.fstFrom a)
                • snd (a : self.L) : self.left a self.right (self.sndFrom a)
                Instances For

                  The multicospan associated to I : MulticospanIndex.

                  Equations
                  • One or more equations did not get rendered due to their size.
                  Instances For
                    @[simp]
                    theorem CategoryTheory.Limits.MulticospanIndex.multicospan_obj {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) (x : WalkingMulticospan I.fstTo I.sndTo) :
                    I.multicospan.obj x = match x with | WalkingMulticospan.left a => I.left a | WalkingMulticospan.right b => I.right b
                    @[simp]
                    theorem CategoryTheory.Limits.MulticospanIndex.multicospan_map {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) {x y : WalkingMulticospan I.fstTo I.sndTo} (f : x y) :
                    I.multicospan.map f = match x, y, f with | x, .(x), WalkingMulticospan.Hom.id .(x) => CategoryStruct.id ((fun (x : WalkingMulticospan I.fstTo I.sndTo) => match x with | WalkingMulticospan.left a => I.left a | WalkingMulticospan.right b => I.right b) x) | .(WalkingMulticospan.left (I.fstTo b)), .(WalkingMulticospan.right b), WalkingMulticospan.Hom.fst b => I.fst b | .(WalkingMulticospan.left (I.sndTo b)), .(WalkingMulticospan.right b), WalkingMulticospan.Hom.snd b => I.snd b
                    noncomputable def CategoryTheory.Limits.MulticospanIndex.fstPiMap {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] :
                    ∏ᶜ I.left ∏ᶜ I.right

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

                    Equations
                    Instances For
                      noncomputable def CategoryTheory.Limits.MulticospanIndex.sndPiMap {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] :
                      ∏ᶜ I.left ∏ᶜ I.right

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

                      Equations
                      Instances For
                        @[simp]
                        theorem CategoryTheory.Limits.MulticospanIndex.fstPiMap_π {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] (b : I.R) :
                        CategoryStruct.comp I.fstPiMap (Pi.π I.right b) = CategoryStruct.comp (Pi.π I.left (I.fstTo b)) (I.fst b)
                        @[simp]
                        theorem CategoryTheory.Limits.MulticospanIndex.fstPiMap_π_assoc {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] (b : I.R) {Z : C} (h : I.right b Z) :
                        CategoryStruct.comp I.fstPiMap (CategoryStruct.comp (Pi.π I.right b) h) = CategoryStruct.comp (Pi.π I.left (I.fstTo b)) (CategoryStruct.comp (I.fst b) h)
                        @[simp]
                        theorem CategoryTheory.Limits.MulticospanIndex.sndPiMap_π {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] (b : I.R) :
                        CategoryStruct.comp I.sndPiMap (Pi.π I.right b) = CategoryStruct.comp (Pi.π I.left (I.sndTo b)) (I.snd b)
                        @[simp]
                        theorem CategoryTheory.Limits.MulticospanIndex.sndPiMap_π_assoc {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] (b : I.R) {Z : C} (h : I.right b Z) :
                        CategoryStruct.comp I.sndPiMap (CategoryStruct.comp (Pi.π I.right b) h) = CategoryStruct.comp (Pi.π I.left (I.sndTo b)) (CategoryStruct.comp (I.snd b) h)

                        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.

                        Equations
                        Instances For
                          @[simp]
                          theorem CategoryTheory.Limits.MulticospanIndex.parallelPairDiagram_obj {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] (x : WalkingParallelPair) :
                          I.parallelPairDiagram.obj x = match x with | WalkingParallelPair.zero => ∏ᶜ I.left | WalkingParallelPair.one => ∏ᶜ I.right

                          The multispan associated to I : MultispanIndex.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            @[simp]
                            @[simp]
                            @[simp]
                            @[simp]
                            noncomputable def CategoryTheory.Limits.MultispanIndex.fstSigmaMap {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] :
                            I.left I.right

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

                            Equations
                            Instances For
                              noncomputable def CategoryTheory.Limits.MultispanIndex.sndSigmaMap {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] :
                              I.left I.right

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

                              Equations
                              Instances For
                                @[simp]
                                theorem CategoryTheory.Limits.MultispanIndex.ι_fstSigmaMap {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] (b : I.L) :
                                CategoryStruct.comp (Sigma.ι I.left b) I.fstSigmaMap = CategoryStruct.comp (I.fst b) (Sigma.ι I.right (I.fstFrom b))
                                @[simp]
                                theorem CategoryTheory.Limits.MultispanIndex.ι_fstSigmaMap_assoc {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] (b : I.L) {Z : C} (h : I.right Z) :
                                CategoryStruct.comp (Sigma.ι I.left b) (CategoryStruct.comp I.fstSigmaMap h) = CategoryStruct.comp (I.fst b) (CategoryStruct.comp (Sigma.ι I.right (I.fstFrom b)) h)
                                @[simp]
                                theorem CategoryTheory.Limits.MultispanIndex.ι_sndSigmaMap {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] (b : I.L) :
                                CategoryStruct.comp (Sigma.ι I.left b) I.sndSigmaMap = CategoryStruct.comp (I.snd b) (Sigma.ι I.right (I.sndFrom b))
                                @[simp]
                                theorem CategoryTheory.Limits.MultispanIndex.ι_sndSigmaMap_assoc {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] (b : I.L) {Z : C} (h : I.right Z) :
                                CategoryStruct.comp (Sigma.ι I.left b) (CategoryStruct.comp I.sndSigmaMap h) = CategoryStruct.comp (I.snd b) (CategoryStruct.comp (Sigma.ι I.right (I.sndFrom b)) h)
                                @[reducible, inline]

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

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

                                  A multifork is a cone over a multicospan.

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

                                    A multicofork is a cocone over a multispan.

                                    Equations
                                    Instances For
                                      def CategoryTheory.Limits.Multifork.ι {C : Type u} [Category.{v, u} C] {I : MulticospanIndex C} (K : Multifork I) (a : I.L) :
                                      K.pt I.left a

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

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

                                        Construct a multifork using a collection ι of morphisms.

                                        Equations
                                        • One or more equations did not get rendered due to their size.
                                        Instances For
                                          @[simp]
                                          theorem CategoryTheory.Limits.Multifork.ofι_pt {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) (P : C) (ι : (a : I.L) → P I.left a) (w : ∀ (b : I.R), CategoryStruct.comp (ι (I.fstTo b)) (I.fst b) = CategoryStruct.comp (ι (I.sndTo b)) (I.snd b)) :
                                          (ofι I P ι w).pt = P
                                          @[simp]
                                          theorem CategoryTheory.Limits.Multifork.ofι_π_app {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) (P : C) (ι : (a : I.L) → P I.left a) (w : ∀ (b : I.R), CategoryStruct.comp (ι (I.fstTo b)) (I.fst b) = CategoryStruct.comp (ι (I.sndTo b)) (I.snd b)) (x : WalkingMulticospan I.fstTo I.sndTo) :
                                          (ofι I P ι w).app x = match x with | WalkingMulticospan.left a => ι a | WalkingMulticospan.right b => CategoryStruct.comp (ι (I.fstTo b)) (I.fst b)
                                          @[simp]
                                          theorem CategoryTheory.Limits.Multifork.condition {C : Type u} [Category.{v, u} C] {I : MulticospanIndex C} (K : Multifork I) (b : I.R) :
                                          CategoryStruct.comp (K (I.fstTo b)) (I.fst b) = CategoryStruct.comp (K (I.sndTo b)) (I.snd b)
                                          @[simp]
                                          theorem CategoryTheory.Limits.Multifork.condition_assoc {C : Type u} [Category.{v, u} C] {I : MulticospanIndex C} (K : Multifork I) (b : I.R) {Z : C} (h : I.right b Z) :
                                          CategoryStruct.comp (K (I.fstTo b)) (CategoryStruct.comp (I.fst b) h) = CategoryStruct.comp (K (I.sndTo b)) (CategoryStruct.comp (I.snd b) h)
                                          def CategoryTheory.Limits.Multifork.IsLimit.mk {C : Type u} [Category.{v, u} C] {I : MulticospanIndex C} (K : Multifork I) (lift : (E : Multifork I) → E.pt K.pt) (fac : ∀ (E : Multifork I) (i : I.L), CategoryStruct.comp (lift E) (K i) = E i) (uniq : ∀ (E : Multifork I) (m : E.pt K.pt), (∀ (i : I.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.

                                          Equations
                                          Instances For
                                            @[simp]
                                            theorem CategoryTheory.Limits.Multifork.IsLimit.mk_lift {C : Type u} [Category.{v, u} C] {I : MulticospanIndex C} (K : Multifork I) (lift : (E : Multifork I) → E.pt K.pt) (fac : ∀ (E : Multifork I) (i : I.L), CategoryStruct.comp (lift E) (K i) = E i) (uniq : ∀ (E : Multifork I) (m : E.pt K.pt), (∀ (i : I.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] {I : MulticospanIndex C} {K : Multifork I} (hK : IsLimit K) {T : C} {f g : T K.pt} (h : ∀ (a : I.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] {I : MulticospanIndex C} {K : Multifork I} (hK : IsLimit K) {T : C} (k : (a : I.L) → T I.left a) (hk : ∀ (b : I.R), CategoryStruct.comp (k (I.fstTo b)) (I.fst b) = CategoryStruct.comp (k (I.sndTo b)) (I.snd b)) :
                                            T K.pt

                                            Constructor for morphisms to the point of a limit multifork.

                                            Equations
                                            Instances For
                                              @[simp]
                                              theorem CategoryTheory.Limits.Multifork.IsLimit.fac {C : Type u} [Category.{v, u} C] {I : MulticospanIndex C} {K : Multifork I} (hK : IsLimit K) {T : C} (k : (a : I.L) → T I.left a) (hk : ∀ (b : I.R), CategoryStruct.comp (k (I.fstTo b)) (I.fst b) = CategoryStruct.comp (k (I.sndTo b)) (I.snd b)) (a : I.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] {I : MulticospanIndex C} {K : Multifork I} (hK : IsLimit K) {T : C} (k : (a : I.L) → T I.left a) (hk : ∀ (b : I.R), CategoryStruct.comp (k (I.fstTo b)) (I.fst b) = CategoryStruct.comp (k (I.sndTo b)) (I.snd b)) (a : I.L) {Z : C} (h : I.left a Z) :
                                              @[simp]
                                              noncomputable def CategoryTheory.Limits.Multifork.toPiFork {C : Type u} [Category.{v, u} C] {I : MulticospanIndex C} [HasProduct I.left] [HasProduct I.right] (K : Multifork I) :
                                              Fork I.fstPiMap I.sndPiMap

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

                                              Equations
                                              • One or more equations did not get rendered due to their size.
                                              Instances For
                                                @[simp]
                                                theorem CategoryTheory.Limits.Multifork.toPiFork_pt {C : Type u} [Category.{v, u} C] {I : MulticospanIndex C} [HasProduct I.left] [HasProduct I.right] (K : Multifork I) :
                                                K.toPiFork.pt = K.pt
                                                @[simp]
                                                theorem CategoryTheory.Limits.Multifork.toPiFork_π_app_zero {C : Type u} [Category.{v, u} C] {I : MulticospanIndex C} (K : Multifork I) [HasProduct I.left] [HasProduct I.right] :
                                                K.toPiFork = Pi.lift K
                                                noncomputable def CategoryTheory.Limits.Multifork.ofPiFork {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] (c : Fork I.fstPiMap I.sndPiMap) :

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

                                                Equations
                                                • One or more equations did not get rendered due to their size.
                                                Instances For
                                                  @[simp]
                                                  theorem CategoryTheory.Limits.Multifork.ofPiFork_pt {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] (c : Fork I.fstPiMap I.sndPiMap) :
                                                  (ofPiFork I c).pt = c.pt
                                                  @[simp]
                                                  theorem CategoryTheory.Limits.Multifork.ofPiFork_π_app_left {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] (c : Fork I.fstPiMap I.sndPiMap) (a : I.L) :
                                                  (ofPiFork I c) a = CategoryStruct.comp c (Pi.π I.left a)
                                                  @[simp]
                                                  theorem CategoryTheory.Limits.Multifork.ofPiFork_π_app_right {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] (c : Fork I.fstPiMap I.sndPiMap) (a : I.R) :
                                                  (ofPiFork I c).app (WalkingMulticospan.right a) = CategoryStruct.comp c (CategoryStruct.comp I.fstPiMap (Pi.π I.right a))
                                                  noncomputable def CategoryTheory.Limits.MulticospanIndex.toPiForkFunctor {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] :
                                                  Functor (Multifork I) (Fork I.fstPiMap I.sndPiMap)

                                                  Multifork.toPiFork as a functor.

                                                  Equations
                                                  • One or more equations did not get rendered due to their size.
                                                  Instances For
                                                    @[simp]
                                                    theorem CategoryTheory.Limits.MulticospanIndex.toPiForkFunctor_obj {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] (K : Multifork I) :
                                                    I.toPiForkFunctor.obj K = K.toPiFork
                                                    @[simp]
                                                    theorem CategoryTheory.Limits.MulticospanIndex.toPiForkFunctor_map_hom {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] {K₁ K₂ : Multifork I} (f : K₁ K₂) :
                                                    (I.toPiForkFunctor.map f).hom = f.hom
                                                    noncomputable def CategoryTheory.Limits.MulticospanIndex.ofPiForkFunctor {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] :
                                                    Functor (Fork I.fstPiMap I.sndPiMap) (Multifork I)

                                                    Multifork.ofPiFork as a functor.

                                                    Equations
                                                    • One or more equations did not get rendered due to their size.
                                                    Instances For
                                                      @[simp]
                                                      theorem CategoryTheory.Limits.MulticospanIndex.ofPiForkFunctor_map_hom {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] {K₁ K₂ : Fork I.fstPiMap I.sndPiMap} (f : K₁ K₂) :
                                                      (I.ofPiForkFunctor.map f).hom = f.hom
                                                      @[simp]
                                                      theorem CategoryTheory.Limits.MulticospanIndex.ofPiForkFunctor_obj {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] (c : Fork I.fstPiMap I.sndPiMap) :
                                                      I.ofPiForkFunctor.obj c = Multifork.ofPiFork I c
                                                      noncomputable def CategoryTheory.Limits.MulticospanIndex.multiforkEquivPiFork {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] :
                                                      Multifork I Fork I.fstPiMap I.sndPiMap

                                                      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.

                                                      Equations
                                                      • One or more equations did not get rendered due to their size.
                                                      Instances For
                                                        @[simp]
                                                        theorem CategoryTheory.Limits.MulticospanIndex.multiforkEquivPiFork_inverse {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] :
                                                        I.multiforkEquivPiFork.inverse = I.ofPiForkFunctor
                                                        @[simp]
                                                        theorem CategoryTheory.Limits.MulticospanIndex.multiforkEquivPiFork_functor {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] :
                                                        I.multiforkEquivPiFork.functor = I.toPiForkFunctor
                                                        @[simp]
                                                        theorem CategoryTheory.Limits.MulticospanIndex.multiforkEquivPiFork_unitIso {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] :
                                                        I.multiforkEquivPiFork.unitIso = NatIso.ofComponents (fun (K : Multifork I) => Cones.ext (Iso.refl ((Functor.id (Multifork I)).obj K).pt) )
                                                        @[simp]
                                                        theorem CategoryTheory.Limits.MulticospanIndex.multiforkEquivPiFork_counitIso {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasProduct I.left] [HasProduct I.right] :
                                                        I.multiforkEquivPiFork.counitIso = NatIso.ofComponents (fun (K : Fork I.fstPiMap I.sndPiMap) => Fork.ext (Iso.refl ((I.ofPiForkFunctor.comp I.toPiForkFunctor).obj K).pt) )
                                                        def CategoryTheory.Limits.Multicofork.π {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} (K : Multicofork I) (b : I.R) :
                                                        I.right b K.pt

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

                                                        Equations
                                                        Instances For
                                                          @[simp]
                                                          theorem CategoryTheory.Limits.Multicofork.fst_app_right {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} (K : Multicofork I) (a : I.L) :
                                                          K.app (WalkingMultispan.left a) = CategoryStruct.comp (I.fst a) (K (I.fstFrom a))
                                                          theorem CategoryTheory.Limits.Multicofork.snd_app_right {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} (K : Multicofork I) (a : I.L) :
                                                          K.app (WalkingMultispan.left a) = CategoryStruct.comp (I.snd a) (K (I.sndFrom a))
                                                          theorem CategoryTheory.Limits.Multicofork.snd_app_right_assoc {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} (K : Multicofork I) (a : I.L) {Z : C} (h : ((Functor.const (WalkingMultispan I.fstFrom I.sndFrom)).obj K.pt).obj (WalkingMultispan.left a) Z) :
                                                          CategoryStruct.comp (K.app (WalkingMultispan.left a)) h = CategoryStruct.comp (I.snd a) (CategoryStruct.comp (K (I.sndFrom a)) h)
                                                          @[simp]
                                                          theorem CategoryTheory.Limits.Multicofork.π_comp_hom {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} (K₁ K₂ : Multicofork I) (f : K₁ K₂) (b : I.R) :
                                                          CategoryStruct.comp (K₁ b) f.hom = K₂ b
                                                          @[simp]
                                                          theorem CategoryTheory.Limits.Multicofork.π_comp_hom_assoc {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} (K₁ K₂ : Multicofork I) (f : K₁ K₂) (b : I.R) {Z : C} (h : K₂.pt Z) :
                                                          CategoryStruct.comp (K₁ b) (CategoryStruct.comp f.hom h) = CategoryStruct.comp (K₂ b) h
                                                          def CategoryTheory.Limits.Multicofork.ofπ {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) (P : C) (π : (b : I.R) → I.right b P) (w : ∀ (a : I.L), CategoryStruct.comp (I.fst a) (π (I.fstFrom a)) = CategoryStruct.comp (I.snd a) (π (I.sndFrom a))) :

                                                          Construct a multicofork using a collection π of morphisms.

                                                          Equations
                                                          • One or more equations did not get rendered due to their size.
                                                          Instances For
                                                            @[simp]
                                                            theorem CategoryTheory.Limits.Multicofork.ofπ_pt {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) (P : C) (π : (b : I.R) → I.right b P) (w : ∀ (a : I.L), CategoryStruct.comp (I.fst a) (π (I.fstFrom a)) = CategoryStruct.comp (I.snd a) (π (I.sndFrom a))) :
                                                            (ofπ I P π w).pt = P
                                                            @[simp]
                                                            theorem CategoryTheory.Limits.Multicofork.ofπ_ι_app {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) (P : C) (π : (b : I.R) → I.right b P) (w : ∀ (a : I.L), CategoryStruct.comp (I.fst a) (π (I.fstFrom a)) = CategoryStruct.comp (I.snd a) (π (I.sndFrom a))) (x : WalkingMultispan I.fstFrom I.sndFrom) :
                                                            (ofπ I P π w).app x = match x with | WalkingMultispan.left a => CategoryStruct.comp (I.fst a) (π (I.fstFrom a)) | WalkingMultispan.right a => π a
                                                            @[simp]
                                                            theorem CategoryTheory.Limits.Multicofork.condition {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} (K : Multicofork I) (a : I.L) :
                                                            CategoryStruct.comp (I.fst a) (K (I.fstFrom a)) = CategoryStruct.comp (I.snd a) (K (I.sndFrom a))
                                                            @[simp]
                                                            theorem CategoryTheory.Limits.Multicofork.condition_assoc {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} (K : Multicofork I) (a : I.L) {Z : C} (h : K.pt Z) :
                                                            CategoryStruct.comp (I.fst a) (CategoryStruct.comp (K (I.fstFrom a)) h) = CategoryStruct.comp (I.snd a) (CategoryStruct.comp (K (I.sndFrom a)) h)
                                                            def CategoryTheory.Limits.Multicofork.IsColimit.mk {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} (K : Multicofork I) (desc : (E : Multicofork I) → K.pt E.pt) (fac : ∀ (E : Multicofork I) (i : I.R), CategoryStruct.comp (K i) (desc E) = E i) (uniq : ∀ (E : Multicofork I) (m : K.pt E.pt), (∀ (i : I.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.

                                                            Equations
                                                            Instances For
                                                              @[simp]
                                                              theorem CategoryTheory.Limits.Multicofork.IsColimit.mk_desc {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} (K : Multicofork I) (desc : (E : Multicofork I) → K.pt E.pt) (fac : ∀ (E : Multicofork I) (i : I.R), CategoryStruct.comp (K i) (desc E) = E i) (uniq : ∀ (E : Multicofork I) (m : K.pt E.pt), (∀ (i : I.R), CategoryStruct.comp (K i) m = E i)m = desc E) (E : Multicofork I) :
                                                              (mk K desc fac uniq).desc E = desc E
                                                              noncomputable def CategoryTheory.Limits.Multicofork.toSigmaCofork {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} [HasCoproduct I.left] [HasCoproduct I.right] (K : Multicofork I) :
                                                              Cofork I.fstSigmaMap I.sndSigmaMap

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

                                                              Equations
                                                              • One or more equations did not get rendered due to their size.
                                                              Instances For
                                                                @[simp]
                                                                theorem CategoryTheory.Limits.Multicofork.toSigmaCofork_pt {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} [HasCoproduct I.left] [HasCoproduct I.right] (K : Multicofork I) :
                                                                K.toSigmaCofork.pt = K.pt
                                                                @[simp]
                                                                theorem CategoryTheory.Limits.Multicofork.toSigmaCofork_π {C : Type u} [Category.{v, u} C] {I : MultispanIndex C} (K : Multicofork I) [HasCoproduct I.left] [HasCoproduct I.right] :
                                                                K.toSigmaCofork = Sigma.desc K
                                                                noncomputable def CategoryTheory.Limits.Multicofork.ofSigmaCofork {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] (c : Cofork I.fstSigmaMap I.sndSigmaMap) :

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

                                                                Equations
                                                                • One or more equations did not get rendered due to their size.
                                                                Instances For
                                                                  @[simp]
                                                                  theorem CategoryTheory.Limits.Multicofork.ofSigmaCofork_pt {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] (c : Cofork I.fstSigmaMap I.sndSigmaMap) :
                                                                  (ofSigmaCofork I c).pt = c.pt
                                                                  @[simp]
                                                                  theorem CategoryTheory.Limits.Multicofork.ofSigmaCofork_ι_app_left {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] (c : Cofork I.fstSigmaMap I.sndSigmaMap) (a : I.L) :
                                                                  (ofSigmaCofork I c).app (WalkingMultispan.left a) = CategoryStruct.comp (Sigma.ι I.left a) (CategoryStruct.comp I.fstSigmaMap c)
                                                                  theorem CategoryTheory.Limits.Multicofork.ofSigmaCofork_ι_app_right {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] (c : Cofork I.fstSigmaMap I.sndSigmaMap) (b : I.R) :
                                                                  @[simp]
                                                                  theorem CategoryTheory.Limits.Multicofork.ofSigmaCofork_ι_app_right' {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] (c : Cofork I.fstSigmaMap I.sndSigmaMap) (b : I.R) :
                                                                  (ofSigmaCofork I c) b = CategoryStruct.comp (Sigma.ι I.right b) c
                                                                  noncomputable def CategoryTheory.Limits.MultispanIndex.toSigmaCoforkFunctor {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] :
                                                                  Functor (Multicofork I) (Cofork I.fstSigmaMap I.sndSigmaMap)

                                                                  Multicofork.toSigmaCofork as a functor.

                                                                  Equations
                                                                  • One or more equations did not get rendered due to their size.
                                                                  Instances For
                                                                    @[simp]
                                                                    theorem CategoryTheory.Limits.MultispanIndex.toSigmaCoforkFunctor_map_hom {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] {K₁ K₂ : Multicofork I} (f : K₁ K₂) :
                                                                    (I.toSigmaCoforkFunctor.map f).hom = f.hom
                                                                    @[simp]
                                                                    theorem CategoryTheory.Limits.MultispanIndex.toSigmaCoforkFunctor_obj {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] (K : Multicofork I) :
                                                                    I.toSigmaCoforkFunctor.obj K = K.toSigmaCofork
                                                                    noncomputable def CategoryTheory.Limits.MultispanIndex.ofSigmaCoforkFunctor {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] :
                                                                    Functor (Cofork I.fstSigmaMap I.sndSigmaMap) (Multicofork I)

                                                                    Multicofork.ofSigmaCofork as a functor.

                                                                    Equations
                                                                    • One or more equations did not get rendered due to their size.
                                                                    Instances For
                                                                      @[simp]
                                                                      theorem CategoryTheory.Limits.MultispanIndex.ofSigmaCoforkFunctor_obj {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] (c : Cofork I.fstSigmaMap I.sndSigmaMap) :
                                                                      I.ofSigmaCoforkFunctor.obj c = Multicofork.ofSigmaCofork I c
                                                                      @[simp]
                                                                      theorem CategoryTheory.Limits.MultispanIndex.ofSigmaCoforkFunctor_map_hom {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] {K₁ K₂ : Cofork I.fstSigmaMap I.sndSigmaMap} (f : K₁ K₂) :
                                                                      (I.ofSigmaCoforkFunctor.map f).hom = f.hom
                                                                      noncomputable def CategoryTheory.Limits.MultispanIndex.multicoforkEquivSigmaCofork {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] :
                                                                      Multicofork I Cofork I.fstSigmaMap I.sndSigmaMap

                                                                      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.

                                                                      Equations
                                                                      • One or more equations did not get rendered due to their size.
                                                                      Instances For
                                                                        @[simp]
                                                                        theorem CategoryTheory.Limits.MultispanIndex.multicoforkEquivSigmaCofork_unitIso {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] :
                                                                        I.multicoforkEquivSigmaCofork.unitIso = NatIso.ofComponents (fun (K : Multicofork I) => Cocones.ext (Iso.refl ((Functor.id (Multicofork I)).obj K).pt) )
                                                                        @[simp]
                                                                        theorem CategoryTheory.Limits.MultispanIndex.multicoforkEquivSigmaCofork_counitIso {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] :
                                                                        I.multicoforkEquivSigmaCofork.counitIso = NatIso.ofComponents (fun (K : Cofork I.fstSigmaMap I.sndSigmaMap) => Cofork.ext (Iso.refl ((I.ofSigmaCoforkFunctor.comp I.toSigmaCoforkFunctor).obj K).pt) )
                                                                        @[simp]
                                                                        theorem CategoryTheory.Limits.MultispanIndex.multicoforkEquivSigmaCofork_inverse {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] :
                                                                        I.multicoforkEquivSigmaCofork.inverse = I.ofSigmaCoforkFunctor
                                                                        @[simp]
                                                                        theorem CategoryTheory.Limits.MultispanIndex.multicoforkEquivSigmaCofork_functor {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasCoproduct I.left] [HasCoproduct I.right] :
                                                                        I.multicoforkEquivSigmaCofork.functor = I.toSigmaCoforkFunctor
                                                                        @[reducible, inline]

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

                                                                        Equations
                                                                        Instances For
                                                                          @[reducible, inline]

                                                                          The multiequalizer of I : MulticospanIndex C.

                                                                          Equations
                                                                          Instances For
                                                                            @[reducible, inline]

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

                                                                            Equations
                                                                            Instances For
                                                                              @[reducible, inline]

                                                                              The multiecoqualizer of I : MultispanIndex C.

                                                                              Equations
                                                                              Instances For
                                                                                @[reducible, inline]

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

                                                                                Equations
                                                                                Instances For
                                                                                  @[reducible, inline]

                                                                                  The multifork associated to the multiequalizer.

                                                                                  Equations
                                                                                  Instances For
                                                                                    theorem CategoryTheory.Limits.Multiequalizer.condition {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasMultiequalizer I] (b : I.R) :
                                                                                    CategoryStruct.comp (ι I (I.fstTo b)) (I.fst b) = CategoryStruct.comp (ι I (I.sndTo b)) (I.snd b)
                                                                                    theorem CategoryTheory.Limits.Multiequalizer.condition_assoc {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasMultiequalizer I] (b : I.R) {Z : C} (h : I.right b Z) :
                                                                                    CategoryStruct.comp (ι I (I.fstTo b)) (CategoryStruct.comp (I.fst b) h) = CategoryStruct.comp (ι I (I.sndTo b)) (CategoryStruct.comp (I.snd b) h)
                                                                                    @[reducible, inline]
                                                                                    abbrev CategoryTheory.Limits.Multiequalizer.lift {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasMultiequalizer I] (W : C) (k : (a : I.L) → W I.left a) (h : ∀ (b : I.R), CategoryStruct.comp (k (I.fstTo b)) (I.fst b) = CategoryStruct.comp (k (I.sndTo b)) (I.snd b)) :

                                                                                    Construct a morphism to the multiequalizer from its universal property.

                                                                                    Equations
                                                                                    Instances For
                                                                                      theorem CategoryTheory.Limits.Multiequalizer.lift_ι {C : Type u} [Category.{v, u} C] (I : MulticospanIndex C) [HasMultiequalizer I] (W : C) (k : (a : I.L) → W I.left a) (h : ∀ (b : I.R), CategoryStruct.comp (k (I.fstTo b)) (I.fst b) = CategoryStruct.comp (k (I.sndTo b)) (I.snd b)) (a : I.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] (I : MulticospanIndex C) [HasMultiequalizer I] (W : C) (k : (a : I.L) → W I.left a) (h : ∀ (b : I.R), CategoryStruct.comp (k (I.fstTo b)) (I.fst b) = CategoryStruct.comp (k (I.sndTo b)) (I.snd b)) (a : I.L) {Z : C} (h✝ : I.left a Z) :

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

                                                                                      Equations
                                                                                      • One or more equations did not get rendered due to their size.
                                                                                      Instances For

                                                                                        The canonical injection multiequalizer I ⟶ ∏ᶜ I.left.

                                                                                        Equations
                                                                                        • One or more equations did not get rendered due to their size.
                                                                                        Instances For
                                                                                          @[simp]
                                                                                          @[reducible, inline]

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

                                                                                          Equations
                                                                                          Instances For
                                                                                            @[reducible, inline]

                                                                                            The multicofork associated to the multicoequalizer.

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

                                                                                              Construct a morphism from the multicoequalizer from its universal property.

                                                                                              Equations
                                                                                              Instances For
                                                                                                theorem CategoryTheory.Limits.Multicoequalizer.π_desc {C : Type u} [Category.{v, u} C] (I : MultispanIndex C) [HasMulticoequalizer I] (W : C) (k : (b : I.R) → I.right b W) (h : ∀ (a : I.L), CategoryStruct.comp (I.fst a) (k (I.fstFrom a)) = CategoryStruct.comp (I.snd a) (k (I.sndFrom a))) (b : I.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] (I : MultispanIndex C) [HasMulticoequalizer I] (W : C) (k : (b : I.R) → I.right b W) (h : ∀ (a : I.L), CategoryStruct.comp (I.fst a) (k (I.fstFrom a)) = CategoryStruct.comp (I.snd a) (k (I.sndFrom a))) (b : I.R) {Z : C} (h✝ : W Z) :

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

                                                                                                Equations
                                                                                                • One or more equations did not get rendered due to their size.
                                                                                                Instances For

                                                                                                  The canonical projection ∐ I.rightmulticoequalizer I.

                                                                                                  Equations
                                                                                                  • One or more equations did not get rendered due to their size.
                                                                                                  Instances For