ruc-ai4math/mathlib_handler_benchmark_410 huggingface dataset:
-- CategoryTheory.Limits.coprod.inr_map
@[reassoc (attr := simp)]
theorem coprod.inr_map {W X Y Z : C} [HasBinaryCoproduct W X] [HasBinaryCoproduct Y Z] (f : W ⟶ Y)
    (g : X ⟶ Z) : coprod.inr ≫ coprod.map f g = g ≫ coprod.inr 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {W X Y Z : C} [CategoryTheory.Limits.HasBinaryCoproduct W X] [CategoryTheory.Limits.HasBinaryCoproduct Y Z] (f : W ⟶ Y) (g : X ⟶ Z)
Goal: CategoryTheory.Limits.coprod.inr ≫ CategoryTheory.Limits.coprod.map f g = g ≫ CategoryTheory.Limits.coprod.inr
-- CategoryTheory.Limits.coprod.map_id_id
@[simp]
theorem coprod.map_id_id {X Y : C} [HasBinaryCoproduct X Y] : coprod.map (𝟙 X) (𝟙 Y) = 𝟙 _ 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X Y : C} [CategoryTheory.Limits.HasBinaryCoproduct X Y]
Goal: CategoryTheory.Limits.coprod.map (𝟙 X) (𝟙 Y) = 𝟙 (X ⨿ Y)
-- CategoryTheory.Limits.coprod.desc_inl_inr
@[simp]
theorem coprod.desc_inl_inr {X Y : C} [HasBinaryCoproduct X Y] :
    coprod.desc coprod.inl coprod.inr = 𝟙 (X ⨿ Y) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X Y : C} [CategoryTheory.Limits.HasBinaryCoproduct X Y]
Goal: CategoryTheory.Limits.coprod.desc CategoryTheory.Limits.coprod.inl CategoryTheory.Limits.coprod.inr = 𝟙 (X ⨿ Y)
-- CategoryTheory.Limits.coprod.map_desc
@[reassoc, simp]
theorem coprod.map_desc {S T U V W : C} [HasBinaryCoproduct U W] [HasBinaryCoproduct T V]
    (f : U ⟶ S) (g : W ⟶ S) (h : T ⟶ U) (k : V ⟶ W) :
    coprod.map h k ≫ coprod.desc f g = coprod.desc (h ≫ f) (k ≫ g) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {S T U V W : C} [CategoryTheory.Limits.HasBinaryCoproduct U W] [CategoryTheory.Limits.HasBinaryCoproduct T V] (f : U ⟶ S) (g : W ⟶ S) (h : T ⟶ U) (k : V ⟶ W)
Goal: CategoryTheory.Limits.coprod.map h k ≫ CategoryTheory.Limits.coprod.desc f g =
  CategoryTheory.Limits.coprod.desc (h ≫ f) (k ≫ g)
-- CategoryTheory.Limits.coprod.desc_comp_inl_comp_inr
@[simp]
theorem coprod.desc_comp_inl_comp_inr {W X Y Z : C} [HasBinaryCoproduct W Y]
    [HasBinaryCoproduct X Z] (g : W ⟶ X) (g' : Y ⟶ Z) :
    coprod.desc (g ≫ coprod.inl) (g' ≫ coprod.inr) = coprod.map g g' 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {W X Y Z : C} [CategoryTheory.Limits.HasBinaryCoproduct W Y] [CategoryTheory.Limits.HasBinaryCoproduct X Z] (g : W ⟶ X) (g' : Y ⟶ Z)
Goal: CategoryTheory.Limits.coprod.desc (g ≫ CategoryTheory.Limits.coprod.inl) (g' ≫ CategoryTheory.Limits.coprod.inr) =
  CategoryTheory.Limits.coprod.map g g'
-- CategoryTheory.Limits.coprod.map_map
@[reassoc (attr := simp)]
theorem coprod.map_map {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₃) :
    coprod.map f g ≫ coprod.map h k = coprod.map (f ≫ h) (g ≫ k) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {A₁ A₂ A₃ B₁ B₂ B₃ : C} [CategoryTheory.Limits.HasBinaryCoproduct A₁ B₁] [CategoryTheory.Limits.HasBinaryCoproduct A₂ B₂] [CategoryTheory.Limits.HasBinaryCoproduct A₃ B₃] (f : A₁ ⟶ A₂) (g : B₁ ⟶ B₂) (h : A₂ ⟶ A₃) (k : B₂ ⟶ B₃)
Goal: CategoryTheory.Limits.coprod.map f g ≫ CategoryTheory.Limits.coprod.map h k =
  CategoryTheory.Limits.coprod.map (f ≫ h) (g ≫ k)
-- CategoryTheory.Limits.coprod.map_swap
@[reassoc]
theorem coprod.map_swap {A B X Y : C} (f : A ⟶ B) (g : X ⟶ Y)
    [HasColimitsOfShape (Discrete WalkingPair) C] :
    coprod.map (𝟙 X) f ≫ coprod.map g (𝟙 B) = coprod.map g (𝟙 A) ≫ coprod.map (𝟙 Y) f 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {A B X Y : C} (f : A ⟶ B) (g : X ⟶ Y) [CategoryTheory.Limits.HasColimitsOfShape (CategoryTheory.Discrete CategoryTheory.Limits.WalkingPair) C]
Goal: CategoryTheory.Limits.coprod.map (𝟙 X) f ≫ CategoryTheory.Limits.coprod.map g (𝟙 B) =
  CategoryTheory.Limits.coprod.map g (𝟙 A) ≫ CategoryTheory.Limits.coprod.map (𝟙 Y) f
-- CategoryTheory.Limits.coprod.map_comp_id
@[reassoc]
theorem coprod.map_comp_id {X Y Z W : C} (f : X ⟶ Y) (g : Y ⟶ Z) [HasBinaryCoproduct Z W]
    [HasBinaryCoproduct Y W] [HasBinaryCoproduct X W] :
    coprod.map (f ≫ g) (𝟙 W) = coprod.map f (𝟙 W) ≫ coprod.map g (𝟙 W) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X Y Z W : C} (f : X ⟶ Y) (g : Y ⟶ Z) [CategoryTheory.Limits.HasBinaryCoproduct Z W] [CategoryTheory.Limits.HasBinaryCoproduct Y W] [CategoryTheory.Limits.HasBinaryCoproduct X W]
Goal: CategoryTheory.Limits.coprod.map (f ≫ g) (𝟙 W) =
  CategoryTheory.Limits.coprod.map f (𝟙 W) ≫ CategoryTheory.Limits.coprod.map g (𝟙 W)
-- CategoryTheory.Limits.coprod.map_id_comp
@[reassoc]
theorem coprod.map_id_comp {X Y Z W : C} (f : X ⟶ Y) (g : Y ⟶ Z) [HasBinaryCoproduct W X]
    [HasBinaryCoproduct W Y] [HasBinaryCoproduct W Z] :
    coprod.map (𝟙 W) (f ≫ g) = coprod.map (𝟙 W) f ≫ coprod.map (𝟙 W) g 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X Y Z W : C} (f : X ⟶ Y) (g : Y ⟶ Z) [CategoryTheory.Limits.HasBinaryCoproduct W X] [CategoryTheory.Limits.HasBinaryCoproduct W Y] [CategoryTheory.Limits.HasBinaryCoproduct W Z]
Goal: CategoryTheory.Limits.coprod.map (𝟙 W) (f ≫ g) =
  CategoryTheory.Limits.coprod.map (𝟙 W) f ≫ CategoryTheory.Limits.coprod.map (𝟙 W) g
-- CategoryTheory.Limits.coprod.mapIso_inv
@[simps]
def coprod.mapIso {W X Y Z : C} [HasBinaryCoproduct W X] [HasBinaryCoproduct Y Z] (f : W ≅ Y)
    (g : X ≅ Z) : W ⨿ X ≅ Y ⨿ Z 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {W X Y Z : C} [CategoryTheory.Limits.HasBinaryCoproduct W X] [CategoryTheory.Limits.HasBinaryCoproduct Y Z] (f : W ≅ Y) (g : X ≅ Z)
Goal: (CategoryTheory.Limits.coprod.mapIso f g).inv = CategoryTheory.Limits.coprod.map f.inv g.inv
-- CategoryTheory.Limits.coprod.mapIso_hom
@[simps]
def coprod.mapIso {W X Y Z : C} [HasBinaryCoproduct W X] [HasBinaryCoproduct Y Z] (f : W ≅ Y)
    (g : X ≅ Z) : W ⨿ X ≅ Y ⨿ Z 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {W X Y Z : C} [CategoryTheory.Limits.HasBinaryCoproduct W X] [CategoryTheory.Limits.HasBinaryCoproduct Y Z] (f : W ≅ Y) (g : X ≅ Z)
Goal: (CategoryTheory.Limits.coprod.mapIso f g).hom = CategoryTheory.Limits.coprod.map f.hom g.hom
-- CategoryTheory.Limits.coprod.map_codiag
@[reassoc]
theorem coprod.map_codiag {X Y : C} (f : X ⟶ Y) [HasBinaryCoproduct X X] [HasBinaryCoproduct Y Y] :
    coprod.map f f ≫ codiag Y = codiag X ≫ f 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X Y : C} (f : X ⟶ Y) [CategoryTheory.Limits.HasBinaryCoproduct X X] [CategoryTheory.Limits.HasBinaryCoproduct Y Y]
Goal: CategoryTheory.Limits.coprod.map f f ≫ CategoryTheory.Limits.codiag Y = CategoryTheory.Limits.codiag X ≫ f
-- CategoryTheory.Limits.coprod.map_inl_inr_codiag
@[reassoc]
theorem coprod.map_inl_inr_codiag {X Y : C} [HasBinaryCoproduct X Y]
    [HasBinaryCoproduct (X ⨿ Y) (X ⨿ Y)] :
    coprod.map coprod.inl coprod.inr ≫ codiag (X ⨿ Y) = 𝟙 (X ⨿ Y) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X Y : C} [CategoryTheory.Limits.HasBinaryCoproduct X Y] [CategoryTheory.Limits.HasBinaryCoproduct (X ⨿ Y) (X ⨿ Y)]
Goal: CategoryTheory.Limits.coprod.map CategoryTheory.Limits.coprod.inl CategoryTheory.Limits.coprod.inr ≫
    CategoryTheory.Limits.codiag (X ⨿ Y) =
  𝟙 (X ⨿ Y)
-- CategoryTheory.Limits.coprod.map_comp_inl_inr_codiag
@[reassoc]
theorem coprod.map_comp_inl_inr_codiag [HasColimitsOfShape (Discrete WalkingPair) C] {X X' Y Y' : C}
    (g : X ⟶ Y) (g' : X' ⟶ Y') :
    coprod.map (g ≫ coprod.inl) (g' ≫ coprod.inr) ≫ codiag (Y ⨿ Y') = coprod.map g g' 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasColimitsOfShape (CategoryTheory.Discrete CategoryTheory.Limits.WalkingPair) C] {X X' Y Y' : C} (g : X ⟶ Y) (g' : X' ⟶ Y')
Goal: CategoryTheory.Limits.coprod.map (g ≫ CategoryTheory.Limits.coprod.inl) (g' ≫ CategoryTheory.Limits.coprod.inr) ≫
    CategoryTheory.Limits.codiag (Y ⨿ Y') =
  CategoryTheory.Limits.coprod.map g g'
-- CategoryTheory.Limits.hasBinaryProducts_of_hasLimit_pair
theorem hasBinaryProducts_of_hasLimit_pair [∀ {X Y : C}, HasLimit (pair X Y)] :
    HasBinaryProducts C 
Arguments: (C : Type u) [CategoryTheory.Category.{v, u} C] [∀ {X Y : C}, CategoryTheory.Limits.HasLimit (CategoryTheory.Limits.pair X Y)]
Goal: CategoryTheory.Limits.HasBinaryProducts C
-- CategoryTheory.Limits.hasBinaryCoproducts_of_hasColimit_pair
theorem hasBinaryCoproducts_of_hasColimit_pair [∀ {X Y : C}, HasColimit (pair X Y)] :
    HasBinaryCoproducts C 
Arguments: (C : Type u) [CategoryTheory.Category.{v, u} C] [∀ {X Y : C}, CategoryTheory.Limits.HasColimit (CategoryTheory.Limits.pair X Y)]
Goal: CategoryTheory.Limits.HasBinaryCoproducts C
-- CategoryTheory.Limits.prod.braiding_inv
@[simps]
def prod.braiding (P Q : C) [HasBinaryProduct P Q] [HasBinaryProduct Q P] : P ⨯ Q ≅ Q ⨯ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] (P Q : C) [CategoryTheory.Limits.HasBinaryProduct P Q] [CategoryTheory.Limits.HasBinaryProduct Q P]
Goal: (CategoryTheory.Limits.prod.braiding P Q).inv =
  CategoryTheory.Limits.prod.lift CategoryTheory.Limits.prod.snd CategoryTheory.Limits.prod.fst
-- CategoryTheory.Limits.prod.braiding_hom
@[simps]
def prod.braiding (P Q : C) [HasBinaryProduct P Q] [HasBinaryProduct Q P] : P ⨯ Q ≅ Q ⨯ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] (P Q : C) [CategoryTheory.Limits.HasBinaryProduct P Q] [CategoryTheory.Limits.HasBinaryProduct Q P]
Goal: (CategoryTheory.Limits.prod.braiding P Q).hom =
  CategoryTheory.Limits.prod.lift CategoryTheory.Limits.prod.snd CategoryTheory.Limits.prod.fst
-- CategoryTheory.Limits.braid_natural
@[reassoc]
theorem braid_natural [HasBinaryProducts C] {W X Y Z : C} (f : X ⟶ Y) (g : Z ⟶ W) :
    prod.map f g ≫ (prod.braiding _ _).hom = (prod.braiding _ _).hom ≫ prod.map g f 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryProducts C] {W X Y Z : C} (f : X ⟶ Y) (g : Z ⟶ W)
Goal: CategoryTheory.Limits.prod.map f g ≫ (CategoryTheory.Limits.prod.braiding Y W).hom =
  (CategoryTheory.Limits.prod.braiding X Z).hom ≫ CategoryTheory.Limits.prod.map g f
-- CategoryTheory.Limits.prod.symmetry'
@[reassoc]
theorem prod.symmetry' (P Q : C) [HasBinaryProduct P Q] [HasBinaryProduct Q P] :
    prod.lift prod.snd prod.fst ≫ prod.lift prod.snd prod.fst = 𝟙 (P ⨯ Q) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] (P Q : C) [CategoryTheory.Limits.HasBinaryProduct P Q] [CategoryTheory.Limits.HasBinaryProduct Q P]
Goal: CategoryTheory.Limits.prod.lift CategoryTheory.Limits.prod.snd CategoryTheory.Limits.prod.fst ≫
    CategoryTheory.Limits.prod.lift CategoryTheory.Limits.prod.snd CategoryTheory.Limits.prod.fst =
  𝟙 (P ⨯ Q)
-- CategoryTheory.Limits.prod.symmetry
@[reassoc]
theorem prod.symmetry (P Q : C) [HasBinaryProduct P Q] [HasBinaryProduct Q P] :
    (prod.braiding P Q).hom ≫ (prod.braiding Q P).hom = 𝟙 _ 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] (P Q : C) [CategoryTheory.Limits.HasBinaryProduct P Q] [CategoryTheory.Limits.HasBinaryProduct Q P]
Goal: (CategoryTheory.Limits.prod.braiding P Q).hom ≫ (CategoryTheory.Limits.prod.braiding Q P).hom = 𝟙 (P ⨯ Q)
-- CategoryTheory.Limits.prod.associator_hom
@[simps]
def prod.associator [HasBinaryProducts C] (P Q R : C) : (P ⨯ Q) ⨯ R ≅ P ⨯ Q ⨯ R 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryProducts C] (P Q R : C)
Goal: (CategoryTheory.Limits.prod.associator P Q R).hom =
  CategoryTheory.Limits.prod.lift (CategoryTheory.Limits.prod.fst ≫ CategoryTheory.Limits.prod.fst)
    (CategoryTheory.Limits.prod.lift (CategoryTheory.Limits.prod.fst ≫ CategoryTheory.Limits.prod.snd)
      CategoryTheory.Limits.prod.snd)
-- CategoryTheory.Limits.prod.associator_inv
@[simps]
def prod.associator [HasBinaryProducts C] (P Q R : C) : (P ⨯ Q) ⨯ R ≅ P ⨯ Q ⨯ R 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryProducts C] (P Q R : C)
Goal: (CategoryTheory.Limits.prod.associator P Q R).inv =
  CategoryTheory.Limits.prod.lift
    (CategoryTheory.Limits.prod.lift CategoryTheory.Limits.prod.fst
      (CategoryTheory.Limits.prod.snd ≫ CategoryTheory.Limits.prod.fst))
    (CategoryTheory.Limits.prod.snd ≫ CategoryTheory.Limits.prod.snd)
-- CategoryTheory.Limits.prod.pentagon
@[reassoc]
theorem prod.pentagon [HasBinaryProducts C] (W X Y Z : C) :
    prod.map (prod.associator W X Y).hom (𝟙 Z) ≫
        (prod.associator W (X ⨯ Y) Z).hom ≫ prod.map (𝟙 W) (prod.associator X Y Z).hom =
      (prod.associator (W ⨯ X) Y Z).hom ≫ (prod.associator W X (Y ⨯ Z)).hom 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryProducts C] (W X Y Z : C)
Goal: CategoryTheory.Limits.prod.map (CategoryTheory.Limits.prod.associator W X Y).hom (𝟙 Z) ≫
    (CategoryTheory.Limits.prod.associator W (X ⨯ Y) Z).hom ≫
      CategoryTheory.Limits.prod.map (𝟙 W) (CategoryTheory.Limits.prod.associator X Y Z).hom =
  (CategoryTheory.Limits.prod.associator (W ⨯ X) Y Z).hom ≫ (CategoryTheory.Limits.prod.associator W X (Y ⨯ Z)).hom
-- CategoryTheory.Limits.prod.associator_naturality
@[reassoc]
theorem prod.associator_naturality [HasBinaryProducts C] {X₁ X₂ X₃ Y₁ Y₂ Y₃ : C} (f₁ : X₁ ⟶ Y₁)
    (f₂ : X₂ ⟶ Y₂) (f₃ : X₃ ⟶ Y₃) :
    prod.map (prod.map f₁ f₂) f₃ ≫ (prod.associator Y₁ Y₂ Y₃).hom =
      (prod.associator X₁ X₂ X₃).hom ≫ prod.map f₁ (prod.map f₂ f₃) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryProducts C] {X₁ X₂ X₃ Y₁ Y₂ Y₃ : C} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (f₃ : X₃ ⟶ Y₃)
Goal: CategoryTheory.Limits.prod.map (CategoryTheory.Limits.prod.map f₁ f₂) f₃ ≫
    (CategoryTheory.Limits.prod.associator Y₁ Y₂ Y₃).hom =
  (CategoryTheory.Limits.prod.associator X₁ X₂ X₃).hom ≫
    CategoryTheory.Limits.prod.map f₁ (CategoryTheory.Limits.prod.map f₂ f₃)
-- CategoryTheory.Limits.prod.leftUnitor_inv
@[simps]
def prod.leftUnitor (P : C) [HasBinaryProduct (⊤_ C) P] : (⊤_ C) ⨯ P ≅ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasTerminal C] (P : C) [CategoryTheory.Limits.HasBinaryProduct (⊤_ C) P]
Goal: (CategoryTheory.Limits.prod.leftUnitor P).inv =
  CategoryTheory.Limits.prod.lift (CategoryTheory.Limits.terminal.from P) (𝟙 P)
-- CategoryTheory.Limits.prod.leftUnitor_hom
@[simps]
def prod.leftUnitor (P : C) [HasBinaryProduct (⊤_ C) P] : (⊤_ C) ⨯ P ≅ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasTerminal C] (P : C) [CategoryTheory.Limits.HasBinaryProduct (⊤_ C) P]
Goal: (CategoryTheory.Limits.prod.leftUnitor P).hom = CategoryTheory.Limits.prod.snd
-- CategoryTheory.Limits.prod.rightUnitor_hom
@[simps]
def prod.rightUnitor (P : C) [HasBinaryProduct P (⊤_ C)] : P ⨯ ⊤_ C ≅ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasTerminal C] (P : C) [CategoryTheory.Limits.HasBinaryProduct P (⊤_ C)]
Goal: (CategoryTheory.Limits.prod.rightUnitor P).hom = CategoryTheory.Limits.prod.fst
-- CategoryTheory.Limits.prod.rightUnitor_inv
@[simps]
def prod.rightUnitor (P : C) [HasBinaryProduct P (⊤_ C)] : P ⨯ ⊤_ C ≅ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasTerminal C] (P : C) [CategoryTheory.Limits.HasBinaryProduct P (⊤_ C)]
Goal: (CategoryTheory.Limits.prod.rightUnitor P).inv =
  CategoryTheory.Limits.prod.lift (𝟙 P) (CategoryTheory.Limits.terminal.from P)
-- CategoryTheory.Limits.prod.leftUnitor_hom_naturality
@[reassoc]
theorem prod.leftUnitor_hom_naturality [HasBinaryProducts C] (f : X ⟶ Y) :
    prod.map (𝟙 _) f ≫ (prod.leftUnitor Y).hom = (prod.leftUnitor X).hom ≫ f 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X Y : C} [CategoryTheory.Limits.HasTerminal C] [CategoryTheory.Limits.HasBinaryProducts C] (f : X ⟶ Y)
Goal: CategoryTheory.Limits.prod.map (𝟙 (⊤_ C)) f ≫ (CategoryTheory.Limits.prod.leftUnitor Y).hom =
  (CategoryTheory.Limits.prod.leftUnitor X).hom ≫ f
-- CategoryTheory.Limits.prod.leftUnitor_inv_naturality
@[reassoc]
theorem prod.leftUnitor_inv_naturality [HasBinaryProducts C] (f : X ⟶ Y) :
    (prod.leftUnitor X).inv ≫ prod.map (𝟙 _) f = f ≫ (prod.leftUnitor Y).inv 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X Y : C} [CategoryTheory.Limits.HasTerminal C] [CategoryTheory.Limits.HasBinaryProducts C] (f : X ⟶ Y)
Goal: (CategoryTheory.Limits.prod.leftUnitor X).inv ≫ CategoryTheory.Limits.prod.map (𝟙 (⊤_ C)) f =
  f ≫ (CategoryTheory.Limits.prod.leftUnitor Y).inv
-- CategoryTheory.Limits.prod.rightUnitor_hom_naturality
@[reassoc]
theorem prod.rightUnitor_hom_naturality [HasBinaryProducts C] (f : X ⟶ Y) :
    prod.map f (𝟙 _) ≫ (prod.rightUnitor Y).hom = (prod.rightUnitor X).hom ≫ f 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X Y : C} [CategoryTheory.Limits.HasTerminal C] [CategoryTheory.Limits.HasBinaryProducts C] (f : X ⟶ Y)
Goal: CategoryTheory.Limits.prod.map f (𝟙 (⊤_ C)) ≫ (CategoryTheory.Limits.prod.rightUnitor Y).hom =
  (CategoryTheory.Limits.prod.rightUnitor X).hom ≫ f
-- CategoryTheory.Limits.prod_rightUnitor_inv_naturality
@[reassoc]
theorem prod_rightUnitor_inv_naturality [HasBinaryProducts C] (f : X ⟶ Y) :
    (prod.rightUnitor X).inv ≫ prod.map f (𝟙 _) = f ≫ (prod.rightUnitor Y).inv 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] {X Y : C} [CategoryTheory.Limits.HasTerminal C] [CategoryTheory.Limits.HasBinaryProducts C] (f : X ⟶ Y)
Goal: (CategoryTheory.Limits.prod.rightUnitor X).inv ≫ CategoryTheory.Limits.prod.map f (𝟙 (⊤_ C)) =
  f ≫ (CategoryTheory.Limits.prod.rightUnitor Y).inv
-- CategoryTheory.Limits.prod.triangle
theorem prod.triangle [HasBinaryProducts C] (X Y : C) :
    (prod.associator X (⊤_ C) Y).hom ≫ prod.map (𝟙 X) (prod.leftUnitor Y).hom =
      prod.map (prod.rightUnitor X).hom (𝟙 Y) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasTerminal C] [CategoryTheory.Limits.HasBinaryProducts C] (X Y : C)
Goal: (CategoryTheory.Limits.prod.associator X (⊤_ C) Y).hom ≫
    CategoryTheory.Limits.prod.map (𝟙 X) (CategoryTheory.Limits.prod.leftUnitor Y).hom =
  CategoryTheory.Limits.prod.map (CategoryTheory.Limits.prod.rightUnitor X).hom (𝟙 Y)
-- CategoryTheory.Limits.coprod.braiding_hom
@[simps]
def coprod.braiding (P Q : C) : P ⨿ Q ≅ Q ⨿ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] (P Q : C)
Goal: (CategoryTheory.Limits.coprod.braiding P Q).hom =
  CategoryTheory.Limits.coprod.desc CategoryTheory.Limits.coprod.inr CategoryTheory.Limits.coprod.inl
-- CategoryTheory.Limits.coprod.braiding_inv
@[simps]
def coprod.braiding (P Q : C) : P ⨿ Q ≅ Q ⨿ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] (P Q : C)
Goal: (CategoryTheory.Limits.coprod.braiding P Q).inv =
  CategoryTheory.Limits.coprod.desc CategoryTheory.Limits.coprod.inr CategoryTheory.Limits.coprod.inl
-- CategoryTheory.Limits.coprod.symmetry'
@[reassoc]
theorem coprod.symmetry' (P Q : C) :
    coprod.desc coprod.inr coprod.inl ≫ coprod.desc coprod.inr coprod.inl = 𝟙 (P ⨿ Q) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] (P Q : C)
Goal: CategoryTheory.Limits.coprod.desc CategoryTheory.Limits.coprod.inr CategoryTheory.Limits.coprod.inl ≫
    CategoryTheory.Limits.coprod.desc CategoryTheory.Limits.coprod.inr CategoryTheory.Limits.coprod.inl =
  𝟙 (P ⨿ Q)
-- CategoryTheory.Limits.coprod.symmetry
theorem coprod.symmetry (P Q : C) : (coprod.braiding P Q).hom ≫ (coprod.braiding Q P).hom = 𝟙 _ 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] (P Q : C)
Goal: (CategoryTheory.Limits.coprod.braiding P Q).hom ≫ (CategoryTheory.Limits.coprod.braiding Q P).hom = 𝟙 (P ⨿ Q)
-- CategoryTheory.Limits.coprod.associator_hom
@[simps]
def coprod.associator (P Q R : C) : (P ⨿ Q) ⨿ R ≅ P ⨿ Q ⨿ R 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] (P Q R : C)
Goal: (CategoryTheory.Limits.coprod.associator P Q R).hom =
  CategoryTheory.Limits.coprod.desc
    (CategoryTheory.Limits.coprod.desc CategoryTheory.Limits.coprod.inl
      (CategoryTheory.Limits.coprod.inl ≫ CategoryTheory.Limits.coprod.inr))
    (CategoryTheory.Limits.coprod.inr ≫ CategoryTheory.Limits.coprod.inr)
-- CategoryTheory.Limits.coprod.associator_inv
@[simps]
def coprod.associator (P Q R : C) : (P ⨿ Q) ⨿ R ≅ P ⨿ Q ⨿ R 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] (P Q R : C)
Goal: (CategoryTheory.Limits.coprod.associator P Q R).inv =
  CategoryTheory.Limits.coprod.desc (CategoryTheory.Limits.coprod.inl ≫ CategoryTheory.Limits.coprod.inl)
    (CategoryTheory.Limits.coprod.desc (CategoryTheory.Limits.coprod.inr ≫ CategoryTheory.Limits.coprod.inl)
      CategoryTheory.Limits.coprod.inr)
-- CategoryTheory.Limits.coprod.pentagon
theorem coprod.pentagon (W X Y Z : C) :
    coprod.map (coprod.associator W X Y).hom (𝟙 Z) ≫
        (coprod.associator W (X ⨿ Y) Z).hom ≫ coprod.map (𝟙 W) (coprod.associator X Y Z).hom =
      (coprod.associator (W ⨿ X) Y Z).hom ≫ (coprod.associator W X (Y ⨿ Z)).hom 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] (W X Y Z : C)
Goal: CategoryTheory.Limits.coprod.map (CategoryTheory.Limits.coprod.associator W X Y).hom (𝟙 Z) ≫
    (CategoryTheory.Limits.coprod.associator W (X ⨿ Y) Z).hom ≫
      CategoryTheory.Limits.coprod.map (𝟙 W) (CategoryTheory.Limits.coprod.associator X Y Z).hom =
  (CategoryTheory.Limits.coprod.associator (W ⨿ X) Y Z).hom ≫ (CategoryTheory.Limits.coprod.associator W X (Y ⨿ Z)).hom
-- CategoryTheory.Limits.coprod.associator_naturality
theorem coprod.associator_naturality {X₁ X₂ X₃ Y₁ Y₂ Y₃ : C} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂)
    (f₃ : X₃ ⟶ Y₃) :
    coprod.map (coprod.map f₁ f₂) f₃ ≫ (coprod.associator Y₁ Y₂ Y₃).hom =
      (coprod.associator X₁ X₂ X₃).hom ≫ coprod.map f₁ (coprod.map f₂ f₃) 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] {X₁ X₂ X₃ Y₁ Y₂ Y₃ : C} (f₁ : X₁ ⟶ Y₁) (f₂ : X₂ ⟶ Y₂) (f₃ : X₃ ⟶ Y₃)
Goal: CategoryTheory.Limits.coprod.map (CategoryTheory.Limits.coprod.map f₁ f₂) f₃ ≫
    (CategoryTheory.Limits.coprod.associator Y₁ Y₂ Y₃).hom =
  (CategoryTheory.Limits.coprod.associator X₁ X₂ X₃).hom ≫
    CategoryTheory.Limits.coprod.map f₁ (CategoryTheory.Limits.coprod.map f₂ f₃)
-- CategoryTheory.Limits.coprod.leftUnitor_inv
@[simps]
def coprod.leftUnitor (P : C) : (⊥_ C) ⨿ P ≅ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] [CategoryTheory.Limits.HasInitial C] (P : C)
Goal: (CategoryTheory.Limits.coprod.leftUnitor P).inv = CategoryTheory.Limits.coprod.inr
-- CategoryTheory.Limits.coprod.leftUnitor_hom
@[simps]
def coprod.leftUnitor (P : C) : (⊥_ C) ⨿ P ≅ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] [CategoryTheory.Limits.HasInitial C] (P : C)
Goal: (CategoryTheory.Limits.coprod.leftUnitor P).hom =
  CategoryTheory.Limits.coprod.desc (CategoryTheory.Limits.initial.to P) (𝟙 P)
-- CategoryTheory.Limits.coprod.rightUnitor_hom
@[simps]
def coprod.rightUnitor (P : C) : P ⨿ ⊥_ C ≅ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] [CategoryTheory.Limits.HasInitial C] (P : C)
Goal: (CategoryTheory.Limits.coprod.rightUnitor P).hom =
  CategoryTheory.Limits.coprod.desc (𝟙 P) (CategoryTheory.Limits.initial.to P)
-- CategoryTheory.Limits.coprod.rightUnitor_inv
@[simps]
def coprod.rightUnitor (P : C) : P ⨿ ⊥_ C ≅ P 
Arguments: {C : Type u} [CategoryTheory.Category.{v, u} C] [CategoryTheory.Limits.HasBinaryCoproducts C] [CategoryTheory.Limits.HasInitial C] (P : C)
Goal: (CategoryTheory.Limits.coprod.rightUnitor P).inv = CategoryTheory.Limits.coprod.inl