Documentation

Mathlib.CategoryTheory.Limits.Shapes.BinaryProducts

Binary (co)products #

We define a category WalkingPair, which is the index category for a binary (co)product diagram. A convenience method pair X Y constructs the functor from the walking pair, hitting the given objects.

We define prod X Y and coprod X Y as limits and colimits of such functors.

Typeclasses HasBinaryProducts and HasBinaryCoproducts assert the existence of (co)limits shaped as walking pairs.

We include lemmas for simplifying equations involving projections and coprojections, and define braiding and associating isomorphisms, and the product comparison morphism.

References #

The type of objects for the diagram indexing a binary (co)product.

Instances For

    The equivalence swapping left and right.

    Instances For

      An equivalence from WalkingPair to Bool, sometimes useful when reindexing limits.

      Instances For

        The function on the walking pair, sending the two points to X and Y.

        Instances For

          The diagram on the walking pair, sending the two points to X and Y.

          Instances For
            @[simp]
            @[simp]

            The natural transformation between two functors out of the walking pair, specified by its components.

            Instances For

              The natural isomorphism between two functors out of the walking pair, specified by its components.

              Instances For
                @[simp]
                @[simp]

                Every functor out of the walking pair is naturally isomorphic (actually, equal) to a pair

                Instances For
                  def CategoryTheory.Limits.pairComp {C : Type u} [Category.{v, u} C] {D : Type u₁} [Category.{v₁, u₁} D] (X Y : C) (F : Functor C D) :
                  (pair X Y).comp F pair (F.obj X) (F.obj Y)

                  The natural isomorphism between pair X Y ⋙ F and pair (F.obj X) (F.obj Y).

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

                    A binary fan is just a cone on a diagram indexing a product.

                    Instances For
                      @[reducible, inline]

                      The first projection of a binary fan.

                      Instances For
                        @[reducible, inline]

                        The second projection of a binary fan.

                        Instances For
                          def CategoryTheory.Limits.BinaryFan.ext {C : Type u} [Category.{v, u} C] {A B : C} {c c' : BinaryFan A B} (e : c.pt c'.pt) (h₁ : c.fst = CategoryStruct.comp e.hom c'.fst) (h₂ : c.snd = CategoryStruct.comp e.hom c'.snd) :
                          c c'

                          Constructs an isomorphism of BinaryFans out of an isomorphism of the tips that commutes with the projections.

                          Instances For
                            @[simp]
                            theorem CategoryTheory.Limits.BinaryFan.ext_hom_hom {C : Type u} [Category.{v, u} C] {A B : C} {c c' : BinaryFan A B} (e : c.pt c'.pt) (h₁ : c.fst = CategoryStruct.comp e.hom c'.fst) (h₂ : c.snd = CategoryStruct.comp e.hom c'.snd) :
                            (ext e h₁ h₂).hom.hom = e.hom
                            def CategoryTheory.Limits.BinaryFan.IsLimit.mk {C : Type u} [Category.{v, u} C] {X Y : C} (s : BinaryFan X Y) (lift : {T : C} → (T X) → (T Y) → (T s.pt)) (hl₁ : ∀ {T : C} (f : T X) (g : T Y), CategoryStruct.comp (lift f g) s.fst = f) (hl₂ : ∀ {T : C} (f : T X) (g : T Y), CategoryStruct.comp (lift f g) s.snd = g) (uniq : ∀ {T : C} (f : T X) (g : T Y) (m : T s.pt), CategoryStruct.comp m s.fst = fCategoryStruct.comp m s.snd = gm = lift f g) :

                            A convenient way to show that a binary fan is a limit.

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

                              A binary cofan is just a cocone on a diagram indexing a coproduct.

                              Instances For
                                @[reducible, inline]

                                The first inclusion of a binary cofan.

                                Instances For
                                  @[reducible, inline]

                                  The second inclusion of a binary cofan.

                                  Instances For
                                    def CategoryTheory.Limits.BinaryCofan.ext {C : Type u} [Category.{v, u} C] {A B : C} {c c' : BinaryCofan A B} (e : c.pt c'.pt) (h₁ : CategoryStruct.comp c.inl e.hom = c'.inl) (h₂ : CategoryStruct.comp c.inr e.hom = c'.inr) :
                                    c c'

                                    Constructs an isomorphism of BinaryCofans out of an isomorphism of the tips that commutes with the injections.

                                    Instances For
                                      @[simp]
                                      theorem CategoryTheory.Limits.BinaryCofan.ext_hom_hom {C : Type u} [Category.{v, u} C] {A B : C} {c c' : BinaryCofan A B} (e : c.pt c'.pt) (h₁ : CategoryStruct.comp c.inl e.hom = c'.inl) (h₂ : CategoryStruct.comp c.inr e.hom = c'.inr) :
                                      (ext e h₁ h₂).hom.hom = e.hom
                                      def CategoryTheory.Limits.BinaryCofan.IsColimit.mk {C : Type u} [Category.{v, u} C] {X Y : C} (s : BinaryCofan X Y) (desc : {T : C} → (X T) → (Y T) → (s.pt T)) (hd₁ : ∀ {T : C} (f : X T) (g : Y T), CategoryStruct.comp s.inl (desc f g) = f) (hd₂ : ∀ {T : C} (f : X T) (g : Y T), CategoryStruct.comp s.inr (desc f g) = g) (uniq : ∀ {T : C} (f : X T) (g : Y T) (m : s.pt T), CategoryStruct.comp s.inl m = fCategoryStruct.comp s.inr m = gm = desc f g) :

                                      A convenient way to show that a binary cofan is a colimit.

                                      Instances For
                                        def CategoryTheory.Limits.BinaryFan.mk {C : Type u} [Category.{v, u} C] {X Y P : C} (π₁ : P X) (π₂ : P Y) :

                                        A binary fan with vertex P consists of the two projections π₁ : P ⟶ X and π₂ : P ⟶ Y.

                                        Instances For
                                          @[simp]
                                          theorem CategoryTheory.Limits.BinaryFan.mk_pt {C : Type u} [Category.{v, u} C] {X Y P : C} (π₁ : P X) (π₂ : P Y) :
                                          (mk π₁ π₂).pt = P
                                          def CategoryTheory.Limits.BinaryCofan.mk {C : Type u} [Category.{v, u} C] {X Y P : C} (ι₁ : X P) (ι₂ : Y P) :

                                          A binary cofan with vertex P consists of the two inclusions ι₁ : X ⟶ P and ι₂ : Y ⟶ P.

                                          Instances For
                                            @[simp]
                                            theorem CategoryTheory.Limits.BinaryCofan.mk_pt {C : Type u} [Category.{v, u} C] {X Y P : C} (ι₁ : X P) (ι₂ : Y P) :
                                            (mk ι₁ ι₂).pt = P
                                            @[simp]
                                            theorem CategoryTheory.Limits.BinaryFan.mk_fst {C : Type u} [Category.{v, u} C] {X Y P : C} (π₁ : P X) (π₂ : P Y) :
                                            (mk π₁ π₂).fst = π₁
                                            @[simp]
                                            theorem CategoryTheory.Limits.BinaryFan.mk_snd {C : Type u} [Category.{v, u} C] {X Y P : C} (π₁ : P X) (π₂ : P Y) :
                                            (mk π₁ π₂).snd = π₂
                                            @[simp]
                                            theorem CategoryTheory.Limits.BinaryCofan.mk_inl {C : Type u} [Category.{v, u} C] {X Y P : C} (ι₁ : X P) (ι₂ : Y P) :
                                            (mk ι₁ ι₂).inl = ι₁
                                            @[simp]
                                            theorem CategoryTheory.Limits.BinaryCofan.mk_inr {C : Type u} [Category.{v, u} C] {X Y P : C} (ι₁ : X P) (ι₂ : Y P) :
                                            (mk ι₁ ι₂).inr = ι₂

                                            Every BinaryFan is isomorphic to an application of BinaryFan.mk.

                                            Instances For

                                              Every BinaryFan is isomorphic to an application of BinaryFan.mk.

                                              Instances For
                                                def CategoryTheory.Limits.BinaryFan.isLimitMk {C : Type u} [Category.{v, u} C] {X Y W : C} {fst : W X} {snd : W Y} (lift : (s : BinaryFan X Y) → s.pt W) (fac_left : ∀ (s : BinaryFan X Y), CategoryStruct.comp (lift s) fst = s.fst) (fac_right : ∀ (s : BinaryFan X Y), CategoryStruct.comp (lift s) snd = s.snd) (uniq : ∀ (s : BinaryFan X Y) (m : s.pt W), CategoryStruct.comp m fst = s.fstCategoryStruct.comp m snd = s.sndm = lift s) :
                                                IsLimit (mk fst snd)

                                                This is a more convenient formulation to show that a BinaryFan constructed using BinaryFan.mk is a limit cone.

                                                Instances For
                                                  def CategoryTheory.Limits.BinaryCofan.isColimitMk {C : Type u} [Category.{v, u} C] {X Y W : C} {inl : X W} {inr : Y W} (desc : (s : BinaryCofan X Y) → W s.pt) (fac_left : ∀ (s : BinaryCofan X Y), CategoryStruct.comp inl (desc s) = s.inl) (fac_right : ∀ (s : BinaryCofan X Y), CategoryStruct.comp inr (desc s) = s.inr) (uniq : ∀ (s : BinaryCofan X Y) (m : W s.pt), CategoryStruct.comp inl m = s.inlCategoryStruct.comp inr m = s.inrm = desc s) :
                                                  IsColimit (mk inl inr)

                                                  This is a more convenient formulation to show that a BinaryCofan constructed using BinaryCofan.mk is a colimit cocone.

                                                  Instances For
                                                    def CategoryTheory.Limits.BinaryFan.IsLimit.lift' {C : Type u} [Category.{v, u} C] {W X Y : C} {s : BinaryFan X Y} (h : IsLimit s) (f : W X) (g : W Y) :

                                                    If s is a limit binary fan over X and Y, then every pair of morphisms f : W ⟶ X and g : W ⟶ Y induces a morphism l : W ⟶ s.pt satisfying l ≫ s.fst = f and l ≫ s.snd = g.

                                                    Instances For
                                                      @[simp]
                                                      theorem CategoryTheory.Limits.BinaryFan.IsLimit.lift'_coe {C : Type u} [Category.{v, u} C] {W X Y : C} {s : BinaryFan X Y} (h : IsLimit s) (f : W X) (g : W Y) :
                                                      (lift' h f g) = h.lift (BinaryFan.mk f g)
                                                      def CategoryTheory.Limits.BinaryCofan.IsColimit.desc' {C : Type u} [Category.{v, u} C] {W X Y : C} {s : BinaryCofan X Y} (h : IsColimit s) (f : X W) (g : Y W) :

                                                      If s is a colimit binary cofan over X and Y,, then every pair of morphisms f : X ⟶ W and g : Y ⟶ W induces a morphism l : s.pt ⟶ W satisfying s.inl ≫ l = f and s.inr ≫ l = g.

                                                      Instances For
                                                        @[simp]
                                                        theorem CategoryTheory.Limits.BinaryCofan.IsColimit.desc'_coe {C : Type u} [Category.{v, u} C] {W X Y : C} {s : BinaryCofan X Y} (h : IsColimit s) (f : X W) (g : Y W) :
                                                        (desc' h f g) = h.desc (BinaryCofan.mk f g)

                                                        Binary products are symmetric.

                                                        Instances For
                                                          noncomputable def CategoryTheory.Limits.BinaryFan.isLimitCompLeftIso {C : Type u} [Category.{v, u} C] {X Y X' : C} (c : BinaryFan X Y) (f : X X') [IsIso f] (h : IsLimit c) :

                                                          If X' ≅ X, then X × Y also is the product of X' and Y.

                                                          Instances For
                                                            noncomputable def CategoryTheory.Limits.BinaryFan.isLimitCompRightIso {C : Type u} [Category.{v, u} C] {X Y Y' : C} (c : BinaryFan X Y) (f : Y Y') [IsIso f] (h : IsLimit c) :

                                                            If Y' ≅ Y, then X x Y also is the product of X and Y'.

                                                            Instances For

                                                              Binary coproducts are symmetric.

                                                              Instances For
                                                                noncomputable def CategoryTheory.Limits.BinaryCofan.isColimitCompLeftIso {C : Type u} [Category.{v, u} C] {X Y X' : C} (c : BinaryCofan X Y) (f : X' X) [IsIso f] (h : IsColimit c) :

                                                                If X' ≅ X, then X ⨿ Y also is the coproduct of X' and Y.

                                                                Instances For
                                                                  noncomputable def CategoryTheory.Limits.BinaryCofan.isColimitCompRightIso {C : Type u} [Category.{v, u} C] {X Y Y' : C} (c : BinaryCofan X Y) (f : Y' Y) [IsIso f] (h : IsColimit c) :

                                                                  If Y' ≅ Y, then X ⨿ Y also is the coproduct of X and Y'.

                                                                  Instances For
                                                                    @[reducible, inline]

                                                                    An abbreviation for HasLimit (pair X Y).

                                                                    Instances For
                                                                      @[reducible, inline]

                                                                      An abbreviation for HasColimit (pair X Y).

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

                                                                        If we have a product of X and Y, we can access it using prod X Y or X ⨯ Y.

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

                                                                          If we have a coproduct of X and Y, we can access it using coprod X Y or X ⨿ Y.

                                                                          Instances For

                                                                            Notation for the coproduct

                                                                            Instances For
                                                                              @[reducible, inline]
                                                                              noncomputable abbrev CategoryTheory.Limits.prod.fst {C : Type u} [Category.{v, u} C] {X Y : C} [HasBinaryProduct X Y] :
                                                                              X Y X

                                                                              The projection map to the first component of the product.

                                                                              Instances For
                                                                                @[reducible, inline]
                                                                                noncomputable abbrev CategoryTheory.Limits.prod.snd {C : Type u} [Category.{v, u} C] {X Y : C} [HasBinaryProduct X Y] :
                                                                                X Y Y

                                                                                The projection map to the second component of the product.

                                                                                Instances For
                                                                                  @[reducible, inline]
                                                                                  noncomputable abbrev CategoryTheory.Limits.coprod.inl {C : Type u} [Category.{v, u} C] {X Y : C} [HasBinaryCoproduct X Y] :
                                                                                  X X ⨿ Y

                                                                                  The inclusion map from the first component of the coproduct.

                                                                                  Instances For
                                                                                    @[reducible, inline]
                                                                                    noncomputable abbrev CategoryTheory.Limits.coprod.inr {C : Type u} [Category.{v, u} C] {X Y : C} [HasBinaryCoproduct X Y] :
                                                                                    Y X ⨿ Y

                                                                                    The inclusion map from the second component of the coproduct.

                                                                                    Instances For

                                                                                      The binary fan constructed from the projection maps is a limit.

                                                                                      Instances For

                                                                                        The binary cofan constructed from the coprojection maps is a colimit.

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

                                                                                          If the product of X and Y exists, then every pair of morphisms f : W ⟶ X and g : W ⟶ Y induces a morphism prod.lift f g : W ⟶ X ⨯ Y.

                                                                                          Instances For
                                                                                            @[reducible, inline]
                                                                                            noncomputable abbrev CategoryTheory.Limits.diag {C : Type u} [Category.{v, u} C] (X : C) [HasBinaryProduct X X] :
                                                                                            X X X

                                                                                            diagonal arrow of the binary product in the category fam I

                                                                                            Instances For
                                                                                              @[reducible, inline]
                                                                                              noncomputable abbrev CategoryTheory.Limits.coprod.desc {C : Type u} [Category.{v, u} C] {W X Y : C} [HasBinaryCoproduct X Y] (f : X W) (g : Y W) :
                                                                                              X ⨿ Y W

                                                                                              If the coproduct of X and Y exists, then every pair of morphisms f : X ⟶ W and g : Y ⟶ W induces a morphism coprod.desc f g : X ⨿ Y ⟶ W.

                                                                                              Instances For
                                                                                                @[reducible, inline]
                                                                                                noncomputable abbrev CategoryTheory.Limits.codiag {C : Type u} [Category.{v, u} C] (X : C) [HasBinaryCoproduct X X] :
                                                                                                X ⨿ X X

                                                                                                codiagonal arrow of the binary coproduct

                                                                                                Instances For
                                                                                                  theorem CategoryTheory.Limits.prod.lift_fst {C : Type u} [Category.{v, u} C] {W X Y : C} [HasBinaryProduct X Y] (f : W X) (g : W Y) :
                                                                                                  theorem CategoryTheory.Limits.prod.lift_snd {C : Type u} [Category.{v, u} C] {W X Y : C} [HasBinaryProduct X Y] (f : W X) (g : W Y) :
                                                                                                  theorem CategoryTheory.Limits.coprod.inl_desc {C : Type u} [Category.{v, u} C] {W X Y : C} [HasBinaryCoproduct X Y] (f : X W) (g : Y W) :
                                                                                                  theorem CategoryTheory.Limits.coprod.inr_desc {C : Type u} [Category.{v, u} C] {W X Y : C} [HasBinaryCoproduct X Y] (f : X W) (g : Y W) :
                                                                                                  instance CategoryTheory.Limits.prod.mono_lift_of_mono_left {C : Type u} [Category.{v, u} C] {W X Y : C} [HasBinaryProduct X Y] (f : W X) (g : W Y) [Mono f] :
                                                                                                  Mono (lift f g)
                                                                                                  instance CategoryTheory.Limits.prod.mono_lift_of_mono_right {C : Type u} [Category.{v, u} C] {W X Y : C} [HasBinaryProduct X Y] (f : W X) (g : W Y) [Mono g] :
                                                                                                  Mono (lift f g)
                                                                                                  instance CategoryTheory.Limits.coprod.epi_desc_of_epi_left {C : Type u} [Category.{v, u} C] {W X Y : C} [HasBinaryCoproduct X Y] (f : X W) (g : Y W) [Epi f] :
                                                                                                  Epi (desc f g)
                                                                                                  instance CategoryTheory.Limits.coprod.epi_desc_of_epi_right {C : Type u} [Category.{v, u} C] {W X Y : C} [HasBinaryCoproduct X Y] (f : X W) (g : Y W) [Epi g] :
                                                                                                  Epi (desc f g)
                                                                                                  noncomputable def CategoryTheory.Limits.prod.lift' {C : Type u} [Category.{v, u} C] {W X Y : C} [HasBinaryProduct X Y] (f : W X) (g : W Y) :

                                                                                                  If the product of X and Y exists, then every pair of morphisms f : W ⟶ X and g : W ⟶ Y induces a morphism l : W ⟶ X ⨯ Y satisfying l ≫ Prod.fst = f and l ≫ Prod.snd = g.

                                                                                                  Instances For
                                                                                                    noncomputable def CategoryTheory.Limits.coprod.desc' {C : Type u} [Category.{v, u} C] {W X Y : C} [HasBinaryCoproduct X Y] (f : X W) (g : Y W) :

                                                                                                    If the coproduct of X and Y exists, then every pair of morphisms f : X ⟶ W and g : Y ⟶ W induces a morphism l : X ⨿ Y ⟶ W satisfying coprod.inl ≫ l = f and coprod.inr ≫ l = g.

                                                                                                    Instances For
                                                                                                      noncomputable def CategoryTheory.Limits.prod.map {C : Type u} [Category.{v, u} C] {W X Y Z : C} [HasBinaryProduct W X] [HasBinaryProduct Y Z] (f : W Y) (g : X Z) :
                                                                                                      W X Y Z

                                                                                                      If the products W ⨯ X and Y ⨯ Z exist, then every pair of morphisms f : W ⟶ Y and g : X ⟶ Z induces a morphism prod.map f g : W ⨯ X ⟶ Y ⨯ Z.

                                                                                                      Instances For
                                                                                                        noncomputable def CategoryTheory.Limits.coprod.map {C : Type u} [Category.{v, u} C] {W X Y Z : C} [HasBinaryCoproduct W X] [HasBinaryCoproduct Y Z] (f : W Y) (g : X Z) :
                                                                                                        W ⨿ X Y ⨿ Z

                                                                                                        If the coproducts W ⨿ X and Y ⨿ Z exist, then every pair of morphisms f : W ⟶ Y and g : W ⟶ Z induces a morphism coprod.map f g : W ⨿ X ⟶ Y ⨿ Z.

                                                                                                        Instances For
                                                                                                          @[simp]
                                                                                                          theorem CategoryTheory.Limits.prod.comp_lift {C : Type u} [Category.{v, u} C] {V W X Y : C} [HasBinaryProduct X Y] (f : V W) (g : W X) (h : W Y) :
                                                                                                          theorem CategoryTheory.Limits.prod.comp_lift_assoc {C : Type u} [Category.{v, u} C] {V W X Y : C} [HasBinaryProduct X Y] (f : V W) (g : W X) (h : W Y) {Z : C} (h✝ : X Y Z) :
                                                                                                          @[simp]
                                                                                                          @[simp]
                                                                                                          @[simp]
                                                                                                          theorem CategoryTheory.Limits.prod.lift_map {C : Type u} [Category.{v, u} C] {V W X Y Z : C} [HasBinaryProduct W X] [HasBinaryProduct Y Z] (f : V W) (g : V X) (h : W Y) (k : X Z) :
                                                                                                          @[simp]
                                                                                                          theorem CategoryTheory.Limits.prod.lift_map_assoc {C : Type u} [Category.{v, u} C] {V W X Y Z : C} [HasBinaryProduct W X] [HasBinaryProduct Y Z] (f : V W) (g : V X) (h : W Y) (k : X Z) {Z✝ : C} (h✝ : Y Z Z✝) :
                                                                                                          @[simp]
                                                                                                          theorem CategoryTheory.Limits.prod.map_map {C : Type u} [Category.{v, u} C] {A₁ A₂ A₃ B₁ B₂ B₃ : C} [HasBinaryProduct A₁ B₁] [HasBinaryProduct A₂ B₂] [HasBinaryProduct A₃ B₃] (f : A₁ A₂) (g : B₁ B₂) (h : A₂ A₃) (k : B₂ B₃) :
                                                                                                          @[simp]
                                                                                                          theorem CategoryTheory.Limits.prod.map_map_assoc {C : Type u} [Category.{v, u} C] {A₁ A₂ A₃ B₁ B₂ B₃ : C} [HasBinaryProduct A₁ B₁] [HasBinaryProduct A₂ B₂] [HasBinaryProduct A₃ B₃] (f : A₁ A₂) (g : B₁ B₂) (h : A₂ A₃) (k : B₂ B₃) {Z : C} (h✝ : A₃ B₃ Z) :
                                                                                                          noncomputable def CategoryTheory.Limits.prod.mapIso {C : Type u} [Category.{v, u} C] {W X Y Z : C} [HasBinaryProduct W X] [HasBinaryProduct Y Z] (f : W Y) (g : X Z) :
                                                                                                          W X Y Z

                                                                                                          If the products W ⨯ X and Y ⨯ Z exist, then every pair of isomorphisms f : W ≅ Y and g : X ≅ Z induces an isomorphism prod.mapIso f g : W ⨯ X ≅ Y ⨯ Z.

                                                                                                          Instances For
                                                                                                            @[simp]
                                                                                                            theorem CategoryTheory.Limits.prod.mapIso_inv {C : Type u} [Category.{v, u} C] {W X Y Z : C} [HasBinaryProduct W X] [HasBinaryProduct Y Z] (f : W Y) (g : X Z) :
                                                                                                            (mapIso f g).inv = map f.inv g.inv
                                                                                                            @[simp]
                                                                                                            theorem CategoryTheory.Limits.prod.mapIso_hom {C : Type u} [Category.{v, u} C] {W X Y Z : C} [HasBinaryProduct W X] [HasBinaryProduct Y Z] (f : W Y) (g : X Z) :
                                                                                                            (mapIso f g).hom = map f.hom g.hom
                                                                                                            instance CategoryTheory.Limits.isIso_prod {C : Type u} [Category.{v, u} C] {W X Y Z : C} [HasBinaryProduct W X] [HasBinaryProduct Y Z] (f : W Y) (g : X Z) [IsIso f] [IsIso g] :
                                                                                                            instance CategoryTheory.Limits.prod.map_mono {C : Type u_1} [Category.{v_1, u_1} C] {W X Y Z : C} (f : W Y) (g : X Z) [Mono f] [Mono g] [HasBinaryProduct W X] [HasBinaryProduct Y Z] :
                                                                                                            Mono (map f g)
                                                                                                            @[simp]
                                                                                                            theorem CategoryTheory.Limits.coprod.desc_comp {C : Type u} [Category.{v, u} C] {V W X Y : C} [HasBinaryCoproduct X Y] (f : V W) (g : X V) (h : Y V) :
                                                                                                            theorem CategoryTheory.Limits.coprod.desc_comp_assoc {C : Type u} [Category.{v, u} C] {V W X Y : C} [HasBinaryCoproduct X Y] (f : V W) (g : X V) (h : Y V) {Z : C} (h✝ : W Z) :
                                                                                                            @[simp]
                                                                                                            theorem CategoryTheory.Limits.coprod.map_desc {C : Type u} [Category.{v, u} C] {S T U V W : C} [HasBinaryCoproduct U W] [HasBinaryCoproduct T V] (f : U S) (g : W S) (h : T U) (k : V W) :
                                                                                                            theorem CategoryTheory.Limits.coprod.map_desc_assoc {C : Type u} [Category.{v, u} C] {S T U V W : C} [HasBinaryCoproduct U W] [HasBinaryCoproduct T V] (f : U S) (g : W S) (h : T U) (k : V W) {Z : C} (h✝ : S Z) :
                                                                                                            @[simp]
                                                                                                            theorem CategoryTheory.Limits.coprod.map_map {C : Type u} [Category.{v, u} C] {A₁ A₂ A₃ B₁ B₂ B₃ : C} [HasBinaryCoproduct A₁ B₁] [HasBinaryCoproduct A₂ B₂] [HasBinaryCoproduct A₃ B₃] (f : A₁ A₂) (g : B₁ B₂) (h : A₂ A₃) (k : B₂ B₃) :
                                                                                                            @[simp]
                                                                                                            theorem CategoryTheory.Limits.coprod.map_map_assoc {C : Type u} [Category.{v, u} C] {A₁ A₂ A₃ B₁ B₂ B₃ : C} [HasBinaryCoproduct A₁ B₁] [HasBinaryCoproduct A₂ B₂] [HasBinaryCoproduct A₃ B₃] (f : A₁ A₂) (g : B₁ B₂) (h : A₂ A₃) (k : B₂ B₃) {Z : C} (h✝ : A₃ ⨿ B₃ Z) :
                                                                                                            noncomputable def CategoryTheory.Limits.coprod.mapIso {C : Type u} [Category.{v, u} C] {W X Y Z : C} [HasBinaryCoproduct W X] [HasBinaryCoproduct Y Z] (f : W Y) (g : X Z) :
                                                                                                            W ⨿ X Y ⨿ Z

                                                                                                            If the coproducts W ⨿ X and Y ⨿ Z exist, then every pair of isomorphisms f : W ≅ Y and g : W ≅ Z induces an isomorphism coprod.mapIso f g : W ⨿ X ≅ Y ⨿ Z.

                                                                                                            Instances For
                                                                                                              @[simp]
                                                                                                              theorem CategoryTheory.Limits.coprod.mapIso_hom {C : Type u} [Category.{v, u} C] {W X Y Z : C} [HasBinaryCoproduct W X] [HasBinaryCoproduct Y Z] (f : W Y) (g : X Z) :
                                                                                                              (mapIso f g).hom = map f.hom g.hom
                                                                                                              @[simp]
                                                                                                              theorem CategoryTheory.Limits.coprod.mapIso_inv {C : Type u} [Category.{v, u} C] {W X Y Z : C} [HasBinaryCoproduct W X] [HasBinaryCoproduct Y Z] (f : W Y) (g : X Z) :
                                                                                                              (mapIso f g).inv = map f.inv g.inv
                                                                                                              instance CategoryTheory.Limits.isIso_coprod {C : Type u} [Category.{v, u} C] {W X Y Z : C} [HasBinaryCoproduct W X] [HasBinaryCoproduct Y Z] (f : W Y) (g : X Z) [IsIso f] [IsIso g] :
                                                                                                              instance CategoryTheory.Limits.coprod.map_epi {C : Type u_1} [Category.{v_1, u_1} C] {W X Y Z : C} (f : W Y) (g : X Z) [Epi f] [Epi g] [HasBinaryCoproduct W X] [HasBinaryCoproduct Y Z] :
                                                                                                              Epi (map f g)
                                                                                                              @[reducible, inline]

                                                                                                              A category HasBinaryProducts if it has all limits of shape Discrete WalkingPair, i.e. if it has a product for every pair of objects.

                                                                                                              Instances For
                                                                                                                @[reducible, inline]

                                                                                                                A category HasBinaryCoproducts if it has all colimit of shape Discrete WalkingPair, i.e. if it has a coproduct for every pair of objects.

                                                                                                                Instances For

                                                                                                                  If C has all limits of diagrams pair X Y, then it has all binary products

                                                                                                                  If C has all colimits of diagrams pair X Y, then it has all binary coproducts

                                                                                                                  noncomputable def CategoryTheory.Limits.prod.braiding {C : Type u} [Category.{v, u} C] (P Q : C) [HasBinaryProduct P Q] [HasBinaryProduct Q P] :
                                                                                                                  P Q Q P

                                                                                                                  The braiding isomorphism which swaps a binary product.

                                                                                                                  Instances For

                                                                                                                    The braiding isomorphism can be passed through a map by swapping the order.

                                                                                                                    The braiding isomorphism can be passed through a map by swapping the order.

                                                                                                                    The braiding isomorphism is symmetric.

                                                                                                                    The braiding isomorphism is symmetric.

                                                                                                                    noncomputable def CategoryTheory.Limits.prod.associator {C : Type u} [Category.{v, u} C] [HasBinaryProducts C] (P Q R : C) :
                                                                                                                    (P Q) R P Q R

                                                                                                                    The associator isomorphism for binary products.

                                                                                                                    Instances For
                                                                                                                      theorem CategoryTheory.Limits.prod.associator_naturality {C : Type u} [Category.{v, u} C] [HasBinaryProducts C] {X₁ X₂ X₃ Y₁ Y₂ Y₃ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (f₃ : X₃ Y₃) :
                                                                                                                      CategoryStruct.comp (map (map f₁ f₂) f₃) (associator Y₁ Y₂ Y₃).hom = CategoryStruct.comp (associator X₁ X₂ X₃).hom (map f₁ (map f₂ f₃))
                                                                                                                      theorem CategoryTheory.Limits.prod.associator_naturality_assoc {C : Type u} [Category.{v, u} C] [HasBinaryProducts C] {X₁ X₂ X₃ Y₁ Y₂ Y₃ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (f₃ : X₃ Y₃) {Z : C} (h : Y₁ Y₂ Y₃ Z) :
                                                                                                                      CategoryStruct.comp (map (map f₁ f₂) f₃) (CategoryStruct.comp (associator Y₁ Y₂ Y₃).hom h) = CategoryStruct.comp (associator X₁ X₂ X₃).hom (CategoryStruct.comp (map f₁ (map f₂ f₃)) h)
                                                                                                                      noncomputable def CategoryTheory.Limits.prod.leftUnitor {C : Type u} [Category.{v, u} C] [HasTerminal C] (P : C) [HasBinaryProduct (⊤_ C) P] :
                                                                                                                      (⊤_ C) P P

                                                                                                                      The left unitor isomorphism for binary products with the terminal object.

                                                                                                                      Instances For

                                                                                                                        The right unitor isomorphism for binary products with the terminal object.

                                                                                                                        Instances For
                                                                                                                          noncomputable def CategoryTheory.Limits.coprod.braiding {C : Type u} [Category.{v, u} C] [HasBinaryCoproducts C] (P Q : C) :
                                                                                                                          P ⨿ Q Q ⨿ P

                                                                                                                          The braiding isomorphism which swaps a binary coproduct.

                                                                                                                          Instances For

                                                                                                                            The braiding isomorphism is symmetric.

                                                                                                                            noncomputable def CategoryTheory.Limits.coprod.associator {C : Type u} [Category.{v, u} C] [HasBinaryCoproducts C] (P Q R : C) :
                                                                                                                            (P ⨿ Q) ⨿ R P ⨿ Q ⨿ R

                                                                                                                            The associator isomorphism for binary coproducts.

                                                                                                                            Instances For
                                                                                                                              theorem CategoryTheory.Limits.coprod.associator_naturality {C : Type u} [Category.{v, u} C] [HasBinaryCoproducts C] {X₁ X₂ X₃ Y₁ Y₂ Y₃ : C} (f₁ : X₁ Y₁) (f₂ : X₂ Y₂) (f₃ : X₃ Y₃) :
                                                                                                                              CategoryStruct.comp (map (map f₁ f₂) f₃) (associator Y₁ Y₂ Y₃).hom = CategoryStruct.comp (associator X₁ X₂ X₃).hom (map f₁ (map f₂ f₃))

                                                                                                                              The left unitor isomorphism for binary coproducts with the initial object.

                                                                                                                              Instances For

                                                                                                                                The right unitor isomorphism for binary coproducts with the initial object.

                                                                                                                                Instances For

                                                                                                                                  The binary product functor.

                                                                                                                                  Instances For
                                                                                                                                    @[simp]
                                                                                                                                    theorem CategoryTheory.Limits.prod.functor_obj_map {C : Type u} [Category.{v, u} C] [HasBinaryProducts C] (X : C) {x✝ x✝¹ : C} (g : x✝ x✝¹) :
                                                                                                                                    @[simp]
                                                                                                                                    theorem CategoryTheory.Limits.prod.functor_map_app {C : Type u} [Category.{v, u} C] [HasBinaryProducts C] {X✝ Y✝ : C} (f : X✝ Y✝) (T : C) :

                                                                                                                                    The product functor can be decomposed.

                                                                                                                                    Instances For

                                                                                                                                      The binary coproduct functor.

                                                                                                                                      Instances For
                                                                                                                                        @[simp]
                                                                                                                                        theorem CategoryTheory.Limits.coprod.functor_obj_map {C : Type u} [Category.{v, u} C] [HasBinaryCoproducts C] (X : C) {x✝ x✝¹ : C} (g : x✝ x✝¹) :
                                                                                                                                        @[simp]
                                                                                                                                        theorem CategoryTheory.Limits.coprod.functor_map_app {C : Type u} [Category.{v, u} C] [HasBinaryCoproducts C] {X✝ Y✝ : C} (f : X✝ Y✝) (T : C) :

                                                                                                                                        The coproduct functor can be decomposed.

                                                                                                                                        Instances For
                                                                                                                                          noncomputable def CategoryTheory.Limits.prodComparison {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) (A B : C) [HasBinaryProduct A B] [HasBinaryProduct (F.obj A) (F.obj B)] :
                                                                                                                                          F.obj (A B) F.obj A F.obj B

                                                                                                                                          The product comparison morphism.

                                                                                                                                          In CategoryTheory/Limits/Preserves we show this is always an iso iff F preserves binary products.

                                                                                                                                          Instances For
                                                                                                                                            theorem CategoryTheory.Limits.prodComparison_natural {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) {A A' B B' : C} [HasBinaryProduct A B] [HasBinaryProduct A' B'] [HasBinaryProduct (F.obj A) (F.obj B)] [HasBinaryProduct (F.obj A') (F.obj B')] (f : A A') (g : B B') :

                                                                                                                                            Naturality of the prodComparison morphism in both arguments.

                                                                                                                                            theorem CategoryTheory.Limits.prodComparison_natural_assoc {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) {A A' B B' : C} [HasBinaryProduct A B] [HasBinaryProduct A' B'] [HasBinaryProduct (F.obj A) (F.obj B)] [HasBinaryProduct (F.obj A') (F.obj B')] (f : A A') (g : B B') {Z : D} (h : F.obj A' F.obj B' Z) :

                                                                                                                                            Naturality of the prodComparison morphism in both arguments.

                                                                                                                                            theorem CategoryTheory.Limits.prodComparison_natural_of_natTrans {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] {F : Functor C D} {A B : C} [HasBinaryProduct A B] [HasBinaryProduct (F.obj A) (F.obj B)] {H : Functor C D} [HasBinaryProduct (H.obj A) (H.obj B)] (α : F H) :

                                                                                                                                            Naturality of the prodComparison morphism in a natural transformation.

                                                                                                                                            theorem CategoryTheory.Limits.prodComparison_natural_of_natTrans_assoc {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] {F : Functor C D} {A B : C} [HasBinaryProduct A B] [HasBinaryProduct (F.obj A) (F.obj B)] {H : Functor C D} [HasBinaryProduct (H.obj A) (H.obj B)] (α : F H) {Z : D} (h : H.obj A H.obj B Z) :

                                                                                                                                            Naturality of the prodComparison morphism in a natural transformation.

                                                                                                                                            The product comparison morphism from F(A ⨯ -) to FA ⨯ F-, whose components are given by prodComparison.

                                                                                                                                            Instances For
                                                                                                                                              theorem CategoryTheory.Limits.prodComparison_inv_natural {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) {A A' B B' : C} [HasBinaryProduct A B] [HasBinaryProduct A' B'] [HasBinaryProduct (F.obj A) (F.obj B)] [HasBinaryProduct (F.obj A') (F.obj B')] (f : A A') (g : B B') [IsIso (prodComparison F A B)] [IsIso (prodComparison F A' B')] :

                                                                                                                                              If the product comparison morphism is an iso, its inverse is natural.

                                                                                                                                              theorem CategoryTheory.Limits.prodComparison_inv_natural_assoc {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) {A A' B B' : C} [HasBinaryProduct A B] [HasBinaryProduct A' B'] [HasBinaryProduct (F.obj A) (F.obj B)] [HasBinaryProduct (F.obj A') (F.obj B')] (f : A A') (g : B B') [IsIso (prodComparison F A B)] [IsIso (prodComparison F A' B')] {Z : D} (h : F.obj (A' B') Z) :

                                                                                                                                              If the product comparison morphism is an iso, its inverse is natural.

                                                                                                                                              noncomputable def CategoryTheory.Limits.prodComparisonNatIso {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) [HasBinaryProducts C] [HasBinaryProducts D] (A : C) [∀ (B : C), IsIso (prodComparison F A B)] :

                                                                                                                                              The natural isomorphism F(A ⨯ -) ≅ FA ⨯ F-, provided each prodComparison F A B is an isomorphism (as B changes).

                                                                                                                                              Instances For
                                                                                                                                                @[simp]
                                                                                                                                                theorem CategoryTheory.Limits.prodComparisonNatIso_inv {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) [HasBinaryProducts C] [HasBinaryProducts D] (A : C) [∀ (B : C), IsIso (prodComparison F A B)] :
                                                                                                                                                (prodComparisonNatIso F A).inv = (asIso { app := fun (B : C) => prodComparison F A B, naturality := }).inv
                                                                                                                                                theorem CategoryTheory.Limits.prodComparison_comp {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] {E : Type u₃} [Category.{w', u₃} E] (F : Functor C D) (G : Functor D E) {A B : C} [HasBinaryProduct A B] [HasBinaryProduct (F.obj A) (F.obj B)] [HasBinaryProduct (G.obj (F.obj A)) (G.obj (F.obj B))] [HasBinaryProduct ((F.comp G).obj A) ((F.comp G).obj B)] :
                                                                                                                                                noncomputable def CategoryTheory.Limits.coprodComparison {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) (A B : C) [HasBinaryCoproduct A B] [HasBinaryCoproduct (F.obj A) (F.obj B)] :
                                                                                                                                                F.obj A ⨿ F.obj B F.obj (A ⨿ B)

                                                                                                                                                The coproduct comparison morphism.

                                                                                                                                                In Mathlib/CategoryTheory/Limits/Preserves/ we show this is always an iso iff F preserves binary coproducts.

                                                                                                                                                Instances For
                                                                                                                                                  theorem CategoryTheory.Limits.coprodComparison_natural {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) {A A' B B' : C} [HasBinaryCoproduct A B] [HasBinaryCoproduct A' B'] [HasBinaryCoproduct (F.obj A) (F.obj B)] [HasBinaryCoproduct (F.obj A') (F.obj B')] (f : A A') (g : B B') :

                                                                                                                                                  Naturality of the coprodComparison morphism in both arguments.

                                                                                                                                                  theorem CategoryTheory.Limits.coprodComparison_natural_assoc {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) {A A' B B' : C} [HasBinaryCoproduct A B] [HasBinaryCoproduct A' B'] [HasBinaryCoproduct (F.obj A) (F.obj B)] [HasBinaryCoproduct (F.obj A') (F.obj B')] (f : A A') (g : B B') {Z : D} (h : F.obj (A' ⨿ B') Z) :

                                                                                                                                                  Naturality of the coprodComparison morphism in both arguments.

                                                                                                                                                  The coproduct comparison morphism from FA ⨿ F- to F(A ⨿ -), whose components are given by coprodComparison.

                                                                                                                                                  Instances For
                                                                                                                                                    theorem CategoryTheory.Limits.coprodComparison_inv_natural {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) {A A' B B' : C} [HasBinaryCoproduct A B] [HasBinaryCoproduct A' B'] [HasBinaryCoproduct (F.obj A) (F.obj B)] [HasBinaryCoproduct (F.obj A') (F.obj B')] (f : A A') (g : B B') [IsIso (coprodComparison F A B)] [IsIso (coprodComparison F A' B')] :

                                                                                                                                                    If the coproduct comparison morphism is an iso, its inverse is natural.

                                                                                                                                                    theorem CategoryTheory.Limits.coprodComparison_inv_natural_assoc {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) {A A' B B' : C} [HasBinaryCoproduct A B] [HasBinaryCoproduct A' B'] [HasBinaryCoproduct (F.obj A) (F.obj B)] [HasBinaryCoproduct (F.obj A') (F.obj B')] (f : A A') (g : B B') [IsIso (coprodComparison F A B)] [IsIso (coprodComparison F A' B')] {Z : D} (h : F.obj A' ⨿ F.obj B' Z) :

                                                                                                                                                    If the coproduct comparison morphism is an iso, its inverse is natural.

                                                                                                                                                    The natural isomorphism FA ⨿ F- ≅ F(A ⨿ -), provided each coprodComparison F A B is an isomorphism (as B changes).

                                                                                                                                                    Instances For
                                                                                                                                                      @[simp]
                                                                                                                                                      theorem CategoryTheory.Limits.coprodComparisonNatIso_inv {C : Type u} [Category.{v, u} C] {D : Type u₂} [Category.{w, u₂} D] (F : Functor C D) [HasBinaryCoproducts C] [HasBinaryCoproducts D] (A : C) [∀ (B : C), IsIso (coprodComparison F A B)] :
                                                                                                                                                      (coprodComparisonNatIso F A).inv = (asIso { app := fun (B : C) => coprodComparison F A B, naturality := }).inv
                                                                                                                                                      noncomputable def CategoryTheory.Over.coprodObj {C : Type u} [Category.{v, u} C] [Limits.HasBinaryCoproducts C] {A : C} :
                                                                                                                                                      Over AFunctor (Over A) (Over A)

                                                                                                                                                      Auxiliary definition for Over.coprod.

                                                                                                                                                      Instances For
                                                                                                                                                        @[simp]
                                                                                                                                                        theorem CategoryTheory.Over.coprodObj_map {C : Type u} [Category.{v, u} C] [Limits.HasBinaryCoproducts C] {A : C} (a✝ : Over A) {X✝ Y✝ : Over A} (k : X✝ Y✝) :
                                                                                                                                                        noncomputable def CategoryTheory.Over.coprod {C : Type u} [Category.{v, u} C] [Limits.HasBinaryCoproducts C] {A : C} :
                                                                                                                                                        Functor (Over A) (Functor (Over A) (Over A))

                                                                                                                                                        A category with binary coproducts has a functorial sup operation on over categories.

                                                                                                                                                        Instances For
                                                                                                                                                          @[simp]
                                                                                                                                                          theorem CategoryTheory.Over.coprod_map_app {C : Type u} [Category.{v, u} C] [Limits.HasBinaryCoproducts C] {A : C} {X✝ Y✝ : Over A} (k : X✝ Y✝) (g : Over A) :
                                                                                                                                                          @[reducible, inline]

                                                                                                                                                          A binary fan gives a binary cofan in the opposite category.

                                                                                                                                                          Instances For
                                                                                                                                                            @[reducible, inline]

                                                                                                                                                            A binary cofan gives a binary fan in the opposite category.

                                                                                                                                                            Instances For
                                                                                                                                                              @[reducible, inline]

                                                                                                                                                              A binary fan in the opposite category gives a binary cofan.

                                                                                                                                                              Instances For
                                                                                                                                                                @[reducible, inline]

                                                                                                                                                                A binary cofan in the opposite category gives a binary fan.

                                                                                                                                                                Instances For
                                                                                                                                                                  @[simp]
                                                                                                                                                                  theorem CategoryTheory.Limits.BinaryFan.op_mk {C : Type u} [Category.{v, u} C] {X Y P : C} (π₁ : P X) (π₂ : P Y) :
                                                                                                                                                                  (mk π₁ π₂).op = BinaryCofan.mk π₁.op π₂.op
                                                                                                                                                                  @[simp]
                                                                                                                                                                  theorem CategoryTheory.Limits.BinaryFan.unop_mk {C : Type u} [Category.{v, u} C] {X Y P : C} (π₁ : Opposite.op P Opposite.op X) (π₂ : Opposite.op P Opposite.op Y) :
                                                                                                                                                                  (mk π₁ π₂).unop = BinaryCofan.mk π₁.unop π₂.unop
                                                                                                                                                                  @[simp]
                                                                                                                                                                  theorem CategoryTheory.Limits.BinaryCofan.op_mk {C : Type u} [Category.{v, u} C] {X Y P : C} (ι₁ : X P) (ι₂ : Y P) :
                                                                                                                                                                  (mk ι₁ ι₂).op = BinaryFan.mk ι₁.op ι₂.op
                                                                                                                                                                  @[simp]
                                                                                                                                                                  theorem CategoryTheory.Limits.BinaryCofan.unop_mk {C : Type u} [Category.{v, u} C] {X Y P : C} (ι₁ : Opposite.op X Opposite.op P) (ι₂ : Opposite.op Y Opposite.op P) :
                                                                                                                                                                  (mk ι₁ ι₂).unop = BinaryFan.mk ι₁.unop ι₂.unop

                                                                                                                                                                  If a BinaryFan is a limit, then its opposite is a colimit.

                                                                                                                                                                  Instances For

                                                                                                                                                                    If a BinaryCofan is a colimit, then its opposite is a limit.

                                                                                                                                                                    Instances For

                                                                                                                                                                      If a BinaryFan in the opposite category is a limit, then its unop is a colimit.

                                                                                                                                                                      Instances For

                                                                                                                                                                        If a BinaryCofan in the opposite category is a colimit, then its unop is a limit.

                                                                                                                                                                        Instances For

                                                                                                                                                                          Swap the two sides of a BinaryFan.

                                                                                                                                                                          Instances For
                                                                                                                                                                            @[simp]
                                                                                                                                                                            @[simp]

                                                                                                                                                                            If a binary fan s over X Y is a limit cone, then s.swap is a limit cone over Y X.

                                                                                                                                                                            Instances For
                                                                                                                                                                              @[simp]

                                                                                                                                                                              Construct HasBinaryProduct Y X from HasBinaryProduct X Y. This can't be an instance, as it would cause a loop in typeclass search.

                                                                                                                                                                              def CategoryTheory.Limits.BinaryFan.braiding {C : Type u} [Category.{v, u} C] {X Y : C} {s : BinaryFan X Y} {t : BinaryFan Y X} (P : IsLimit s) (Q : IsLimit t) :
                                                                                                                                                                              s.pt t.pt

                                                                                                                                                                              Given a limit cone over X and Y, and another limit cone over Y and X, we can construct an isomorphism between the cone points. Relative to some fixed choice of limits cones for every pair, these isomorphisms constitute a braiding.

                                                                                                                                                                              Instances For
                                                                                                                                                                                @[simp]
                                                                                                                                                                                @[simp]
                                                                                                                                                                                @[simp]
                                                                                                                                                                                @[simp]
                                                                                                                                                                                def CategoryTheory.Limits.BinaryFan.assoc {C : Type u} [Category.{v, u} C] {X Y Z : C} {sXY : BinaryFan X Y} {sYZ : BinaryFan Y Z} (Q : IsLimit sYZ) (s : BinaryFan sXY.pt Z) :

                                                                                                                                                                                Given binary fans sXY over X Y, and sYZ over Y Z, and s over sXY.X Z, if sYZ is a limit cone we can construct a binary fan over X sYZ.X.

                                                                                                                                                                                This is an ingredient of building the associator for a Cartesian category.

                                                                                                                                                                                Instances For
                                                                                                                                                                                  @[simp]
                                                                                                                                                                                  theorem CategoryTheory.Limits.BinaryFan.assoc_fst {C : Type u} [Category.{v, u} C] {X Y Z : C} {sXY : BinaryFan X Y} {sYZ : BinaryFan Y Z} (Q : IsLimit sYZ) (s : BinaryFan sXY.pt Z) :
                                                                                                                                                                                  @[simp]
                                                                                                                                                                                  theorem CategoryTheory.Limits.BinaryFan.assoc_snd {C : Type u} [Category.{v, u} C] {X Y Z : C} {sXY : BinaryFan X Y} {sYZ : BinaryFan Y Z} (Q : IsLimit sYZ) (s : BinaryFan sXY.pt Z) :
                                                                                                                                                                                  def CategoryTheory.Limits.BinaryFan.assocInv {C : Type u} [Category.{v, u} C] {X Y Z : C} {sXY : BinaryFan X Y} {sYZ : BinaryFan Y Z} (P : IsLimit sXY) (s : BinaryFan X sYZ.pt) :

                                                                                                                                                                                  Given binary fans sXY over X Y, and sYZ over Y Z, and s over X sYZ.X, if sYZ is a limit cone we can construct a binary fan over sXY.X Z.

                                                                                                                                                                                  This is an ingredient of building the associator for a Cartesian category.

                                                                                                                                                                                  Instances For
                                                                                                                                                                                    @[simp]
                                                                                                                                                                                    theorem CategoryTheory.Limits.BinaryFan.assocInv_fst {C : Type u} [Category.{v, u} C] {X Y Z : C} {sXY : BinaryFan X Y} {sYZ : BinaryFan Y Z} (P : IsLimit sXY) (s : BinaryFan X sYZ.pt) :
                                                                                                                                                                                    @[simp]
                                                                                                                                                                                    theorem CategoryTheory.Limits.BinaryFan.assocInv_snd {C : Type u} [Category.{v, u} C] {X Y Z : C} {sXY : BinaryFan X Y} {sYZ : BinaryFan Y Z} (P : IsLimit sXY) (s : BinaryFan X sYZ.pt) :
                                                                                                                                                                                    def CategoryTheory.Limits.IsLimit.assoc {C : Type u} [Category.{v, u} C] {X Y Z : C} {sXY : BinaryFan X Y} {sYZ : BinaryFan Y Z} (P : IsLimit sXY) (Q : IsLimit sYZ) {s : BinaryFan sXY.pt Z} (R : IsLimit s) :

                                                                                                                                                                                    If all the binary fans involved a limit cones, BinaryFan.assoc produces another limit cone.

                                                                                                                                                                                    Instances For
                                                                                                                                                                                      @[simp]
                                                                                                                                                                                      theorem CategoryTheory.Limits.IsLimit.assoc_lift {C : Type u} [Category.{v, u} C] {X Y Z : C} {sXY : BinaryFan X Y} {sYZ : BinaryFan Y Z} (P : IsLimit sXY) (Q : IsLimit sYZ) {s : BinaryFan sXY.pt Z} (R : IsLimit s) (t : Cone (pair X sYZ.pt)) :
                                                                                                                                                                                      (P.assoc Q R).lift t = R.lift (BinaryFan.assocInv P t)
                                                                                                                                                                                      @[reducible, inline]
                                                                                                                                                                                      abbrev CategoryTheory.Limits.BinaryFan.associator {C : Type u} [Category.{v, u} C] {X Y Z : C} {sXY : BinaryFan X Y} {sYZ : BinaryFan Y Z} (P : IsLimit sXY) (Q : IsLimit sYZ) {s : BinaryFan sXY.pt Z} (R : IsLimit s) {t : BinaryFan X sYZ.pt} (S : IsLimit t) :
                                                                                                                                                                                      s.pt t.pt

                                                                                                                                                                                      Given two pairs of limit cones corresponding to the parenthesisations of X × Y × Z, we obtain an isomorphism between the cone points.

                                                                                                                                                                                      Instances For
                                                                                                                                                                                        @[reducible, inline]
                                                                                                                                                                                        abbrev CategoryTheory.Limits.BinaryFan.associatorOfLimitCone {C : Type u} [Category.{v, u} C] (L : (X Y : C) → LimitCone (pair X Y)) (X Y Z : C) :
                                                                                                                                                                                        (L (L X Y).cone.pt Z).cone.pt (L X (L Y Z).cone.pt).cone.pt

                                                                                                                                                                                        Given a fixed family of limit data for every pair X Y, we obtain an associator.

                                                                                                                                                                                        Instances For
                                                                                                                                                                                          def CategoryTheory.Limits.BinaryFan.leftUnitor {C : Type u} [Category.{v, u} C] {X : C} {s : Cone (Functor.empty C)} (P : IsLimit s) {t : BinaryFan s.pt X} (Q : IsLimit t) :
                                                                                                                                                                                          t.pt X

                                                                                                                                                                                          Construct a left unitor from specified limit cones.

                                                                                                                                                                                          Instances For
                                                                                                                                                                                            @[simp]
                                                                                                                                                                                            theorem CategoryTheory.Limits.BinaryFan.leftUnitor_hom {C : Type u} [Category.{v, u} C] {X : C} {s : Cone (Functor.empty C)} (P : IsLimit s) {t : BinaryFan s.pt X} (Q : IsLimit t) :
                                                                                                                                                                                            @[simp]
                                                                                                                                                                                            theorem CategoryTheory.Limits.BinaryFan.leftUnitor_inv {C : Type u} [Category.{v, u} C] {X : C} {s : Cone (Functor.empty C)} (P : IsLimit s) {t : BinaryFan s.pt X} (Q : IsLimit t) :
                                                                                                                                                                                            (leftUnitor P Q).inv = Q.lift (mk (P.lift { pt := X, π := { app := fun (x : Discrete PEmpty.{1}) => x.as.elim, naturality := } }) (CategoryStruct.id { pt := X, π := { app := fun (x : Discrete PEmpty.{1}) => x.as.elim, naturality := } }.pt))
                                                                                                                                                                                            def CategoryTheory.Limits.BinaryFan.rightUnitor {C : Type u} [Category.{v, u} C] {X : C} {s : Cone (Functor.empty C)} (P : IsLimit s) {t : BinaryFan X s.pt} (Q : IsLimit t) :
                                                                                                                                                                                            t.pt X

                                                                                                                                                                                            Construct a right unitor from specified limit cones.

                                                                                                                                                                                            Instances For
                                                                                                                                                                                              @[simp]
                                                                                                                                                                                              theorem CategoryTheory.Limits.BinaryFan.rightUnitor_hom {C : Type u} [Category.{v, u} C] {X : C} {s : Cone (Functor.empty C)} (P : IsLimit s) {t : BinaryFan X s.pt} (Q : IsLimit t) :
                                                                                                                                                                                              @[simp]
                                                                                                                                                                                              theorem CategoryTheory.Limits.BinaryFan.rightUnitor_inv {C : Type u} [Category.{v, u} C] {X : C} {s : Cone (Functor.empty C)} (P : IsLimit s) {t : BinaryFan X s.pt} (Q : IsLimit t) :
                                                                                                                                                                                              (rightUnitor P Q).inv = Q.lift (mk (CategoryStruct.id X) (P.lift { pt := X, π := { app := fun (x : Discrete PEmpty.{1}) => x.as.elim, naturality := } }))