Documentation

Mathlib.CategoryTheory.Preadditive.Biproducts

Basic facts about biproducts in preadditive categories. #

In (or between) preadditive categories,

There are connections between this material and the special case of the category whose morphisms are matrices over a ring, in particular the Schur complement (see Mathlib.LinearAlgebra.Matrix.SchurComplement). In particular, the declarations CategoryTheory.Biprod.isoElim, CategoryTheory.Biprod.gaussian and Matrix.invertibleOfFromBlocks₁₁Invertible are all closely related.

def CategoryTheory.Limits.isBilimitOfTotal {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] {f : JC} (b : Bicone f) (total : j : J, CategoryStruct.comp (b.π j) (b.ι j) = CategoryStruct.id b.pt) :

In a preadditive category, we can construct a biproduct for f : J → C from any bicone b for f satisfying total : ∑ j : J, b.π j ≫ b.ι j = 𝟙 b.X.

(That is, such a bicone is a limit cone and a colimit cocone.)

Equations
  • One or more equations did not get rendered due to their size.
theorem CategoryTheory.Limits.IsBilimit.total {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] {f : JC} {b : Bicone f} (i : b.IsBilimit) :
j : J, CategoryStruct.comp (b.π j) (b.ι j) = CategoryStruct.id b.pt
theorem CategoryTheory.Limits.hasBiproduct_of_total {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] {f : JC} (b : Bicone f) (total : j : J, CategoryStruct.comp (b.π j) (b.ι j) = CategoryStruct.id b.pt) :

In a preadditive category, we can construct a biproduct for f : J → C from any bicone b for f satisfying total : ∑ j : J, b.π j ≫ b.ι j = 𝟙 b.X.

(That is, such a bicone is a limit cone and a colimit cocone.)

def CategoryTheory.Limits.isBilimitOfIsLimit {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] {f : JC} (t : Bicone f) (ht : IsLimit t.toCone) :

In a preadditive category, any finite bicone which is a limit cone is in fact a bilimit bicone.

Equations

We can turn any limit cone over a pair into a bilimit bicone.

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

In a preadditive category, any finite bicone which is a colimit cocone is in fact a bilimit bicone.

Equations

We can turn any limit cone over a pair into a bilimit bicone.

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

In a preadditive category, if the product over f : J → C exists, then the biproduct over f exists.

In a preadditive category, if the coproduct over f : J → C exists, then the biproduct over f exists.

A preadditive category with finite products has finite biproducts.

A preadditive category with finite coproducts has finite biproducts.

@[simp]
theorem CategoryTheory.Limits.biproduct.total {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] {f : JC} [HasBiproduct f] :
j : J, CategoryStruct.comp (π f j) (ι f j) = CategoryStruct.id ( f)

In any preadditive category, any biproduct satisfies ∑ j : J, biproduct.π f j ≫ biproduct.ι f j = 𝟙 (⨁ f)

theorem CategoryTheory.Limits.biproduct.lift_eq {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] {f : JC} [HasBiproduct f] {T : C} {g : (j : J) → T f j} :
lift g = j : J, CategoryStruct.comp (g j) (ι f j)
theorem CategoryTheory.Limits.biproduct.desc_eq {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] {f : JC} [HasBiproduct f] {T : C} {g : (j : J) → f j T} :
desc g = j : J, CategoryStruct.comp (π f j) (g j)
theorem CategoryTheory.Limits.biproduct.lift_desc {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] {f : JC} [HasBiproduct f] {T U : C} {g : (j : J) → T f j} {h : (j : J) → f j U} :
CategoryStruct.comp (lift g) (desc h) = j : J, CategoryStruct.comp (g j) (h j)
theorem CategoryTheory.Limits.biproduct.lift_desc_assoc {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] {f : JC} [HasBiproduct f] {T U : C} {g : (j : J) → T f j} {h : (j : J) → f j U} {Z : C} (h✝ : U Z) :
theorem CategoryTheory.Limits.biproduct.map_eq {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] [HasFiniteBiproducts C] {f g : JC} {h : (j : J) → f j g j} :
map h = j : J, CategoryStruct.comp (π f j) (CategoryStruct.comp (h j) (ι g j))
theorem CategoryTheory.Limits.biproduct.lift_matrix {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] {K : Type} [Finite K] [HasFiniteBiproducts C] {f : JC} {g : KC} {P : C} (x : (j : J) → P f j) (m : (j : J) → (k : K) → f j g k) :
CategoryStruct.comp (lift x) (matrix m) = lift fun (k : K) => j : J, CategoryStruct.comp (x j) (m j k)
theorem CategoryTheory.Limits.biproduct.lift_matrix_assoc {C : Type u} [Category.{v, u} C] [Preadditive C] {J : Type} [Fintype J] {K : Type} [Finite K] [HasFiniteBiproducts C] {f : JC} {g : KC} {P : C} (x : (j : J) → P f j) (m : (j : J) → (k : K) → f j g k) {Z : C} (h : g Z) :
CategoryStruct.comp (lift x) (CategoryStruct.comp (matrix m) h) = CategoryStruct.comp (lift fun (k : K) => j : J, CategoryStruct.comp (x j) (m j k)) h
theorem CategoryTheory.Limits.biproduct.matrix_desc {C : Type u} [Category.{v, u} C] [Preadditive C] {J K : Type} [Finite J] [HasFiniteBiproducts C] [Fintype K] {f : JC} {g : KC} (m : (j : J) → (k : K) → f j g k) {P : C} (x : (k : K) → g k P) :
CategoryStruct.comp (matrix m) (desc x) = desc fun (j : J) => k : K, CategoryStruct.comp (m j k) (x k)
theorem CategoryTheory.Limits.biproduct.matrix_desc_assoc {C : Type u} [Category.{v, u} C] [Preadditive C] {J K : Type} [Finite J] [HasFiniteBiproducts C] [Fintype K] {f : JC} {g : KC} (m : (j : J) → (k : K) → f j g k) {P : C} (x : (k : K) → g k P) {Z : C} (h : P Z) :
CategoryStruct.comp (matrix m) (CategoryStruct.comp (desc x) h) = CategoryStruct.comp (desc fun (j : J) => k : K, CategoryStruct.comp (m j k) (x k)) h
theorem CategoryTheory.Limits.biproduct.matrix_map {C : Type u} [Category.{v, u} C] [Preadditive C] {J K : Type} [Finite J] [HasFiniteBiproducts C] [Finite K] {f : JC} {g h : KC} (m : (j : J) → (k : K) → f j g k) (n : (k : K) → g k h k) :
CategoryStruct.comp (matrix m) (map n) = matrix fun (j : J) (k : K) => CategoryStruct.comp (m j k) (n k)
theorem CategoryTheory.Limits.biproduct.matrix_map_assoc {C : Type u} [Category.{v, u} C] [Preadditive C] {J K : Type} [Finite J] [HasFiniteBiproducts C] [Finite K] {f : JC} {g h : KC} (m : (j : J) → (k : K) → f j g k) (n : (k : K) → g k h k) {Z : C} (h✝ : h Z) :
CategoryStruct.comp (matrix m) (CategoryStruct.comp (map n) h✝) = CategoryStruct.comp (matrix fun (j : J) (k : K) => CategoryStruct.comp (m j k) (n k)) h✝
theorem CategoryTheory.Limits.biproduct.map_matrix {C : Type u} [Category.{v, u} C] [Preadditive C] {J K : Type} [Finite J] [HasFiniteBiproducts C] [Finite K] {f g : JC} {h : KC} (m : (k : J) → f k g k) (n : (j : J) → (k : K) → g j h k) :
CategoryStruct.comp (map m) (matrix n) = matrix fun (j : J) (k : K) => CategoryStruct.comp (m j) (n j k)
theorem CategoryTheory.Limits.biproduct.map_matrix_assoc {C : Type u} [Category.{v, u} C] [Preadditive C] {J K : Type} [Finite J] [HasFiniteBiproducts C] [Finite K] {f g : JC} {h : KC} (m : (k : J) → f k g k) (n : (j : J) → (k : K) → g j h k) {Z : C} (h✝ : h Z) :
CategoryStruct.comp (map m) (CategoryStruct.comp (matrix n) h✝) = CategoryStruct.comp (matrix fun (j : J) (k : K) => CategoryStruct.comp (m j) (n j k)) h✝
def CategoryTheory.Limits.biproduct.reindex {C : Type u} [Category.{v, u} C] [Preadditive C] {β γ : Type} [Finite β] (ε : β γ) (f : γC) [HasBiproduct f] [HasBiproduct (f ε)] :
f ε f

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

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Limits.biproduct.reindex_hom {C : Type u} [Category.{v, u} C] [Preadditive C] {β γ : Type} [Finite β] (ε : β γ) (f : γC) [HasBiproduct f] [HasBiproduct (f ε)] :
(reindex ε f).hom = desc fun (b : β) => ι f (ε b)
@[simp]
theorem CategoryTheory.Limits.biproduct.reindex_inv {C : Type u} [Category.{v, u} C] [Preadditive C] {β γ : Type} [Finite β] (ε : β γ) (f : γC) [HasBiproduct f] [HasBiproduct (f ε)] :
(reindex ε f).inv = lift fun (b : β) => π f (ε b)

In a preadditive category, we can construct a binary biproduct for X Y : C from any binary bicone b satisfying total : b.fst ≫ b.inl + b.snd ≫ b.inr = 𝟙 b.X.

(That is, such a bicone is a limit cone and a colimit cocone.)

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

In a preadditive category, we can construct a binary biproduct for X Y : C from any binary bicone b satisfying total : b.fst ≫ b.inl + b.snd ≫ b.inr = 𝟙 b.X.

(That is, such a bicone is a limit cone and a colimit cocone.)

We can turn any limit cone over a pair into a bicone.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
@[simp]
@[simp]

In a preadditive category, any binary bicone which is a limit cone is in fact a bilimit bicone.

Equations

In a preadditive category, if the product of X and Y exists, then the binary biproduct of X and Y exists.

In a preadditive category, if all binary products exist, then all binary biproducts exist.

We can turn any colimit cocone over a pair into a bicone.

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

In a preadditive category, any binary bicone which is a colimit cocone is in fact a bilimit bicone.

Equations

We can turn any colimit cocone over a pair into a bilimit bicone.

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

In a preadditive category, if the coproduct of X and Y exists, then the binary biproduct of X and Y exists.

In a preadditive category, if all binary coproducts exist, then all binary biproducts exist.

@[simp]

In any preadditive category, any binary biproduct satisfies biprod.fst ≫ biprod.inl + biprod.snd ≫ biprod.inr = 𝟙 (X ⊞ Y).

@[simp]
theorem CategoryTheory.Limits.biprod.lift_desc {C : Type u} [Category.{v, u} C] [Preadditive C] {X Y : C} [HasBinaryBiproduct X Y] {T U : C} {f : T X} {g : T Y} {h : X U} {i : Y U} :
@[simp]
theorem CategoryTheory.Limits.biprod.lift_desc_assoc {C : Type u} [Category.{v, u} C] [Preadditive C] {X Y : C} [HasBinaryBiproduct X Y] {T U : C} {f : T X} {g : T Y} {h : X U} {i : Y U} {Z : C} (h✝ : U Z) :
theorem CategoryTheory.Limits.biprod.decomp_hom_to {C : Type u} [Category.{v, u} C] [Preadditive C] {X Y : C} [HasBinaryBiproduct X Y] {Z : C} (f : Z X Y) :
∃ (f₁ : Z X) (f₂ : Z Y), f = CategoryStruct.comp f₁ inl + CategoryStruct.comp f₂ inr
theorem CategoryTheory.Limits.biprod.decomp_hom_from {C : Type u} [Category.{v, u} C] [Preadditive C] {X Y : C} [HasBinaryBiproduct X Y] {Z : C} (f : X Y Z) :
∃ (f₁ : X Z) (f₂ : Y Z), f = CategoryStruct.comp fst f₁ + CategoryStruct.comp snd f₂

Every split mono f with a cokernel induces a binary bicone with f as its inl and the cokernel map as its snd. We will show in is_bilimit_binary_bicone_of_split_mono_of_cokernel that this binary bicone is in fact already a biproduct.

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

The bicone constructed in binaryBiconeOfSplitMonoOfCokernel is a bilimit. This is a version of the splitting lemma that holds in all preadditive categories.

Equations

If b is a binary bicone such that b.inl is a kernel of b.snd, then b is a bilimit bicone.

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

If b is a binary bicone such that b.inr is a kernel of b.fst, then b is a bilimit bicone.

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

If b is a binary bicone such that b.fst is a cokernel of b.inr, then b is a bilimit bicone.

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

If b is a binary bicone such that b.snd is a cokernel of b.inl, then b is a bilimit bicone.

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

Every split epi f with a kernel induces a binary bicone with f as its snd and the kernel map as its inl. We will show in binary_bicone_of_is_split_mono_of_cokernel that this binary bicone is in fact already a biproduct.

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

The bicone constructed in binaryBiconeOfIsSplitEpiOfKernel is a bilimit. This is a version of the splitting lemma that holds in all preadditive categories.

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

The existence of binary biproducts implies that there is at most one preadditive structure.

The existence of binary biproducts implies that there is at most one preadditive structure.

theorem CategoryTheory.Preadditive.ext {C : Type u} {inst✝ : Category.{v, u} C} {x y : Preadditive C} (homGroup : homGroup = homGroup) :
x = y

The existence of binary biproducts implies that there is at most one preadditive structure.

def CategoryTheory.Biprod.ofComponents {C : Type u} [Category.{v, u} C] [Preadditive C] [Limits.HasBinaryBiproducts C] {X₁ X₂ Y₁ Y₂ : C} (f₁₁ : X₁ Y₁) (f₁₂ : X₁ Y₂) (f₂₁ : X₂ Y₁) (f₂₂ : X₂ Y₂) :
X₁ X₂ Y₁ Y₂

The "matrix" morphism X₁ ⊞ X₂ ⟶ Y₁ ⊞ Y₂ with specified components.

Equations
  • One or more equations did not get rendered due to their size.
@[simp]
theorem CategoryTheory.Biprod.inl_ofComponents {C : Type u} [Category.{v, u} C] [Preadditive C] [Limits.HasBinaryBiproducts C] {X₁ X₂ Y₁ Y₂ : C} (f₁₁ : X₁ Y₁) (f₁₂ : X₁ Y₂) (f₂₁ : X₂ Y₁) (f₂₂ : X₂ Y₂) :
@[simp]
theorem CategoryTheory.Biprod.inr_ofComponents {C : Type u} [Category.{v, u} C] [Preadditive C] [Limits.HasBinaryBiproducts C] {X₁ X₂ Y₁ Y₂ : C} (f₁₁ : X₁ Y₁) (f₁₂ : X₁ Y₂) (f₂₁ : X₂ Y₁) (f₂₂ : X₂ Y₂) :
@[simp]
theorem CategoryTheory.Biprod.ofComponents_fst {C : Type u} [Category.{v, u} C] [Preadditive C] [Limits.HasBinaryBiproducts C] {X₁ X₂ Y₁ Y₂ : C} (f₁₁ : X₁ Y₁) (f₁₂ : X₁ Y₂) (f₂₁ : X₂ Y₁) (f₂₂ : X₂ Y₂) :
@[simp]
theorem CategoryTheory.Biprod.ofComponents_snd {C : Type u} [Category.{v, u} C] [Preadditive C] [Limits.HasBinaryBiproducts C] {X₁ X₂ Y₁ Y₂ : C} (f₁₁ : X₁ Y₁) (f₁₂ : X₁ Y₂) (f₂₁ : X₂ Y₁) (f₂₂ : X₂ Y₂) :
@[simp]
theorem CategoryTheory.Biprod.ofComponents_comp {C : Type u} [Category.{v, u} C] [Preadditive C] [Limits.HasBinaryBiproducts C] {X₁ X₂ Y₁ Y₂ Z₁ Z₂ : C} (f₁₁ : X₁ Y₁) (f₁₂ : X₁ Y₂) (f₂₁ : X₂ Y₁) (f₂₂ : X₂ Y₂) (g₁₁ : Y₁ Z₁) (g₁₂ : Y₁ Z₂) (g₂₁ : Y₂ Z₁) (g₂₂ : Y₂ Z₂) :
CategoryStruct.comp (ofComponents f₁₁ f₁₂ f₂₁ f₂₂) (ofComponents g₁₁ g₁₂ g₂₁ g₂₂) = ofComponents (CategoryStruct.comp f₁₁ g₁₁ + CategoryStruct.comp f₁₂ g₂₁) (CategoryStruct.comp f₁₁ g₁₂ + CategoryStruct.comp f₁₂ g₂₂) (CategoryStruct.comp f₂₁ g₁₁ + CategoryStruct.comp f₂₂ g₂₁) (CategoryStruct.comp f₂₁ g₁₂ + CategoryStruct.comp f₂₂ g₂₂)
def CategoryTheory.Biprod.unipotentUpper {C : Type u} [Category.{v, u} C] [Preadditive C] [Limits.HasBinaryBiproducts C] {X₁ X₂ : C} (r : X₁ X₂) :
X₁ X₂ X₁ X₂

The unipotent upper triangular matrix

(1 r)
(0 1)

as an isomorphism.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Biprod.unipotentLower {C : Type u} [Category.{v, u} C] [Preadditive C] [Limits.HasBinaryBiproducts C] {X₁ X₂ : C} (r : X₂ X₁) :
X₁ X₂ X₁ X₂

The unipotent lower triangular matrix

(1 0)
(r 1)

as an isomorphism.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Biprod.gaussian' {C : Type u} [Category.{v, u} C] [Preadditive C] [Limits.HasBinaryBiproducts C] {X₁ X₂ Y₁ Y₂ : C} (f₁₁ : X₁ Y₁) (f₁₂ : X₁ Y₂) (f₂₁ : X₂ Y₁) (f₂₂ : X₂ Y₂) [IsIso f₁₁] :
(L : X₁ X₂ X₁ X₂) ×' (R : Y₁ Y₂ Y₁ Y₂) ×' (g₂₂ : X₂ Y₂) ×' CategoryStruct.comp L.hom (CategoryStruct.comp (ofComponents f₁₁ f₁₂ f₂₁ f₂₂) R.hom) = Limits.biprod.map f₁₁ g₂₂

If f is a morphism X₁ ⊞ X₂ ⟶ Y₁ ⊞ Y₂ whose X₁ ⟶ Y₁ entry is an isomorphism, then we can construct isomorphisms L : X₁ ⊞ X₂ ≅ X₁ ⊞ X₂ and R : Y₁ ⊞ Y₂ ≅ Y₁ ⊞ Y₂ so that L.hom ≫ g ≫ R.hom is diagonal (with X₁ ⟶ Y₁ component still f), via Gaussian elimination.

(This is the version of Biprod.gaussian written in terms of components.)

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Biprod.gaussian {C : Type u} [Category.{v, u} C] [Preadditive C] [Limits.HasBinaryBiproducts C] {X₁ X₂ Y₁ Y₂ : C} (f : X₁ X₂ Y₁ Y₂) [IsIso (CategoryStruct.comp Limits.biprod.inl (CategoryStruct.comp f Limits.biprod.fst))] :
(L : X₁ X₂ X₁ X₂) ×' (R : Y₁ Y₂ Y₁ Y₂) ×' (g₂₂ : X₂ Y₂) ×' CategoryStruct.comp L.hom (CategoryStruct.comp f R.hom) = Limits.biprod.map (CategoryStruct.comp Limits.biprod.inl (CategoryStruct.comp f Limits.biprod.fst)) g₂₂

If f is a morphism X₁ ⊞ X₂ ⟶ Y₁ ⊞ Y₂ whose X₁ ⟶ Y₁ entry is an isomorphism, then we can construct isomorphisms L : X₁ ⊞ X₂ ≅ X₁ ⊞ X₂ and R : Y₁ ⊞ Y₂ ≅ Y₁ ⊞ Y₂ so that L.hom ≫ g ≫ R.hom is diagonal (with X₁ ⟶ Y₁ component still f), via Gaussian elimination.

Equations
  • One or more equations did not get rendered due to their size.
def CategoryTheory.Biprod.isoElim' {C : Type u} [Category.{v, u} C] [Preadditive C] [Limits.HasBinaryBiproducts C] {X₁ X₂ Y₁ Y₂ : C} (f₁₁ : X₁ Y₁) (f₁₂ : X₁ Y₂) (f₂₁ : X₂ Y₁) (f₂₂ : X₂ Y₂) [IsIso f₁₁] [IsIso (ofComponents f₁₁ f₁₂ f₂₁ f₂₂)] :
X₂ Y₂

If X₁ ⊞ X₂ ≅ Y₁ ⊞ Y₂ via a two-by-two matrix whose X₁ ⟶ Y₁ entry is an isomorphism, then we can construct an isomorphism X₂ ≅ Y₂, via Gaussian elimination.

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

If f is an isomorphism X₁ ⊞ X₂ ≅ Y₁ ⊞ Y₂ whose X₁ ⟶ Y₁ entry is an isomorphism, then we can construct an isomorphism X₂ ≅ Y₂, via Gaussian elimination.

Equations
  • One or more equations did not get rendered due to their size.
theorem CategoryTheory.Biproduct.column_nonzero_of_iso' {C : Type u} [Category.{v, u} C] [Preadditive C] {σ τ : Type} [Finite τ] {S : σC} [Limits.HasBiproduct S] {T : τC} [Limits.HasBiproduct T] (s : σ) (f : S T) [IsIso f] :
def CategoryTheory.Biproduct.columnNonzeroOfIso {C : Type u} [Category.{v, u} C] [Preadditive C] {σ τ : Type} [Fintype τ] {S : σC} [Limits.HasBiproduct S] {T : τC} [Limits.HasBiproduct T] (s : σ) (nz : CategoryStruct.id (S s) 0) (f : S T) [IsIso f] :

If f : ⨁ S ⟶ ⨁ T is an isomorphism, and s is a non-trivial summand of the source, then there is some t in the target so that the s, t matrix entry of f is nonzero.

Equations

A functor between preadditive categories that preserves (zero morphisms and) finite biproducts preserves finite products.

A functor between preadditive categories that preserves (zero morphisms and) finite biproducts preserves finite products.

A functor between preadditive categories that preserves (zero morphisms and) finite products preserves finite biproducts.

If the (product-like) biproduct comparison for F and f is a monomorphism, then F preserves the biproduct of f. For the converse, see mapBiproduct.

If the (coproduct-like) biproduct comparison for F and f is an epimorphism, then F preserves the biproduct of F and f. For the converse, see mapBiproduct.

A functor between preadditive categories that preserves (zero morphisms and) finite products preserves finite biproducts.

A functor between preadditive categories that preserves (zero morphisms and) finite biproducts preserves finite coproducts.

A functor between preadditive categories that preserves (zero morphisms and) finite biproducts preserves finite coproducts.

A functor between preadditive categories that preserves (zero morphisms and) finite coproducts preserves finite biproducts.

A functor between preadditive categories that preserves (zero morphisms and) finite coproducts preserves finite biproducts.

A functor between preadditive categories that preserves (zero morphisms and) binary biproducts preserves binary products.

A functor between preadditive categories that preserves (zero morphisms and) binary biproducts preserves binary products.

A functor between preadditive categories that preserves (zero morphisms and) binary products preserves binary biproducts.

If the (product-like) biproduct comparison for F, X and Y is a monomorphism, then F preserves the biproduct of X and Y. For the converse, see map_biprod.

If the (coproduct-like) biproduct comparison for F, X and Y is an epimorphism, then F preserves the biproduct of X and Y. For the converse, see mapBiprod.

A functor between preadditive categories that preserves (zero morphisms and) binary products preserves binary biproducts.

A functor between preadditive categories that preserves (zero morphisms and) binary biproducts preserves binary coproducts.

A functor between preadditive categories that preserves (zero morphisms and) binary biproducts preserves binary coproducts.

A functor between preadditive categories that preserves (zero morphisms and) binary coproducts preserves binary biproducts.

A functor between preadditive categories that preserves (zero morphisms and) binary coproducts preserves binary biproducts.