Documentation

Mathlib.CategoryTheory.Limits.Shapes.Products

Categorical (co)products #

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

A product is the categorical generalization of the object Π i, f i where f : ι → C. It is a limit cone over the diagram formed by f, implemented by converting f into a functor Discrete ι ⥤ C.

A coproduct is the dual concept.

Main definitions #

Each of these has a dual.

Implementation notes #

As with the other special shapes in the limits library, all the definitions here are given as abbreviations of the general statements for limits, so all the simp lemmas and theorems about general limits can be used.

@[reducible, inline]
abbrev CategoryTheory.Limits.Fan {β : Type w} {C : Type u} [Category.{v, u} C] (f : βC) :
Type (max (max w u) v)

A fan over f : β → C consists of a collection of maps from an object P to every f b.

Equations
Instances For
    @[reducible, inline]
    abbrev CategoryTheory.Limits.Cofan {β : Type w} {C : Type u} [Category.{v, u} C] (f : βC) :
    Type (max (max w u) v)

    A cofan over f : β → C consists of a collection of maps from every f b to an object P.

    Equations
    Instances For
      def CategoryTheory.Limits.Fan.mk {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (P : C) (p : (b : β) → P f b) :
      Fan f

      A fan over f : β → C consists of a collection of maps from an object P to every f b.

      Equations
      Instances For
        @[simp]
        theorem CategoryTheory.Limits.Fan.mk_π_app {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (P : C) (p : (b : β) → P f b) (X : Discrete β) :
        (mk P p).app X = p X.as
        @[simp]
        theorem CategoryTheory.Limits.Fan.mk_pt {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (P : C) (p : (b : β) → P f b) :
        (mk P p).pt = P
        def CategoryTheory.Limits.Cofan.mk {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (P : C) (p : (b : β) → f b P) :

        A cofan over f : β → C consists of a collection of maps from every f b to an object P.

        Equations
        Instances For
          @[simp]
          theorem CategoryTheory.Limits.Cofan.mk_ι_app {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (P : C) (p : (b : β) → f b P) (X : Discrete β) :
          (mk P p).app X = p X.as
          @[simp]
          theorem CategoryTheory.Limits.Cofan.mk_pt {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (P : C) (p : (b : β) → f b P) :
          (mk P p).pt = P
          def CategoryTheory.Limits.Fan.proj {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (p : Fan f) (j : β) :
          p.pt f j

          Get the jth "projection" in the fan. (Note that the initial letter of proj matches the greek letter in Cone.π.)

          Equations
          • p.proj j = p.app { as := j }
          Instances For
            def CategoryTheory.Limits.Cofan.inj {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (p : Cofan f) (j : β) :
            f j p.pt

            Get the jth "injection" in the cofan. (Note that the initial letter of inj matches the greek letter in Cocone.ι.)

            Equations
            • p.inj j = p.app { as := j }
            Instances For
              @[simp]
              theorem CategoryTheory.Limits.fan_mk_proj {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (P : C) (p : (b : β) → P f b) (j : β) :
              (Fan.mk P p).proj j = p j
              @[simp]
              theorem CategoryTheory.Limits.cofan_mk_inj {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (P : C) (p : (b : β) → f b P) (j : β) :
              (Cofan.mk P p).inj j = p j
              @[reducible, inline]
              abbrev CategoryTheory.Limits.HasProduct {β : Type w} {C : Type u} [Category.{v, u} C] (f : βC) :

              An abbreviation for HasLimit (Discrete.functor f).

              Equations
              Instances For
                @[reducible, inline]
                abbrev CategoryTheory.Limits.HasCoproduct {β : Type w} {C : Type u} [Category.{v, u} C] (f : βC) :

                An abbreviation for HasColimit (Discrete.functor f).

                Equations
                Instances For
                  theorem CategoryTheory.Limits.hasCoproduct_of_equiv_of_iso {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] (f : αC) (g : βC) [HasCoproduct f] (e : β α) (iso : (j : β) → g j f (e j)) :
                  theorem CategoryTheory.Limits.hasProduct_of_equiv_of_iso {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] (f : αC) (g : βC) [HasProduct f] (e : β α) (iso : (j : β) → g j f (e j)) :
                  def CategoryTheory.Limits.mkFanLimit {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (t : Fan f) (lift : (s : Fan f) → s.pt t.pt) (fac : ∀ (s : Fan f) (j : β), CategoryStruct.comp (lift s) (t.proj j) = s.proj j := by aesop_cat) (uniq : ∀ (s : Fan f) (m : s.pt t.pt), (∀ (j : β), CategoryStruct.comp m (t.proj j) = s.proj j)m = lift s := by aesop_cat) :

                  Make a fan f into a limit fan by providing lift, fac, and uniq -- just a convenience lemma to avoid having to go through Discrete

                  Equations
                  Instances For
                    @[simp]
                    theorem CategoryTheory.Limits.mkFanLimit_lift {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (t : Fan f) (lift : (s : Fan f) → s.pt t.pt) (fac : ∀ (s : Fan f) (j : β), CategoryStruct.comp (lift s) (t.proj j) = s.proj j := by aesop_cat) (uniq : ∀ (s : Fan f) (m : s.pt t.pt), (∀ (j : β), CategoryStruct.comp m (t.proj j) = s.proj j)m = lift s := by aesop_cat) (s : Fan f) :
                    (mkFanLimit t lift fac uniq).lift s = lift s
                    def CategoryTheory.Limits.Fan.IsLimit.desc {β : Type w} {C : Type u} [Category.{v, u} C] {F : βC} {c : Fan F} (hc : IsLimit c) {A : C} (f : (i : β) → A F i) :
                    A c.pt

                    Constructor for morphisms to the point of a limit fan.

                    Equations
                    Instances For
                      @[simp]
                      theorem CategoryTheory.Limits.Fan.IsLimit.fac {β : Type w} {C : Type u} [Category.{v, u} C] {F : βC} {c : Fan F} (hc : IsLimit c) {A : C} (f : (i : β) → A F i) (i : β) :
                      CategoryStruct.comp (desc hc f) (c.proj i) = f i
                      @[simp]
                      theorem CategoryTheory.Limits.Fan.IsLimit.fac_assoc {β : Type w} {C : Type u} [Category.{v, u} C] {F : βC} {c : Fan F} (hc : IsLimit c) {A : C} (f : (i : β) → A F i) (i : β) {Z : C} (h : F i Z) :
                      theorem CategoryTheory.Limits.Fan.IsLimit.hom_ext {C : Type u} [Category.{v, u} C] {I : Type u_1} {F : IC} {c : Fan F} (hc : IsLimit c) {A : C} (f g : A c.pt) (h : ∀ (i : I), CategoryStruct.comp f (c.proj i) = CategoryStruct.comp g (c.proj i)) :
                      f = g
                      def CategoryTheory.Limits.mkCofanColimit {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (s : Cofan f) (desc : (t : Cofan f) → s.pt t.pt) (fac : ∀ (t : Cofan f) (j : β), CategoryStruct.comp (s.inj j) (desc t) = t.inj j := by aesop_cat) (uniq : ∀ (t : Cofan f) (m : s.pt t.pt), (∀ (j : β), CategoryStruct.comp (s.inj j) m = t.inj j)m = desc t := by aesop_cat) :

                      Make a cofan f into a colimit cofan by providing desc, fac, and uniq -- just a convenience lemma to avoid having to go through Discrete

                      Equations
                      Instances For
                        @[simp]
                        theorem CategoryTheory.Limits.mkCofanColimit_desc {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} (s : Cofan f) (desc : (t : Cofan f) → s.pt t.pt) (fac : ∀ (t : Cofan f) (j : β), CategoryStruct.comp (s.inj j) (desc t) = t.inj j := by aesop_cat) (uniq : ∀ (t : Cofan f) (m : s.pt t.pt), (∀ (j : β), CategoryStruct.comp (s.inj j) m = t.inj j)m = desc t := by aesop_cat) (t : Cofan f) :
                        (mkCofanColimit s desc fac uniq).desc t = desc t
                        def CategoryTheory.Limits.Cofan.IsColimit.desc {β : Type w} {C : Type u} [Category.{v, u} C] {F : βC} {c : Cofan F} (hc : IsColimit c) {A : C} (f : (i : β) → F i A) :
                        c.pt A

                        Constructor for morphisms from the point of a colimit cofan.

                        Equations
                        Instances For
                          @[simp]
                          theorem CategoryTheory.Limits.Cofan.IsColimit.fac {β : Type w} {C : Type u} [Category.{v, u} C] {F : βC} {c : Cofan F} (hc : IsColimit c) {A : C} (f : (i : β) → F i A) (i : β) :
                          CategoryStruct.comp (c.inj i) (desc hc f) = f i
                          @[simp]
                          theorem CategoryTheory.Limits.Cofan.IsColimit.fac_assoc {β : Type w} {C : Type u} [Category.{v, u} C] {F : βC} {c : Cofan F} (hc : IsColimit c) {A : C} (f : (i : β) → F i A) (i : β) {Z : C} (h : A Z) :
                          theorem CategoryTheory.Limits.Cofan.IsColimit.hom_ext {C : Type u} [Category.{v, u} C] {I : Type u_1} {F : IC} {c : Cofan F} (hc : IsColimit c) {A : C} (f g : c.pt A) (h : ∀ (i : I), CategoryStruct.comp (c.inj i) f = CategoryStruct.comp (c.inj i) g) :
                          f = g
                          @[reducible, inline]

                          An abbreviation for HasLimitsOfShape (Discrete f).

                          Equations
                          Instances For
                            @[reducible, inline]

                            An abbreviation for HasColimitsOfShape (Discrete f).

                            Equations
                            Instances For
                              @[reducible, inline]
                              abbrev CategoryTheory.Limits.piObj {β : Type w} {C : Type u} [Category.{v, u} C] (f : βC) [HasProduct f] :
                              C

                              piObj f computes the product of a family of elements f. (It is defined as an abbreviation for limit (Discrete.functor f), so for most facts about piObj f, you will just use general facts about limits.)

                              Equations
                              Instances For
                                @[reducible, inline]
                                abbrev CategoryTheory.Limits.sigmaObj {β : Type w} {C : Type u} [Category.{v, u} C] (f : βC) [HasCoproduct f] :
                                C

                                sigmaObj f computes the coproduct of a family of elements f. (It is defined as an abbreviation for colimit (Discrete.functor f), so for most facts about sigmaObj f, you will just use general facts about colimits.)

                                Equations
                                Instances For

                                  notation for categorical products. We need to avoid conflict with Finset.prod.

                                  Equations
                                  Instances For

                                    notation for categorical coproducts

                                    Equations
                                    Instances For
                                      @[reducible, inline]
                                      abbrev CategoryTheory.Limits.Pi.π {β : Type w} {C : Type u} [Category.{v, u} C] (f : βC) [HasProduct f] (b : β) :
                                      ∏ᶜ f f b

                                      The b-th projection from the pi object over f has the form ∏ᶜ f ⟶ f b.

                                      Equations
                                      Instances For
                                        @[reducible, inline]
                                        abbrev CategoryTheory.Limits.Sigma.ι {β : Type w} {C : Type u} [Category.{v, u} C] (f : βC) [HasCoproduct f] (b : β) :
                                        f b f

                                        The b-th inclusion into the sigma object over f has the form f b ⟶ ∐ f.

                                        Equations
                                        Instances For
                                          theorem CategoryTheory.Limits.Pi.hom_ext {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} [HasProduct f] {X : C} (g₁ g₂ : X ∏ᶜ f) (h : ∀ (b : β), CategoryStruct.comp g₁ (π f b) = CategoryStruct.comp g₂ (π f b)) :
                                          g₁ = g₂
                                          theorem CategoryTheory.Limits.Sigma.hom_ext {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} [HasCoproduct f] {X : C} (g₁ g₂ : f X) (h : ∀ (b : β), CategoryStruct.comp (ι f b) g₁ = CategoryStruct.comp (ι f b) g₂) :
                                          g₁ = g₂

                                          The fan constructed of the projections from the product is limiting.

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

                                            The cofan constructed of the inclusions from the coproduct is colimiting.

                                            Equations
                                            • One or more equations did not get rendered due to their size.
                                            Instances For
                                              @[simp]
                                              theorem CategoryTheory.Limits.Pi.π_comp_eqToHom {C : Type u} [Category.{v, u} C] {J : Type u_1} (f : JC) [HasProduct f] {j j' : J} (w : j = j') :
                                              CategoryStruct.comp (π f j) (eqToHom ) = π f j'
                                              @[simp]
                                              theorem CategoryTheory.Limits.Pi.π_comp_eqToHom_assoc {C : Type u} [Category.{v, u} C] {J : Type u_1} (f : JC) [HasProduct f] {j j' : J} (w : j = j') {Z : C} (h : f j' Z) :
                                              @[simp]
                                              theorem CategoryTheory.Limits.Sigma.eqToHom_comp_ι {C : Type u} [Category.{v, u} C] {J : Type u_1} (f : JC) [HasCoproduct f] {j j' : J} (w : j = j') :
                                              CategoryStruct.comp (eqToHom ) (ι f j') = ι f j
                                              @[simp]
                                              theorem CategoryTheory.Limits.Sigma.eqToHom_comp_ι_assoc {C : Type u} [Category.{v, u} C] {J : Type u_1} (f : JC) [HasCoproduct f] {j j' : J} (w : j = j') {Z : C} (h : f Z) :
                                              @[reducible, inline]
                                              abbrev CategoryTheory.Limits.Pi.lift {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} [HasProduct f] {P : C} (p : (b : β) → P f b) :

                                              A collection of morphisms P ⟶ f b induces a morphism P ⟶ ∏ᶜ f.

                                              Equations
                                              Instances For
                                                theorem CategoryTheory.Limits.Pi.lift_π {C : Type u} [Category.{v, u} C] {β : Type w} {f : βC} [HasProduct f] {P : C} (p : (b : β) → P f b) (b : β) :
                                                def CategoryTheory.Limits.Fan.ext {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} {c₁ c₂ : Fan f} (e : c₁.pt c₂.pt) (w : ∀ (b : β), c₁.proj b = CategoryStruct.comp e.hom (c₂.proj b) := by aesop_cat) :
                                                c₁ c₂

                                                A version of Cones.ext for Fans.

                                                Equations
                                                Instances For
                                                  @[simp]
                                                  theorem CategoryTheory.Limits.Fan.ext_hom_hom {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} {c₁ c₂ : Fan f} (e : c₁.pt c₂.pt) (w : ∀ (b : β), c₁.proj b = CategoryStruct.comp e.hom (c₂.proj b) := by aesop_cat) :
                                                  (ext e w).hom.hom = e.hom
                                                  @[simp]
                                                  theorem CategoryTheory.Limits.Fan.ext_inv_hom {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} {c₁ c₂ : Fan f} (e : c₁.pt c₂.pt) (w : ∀ (b : β), c₁.proj b = CategoryStruct.comp e.hom (c₂.proj b) := by aesop_cat) :
                                                  (ext e w).inv.hom = e.inv
                                                  @[reducible, inline]
                                                  abbrev CategoryTheory.Limits.Sigma.desc {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} [HasCoproduct f] {P : C} (p : (b : β) → f b P) :
                                                  f P

                                                  A collection of morphisms f b ⟶ P induces a morphism ∐ f ⟶ P.

                                                  Equations
                                                  Instances For
                                                    theorem CategoryTheory.Limits.Sigma.ι_desc {C : Type u} [Category.{v, u} C] {β : Type w} {f : βC} [HasCoproduct f] {P : C} (p : (b : β) → f b P) (b : β) :
                                                    instance CategoryTheory.Limits.instIsIsoDescι {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} [HasCoproduct f] :
                                                    IsIso (Sigma.desc fun (a : β) => Sigma.ι f a)
                                                    def CategoryTheory.Limits.Cofan.ext {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} {c₁ c₂ : Cofan f} (e : c₁.pt c₂.pt) (w : ∀ (b : β), CategoryStruct.comp (c₁.inj b) e.hom = c₂.inj b := by aesop_cat) :
                                                    c₁ c₂

                                                    A version of Cocones.ext for Cofans.

                                                    Equations
                                                    Instances For
                                                      @[simp]
                                                      theorem CategoryTheory.Limits.Cofan.ext_hom_hom {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} {c₁ c₂ : Cofan f} (e : c₁.pt c₂.pt) (w : ∀ (b : β), CategoryStruct.comp (c₁.inj b) e.hom = c₂.inj b := by aesop_cat) :
                                                      (ext e w).hom.hom = e.hom
                                                      @[simp]
                                                      theorem CategoryTheory.Limits.Cofan.ext_inv_hom {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} {c₁ c₂ : Cofan f} (e : c₁.pt c₂.pt) (w : ∀ (b : β), CategoryStruct.comp (c₁.inj b) e.hom = c₂.inj b := by aesop_cat) :
                                                      (ext e w).inv.hom = e.inv
                                                      def CategoryTheory.Limits.Cofan.isColimitOfIsIsoSigmaDesc {β : Type w} {C : Type u} [Category.{v, u} C] {f : βC} [HasCoproduct f] (c : Cofan f) [hc : IsIso (Sigma.desc c.inj)] :

                                                      A cofan c on f such that the induced map ∐ f ⟶ c.pt is an iso, is a coproduct.

                                                      Equations
                                                      • One or more equations did not get rendered due to their size.
                                                      Instances For
                                                        def CategoryTheory.Limits.Cofan.isColimitTrans {α : Type w₂} {C : Type u} [Category.{v, u} C] {X : αC} (c : Cofan X) (hc : IsColimit c) {β : αType u_1} {Y : (a : α) → β aC} (π : (a : α) → (b : β a) → Y a b X a) (hs : (a : α) → IsColimit (mk (X a) (π a))) :
                                                        IsColimit (mk c.pt fun (x : (a : α) × β a) => match x with | a, b => CategoryStruct.comp (π a b) (c.inj a))

                                                        A coproduct of coproducts is a coproduct

                                                        Equations
                                                        • One or more equations did not get rendered due to their size.
                                                        Instances For
                                                          @[reducible, inline]
                                                          abbrev CategoryTheory.Limits.Pi.map {β : Type w} {C : Type u} [Category.{v, u} C] {f g : βC} [HasProduct f] [HasProduct g] (p : (b : β) → f b g b) :

                                                          Construct a morphism between categorical products (indexed by the same type) from a family of morphisms between the factors.

                                                          Equations
                                                          Instances For
                                                            @[simp]
                                                            theorem CategoryTheory.Limits.Pi.map_id {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} [HasProduct f] :
                                                            (map fun (a : α) => CategoryStruct.id (f a)) = CategoryStruct.id (∏ᶜ f)
                                                            theorem CategoryTheory.Limits.Pi.map_comp_map {α : Type w₂} {C : Type u} [Category.{v, u} C] {f g h : αC} [HasProduct f] [HasProduct g] [HasProduct h] (q : (a : α) → f a g a) (q' : (a : α) → g a h a) :
                                                            CategoryStruct.comp (map q) (map q') = map fun (a : α) => CategoryStruct.comp (q a) (q' a)
                                                            instance CategoryTheory.Limits.Pi.map_mono {β : Type w} {C : Type u} [Category.{v, u} C] {f g : βC} [HasProduct f] [HasProduct g] (p : (b : β) → f b g b) [∀ (i : β), Mono (p i)] :
                                                            Mono (map p)
                                                            def CategoryTheory.Limits.Pi.map' {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} {g : βC} [HasProduct f] [HasProduct g] (p : βα) (q : (b : β) → f (p b) g b) :

                                                            Construct a morphism between categorical products from a family of morphisms between the factors.

                                                            Equations
                                                            Instances For
                                                              @[simp]
                                                              theorem CategoryTheory.Limits.Pi.map'_comp_π {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} {g : βC} [HasProduct f] [HasProduct g] (p : βα) (q : (b : β) → f (p b) g b) (b : β) :
                                                              CategoryStruct.comp (map' p q) (π g b) = CategoryStruct.comp (π f (p b)) (q b)
                                                              @[simp]
                                                              theorem CategoryTheory.Limits.Pi.map'_comp_π_assoc {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} {g : βC} [HasProduct f] [HasProduct g] (p : βα) (q : (b : β) → f (p b) g b) (b : β) {Z : C} (h : g b Z) :
                                                              theorem CategoryTheory.Limits.Pi.map'_id_id {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} [HasProduct f] :
                                                              (map' id fun (a : α) => CategoryStruct.id (f a)) = CategoryStruct.id (∏ᶜ f)
                                                              @[simp]
                                                              theorem CategoryTheory.Limits.Pi.map'_id {α : Type w₂} {C : Type u} [Category.{v, u} C] {f g : αC} [HasProduct f] [HasProduct g] (p : (b : α) → f b g b) :
                                                              map' id p = map p
                                                              theorem CategoryTheory.Limits.Pi.map'_comp_map' {β : Type w} {α : Type w₂} {γ : Type w₃} {C : Type u} [Category.{v, u} C] {f : αC} {g : βC} {h : γC} [HasProduct f] [HasProduct g] [HasProduct h] (p : βα) (p' : γβ) (q : (b : β) → f (p b) g b) (q' : (c : γ) → g (p' c) h c) :
                                                              CategoryStruct.comp (map' p q) (map' p' q') = map' (p p') fun (c : γ) => CategoryStruct.comp (q (p' c)) (q' c)
                                                              theorem CategoryTheory.Limits.Pi.map'_comp_map {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} {g h : βC} [HasProduct f] [HasProduct g] [HasProduct h] (p : βα) (q : (b : β) → f (p b) g b) (q' : (b : β) → g b h b) :
                                                              CategoryStruct.comp (map' p q) (map q') = map' p fun (b : β) => CategoryStruct.comp (q b) (q' b)
                                                              theorem CategoryTheory.Limits.Pi.map_comp_map' {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f g : αC} {h : βC} [HasProduct f] [HasProduct g] [HasProduct h] (p : βα) (q : (a : α) → f a g a) (q' : (b : β) → g (p b) h b) :
                                                              CategoryStruct.comp (map q) (map' p q') = map' p fun (b : β) => CategoryStruct.comp (q (p b)) (q' b)
                                                              theorem CategoryTheory.Limits.Pi.map'_eq {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} {g : βC} [HasProduct f] [HasProduct g] {p p' : βα} {q : (b : β) → f (p b) g b} {q' : (b : β) → f (p' b) g b} (hp : p = p') (hq : ∀ (b : β), CategoryStruct.comp (eqToHom ) (q b) = q' b) :
                                                              map' p q = map' p' q'
                                                              @[reducible, inline]
                                                              abbrev CategoryTheory.Limits.Pi.mapIso {β : Type w} {C : Type u} [Category.{v, u} C] {f g : βC} [HasProductsOfShape β C] (p : (b : β) → f b g b) :

                                                              Construct an isomorphism between categorical products (indexed by the same type) from a family of isomorphisms between the factors.

                                                              Equations
                                                              Instances For
                                                                instance CategoryTheory.Limits.Pi.map_isIso {β : Type w} {C : Type u} [Category.{v, u} C] {f g : βC} [HasProductsOfShape β C] (p : (b : β) → f b g b) [∀ (b : β), IsIso (p b)] :
                                                                def CategoryTheory.Limits.Pi.cone {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasProduct fun (j : α) => X.obj { as := j }] :

                                                                A limit cone for X : Discrete α ⥤ C that is given by ∏ᶜ (fun j => X.obj (Discrete.mk j)).

                                                                Equations
                                                                • One or more equations did not get rendered due to their size.
                                                                Instances For
                                                                  @[simp]
                                                                  theorem CategoryTheory.Limits.Pi.cone_π {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasProduct fun (j : α) => X.obj { as := j }] :
                                                                  (cone X) = Discrete.natTrans fun (x : Discrete α) => π (fun (j : α) => X.obj { as := j }) x.as
                                                                  @[simp]
                                                                  theorem CategoryTheory.Limits.Pi.cone_pt {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasProduct fun (j : α) => X.obj { as := j }] :
                                                                  (cone X).pt = ∏ᶜ fun (j : α) => X.obj { as := j }
                                                                  def CategoryTheory.Limits.productIsProduct' {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasProduct fun (j : α) => X.obj { as := j }] :

                                                                  The cone Pi.cone X is a limit cone.

                                                                  Equations
                                                                  Instances For
                                                                    def CategoryTheory.Limits.Pi.isoLimit {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasProduct fun (j : α) => X.obj { as := j }] [HasLimit X] :
                                                                    (∏ᶜ fun (j : α) => X.obj { as := j }) limit X

                                                                    The isomorphism ∏ᶜ (fun j => X.obj (Discrete.mk j)) ≅ limit X.

                                                                    Equations
                                                                    Instances For
                                                                      @[simp]
                                                                      theorem CategoryTheory.Limits.Pi.isoLimit_inv_π {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasProduct fun (j : α) => X.obj { as := j }] [HasLimit X] (j : α) :
                                                                      CategoryStruct.comp (isoLimit X).inv (π (fun (j : α) => X.obj { as := j }) j) = limit.π X { as := j }
                                                                      @[simp]
                                                                      theorem CategoryTheory.Limits.Pi.isoLimit_inv_π_assoc {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasProduct fun (j : α) => X.obj { as := j }] [HasLimit X] (j : α) {Z : C} (h : X.obj { as := j } Z) :
                                                                      CategoryStruct.comp (isoLimit X).inv (CategoryStruct.comp (π (fun (j : α) => X.obj { as := j }) j) h) = CategoryStruct.comp (limit.π X { as := j }) h
                                                                      @[simp]
                                                                      theorem CategoryTheory.Limits.Pi.isoLimit_hom_π {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasProduct fun (j : α) => X.obj { as := j }] [HasLimit X] (j : α) :
                                                                      CategoryStruct.comp (isoLimit X).hom (limit.π X { as := j }) = π (fun (j : α) => X.obj { as := j }) j
                                                                      @[simp]
                                                                      theorem CategoryTheory.Limits.Pi.isoLimit_hom_π_assoc {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasProduct fun (j : α) => X.obj { as := j }] [HasLimit X] (j : α) {Z : C} (h : X.obj { as := j } Z) :
                                                                      CategoryStruct.comp (isoLimit X).hom (CategoryStruct.comp (limit.π X { as := j }) h) = CategoryStruct.comp (π (fun (j : α) => X.obj { as := j }) j) h
                                                                      @[reducible, inline]
                                                                      abbrev CategoryTheory.Limits.Sigma.map {β : Type w} {C : Type u} [Category.{v, u} C] {f g : βC} [HasCoproduct f] [HasCoproduct g] (p : (b : β) → f b g b) :
                                                                      f g

                                                                      Construct a morphism between categorical coproducts (indexed by the same type) from a family of morphisms between the factors.

                                                                      Equations
                                                                      Instances For
                                                                        @[simp]
                                                                        theorem CategoryTheory.Limits.Sigma.map_id {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} [HasCoproduct f] :
                                                                        (map fun (a : α) => CategoryStruct.id (f a)) = CategoryStruct.id ( f)
                                                                        theorem CategoryTheory.Limits.Sigma.map_comp_map {α : Type w₂} {C : Type u} [Category.{v, u} C] {f g h : αC} [HasCoproduct f] [HasCoproduct g] [HasCoproduct h] (q : (a : α) → f a g a) (q' : (a : α) → g a h a) :
                                                                        CategoryStruct.comp (map q) (map q') = map fun (a : α) => CategoryStruct.comp (q a) (q' a)
                                                                        instance CategoryTheory.Limits.Sigma.map_epi {β : Type w} {C : Type u} [Category.{v, u} C] {f g : βC} [HasCoproduct f] [HasCoproduct g] (p : (b : β) → f b g b) [∀ (i : β), Epi (p i)] :
                                                                        Epi (map p)
                                                                        def CategoryTheory.Limits.Sigma.map' {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} {g : βC} [HasCoproduct f] [HasCoproduct g] (p : αβ) (q : (a : α) → f a g (p a)) :
                                                                        f g

                                                                        Construct a morphism between categorical coproducts from a family of morphisms between the factors.

                                                                        Equations
                                                                        Instances For
                                                                          @[simp]
                                                                          theorem CategoryTheory.Limits.Sigma.ι_comp_map' {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} {g : βC} [HasCoproduct f] [HasCoproduct g] (p : αβ) (q : (a : α) → f a g (p a)) (a : α) :
                                                                          CategoryStruct.comp (ι f a) (map' p q) = CategoryStruct.comp (q a) (ι g (p a))
                                                                          @[simp]
                                                                          theorem CategoryTheory.Limits.Sigma.ι_comp_map'_assoc {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} {g : βC} [HasCoproduct f] [HasCoproduct g] (p : αβ) (q : (a : α) → f a g (p a)) (a : α) {Z : C} (h : g Z) :
                                                                          theorem CategoryTheory.Limits.Sigma.map'_id_id {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} [HasCoproduct f] :
                                                                          (map' id fun (a : α) => CategoryStruct.id (f a)) = CategoryStruct.id ( f)
                                                                          @[simp]
                                                                          theorem CategoryTheory.Limits.Sigma.map'_id {α : Type w₂} {C : Type u} [Category.{v, u} C] {f g : αC} [HasCoproduct f] [HasCoproduct g] (p : (b : α) → f b g b) :
                                                                          map' id p = map p
                                                                          theorem CategoryTheory.Limits.Sigma.map'_comp_map' {β : Type w} {α : Type w₂} {γ : Type w₃} {C : Type u} [Category.{v, u} C] {f : αC} {g : βC} {h : γC} [HasCoproduct f] [HasCoproduct g] [HasCoproduct h] (p : αβ) (p' : βγ) (q : (a : α) → f a g (p a)) (q' : (b : β) → g b h (p' b)) :
                                                                          CategoryStruct.comp (map' p q) (map' p' q') = map' (p' p) fun (a : α) => CategoryStruct.comp (q a) (q' (p a))
                                                                          theorem CategoryTheory.Limits.Sigma.map'_comp_map {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} {g h : βC} [HasCoproduct f] [HasCoproduct g] [HasCoproduct h] (p : αβ) (q : (a : α) → f a g (p a)) (q' : (b : β) → g b h b) :
                                                                          CategoryStruct.comp (map' p q) (map q') = map' p fun (a : α) => CategoryStruct.comp (q a) (q' (p a))
                                                                          theorem CategoryTheory.Limits.Sigma.map_comp_map' {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f g : αC} {h : βC} [HasCoproduct f] [HasCoproduct g] [HasCoproduct h] (p : αβ) (q : (a : α) → f a g a) (q' : (a : α) → g a h (p a)) :
                                                                          CategoryStruct.comp (map q) (map' p q') = map' p fun (a : α) => CategoryStruct.comp (q a) (q' a)
                                                                          theorem CategoryTheory.Limits.Sigma.map'_eq {β : Type w} {α : Type w₂} {C : Type u} [Category.{v, u} C] {f : αC} {g : βC} [HasCoproduct f] [HasCoproduct g] {p p' : αβ} {q : (a : α) → f a g (p a)} {q' : (a : α) → f a g (p' a)} (hp : p = p') (hq : ∀ (a : α), CategoryStruct.comp (q a) (eqToHom ) = q' a) :
                                                                          map' p q = map' p' q'
                                                                          @[reducible, inline]
                                                                          abbrev CategoryTheory.Limits.Sigma.mapIso {β : Type w} {C : Type u} [Category.{v, u} C] {f g : βC} [HasCoproductsOfShape β C] (p : (b : β) → f b g b) :
                                                                          f g

                                                                          Construct an isomorphism between categorical coproducts (indexed by the same type) from a family of isomorphisms between the factors.

                                                                          Equations
                                                                          Instances For
                                                                            instance CategoryTheory.Limits.Sigma.map_isIso {β : Type w} {C : Type u} [Category.{v, u} C] {f g : βC} [HasCoproductsOfShape β C] (p : (b : β) → f b g b) [∀ (b : β), IsIso (p b)] :
                                                                            def CategoryTheory.Limits.Sigma.cocone {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasCoproduct fun (j : α) => X.obj { as := j }] :

                                                                            A colimit cocone for X : Discrete α ⥤ C that is given by ∐ (fun j => X.obj (Discrete.mk j)).

                                                                            Equations
                                                                            • One or more equations did not get rendered due to their size.
                                                                            Instances For
                                                                              @[simp]
                                                                              theorem CategoryTheory.Limits.Sigma.cocone_ι {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasCoproduct fun (j : α) => X.obj { as := j }] :
                                                                              (cocone X) = Discrete.natTrans fun (x : Discrete α) => ι (fun (j : α) => X.obj { as := j }) x.as
                                                                              @[simp]
                                                                              theorem CategoryTheory.Limits.Sigma.cocone_pt {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasCoproduct fun (j : α) => X.obj { as := j }] :
                                                                              (cocone X).pt = fun (j : α) => X.obj { as := j }
                                                                              def CategoryTheory.Limits.coproductIsCoproduct' {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasCoproduct fun (j : α) => X.obj { as := j }] :

                                                                              The cocone Sigma.cocone X is a colimit cocone.

                                                                              Equations
                                                                              • One or more equations did not get rendered due to their size.
                                                                              Instances For
                                                                                def CategoryTheory.Limits.Sigma.isoColimit {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasCoproduct fun (j : α) => X.obj { as := j }] [HasColimit X] :
                                                                                ( fun (j : α) => X.obj { as := j }) colimit X

                                                                                The isomorphism ∐ (fun j => X.obj (Discrete.mk j)) ≅ colimit X.

                                                                                Equations
                                                                                Instances For
                                                                                  @[simp]
                                                                                  theorem CategoryTheory.Limits.Sigma.ι_isoColimit_hom {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasCoproduct fun (j : α) => X.obj { as := j }] [HasColimit X] (j : α) :
                                                                                  CategoryStruct.comp (ι (fun (j : α) => X.obj { as := j }) j) (isoColimit X).hom = colimit.ι X { as := j }
                                                                                  @[simp]
                                                                                  theorem CategoryTheory.Limits.Sigma.ι_isoColimit_hom_assoc {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasCoproduct fun (j : α) => X.obj { as := j }] [HasColimit X] (j : α) {Z : C} (h : colimit X Z) :
                                                                                  CategoryStruct.comp (ι (fun (j : α) => X.obj { as := j }) j) (CategoryStruct.comp (isoColimit X).hom h) = CategoryStruct.comp (colimit.ι X { as := j }) h
                                                                                  @[simp]
                                                                                  theorem CategoryTheory.Limits.Sigma.ι_isoColimit_inv {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasCoproduct fun (j : α) => X.obj { as := j }] [HasColimit X] (j : α) :
                                                                                  CategoryStruct.comp (colimit.ι X { as := j }) (isoColimit X).inv = ι (fun (j : α) => X.obj { as := j }) j
                                                                                  @[simp]
                                                                                  theorem CategoryTheory.Limits.Sigma.ι_isoColimit_inv_assoc {α : Type w₂} {C : Type u} [Category.{v, u} C] (X : Functor (Discrete α) C) [HasCoproduct fun (j : α) => X.obj { as := j }] [HasColimit X] (j : α) {Z : C} (h : ( fun (j : α) => X.obj { as := j }) Z) :
                                                                                  CategoryStruct.comp (colimit.ι X { as := j }) (CategoryStruct.comp (isoColimit X).inv h) = CategoryStruct.comp (ι (fun (j : α) => X.obj { as := j }) j) h
                                                                                  def CategoryTheory.Limits.Pi.whiskerEquiv {C : Type u} [Category.{v, u} C] {J : Type u_1} {K : Type u_2} {f : JC} {g : KC} (e : J K) (w : (j : J) → g (e j) f j) [HasProduct f] [HasProduct g] :

                                                                                  Two products which differ by an equivalence in the indexing type, and up to isomorphism in the factors, are isomorphic.

                                                                                  Equations
                                                                                  • One or more equations did not get rendered due to their size.
                                                                                  Instances For
                                                                                    @[simp]
                                                                                    theorem CategoryTheory.Limits.Pi.whiskerEquiv_inv {C : Type u} [Category.{v, u} C] {J : Type u_1} {K : Type u_2} {f : JC} {g : KC} (e : J K) (w : (j : J) → g (e j) f j) [HasProduct f] [HasProduct g] :
                                                                                    (whiskerEquiv e w).inv = map' e fun (j : J) => (w j).hom
                                                                                    @[simp]
                                                                                    theorem CategoryTheory.Limits.Pi.whiskerEquiv_hom {C : Type u} [Category.{v, u} C] {J : Type u_1} {K : Type u_2} {f : JC} {g : KC} (e : J K) (w : (j : J) → g (e j) f j) [HasProduct f] [HasProduct g] :
                                                                                    (whiskerEquiv e w).hom = map' e.symm fun (k : K) => CategoryStruct.comp (w (e.symm k)).inv (eqToHom )
                                                                                    def CategoryTheory.Limits.Sigma.whiskerEquiv {C : Type u} [Category.{v, u} C] {J : Type u_1} {K : Type u_2} {f : JC} {g : KC} (e : J K) (w : (j : J) → g (e j) f j) [HasCoproduct f] [HasCoproduct g] :
                                                                                    f g

                                                                                    Two coproducts which differ by an equivalence in the indexing type, and up to isomorphism in the factors, are isomorphic.

                                                                                    Equations
                                                                                    • One or more equations did not get rendered due to their size.
                                                                                    Instances For
                                                                                      @[simp]
                                                                                      theorem CategoryTheory.Limits.Sigma.whiskerEquiv_inv {C : Type u} [Category.{v, u} C] {J : Type u_1} {K : Type u_2} {f : JC} {g : KC} (e : J K) (w : (j : J) → g (e j) f j) [HasCoproduct f] [HasCoproduct g] :
                                                                                      (whiskerEquiv e w).inv = map' e.symm fun (k : K) => CategoryStruct.comp (eqToHom ) (w (e.symm k)).hom
                                                                                      @[simp]
                                                                                      theorem CategoryTheory.Limits.Sigma.whiskerEquiv_hom {C : Type u} [Category.{v, u} C] {J : Type u_1} {K : Type u_2} {f : JC} {g : KC} (e : J K) (w : (j : J) → g (e j) f j) [HasCoproduct f] [HasCoproduct g] :
                                                                                      (whiskerEquiv e w).hom = map' e fun (j : J) => (w j).inv
                                                                                      instance CategoryTheory.Limits.instHasProductSigmaFstSndOfPiObj {C : Type u} [Category.{v, u} C] {ι : Type u_1} (f : ιType u_2) (g : (i : ι) → f iC) [∀ (i : ι), HasProduct (g i)] [HasProduct fun (i : ι) => ∏ᶜ g i] :
                                                                                      HasProduct fun (p : (i : ι) × f i) => g p.fst p.snd
                                                                                      def CategoryTheory.Limits.piPiIso {C : Type u} [Category.{v, u} C] {ι : Type u_1} (f : ιType u_2) (g : (i : ι) → f iC) [∀ (i : ι), HasProduct (g i)] [HasProduct fun (i : ι) => ∏ᶜ g i] :
                                                                                      (∏ᶜ fun (i : ι) => ∏ᶜ g i) ∏ᶜ fun (p : (i : ι) × f i) => g p.fst p.snd

                                                                                      An iterated product is a product over a sigma type.

                                                                                      Equations
                                                                                      • One or more equations did not get rendered due to their size.
                                                                                      Instances For
                                                                                        @[simp]
                                                                                        theorem CategoryTheory.Limits.piPiIso_hom {C : Type u} [Category.{v, u} C] {ι : Type u_1} (f : ιType u_2) (g : (i : ι) → f iC) [∀ (i : ι), HasProduct (g i)] [HasProduct fun (i : ι) => ∏ᶜ g i] :
                                                                                        (piPiIso f g).hom = Pi.lift fun (x : (i : ι) × f i) => match x with | i, x => CategoryStruct.comp (Pi.π (fun (i : ι) => ∏ᶜ g i) i) (Pi.π (g i) x)
                                                                                        @[simp]
                                                                                        theorem CategoryTheory.Limits.piPiIso_inv {C : Type u} [Category.{v, u} C] {ι : Type u_1} (f : ιType u_2) (g : (i : ι) → f iC) [∀ (i : ι), HasProduct (g i)] [HasProduct fun (i : ι) => ∏ᶜ g i] :
                                                                                        (piPiIso f g).inv = Pi.lift fun (i : ι) => Pi.lift fun (x : f i) => Pi.π (fun (p : (i : ι) × f i) => g p.fst p.snd) i, x
                                                                                        instance CategoryTheory.Limits.instHasCoproductSigmaFstSndOfSigmaObj {C : Type u} [Category.{v, u} C] {ι : Type u_1} (f : ιType u_2) (g : (i : ι) → f iC) [∀ (i : ι), HasCoproduct (g i)] [HasCoproduct fun (i : ι) => g i] :
                                                                                        HasCoproduct fun (p : (i : ι) × f i) => g p.fst p.snd
                                                                                        def CategoryTheory.Limits.sigmaSigmaIso {C : Type u} [Category.{v, u} C] {ι : Type u_1} (f : ιType u_2) (g : (i : ι) → f iC) [∀ (i : ι), HasCoproduct (g i)] [HasCoproduct fun (i : ι) => g i] :
                                                                                        ( fun (i : ι) => g i) fun (p : (i : ι) × f i) => g p.fst p.snd

                                                                                        An iterated coproduct is a coproduct over a sigma type.

                                                                                        Equations
                                                                                        • One or more equations did not get rendered due to their size.
                                                                                        Instances For
                                                                                          @[simp]
                                                                                          theorem CategoryTheory.Limits.sigmaSigmaIso_inv {C : Type u} [Category.{v, u} C] {ι : Type u_1} (f : ιType u_2) (g : (i : ι) → f iC) [∀ (i : ι), HasCoproduct (g i)] [HasCoproduct fun (i : ι) => g i] :
                                                                                          (sigmaSigmaIso f g).inv = Sigma.desc fun (x : (i : ι) × f i) => match x with | i, x => CategoryStruct.comp (Sigma.ι (g i) x) (Sigma.ι (fun (i : ι) => g i) i)
                                                                                          @[simp]
                                                                                          theorem CategoryTheory.Limits.sigmaSigmaIso_hom {C : Type u} [Category.{v, u} C] {ι : Type u_1} (f : ιType u_2) (g : (i : ι) → f iC) [∀ (i : ι), HasCoproduct (g i)] [HasCoproduct fun (i : ι) => g i] :
                                                                                          (sigmaSigmaIso f g).hom = Sigma.desc fun (i : ι) => Sigma.desc fun (x : f i) => Sigma.ι (fun (p : (i : ι) × f i) => g p.fst p.snd) i, x
                                                                                          def CategoryTheory.Limits.piComparison {β : Type w} {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) (f : βC) [HasProduct f] [HasProduct fun (b : β) => G.obj (f b)] :
                                                                                          G.obj (∏ᶜ f) ∏ᶜ fun (b : β) => G.obj (f b)

                                                                                          The comparison morphism for the product of f. This is an iso iff G preserves the product of f, see PreservesProduct.ofIsoComparison.

                                                                                          Equations
                                                                                          Instances For
                                                                                            @[simp]
                                                                                            theorem CategoryTheory.Limits.piComparison_comp_π {β : Type w} {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) (f : βC) [HasProduct f] [HasProduct fun (b : β) => G.obj (f b)] (b : β) :
                                                                                            CategoryStruct.comp (piComparison G f) (Pi.π (fun (b : β) => G.obj (f b)) b) = G.map (Pi.π f b)
                                                                                            @[simp]
                                                                                            theorem CategoryTheory.Limits.piComparison_comp_π_assoc {β : Type w} {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) (f : βC) [HasProduct f] [HasProduct fun (b : β) => G.obj (f b)] (b : β) {Z : D} (h : G.obj (f b) Z) :
                                                                                            CategoryStruct.comp (piComparison G f) (CategoryStruct.comp (Pi.π (fun (b : β) => G.obj (f b)) b) h) = CategoryStruct.comp (G.map (Pi.π f b)) h
                                                                                            @[simp]
                                                                                            theorem CategoryTheory.Limits.map_lift_piComparison {β : Type w} {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) (f : βC) [HasProduct f] [HasProduct fun (b : β) => G.obj (f b)] (P : C) (g : (j : β) → P f j) :
                                                                                            CategoryStruct.comp (G.map (Pi.lift g)) (piComparison G f) = Pi.lift fun (j : β) => G.map (g j)
                                                                                            @[simp]
                                                                                            theorem CategoryTheory.Limits.map_lift_piComparison_assoc {β : Type w} {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) (f : βC) [HasProduct f] [HasProduct fun (b : β) => G.obj (f b)] (P : C) (g : (j : β) → P f j) {Z : D} (h : (∏ᶜ fun (b : β) => G.obj (f b)) Z) :
                                                                                            CategoryStruct.comp (G.map (Pi.lift g)) (CategoryStruct.comp (piComparison G f) h) = CategoryStruct.comp (Pi.lift fun (j : β) => G.map (g j)) h
                                                                                            def CategoryTheory.Limits.sigmaComparison {β : Type w} {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) (f : βC) [HasCoproduct f] [HasCoproduct fun (b : β) => G.obj (f b)] :
                                                                                            ( fun (b : β) => G.obj (f b)) G.obj ( f)

                                                                                            The comparison morphism for the coproduct of f. This is an iso iff G preserves the coproduct of f, see PreservesCoproduct.ofIsoComparison.

                                                                                            Equations
                                                                                            Instances For
                                                                                              @[simp]
                                                                                              theorem CategoryTheory.Limits.ι_comp_sigmaComparison {β : Type w} {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) (f : βC) [HasCoproduct f] [HasCoproduct fun (b : β) => G.obj (f b)] (b : β) :
                                                                                              CategoryStruct.comp (Sigma.ι (fun (b : β) => G.obj (f b)) b) (sigmaComparison G f) = G.map (Sigma.ι f b)
                                                                                              @[simp]
                                                                                              theorem CategoryTheory.Limits.ι_comp_sigmaComparison_assoc {β : Type w} {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) (f : βC) [HasCoproduct f] [HasCoproduct fun (b : β) => G.obj (f b)] (b : β) {Z : D} (h : G.obj ( f) Z) :
                                                                                              CategoryStruct.comp (Sigma.ι (fun (b : β) => G.obj (f b)) b) (CategoryStruct.comp (sigmaComparison G f) h) = CategoryStruct.comp (G.map (Sigma.ι f b)) h
                                                                                              @[simp]
                                                                                              theorem CategoryTheory.Limits.sigmaComparison_map_desc {β : Type w} {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) (f : βC) [HasCoproduct f] [HasCoproduct fun (b : β) => G.obj (f b)] (P : C) (g : (j : β) → f j P) :
                                                                                              CategoryStruct.comp (sigmaComparison G f) (G.map (Sigma.desc g)) = Sigma.desc fun (j : β) => G.map (g j)
                                                                                              @[simp]
                                                                                              theorem CategoryTheory.Limits.sigmaComparison_map_desc_assoc {β : Type w} {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{v₂, u₂} D] (G : Functor C D) (f : βC) [HasCoproduct f] [HasCoproduct fun (b : β) => G.obj (f b)] (P : C) (g : (j : β) → f j P) {Z : D} (h : G.obj P Z) :
                                                                                              @[reducible, inline]

                                                                                              An abbreviation for Π J, HasLimitsOfShape (Discrete J) C

                                                                                              Equations
                                                                                              Instances For
                                                                                                @[reducible, inline]

                                                                                                An abbreviation for Π J, HasColimitsOfShape (Discrete J) C

                                                                                                Equations
                                                                                                Instances For
                                                                                                  theorem CategoryTheory.Limits.hasProducts_of_limit_fans {C : Type u} [Category.{v, u} C] (lf : {J : Type w} → (f : JC) → Fan f) (lf_isLimit : {J : Type w} → (f : JC) → IsLimit (lf f)) :

                                                                                                  (Co)products over a type with a unique term.

                                                                                                  The limit cone for the product over an index type with exactly one term.

                                                                                                  Equations
                                                                                                  • One or more equations did not get rendered due to their size.
                                                                                                  Instances For
                                                                                                    @[simp]
                                                                                                    theorem CategoryTheory.Limits.limitConeOfUnique_cone_π {β : Type w} {C : Type u} [Category.{v, u} C] [Unique β] (f : βC) :
                                                                                                    (limitConeOfUnique f).cone = Discrete.natTrans fun (x : Discrete β) => match x with | { as := j } => eqToHom
                                                                                                    @[simp]
                                                                                                    theorem CategoryTheory.Limits.limitConeOfUnique_isLimit_lift {β : Type w} {C : Type u} [Category.{v, u} C] [Unique β] (f : βC) (s : Cone (Discrete.functor f)) :
                                                                                                    (limitConeOfUnique f).isLimit.lift s = s.app default
                                                                                                    @[simp]
                                                                                                    theorem CategoryTheory.Limits.limitConeOfUnique_cone_pt {β : Type w} {C : Type u} [Category.{v, u} C] [Unique β] (f : βC) :
                                                                                                    @[instance 100]
                                                                                                    instance CategoryTheory.Limits.hasProduct_unique {β : Type w} {C : Type u} [Category.{v, u} C] [Nonempty β] [Subsingleton β] (f : βC) :
                                                                                                    def CategoryTheory.Limits.productUniqueIso {β : Type w} {C : Type u} [Category.{v, u} C] [Unique β] (f : βC) :

                                                                                                    A product over an index type with exactly one term is just the object over that term.

                                                                                                    Equations
                                                                                                    Instances For

                                                                                                      The colimit cocone for the coproduct over an index type with exactly one term.

                                                                                                      Equations
                                                                                                      • One or more equations did not get rendered due to their size.
                                                                                                      Instances For
                                                                                                        @[simp]
                                                                                                        theorem CategoryTheory.Limits.colimitCoconeOfUnique_isColimit_desc {β : Type w} {C : Type u} [Category.{v, u} C] [Unique β] (f : βC) (s : Cocone (Discrete.functor f)) :
                                                                                                        (colimitCoconeOfUnique f).isColimit.desc s = s.app default
                                                                                                        @[simp]
                                                                                                        theorem CategoryTheory.Limits.colimitCoconeOfUnique_cocone_ι {β : Type w} {C : Type u} [Category.{v, u} C] [Unique β] (f : βC) :
                                                                                                        (colimitCoconeOfUnique f).cocone = Discrete.natTrans fun (x : Discrete β) => match x with | { as := j } => eqToHom
                                                                                                        @[simp]
                                                                                                        @[instance 100]
                                                                                                        instance CategoryTheory.Limits.hasCoproduct_unique {β : Type w} {C : Type u} [Category.{v, u} C] [Nonempty β] [Subsingleton β] (f : βC) :
                                                                                                        def CategoryTheory.Limits.coproductUniqueIso {β : Type w} {C : Type u} [Category.{v, u} C] [Unique β] (f : βC) :

                                                                                                        A coproduct over an index type with exactly one term is just the object over that term.

                                                                                                        Equations
                                                                                                        • One or more equations did not get rendered due to their size.
                                                                                                        Instances For
                                                                                                          def CategoryTheory.Limits.Pi.reindex {β : Type w} {C : Type u} [Category.{v, u} C] {γ : Type w'} (ε : β γ) (f : γC) [HasProduct f] [HasProduct (f ε)] :
                                                                                                          ∏ᶜ f ε ∏ᶜ f

                                                                                                          Reindex a categorical product via an equivalence of the index types.

                                                                                                          Equations
                                                                                                          • One or more equations did not get rendered due to their size.
                                                                                                          Instances For
                                                                                                            @[simp]
                                                                                                            theorem CategoryTheory.Limits.Pi.reindex_hom_π {β : Type w} {C : Type u} [Category.{v, u} C] {γ : Type w'} (ε : β γ) (f : γC) [HasProduct f] [HasProduct (f ε)] (b : β) :
                                                                                                            CategoryStruct.comp (reindex ε f).hom (π f (ε b)) = π (f ε) b
                                                                                                            @[simp]
                                                                                                            theorem CategoryTheory.Limits.Pi.reindex_hom_π_assoc {β : Type w} {C : Type u} [Category.{v, u} C] {γ : Type w'} (ε : β γ) (f : γC) [HasProduct f] [HasProduct (f ε)] (b : β) {Z : C} (h : f (ε b) Z) :
                                                                                                            CategoryStruct.comp (reindex ε f).hom (CategoryStruct.comp (π f (ε b)) h) = CategoryStruct.comp (π (f ε) b) h
                                                                                                            @[simp]
                                                                                                            theorem CategoryTheory.Limits.Pi.reindex_inv_π {β : Type w} {C : Type u} [Category.{v, u} C] {γ : Type w'} (ε : β γ) (f : γC) [HasProduct f] [HasProduct (f ε)] (b : β) :
                                                                                                            CategoryStruct.comp (reindex ε f).inv (π (f ε) b) = π f (ε b)
                                                                                                            @[simp]
                                                                                                            theorem CategoryTheory.Limits.Pi.reindex_inv_π_assoc {β : Type w} {C : Type u} [Category.{v, u} C] {γ : Type w'} (ε : β γ) (f : γC) [HasProduct f] [HasProduct (f ε)] (b : β) {Z : C} (h : (f ε) b Z) :
                                                                                                            CategoryStruct.comp (reindex ε f).inv (CategoryStruct.comp (π (f ε) b) h) = CategoryStruct.comp (π f (ε b)) h
                                                                                                            def CategoryTheory.Limits.Sigma.reindex {β : Type w} {C : Type u} [Category.{v, u} C] {γ : Type w'} (ε : β γ) (f : γC) [HasCoproduct f] [HasCoproduct (f ε)] :
                                                                                                            f ε f

                                                                                                            Reindex a categorical coproduct via an equivalence of the index types.

                                                                                                            Equations
                                                                                                            • One or more equations did not get rendered due to their size.
                                                                                                            Instances For
                                                                                                              @[simp]
                                                                                                              theorem CategoryTheory.Limits.Sigma.ι_reindex_hom {β : Type w} {C : Type u} [Category.{v, u} C] {γ : Type w'} (ε : β γ) (f : γC) [HasCoproduct f] [HasCoproduct (f ε)] (b : β) :
                                                                                                              CategoryStruct.comp (ι (f ε) b) (reindex ε f).hom = ι f (ε b)
                                                                                                              @[simp]
                                                                                                              theorem CategoryTheory.Limits.Sigma.ι_reindex_hom_assoc {β : Type w} {C : Type u} [Category.{v, u} C] {γ : Type w'} (ε : β γ) (f : γC) [HasCoproduct f] [HasCoproduct (f ε)] (b : β) {Z : C} (h : f Z) :
                                                                                                              CategoryStruct.comp (ι (f ε) b) (CategoryStruct.comp (reindex ε f).hom h) = CategoryStruct.comp (ι f (ε b)) h
                                                                                                              @[simp]
                                                                                                              theorem CategoryTheory.Limits.Sigma.ι_reindex_inv {β : Type w} {C : Type u} [Category.{v, u} C] {γ : Type w'} (ε : β γ) (f : γC) [HasCoproduct f] [HasCoproduct (f ε)] (b : β) :
                                                                                                              CategoryStruct.comp (ι f (ε b)) (reindex ε f).inv = ι (f ε) b
                                                                                                              @[simp]
                                                                                                              theorem CategoryTheory.Limits.Sigma.ι_reindex_inv_assoc {β : Type w} {C : Type u} [Category.{v, u} C] {γ : Type w'} (ε : β γ) (f : γC) [HasCoproduct f] [HasCoproduct (f ε)] (b : β) {Z : C} (h : f ε Z) :
                                                                                                              CategoryStruct.comp (ι f (ε b)) (CategoryStruct.comp (reindex ε f).inv h) = CategoryStruct.comp (ι (f ε) b) h