File: Mathlib/CategoryTheory/Monoidal/Preadditive.lean

full_name: CategoryTheory.MonoidalPreadditive.add_whiskerRight
code: /-- A category is `MonoidalPreadditive` if tensoring is additive in both factors.

Note we don't `extend Preadditive C` here, as `Abelian C` already extends it,
and we'll need to have both typeclasses sometimes.
-/
class MonoidalPreadditive : Prop where
  whiskerLeft_zero : ∀ {X Y Z : C}, X ◁ (0 : Y ⟶ Z) = 0 := by aesop_cat
  zero_whiskerRight : ∀ {X Y Z : C}, (0 : Y ⟶ Z) ▷ X = 0 := by aesop_cat
  whiskerLeft_add : ∀ {X Y Z : C} (f g : Y ⟶ Z), X ◁ (f + g) = X ◁ f + X ◁ g := by aesop_cat
  add_whiskerRight : ∀ {X Y Z : C} (f g : Y ⟶ Z), (f + g) ▷ X = f ▷ X + g ▷ X := by aesop_cat
goal: CategoryTheory.MonoidalCategory.whiskerRight (f + g) X =
  CategoryTheory.MonoidalCategory.whiskerRight f X + CategoryTheory.MonoidalCategory.whiskerRight g X

full_name: CategoryTheory.MonoidalPreadditive.whiskerLeft_add
code: /-- A category is `MonoidalPreadditive` if tensoring is additive in both factors.

Note we don't `extend Preadditive C` here, as `Abelian C` already extends it,
and we'll need to have both typeclasses sometimes.
-/
class MonoidalPreadditive : Prop where
  whiskerLeft_zero : ∀ {X Y Z : C}, X ◁ (0 : Y ⟶ Z) = 0 := by aesop_cat
  zero_whiskerRight : ∀ {X Y Z : C}, (0 : Y ⟶ Z) ▷ X = 0 := by aesop_cat
  whiskerLeft_add : ∀ {X Y Z : C} (f g : Y ⟶ Z), X ◁ (f + g) = X ◁ f + X ◁ g := by aesop_cat
  add_whiskerRight : ∀ {X Y Z : C} (f g : Y ⟶ Z), (f + g) ▷ X = f ▷ X + g ▷ X := by aesop_cat
goal: CategoryTheory.MonoidalCategory.whiskerLeft X (f + g) =
  CategoryTheory.MonoidalCategory.whiskerLeft X f + CategoryTheory.MonoidalCategory.whiskerLeft X g

full_name: CategoryTheory.MonoidalPreadditive
code: /-- A category is `MonoidalPreadditive` if tensoring is additive in both factors.

Note we don't `extend Preadditive C` here, as `Abelian C` already extends it,
and we'll need to have both typeclasses sometimes.
-/
class MonoidalPreadditive : Prop where
  whiskerLeft_zero : ∀ {X Y Z : C}, X ◁ (0 : Y ⟶ Z) = 0 := by aesop_cat
  zero_whiskerRight : ∀ {X Y Z : C}, (0 : Y ⟶ Z) ▷ X = 0 := by aesop_cat
  whiskerLeft_add : ∀ {X Y Z : C} (f g : Y ⟶ Z), X ◁ (f + g) = X ◁ f + X ◁ g := by aesop_cat
  add_whiskerRight : ∀ {X Y Z : C} (f g : Y ⟶ Z), (f + g) ▷ X = f ▷ X + g ▷ X := by aesop_cat
goal: Prop

full_name: CategoryTheory.MonoidalPreadditive.whiskerLeft_zero
code: /-- A category is `MonoidalPreadditive` if tensoring is additive in both factors.

Note we don't `extend Preadditive C` here, as `Abelian C` already extends it,
and we'll need to have both typeclasses sometimes.
-/
class MonoidalPreadditive : Prop where
  whiskerLeft_zero : ∀ {X Y Z : C}, X ◁ (0 : Y ⟶ Z) = 0 := by aesop_cat
  zero_whiskerRight : ∀ {X Y Z : C}, (0 : Y ⟶ Z) ▷ X = 0 := by aesop_cat
  whiskerLeft_add : ∀ {X Y Z : C} (f g : Y ⟶ Z), X ◁ (f + g) = X ◁ f + X ◁ g := by aesop_cat
  add_whiskerRight : ∀ {X Y Z : C} (f g : Y ⟶ Z), (f + g) ▷ X = f ▷ X + g ▷ X := by aesop_cat
goal: CategoryTheory.MonoidalCategory.whiskerLeft X 0 = 0

full_name: CategoryTheory.MonoidalPreadditive.zero_whiskerRight
code: /-- A category is `MonoidalPreadditive` if tensoring is additive in both factors.

Note we don't `extend Preadditive C` here, as `Abelian C` already extends it,
and we'll need to have both typeclasses sometimes.
-/
class MonoidalPreadditive : Prop where
  whiskerLeft_zero : ∀ {X Y Z : C}, X ◁ (0 : Y ⟶ Z) = 0 := by aesop_cat
  zero_whiskerRight : ∀ {X Y Z : C}, (0 : Y ⟶ Z) ▷ X = 0 := by aesop_cat
  whiskerLeft_add : ∀ {X Y Z : C} (f g : Y ⟶ Z), X ◁ (f + g) = X ◁ f + X ◁ g := by aesop_cat
  add_whiskerRight : ∀ {X Y Z : C} (f g : Y ⟶ Z), (f + g) ▷ X = f ▷ X + g ▷ X := by aesop_cat
goal: CategoryTheory.MonoidalCategory.whiskerRight 0 X = 0

full_name: CategoryTheory.MonoidalPreadditive.tensor_zero
code: @[simp (low)]
theorem tensor_zero {W X Y Z : C} (f : W ⟶ X) : f ⊗ (0 : Y ⟶ Z) = 0 
goal: CategoryTheory.MonoidalCategory.tensorHom f 0 = 0

full_name: CategoryTheory.MonoidalPreadditive.zero_tensor
code: @[simp (low)]
theorem zero_tensor {W X Y Z : C} (f : Y ⟶ Z) : (0 : W ⟶ X) ⊗ f = 0 
goal: CategoryTheory.MonoidalCategory.tensorHom 0 f = 0

full_name: CategoryTheory.MonoidalPreadditive.tensor_add
code: theorem tensor_add {W X Y Z : C} (f : W ⟶ X) (g h : Y ⟶ Z) : f ⊗ (g + h) = f ⊗ g + f ⊗ h 
goal: CategoryTheory.MonoidalCategory.tensorHom f (g + h) =
  CategoryTheory.MonoidalCategory.tensorHom f g + CategoryTheory.MonoidalCategory.tensorHom f h

full_name: CategoryTheory.MonoidalPreadditive.add_tensor
code: theorem add_tensor {W X Y Z : C} (f g : W ⟶ X) (h : Y ⟶ Z) : (f + g) ⊗ h = f ⊗ h + g ⊗ h 
goal: CategoryTheory.MonoidalCategory.tensorHom (f + g) h =
  CategoryTheory.MonoidalCategory.tensorHom f h + CategoryTheory.MonoidalCategory.tensorHom g h

full_name: CategoryTheory.tensorLeft_additive
code: instance tensorLeft_additive (X : C) : (tensorLeft X).Additive 
goal: (CategoryTheory.MonoidalCategory.tensorLeft X).Additive

full_name: CategoryTheory.tensorRight_additive
code: instance tensorRight_additive (X : C) : (tensorRight X).Additive 
goal: (CategoryTheory.MonoidalCategory.tensorRight X).Additive

full_name: CategoryTheory.tensoringLeft_additive
code: instance tensoringLeft_additive (X : C) : ((tensoringLeft C).obj X).Additive 
goal: ((CategoryTheory.MonoidalCategory.tensoringLeft C).obj X).Additive

full_name: CategoryTheory.tensoringRight_additive
code: instance tensoringRight_additive (X : C) : ((tensoringRight C).obj X).Additive 
goal: ((CategoryTheory.MonoidalCategory.tensoringRight C).obj X).Additive

full_name: CategoryTheory.monoidalPreadditive_of_faithful
code: /-- A faithful additive monoidal functor to a monoidal preadditive category
ensures that the domain is monoidal preadditive. -/
theorem monoidalPreadditive_of_faithful {D} [Category D] [Preadditive D] [MonoidalCategory D]
    (F : MonoidalFunctor D C) [F.Faithful] [F.Additive] :
    MonoidalPreadditive D 
goal: CategoryTheory.MonoidalPreadditive D

full_name: CategoryTheory.whiskerLeft_sum
code: theorem whiskerLeft_sum (P : C) {Q R : C} {J : Type*} (s : Finset J) (g : J → (Q ⟶ R)) :
    P ◁ ∑ j ∈ s, g j = ∑ j ∈ s, P ◁ g j 
goal: CategoryTheory.MonoidalCategory.whiskerLeft P (∑ j ∈ s, g j) =
  ∑ j ∈ s, CategoryTheory.MonoidalCategory.whiskerLeft P (g j)

full_name: CategoryTheory.sum_whiskerRight
code: theorem sum_whiskerRight {Q R : C} {J : Type*} (s : Finset J) (g : J → (Q ⟶ R)) (P : C) :
    (∑ j ∈ s, g j) ▷ P = ∑ j ∈ s, g j ▷ P 
goal: CategoryTheory.MonoidalCategory.whiskerRight (∑ j ∈ s, g j) P =
  ∑ j ∈ s, CategoryTheory.MonoidalCategory.whiskerRight (g j) P

full_name: CategoryTheory.tensor_sum
code: theorem tensor_sum {P Q R S : C} {J : Type*} (s : Finset J) (f : P ⟶ Q) (g : J → (R ⟶ S)) :
    (f ⊗ ∑ j ∈ s, g j) = ∑ j ∈ s, f ⊗ g j 
goal: CategoryTheory.MonoidalCategory.tensorHom f (∑ j ∈ s, g j) = ∑ j ∈ s, CategoryTheory.MonoidalCategory.tensorHom f (g j)

full_name: CategoryTheory.sum_tensor
code: theorem sum_tensor {P Q R S : C} {J : Type*} (s : Finset J) (f : P ⟶ Q) (g : J → (R ⟶ S)) :
    (∑ j ∈ s, g j) ⊗ f = ∑ j ∈ s, g j ⊗ f 
goal: CategoryTheory.MonoidalCategory.tensorHom (∑ j ∈ s, g j) f = ∑ j ∈ s, CategoryTheory.MonoidalCategory.tensorHom (g j) f

full_name: CategoryTheory.instPreservesFiniteBiproductsTensorLeft
code: instance (X : C) : PreservesFiniteBiproducts (tensorLeft X) 
goal: CategoryTheory.Limits.PreservesFiniteBiproducts (CategoryTheory.MonoidalCategory.tensorLeft X)

full_name: CategoryTheory.instPreservesFiniteBiproductsTensorRight
code: instance (X : C) : PreservesFiniteBiproducts (tensorRight X) 
goal: CategoryTheory.Limits.PreservesFiniteBiproducts (CategoryTheory.MonoidalCategory.tensorRight X)

full_name: CategoryTheory.leftDistributor
code: /-- The isomorphism showing how tensor product on the left distributes over direct sums. -/
def leftDistributor {J : Type} [Fintype J] (X : C) (f : J → C) : X ⊗ ⨁ f ≅ ⨁ fun j => X ⊗ f j 
goal: CategoryTheory.MonoidalCategory.tensorObj X (⨁ f) ≅ ⨁ fun j => CategoryTheory.MonoidalCategory.tensorObj X (f j)

full_name: CategoryTheory.leftDistributor_hom
code: theorem leftDistributor_hom {J : Type} [Fintype J] (X : C) (f : J → C) :
    (leftDistributor X f).hom =
      ∑ j : J, (X ◁ biproduct.π f j) ≫ biproduct.ι (fun j => X ⊗ f j) j 
goal: (CategoryTheory.leftDistributor X f).hom =
  ∑ j : J,
    CategoryTheory.CategoryStruct.comp
      (CategoryTheory.MonoidalCategory.whiskerLeft X (CategoryTheory.Limits.biproduct.π f j))
      (CategoryTheory.Limits.biproduct.ι (fun j => CategoryTheory.MonoidalCategory.tensorObj X (f j)) j)

full_name: CategoryTheory.leftDistributor_inv
code: theorem leftDistributor_inv {J : Type} [Fintype J] (X : C) (f : J → C) :
    (leftDistributor X f).inv = ∑ j : J, biproduct.π _ j ≫ (X ◁ biproduct.ι f j) 
goal: (CategoryTheory.leftDistributor X f).inv =
  ∑ j : J,
    CategoryTheory.CategoryStruct.comp
      (CategoryTheory.Limits.biproduct.π (fun j => CategoryTheory.MonoidalCategory.tensorObj X (f j)) j)
      (CategoryTheory.MonoidalCategory.whiskerLeft X (CategoryTheory.Limits.biproduct.ι f j))

full_name: CategoryTheory.leftDistributor_hom_comp_biproduct_π
code: @[reassoc (attr := simp)]
theorem leftDistributor_hom_comp_biproduct_π {J : Type} [Fintype J] (X : C) (f : J → C) (j : J) :
    (leftDistributor X f).hom ≫ biproduct.π _ j = X ◁ biproduct.π _ j 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.leftDistributor X f).hom
    (CategoryTheory.Limits.biproduct.π (fun j => CategoryTheory.MonoidalCategory.tensorObj X (f j)) j) =
  CategoryTheory.MonoidalCategory.whiskerLeft X (CategoryTheory.Limits.biproduct.π f j)

full_name: CategoryTheory.biproduct_ι_comp_leftDistributor_hom
code: @[reassoc (attr := simp)]
theorem biproduct_ι_comp_leftDistributor_hom {J : Type} [Fintype J] (X : C) (f : J → C) (j : J) :
    (X ◁ biproduct.ι _ j) ≫ (leftDistributor X f).hom = biproduct.ι (fun j => X ⊗ f j) j 
goal: CategoryTheory.CategoryStruct.comp
    (CategoryTheory.MonoidalCategory.whiskerLeft X (CategoryTheory.Limits.biproduct.ι f j))
    (CategoryTheory.leftDistributor X f).hom =
  CategoryTheory.Limits.biproduct.ι (fun j => CategoryTheory.MonoidalCategory.tensorObj X (f j)) j

full_name: CategoryTheory.leftDistributor_inv_comp_biproduct_π
code: @[reassoc (attr := simp)]
theorem leftDistributor_inv_comp_biproduct_π {J : Type} [Fintype J] (X : C) (f : J → C) (j : J) :
    (leftDistributor X f).inv ≫ (X ◁ biproduct.π _ j) = biproduct.π _ j 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.leftDistributor X f).inv
    (CategoryTheory.MonoidalCategory.whiskerLeft X (CategoryTheory.Limits.biproduct.π f j)) =
  CategoryTheory.Limits.biproduct.π (fun j => CategoryTheory.MonoidalCategory.tensorObj X (f j)) j

full_name: CategoryTheory.biproduct_ι_comp_leftDistributor_inv
code: @[reassoc (attr := simp)]
theorem biproduct_ι_comp_leftDistributor_inv {J : Type} [Fintype J] (X : C) (f : J → C) (j : J) :
    biproduct.ι _ j ≫ (leftDistributor X f).inv = X ◁ biproduct.ι _ j 
goal: CategoryTheory.CategoryStruct.comp
    (CategoryTheory.Limits.biproduct.ι (fun j => CategoryTheory.MonoidalCategory.tensorObj X (f j)) j)
    (CategoryTheory.leftDistributor X f).inv =
  CategoryTheory.MonoidalCategory.whiskerLeft X (CategoryTheory.Limits.biproduct.ι f j)

full_name: CategoryTheory.leftDistributor_assoc
code: theorem leftDistributor_assoc {J : Type} [Fintype J] (X Y : C) (f : J → C) :
    (asIso (𝟙 X) ⊗ leftDistributor Y f) ≪≫ leftDistributor X _ =
      (α_ X Y (⨁ f)).symm ≪≫ leftDistributor (X ⊗ Y) f ≪≫ biproduct.mapIso fun j => α_ X Y _ 
goal: ((CategoryTheory.asIso (CategoryTheory.CategoryStruct.id X) ⊗ CategoryTheory.leftDistributor Y f) ≪≫
    CategoryTheory.leftDistributor X fun j => CategoryTheory.MonoidalCategory.tensorObj Y (f j)) =
  (CategoryTheory.MonoidalCategory.associator X Y (⨁ f)).symm ≪≫
    CategoryTheory.leftDistributor (CategoryTheory.MonoidalCategory.tensorObj X Y) f ≪≫
      CategoryTheory.Limits.biproduct.mapIso fun j => CategoryTheory.MonoidalCategory.associator X Y (f j)

full_name: CategoryTheory.rightDistributor
code: /-- The isomorphism showing how tensor product on the right distributes over direct sums. -/
def rightDistributor {J : Type} [Fintype J] (f : J → C) (X : C) : (⨁ f) ⊗ X ≅ ⨁ fun j => f j ⊗ X 
goal: CategoryTheory.MonoidalCategory.tensorObj (⨁ f) X ≅ ⨁ fun j => CategoryTheory.MonoidalCategory.tensorObj (f j) X

full_name: CategoryTheory.rightDistributor_hom
code: theorem rightDistributor_hom {J : Type} [Fintype J] (f : J → C) (X : C) :
    (rightDistributor f X).hom =
      ∑ j : J, (biproduct.π f j ▷ X) ≫ biproduct.ι (fun j => f j ⊗ X) j 
goal: (CategoryTheory.rightDistributor f X).hom =
  ∑ j : J,
    CategoryTheory.CategoryStruct.comp
      (CategoryTheory.MonoidalCategory.whiskerRight (CategoryTheory.Limits.biproduct.π f j) X)
      (CategoryTheory.Limits.biproduct.ι (fun j => CategoryTheory.MonoidalCategory.tensorObj (f j) X) j)

full_name: CategoryTheory.rightDistributor_inv
code: theorem rightDistributor_inv {J : Type} [Fintype J] (f : J → C) (X : C) :
    (rightDistributor f X).inv = ∑ j : J, biproduct.π _ j ≫ (biproduct.ι f j ▷ X) 
goal: (CategoryTheory.rightDistributor f X).inv =
  ∑ j : J,
    CategoryTheory.CategoryStruct.comp
      (CategoryTheory.Limits.biproduct.π (fun j => CategoryTheory.MonoidalCategory.tensorObj (f j) X) j)
      (CategoryTheory.MonoidalCategory.whiskerRight (CategoryTheory.Limits.biproduct.ι f j) X)

full_name: CategoryTheory.rightDistributor_hom_comp_biproduct_π
code: @[reassoc (attr := simp)]
theorem rightDistributor_hom_comp_biproduct_π {J : Type} [Fintype J] (f : J → C) (X : C) (j : J) :
    (rightDistributor f X).hom ≫ biproduct.π _ j = biproduct.π _ j ▷ X 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.rightDistributor f X).hom
    (CategoryTheory.Limits.biproduct.π (fun j => CategoryTheory.MonoidalCategory.tensorObj (f j) X) j) =
  CategoryTheory.MonoidalCategory.whiskerRight (CategoryTheory.Limits.biproduct.π f j) X

full_name: CategoryTheory.biproduct_ι_comp_rightDistributor_hom
code: @[reassoc (attr := simp)]
theorem biproduct_ι_comp_rightDistributor_hom {J : Type} [Fintype J] (f : J → C) (X : C) (j : J) :
    (biproduct.ι _ j ▷ X) ≫ (rightDistributor f X).hom = biproduct.ι (fun j => f j ⊗ X) j 
goal: CategoryTheory.CategoryStruct.comp
    (CategoryTheory.MonoidalCategory.whiskerRight (CategoryTheory.Limits.biproduct.ι f j) X)
    (CategoryTheory.rightDistributor f X).hom =
  CategoryTheory.Limits.biproduct.ι (fun j => CategoryTheory.MonoidalCategory.tensorObj (f j) X) j

full_name: CategoryTheory.rightDistributor_inv_comp_biproduct_π
code: @[reassoc (attr := simp)]
theorem rightDistributor_inv_comp_biproduct_π {J : Type} [Fintype J] (f : J → C) (X : C) (j : J) :
    (rightDistributor f X).inv ≫ (biproduct.π _ j ▷ X) = biproduct.π _ j 
goal: CategoryTheory.CategoryStruct.comp (CategoryTheory.rightDistributor f X).inv
    (CategoryTheory.MonoidalCategory.whiskerRight (CategoryTheory.Limits.biproduct.π f j) X) =
  CategoryTheory.Limits.biproduct.π (fun j => CategoryTheory.MonoidalCategory.tensorObj (f j) X) j

full_name: CategoryTheory.biproduct_ι_comp_rightDistributor_inv
code: @[reassoc (attr := simp)]
theorem biproduct_ι_comp_rightDistributor_inv {J : Type} [Fintype J] (f : J → C) (X : C) (j : J) :
    biproduct.ι _ j ≫ (rightDistributor f X).inv = biproduct.ι _ j ▷ X 
goal: CategoryTheory.CategoryStruct.comp
    (CategoryTheory.Limits.biproduct.ι (fun j => CategoryTheory.MonoidalCategory.tensorObj (f j) X) j)
    (CategoryTheory.rightDistributor f X).inv =
  CategoryTheory.MonoidalCategory.whiskerRight (CategoryTheory.Limits.biproduct.ι f j) X

full_name: CategoryTheory.rightDistributor_assoc
code: theorem rightDistributor_assoc {J : Type} [Fintype J] (f : J → C) (X Y : C) :
    (rightDistributor f X ⊗ asIso (𝟙 Y)) ≪≫ rightDistributor _ Y =
      α_ (⨁ f) X Y ≪≫ rightDistributor f (X ⊗ Y) ≪≫ biproduct.mapIso fun j => (α_ _ X Y).symm 
goal: (CategoryTheory.rightDistributor f X ⊗ CategoryTheory.asIso (CategoryTheory.CategoryStruct.id Y)) ≪≫
    CategoryTheory.rightDistributor (fun j => CategoryTheory.MonoidalCategory.tensorObj (f j) X) Y =
  CategoryTheory.MonoidalCategory.associator (⨁ f) X Y ≪≫
    CategoryTheory.rightDistributor f (CategoryTheory.MonoidalCategory.tensorObj X Y) ≪≫
      CategoryTheory.Limits.biproduct.mapIso fun j => (CategoryTheory.MonoidalCategory.associator (f j) X Y).symm

full_name: CategoryTheory.leftDistributor_rightDistributor_assoc
code: theorem leftDistributor_rightDistributor_assoc {J : Type _} [Fintype J]
    (X : C) (f : J → C) (Y : C) :
    (leftDistributor X f ⊗ asIso (𝟙 Y)) ≪≫ rightDistributor _ Y =
      α_ X (⨁ f) Y ≪≫
        (asIso (𝟙 X) ⊗ rightDistributor _ Y) ≪≫
          leftDistributor X _ ≪≫ biproduct.mapIso fun j => (α_ _ _ _).symm 
goal: (CategoryTheory.leftDistributor X f ⊗ CategoryTheory.asIso (CategoryTheory.CategoryStruct.id Y)) ≪≫
    CategoryTheory.rightDistributor (fun j => CategoryTheory.MonoidalCategory.tensorObj X (f j)) Y =
  CategoryTheory.MonoidalCategory.associator X (⨁ f) Y ≪≫
    (CategoryTheory.asIso (CategoryTheory.CategoryStruct.id X) ⊗ CategoryTheory.rightDistributor f Y) ≪≫
      (CategoryTheory.leftDistributor X fun j => CategoryTheory.MonoidalCategory.tensorObj (f j) Y) ≪≫
        CategoryTheory.Limits.biproduct.mapIso fun j => (CategoryTheory.MonoidalCategory.associator X (f j) Y).symm

full_name: CategoryTheory.leftDistributor_ext_left
code: @[ext]
theorem leftDistributor_ext_left {J : Type} [Fintype J] {X Y : C} {f : J → C} {g h : X ⊗ ⨁ f ⟶ Y}
    (w : ∀ j, (X ◁ biproduct.ι f j) ≫ g = (X ◁ biproduct.ι f j) ≫ h) : g = h 
goal: g = h

full_name: CategoryTheory.leftDistributor_ext_right
code: @[ext]
theorem leftDistributor_ext_right {J : Type} [Fintype J] {X Y : C} {f : J → C} {g h : X ⟶ Y ⊗ ⨁ f}
    (w : ∀ j, g ≫ (Y ◁ biproduct.π f j) = h ≫ (Y ◁ biproduct.π f j)) : g = h 
goal: g = h

full_name: CategoryTheory.leftDistributor_ext₂_left
code: @[ext]
theorem leftDistributor_ext₂_left {J : Type} [Fintype J]
    {X Y Z : C} {f : J → C} {g h : X ⊗ (Y ⊗ ⨁ f) ⟶ Z}
    (w : ∀ j, (X ◁ (Y ◁ biproduct.ι f j)) ≫ g = (X ◁ (Y ◁ biproduct.ι f j)) ≫ h) :
    g = h 
goal: g = h

full_name: CategoryTheory.leftDistributor_ext₂_right
code: @[ext]
theorem leftDistributor_ext₂_right {J : Type} [Fintype J]
    {X Y Z : C} {f : J → C} {g h : X ⟶ Y ⊗ (Z ⊗ ⨁ f)}
    (w : ∀ j, g ≫ (Y ◁ (Z ◁ biproduct.π f j)) = h ≫ (Y ◁ (Z ◁ biproduct.π f j))) :
    g = h 
goal: g = h

full_name: CategoryTheory.rightDistributor_ext_left
code: @[ext]
theorem rightDistributor_ext_left {J : Type} [Fintype J]
    {f : J → C} {X Y : C} {g h : (⨁ f) ⊗ X ⟶ Y}
    (w : ∀ j, (biproduct.ι f j ▷ X) ≫ g = (biproduct.ι f j ▷ X) ≫ h) : g = h 
goal: g = h

full_name: CategoryTheory.rightDistributor_ext_right
code: @[ext]
theorem rightDistributor_ext_right {J : Type} [Fintype J]
    {f : J → C} {X Y : C} {g h : X ⟶ (⨁ f) ⊗ Y}
    (w : ∀ j, g ≫ (biproduct.π f j ▷ Y) = h ≫ (biproduct.π f j ▷ Y)) : g = h 
goal: g = h

full_name: CategoryTheory.rightDistributor_ext₂_left
code: @[ext]
theorem rightDistributor_ext₂_left {J : Type} [Fintype J]
    {f : J → C} {X Y Z : C} {g h : ((⨁ f) ⊗ X) ⊗ Y ⟶ Z}
    (w : ∀ j, ((biproduct.ι f j ▷ X) ▷ Y) ≫ g = ((biproduct.ι f j ▷ X) ▷ Y) ≫ h) :
    g = h 
goal: g = h

full_name: CategoryTheory.rightDistributor_ext₂_right
code: @[ext]
theorem rightDistributor_ext₂_right {J : Type} [Fintype J]
    {f : J → C} {X Y Z : C} {g h : X ⟶ ((⨁ f) ⊗ Y) ⊗ Z}
    (w : ∀ j, g ≫ ((biproduct.π f j ▷ Y) ▷ Z) = h ≫ ((biproduct.π f j ▷ Y) ▷ Z)) :
    g = h 
goal: g = h