Built with Alectryon. Bubbles () indicate interactive fragments: hover for details, tap to reveal contents. Use Ctrl+↑Ctrl+↓ to navigate, Ctrl+🖱️ to focus. On Mac, use ⌘ instead of Ctrl.
(** * Biproducts in categories with zero objects
Objects that are simultaneously products and coproducts, fundamental
to additive category theory.
*)
From HoTT Require Import Basics.Overture Basics.Tactics.From HoTT.Categories Require Import Category.Core.From HoTT.Categories.Additive Require Import ZeroObjects.Local Notationfst_type := Basics.Overture.fst.Local Notationsnd_type := Basics.Overture.snd.LocalOpen Scope morphism_scope.(** * Biproduct structures *)(** ** Biproduct data The data of a biproduct consists of an object together with injection and projection morphisms.*)RecordBiproductData {C : PreCategory} (XY : object C) := {
biproduct_obj : object C;
(* Coproduct structure: injections *)
inl : morphism C X biproduct_obj;
inr : morphism C Y biproduct_obj;
(* Product structure: projections *)
outl : morphism C biproduct_obj X;
outr : morphism C biproduct_obj Y
}.Coercionbiproduct_obj : BiproductData >-> object.Arguments biproduct_obj {C X Y} b : rename.Arguments inl {C X Y} b : rename.Arguments inr {C X Y} b : rename.Arguments outl {C X Y} b : rename.Arguments outr {C X Y} b : rename.(** ** Biproduct axioms The axioms that make biproduct data into an actual biproduct. These ensure the projection-injection pairs behave correctly.*)RecordIsBiproduct {C : PreCategory} `{Z : ZeroObject C} {X Y : object C}
(B : BiproductData X Y) := {
(* Projection-injection identities *)
beta_l : outl B o inl B = 1;
beta_r : outr B o inr B = 1;
(* Mixed terms are zero *)
mixed_l : outl B o inr B = zero_morphism Y X;
mixed_r : outr B o inl B = zero_morphism X Y
}.Arguments beta_l {C Z X Y B} i : rename.Arguments beta_r {C Z X Y B} i : rename.Arguments mixed_l {C Z X Y B} i : rename.Arguments mixed_r {C Z X Y B} i : rename.(** ** Universal property of biproducts The universal property states that morphisms into/out of the biproduct are uniquely determined by their components.*)RecordHasBiproductUniversal {C : PreCategory} {XY : object C}
(B : BiproductData X Y) := {
(* Universal property as a coproduct *)
coprod_universal : forall (W : object C)
(f : morphism C X W) (g : morphism C Y W),
Contr {h : morphism C B W &
((h o inl B = f) * (h o inr B = g))};
(* Universal property as a product *)
prod_universal : forall (W : object C)
(f : morphism C W X) (g : morphism C W Y),
Contr {h : morphism C W B &
((outl B o h = f) * (outr B o h = g))}
}.Arguments coprod_universal {C X Y B} u W f g : rename.Arguments prod_universal {C X Y B} u W f g : rename.(** ** Complete biproduct structure A biproduct is biproduct data together with the proof that it satisfies the biproduct axioms and universal property. The zero object is an explicit argument so that instances can be written [Biproduct Z X Y].*)ClassBiproduct {C : PreCategory} (Z : ZeroObject C) (XY : object C) := {
biproduct_data : BiproductData X Y;
biproduct_is : IsBiproduct biproduct_data;
biproduct_universal : HasBiproductUniversal biproduct_data
}.Coercionbiproduct_data : Biproduct >-> BiproductData.Arguments biproduct_data {C Z X Y} b : rename.Arguments biproduct_is {C Z X Y} b : rename.Arguments biproduct_universal {C Z X Y} b : rename.(** * Biproduct operations *)SectionBiproductOperations.Context {C : PreCategory} {Z : ZeroObject C} {XY : object C}.Variable (B : Biproduct Z X Y).(** ** Uniqueness from universal property *)(** The coproduct universal morphism and its properties. *)Definitionbiproduct_coprod_universal (W : object C)
(f : morphism C X W) (g : morphism C Y W)
: {h : morphism C B W & ((h o inl B = f) * (h o inr B = g))}
:= @center _ (coprod_universal (biproduct_universal B) W f g).(** Extract the unique morphism from the coproduct universal property. *)Definitionbiproduct_coprod_mor (W : object C)
(f : morphism C X W) (g : morphism C Y W)
: morphism C B W
:= (biproduct_coprod_universal W f g).1.Definitionbiproduct_coprod_beta_l (W : object C)
(f : morphism C X W) (g : morphism C Y W)
: biproduct_coprod_mor W f g o inl B = f
:= fst_type (biproduct_coprod_universal W f g).2.Definitionbiproduct_coprod_beta_r (W : object C)
(f : morphism C X W) (g : morphism C Y W)
: biproduct_coprod_mor W f g o inr B = g
:= snd_type (biproduct_coprod_universal W f g).2.Definitionbiproduct_coprod_unique (W : object C)
(f : morphism C X W) (g : morphism C Y W)
(h : morphism C B W)
(Hl : h o inl B = f)
(Hr : h o inr B = g)
: h = biproduct_coprod_mor W f g
:= ap pr1 (contr (h; (Hl, Hr)))^.(** The product universal morphism and its properties. *)Definitionbiproduct_prod_universal (W : object C)
(f : morphism C W X) (g : morphism C W Y)
: {h : morphism C W B & ((outl B o h = f) * (outr B o h = g))}
:= @center _ (prod_universal (biproduct_universal B) W f g).(** Extract the unique morphism from the product universal property. *)Definitionbiproduct_prod_mor (W : object C)
(f : morphism C W X) (g : morphism C W Y)
: morphism C W B
:= (biproduct_prod_universal W f g).1.Definitionbiproduct_prod_beta_l (W : object C)
(f : morphism C W X) (g : morphism C W Y)
: outl B o biproduct_prod_mor W f g = f
:= fst_type (biproduct_prod_universal W f g).2.Definitionbiproduct_prod_beta_r (W : object C)
(f : morphism C W X) (g : morphism C W Y)
: outr B o biproduct_prod_mor W f g = g
:= snd_type (biproduct_prod_universal W f g).2.Definitionbiproduct_prod_unique (W : object C)
(f : morphism C W X) (g : morphism C W Y)
(h : morphism C W B)
(Hl : outl B o h = f)
(Hr : outr B o h = g)
: h = biproduct_prod_mor W f g
:= ap pr1 (contr (h; (Hl, Hr)))^.(** Pairing with zero on the right is the left injection composed. *)
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W X
biproduct_prod_mor W h (zero_morphism W Y) = inl B o h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W X
biproduct_prod_mor W h (zero_morphism W Y) = inl B o h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W X
inl B o h = biproduct_prod_mor W h (zero_morphism W Y)
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W X
outl B o (inl B o h) = h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W X
outr B o (inl B o h) = zero_morphism W Y
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W X
outl B o (inl B o h) = h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W X
outl B o inl B o h = h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W X
1 o h = h
apply left_identity.
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W X
outr B o (inl B o h) = zero_morphism W Y
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W X
outr B o inl B o h = zero_morphism W Y
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W X
zero_morphism X Y o h = zero_morphism W Y
apply zero_morphism_left.Qed.(** Pairing with zero on the left is the right injection composed. *)
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W Y
biproduct_prod_mor W (zero_morphism W X) h = inr B o h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W Y
biproduct_prod_mor W (zero_morphism W X) h = inr B o h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W Y
inr B o h = biproduct_prod_mor W (zero_morphism W X) h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W Y
outl B o (inr B o h) = zero_morphism W X
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W Y
outr B o (inr B o h) = h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W Y
outl B o (inr B o h) = zero_morphism W X
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W Y
outl B o inr B o h = zero_morphism W X
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W Y
zero_morphism Y X o h = zero_morphism W X
apply zero_morphism_left.
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W Y
outr B o (inr B o h) = h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W Y
outr B o inr B o h = h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W: C h: morphism C W Y
1 o h = h
apply left_identity.Qed.(** Pairing is natural in the domain. *)
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y V, W: C f: morphism C W X g: morphism C W Y h: morphism C V W
biproduct_prod_mor W f g o h = biproduct_prod_mor V (f o h) (g o h)
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y V, W: C f: morphism C W X g: morphism C W Y h: morphism C V W
biproduct_prod_mor W f g o h = biproduct_prod_mor V (f o h) (g o h)
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y V, W: C f: morphism C W X g: morphism C W Y h: morphism C V W
outl B o (biproduct_prod_mor W f g o h) = f o h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y V, W: C f: morphism C W X g: morphism C W Y h: morphism C V W
outr B o (biproduct_prod_mor W f g o h) = g o h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y V, W: C f: morphism C W X g: morphism C W Y h: morphism C V W
outl B o (biproduct_prod_mor W f g o h) = f o h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y V, W: C f: morphism C W X g: morphism C W Y h: morphism C V W
outl B o biproduct_prod_mor W f g o h = f o h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y V, W: C f: morphism C W X g: morphism C W Y h: morphism C V W
f o h = f o h
reflexivity.
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y V, W: C f: morphism C W X g: morphism C W Y h: morphism C V W
outr B o (biproduct_prod_mor W f g o h) = g o h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y V, W: C f: morphism C W X g: morphism C W Y h: morphism C V W
outr B o biproduct_prod_mor W f g o h = g o h
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y V, W: C f: morphism C W X g: morphism C W Y h: morphism C V W
g o h = g o h
reflexivity.Qed.(** Copairing is natural in the codomain. *)
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W, V: C f: morphism C X W g: morphism C Y W h: morphism C W V
h o biproduct_coprod_mor W f g = biproduct_coprod_mor V (h o f) (h o g)
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W, V: C f: morphism C X W g: morphism C Y W h: morphism C W V
h o biproduct_coprod_mor W f g = biproduct_coprod_mor V (h o f) (h o g)
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W, V: C f: morphism C X W g: morphism C Y W h: morphism C W V
h o biproduct_coprod_mor W f g o inl B = h o f
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W, V: C f: morphism C X W g: morphism C Y W h: morphism C W V
h o biproduct_coprod_mor W f g o inr B = h o g
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W, V: C f: morphism C X W g: morphism C Y W h: morphism C W V
h o biproduct_coprod_mor W f g o inl B = h o f
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W, V: C f: morphism C X W g: morphism C Y W h: morphism C W V
h o (biproduct_coprod_mor W f g o inl B) = h o f
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W, V: C f: morphism C X W g: morphism C Y W h: morphism C W V
h o f = h o f
reflexivity.
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W, V: C f: morphism C X W g: morphism C Y W h: morphism C W V
h o biproduct_coprod_mor W f g o inr B = h o g
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W, V: C f: morphism C X W g: morphism C Y W h: morphism C W V
h o (biproduct_coprod_mor W f g o inr B) = h o g
C: PreCategory Z: ZeroObject C X, Y: C B: Biproduct Z X Y W, V: C f: morphism C X W g: morphism C Y W h: morphism C W V
h o g = h o g
reflexivity.Qed.EndBiproductOperations.Arguments biproduct_prod_mor {C Z X Y} B {W} f g.(** * Functoriality of biproducts *)SectionBiproductFunctoriality.Context {C : PreCategory} {Z : ZeroObject C} {XYX'Y' : object C}
{BXY : Biproduct Z X Y} {BX'Y' : Biproduct Z X' Y'}.(** The morphism between biproducts induced by morphisms of the summands. *)Definitionbiproduct_sum_map
(a : morphism C X X') (b : morphism C Y Y')
: morphism C BXY BX'Y'
:= biproduct_prod_mor BX'Y' (a o outl BXY) (b o outr BXY).(** The biproduct map composed with the left injection is the left summand map. *)
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
biproduct_sum_map a b o inl BXY = inl BX'Y' o a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
biproduct_sum_map a b o inl BXY = inl BX'Y' o a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
biproduct_sum_map a b o inl BXY =
biproduct_prod_mor BX'Y' a (zero_morphism X Y')
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outl BX'Y' o (biproduct_sum_map a b o inl BXY) = a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outr BX'Y' o (biproduct_sum_map a b o inl BXY) = zero_morphism X Y'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outl BX'Y' o (biproduct_sum_map a b o inl BXY) = a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outl BX'Y' o biproduct_sum_map a b o inl BXY = a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outl BX'Y' o biproduct_prod_mor BX'Y' (a o outl BXY) (b o outr BXY) o inl BXY =
a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
a o outl BXY o inl BXY = a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
a o (outl BXY o inl BXY) = a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
a o 1 = a
apply right_identity.
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outr BX'Y' o (biproduct_sum_map a b o inl BXY) = zero_morphism X Y'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outr BX'Y' o biproduct_sum_map a b o inl BXY = zero_morphism X Y'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outr BX'Y' o biproduct_prod_mor BX'Y' (a o outl BXY) (b o outr BXY) o inl BXY =
zero_morphism X Y'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
b o outr BXY o inl BXY = zero_morphism X Y'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
b o (outr BXY o inl BXY) = zero_morphism X Y'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
b o zero_morphism X Y = zero_morphism X Y'
apply zero_morphism_right.Qed.(** The biproduct map composed with the right injection is the right summand map. *)
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
biproduct_sum_map a b o inr BXY = inr BX'Y' o b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
biproduct_sum_map a b o inr BXY = inr BX'Y' o b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
biproduct_sum_map a b o inr BXY =
biproduct_prod_mor BX'Y' (zero_morphism Y X') b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outl BX'Y' o (biproduct_sum_map a b o inr BXY) = zero_morphism Y X'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outr BX'Y' o (biproduct_sum_map a b o inr BXY) = b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outl BX'Y' o (biproduct_sum_map a b o inr BXY) = zero_morphism Y X'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outl BX'Y' o biproduct_sum_map a b o inr BXY = zero_morphism Y X'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outl BX'Y' o biproduct_prod_mor BX'Y' (a o outl BXY) (b o outr BXY) o inr BXY =
zero_morphism Y X'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
a o outl BXY o inr BXY = zero_morphism Y X'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
a o (outl BXY o inr BXY) = zero_morphism Y X'
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
a o zero_morphism Y X = zero_morphism Y X'
apply zero_morphism_right.
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outr BX'Y' o (biproduct_sum_map a b o inr BXY) = b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outr BX'Y' o biproduct_sum_map a b o inr BXY = b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
outr BX'Y' o biproduct_prod_mor BX'Y' (a o outl BXY) (b o outr BXY) o inr BXY =
b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
b o outr BXY o inr BXY = b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
b o (outr BXY o inr BXY) = b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' a: morphism C X X' b: morphism C Y Y'
b o 1 = b
apply right_identity.Qed.(** Biproduct maps commute with pairing. *)
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
biproduct_prod_mor BX'Y' (a o f) (b o g) =
biproduct_sum_map a b o biproduct_prod_mor BXY f g
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
biproduct_prod_mor BX'Y' (a o f) (b o g) =
biproduct_sum_map a b o biproduct_prod_mor BXY f g
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
biproduct_sum_map a b o biproduct_prod_mor BXY f g =
biproduct_prod_mor BX'Y' (a o f) (b o g)
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
outl BX'Y' o (biproduct_sum_map a b o biproduct_prod_mor BXY f g) = a o f
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
outr BX'Y' o (biproduct_sum_map a b o biproduct_prod_mor BXY f g) = b o g
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
outl BX'Y' o (biproduct_sum_map a b o biproduct_prod_mor BXY f g) = a o f
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
outl BX'Y' o biproduct_sum_map a b o biproduct_prod_mor BXY f g = a o f
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
outl BX'Y' o biproduct_prod_mor BX'Y' (a o outl BXY) (b o outr BXY)
o biproduct_prod_mor BXY f g = a o f
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
a o outl BXY o biproduct_prod_mor BXY f g = a o f
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
a o (outl BXY o biproduct_prod_mor BXY f g) = a o f
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
a o f = a o f
reflexivity.
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
outr BX'Y' o (biproduct_sum_map a b o biproduct_prod_mor BXY f g) = b o g
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
outr BX'Y' o biproduct_sum_map a b o biproduct_prod_mor BXY f g = b o g
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
outr BX'Y' o biproduct_prod_mor BX'Y' (a o outl BXY) (b o outr BXY)
o biproduct_prod_mor BXY f g = b o g
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
b o outr BXY o biproduct_prod_mor BXY f g = b o g
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
b o (outr BXY o biproduct_prod_mor BXY f g) = b o g
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C a: morphism C X X' b: morphism C Y Y' f: morphism C W X g: morphism C W Y
b o g = b o g
reflexivity.Qed.(** Copairing is natural in the domain with respect to biproduct maps. *)
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o biproduct_sum_map a b =
biproduct_coprod_mor BXY W (f o a) (g o b)
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o biproduct_sum_map a b =
biproduct_coprod_mor BXY W (f o a) (g o b)
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o biproduct_sum_map a b o inl BXY = f o a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o biproduct_sum_map a b o inr BXY = g o b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o biproduct_sum_map a b o inl BXY = f o a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o (biproduct_sum_map a b o inl BXY) = f o a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o (inl BX'Y' o a) = f o a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o inl BX'Y' o a = f o a
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
f o a = f o a
reflexivity.
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o biproduct_sum_map a b o inr BXY = g o b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o (biproduct_sum_map a b o inr BXY) = g o b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o (inr BX'Y' o b) = g o b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
biproduct_coprod_mor BX'Y' W f g o inr BX'Y' o b = g o b
C: PreCategory Z: ZeroObject C X, Y, X', Y': C BXY: Biproduct Z X Y BX'Y': Biproduct Z X' Y' W: C f: morphism C X' W g: morphism C Y' W a: morphism C X X' b: morphism C Y Y'
g o b = g o b
reflexivity.Qed.EndBiproductFunctoriality.(** * Symmetry of biproducts *)SectionBiproductSymmetry.Context {C : PreCategory} {Z : ZeroObject C} {XY : object C}
{BXY : Biproduct Z X Y} {BYX : Biproduct Z Y X}.(** The swap morphism exchanges the two summands of a biproduct. *)Definitionbiproduct_swap
: morphism C BXY BYX
:= biproduct_prod_mor BYX (outr BXY) (outl BXY).(** Swapping the components of a pairing. *)
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
biproduct_prod_mor BYX g f = biproduct_swap o biproduct_prod_mor BXY f g
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
biproduct_prod_mor BYX g f = biproduct_swap o biproduct_prod_mor BXY f g
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
biproduct_swap o biproduct_prod_mor BXY f g = biproduct_prod_mor BYX g f
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
outl BYX o (biproduct_swap o biproduct_prod_mor BXY f g) = g
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
outr BYX o (biproduct_swap o biproduct_prod_mor BXY f g) = f
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
outl BYX o (biproduct_swap o biproduct_prod_mor BXY f g) = g
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
outl BYX o biproduct_swap o biproduct_prod_mor BXY f g = g
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
outl BYX o biproduct_prod_mor BYX (outr BXY) (outl BXY)
o biproduct_prod_mor BXY f g = g
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
outr BXY o biproduct_prod_mor BXY f g = g
apply (biproduct_prod_beta_r BXY).
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
outr BYX o (biproduct_swap o biproduct_prod_mor BXY f g) = f
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
outr BYX o biproduct_swap o biproduct_prod_mor BXY f g = f
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
outr BYX o biproduct_prod_mor BYX (outr BXY) (outl BXY)
o biproduct_prod_mor BXY f g = f
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X W: C f: morphism C W X g: morphism C W Y
outl BXY o biproduct_prod_mor BXY f g = f
apply (biproduct_prod_beta_l BXY).Qed.(** Swapping after the left injection gives the right injection. *)
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
biproduct_swap o inl BXY = inr BYX
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
biproduct_swap o inl BXY = inr BYX
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
biproduct_prod_mor BYX 1 (zero_morphism Y X) = inl BYX
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
inl BYX o 1 = inl BYX
apply right_identity.Qed.EndBiproductSymmetry.(** Swapping twice is the identity, so [BXY] and [BYX] are isomorphic: the biproduct is commutative. *)
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
biproduct_swap o biproduct_swap = 1
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
biproduct_swap o biproduct_swap = 1
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
biproduct_swap o biproduct_swap =
biproduct_prod_mor BXY (outl BXY) (outr BXY)
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
biproduct_prod_mor BXY (outl BXY) (outr BXY) = 1
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
biproduct_swap o biproduct_swap =
biproduct_prod_mor BXY (outl BXY) (outr BXY)
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outl BXY o (biproduct_swap o biproduct_swap) = outl BXY
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outr BXY o (biproduct_swap o biproduct_swap) = outr BXY
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outl BXY o (biproduct_swap o biproduct_swap) = outl BXY
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outl BXY o biproduct_swap o biproduct_swap = outl BXY
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outl BXY o biproduct_prod_mor BXY (outr BYX) (outl BYX) o biproduct_swap =
outl BXY
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outr BYX o biproduct_swap = outl BXY
apply (biproduct_prod_beta_r BYX).
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outr BXY o (biproduct_swap o biproduct_swap) = outr BXY
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outr BXY o biproduct_swap o biproduct_swap = outr BXY
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outr BXY o biproduct_prod_mor BXY (outr BYX) (outl BYX) o biproduct_swap =
outr BXY
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outl BYX o biproduct_swap = outr BXY
apply (biproduct_prod_beta_l BYX).
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
biproduct_prod_mor BXY (outl BXY) (outr BXY) = 1
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
1 = biproduct_prod_mor BXY (outl BXY) (outr BXY)
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outl BXY o 1 = outl BXY
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outr BXY o 1 = outr BXY
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outl BXY o 1 = outl BXY
apply right_identity.
C: PreCategory Z: ZeroObject C X, Y: C BXY: Biproduct Z X Y BYX: Biproduct Z Y X
outr BXY o 1 = outr BXY
apply right_identity.Qed.(** * Self-biproducts *)SectionSelfBiproducts.Context {C : PreCategory} {Z : ZeroObject C}.(** The codiagonal of a self-biproduct. *)Definitionbiproduct_codiagonal (Y : object C)
{BYY : Biproduct Z Y Y}
: morphism C BYY Y
:= biproduct_coprod_mor BYY Y 11.(** The codiagonal is natural in the codomain. *)
C: PreCategory Z: ZeroObject C Y, Y': C BYY: Biproduct Z Y Y a: morphism C Y Y'
a o biproduct_codiagonal Y = biproduct_coprod_mor BYY Y' a a
C: PreCategory Z: ZeroObject C Y, Y': C BYY: Biproduct Z Y Y a: morphism C Y Y'
a o biproduct_codiagonal Y = biproduct_coprod_mor BYY Y' a a
C: PreCategory Z: ZeroObject C Y, Y': C BYY: Biproduct Z Y Y a: morphism C Y Y'
a o biproduct_coprod_mor BYY Y 11 = biproduct_coprod_mor BYY Y' a a
C: PreCategory Z: ZeroObject C Y, Y': C BYY: Biproduct Z Y Y a: morphism C Y Y'
biproduct_coprod_mor BYY Y' (a o 1) (a o 1) = biproduct_coprod_mor BYY Y' a a
C: PreCategory Z: ZeroObject C Y, Y': C BYY: Biproduct Z Y Y a: morphism C Y Y'
biproduct_coprod_mor BYY Y' a a = biproduct_coprod_mor BYY Y' a a
reflexivity.Qed.(** The codiagonal of a biproduct map is the corresponding copairing. *)
C: PreCategory Z: ZeroObject C Y, Y': C BYY: Biproduct Z Y Y BYY': Biproduct Z Y' Y' a, b: morphism C Y Y'
biproduct_codiagonal Y' o biproduct_sum_map a b =
biproduct_coprod_mor BYY Y' a b
C: PreCategory Z: ZeroObject C Y, Y': C BYY: Biproduct Z Y Y BYY': Biproduct Z Y' Y' a, b: morphism C Y Y'
biproduct_codiagonal Y' o biproduct_sum_map a b =
biproduct_coprod_mor BYY Y' a b
C: PreCategory Z: ZeroObject C Y, Y': C BYY: Biproduct Z Y Y BYY': Biproduct Z Y' Y' a, b: morphism C Y Y'
biproduct_coprod_mor BYY' Y' 11 o biproduct_sum_map a b =
biproduct_coprod_mor BYY Y' a b
C: PreCategory Z: ZeroObject C Y, Y': C BYY: Biproduct Z Y Y BYY': Biproduct Z Y' Y' a, b: morphism C Y Y'
biproduct_coprod_mor BYY Y' (1 o a) (1 o b) = biproduct_coprod_mor BYY Y' a b
C: PreCategory Z: ZeroObject C Y, Y': C BYY: Biproduct Z Y Y BYY': Biproduct Z Y' Y' a, b: morphism C Y Y'
biproduct_coprod_mor BYY Y' a b = biproduct_coprod_mor BYY Y' a b
reflexivity.Qed.(** The codiagonal of a pairing with zero on the right recovers the left map. *)
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
biproduct_codiagonal Y o biproduct_prod_mor BYY f (zero_morphism X Y) = f
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
biproduct_codiagonal Y o biproduct_prod_mor BYY f (zero_morphism X Y) = f
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
biproduct_coprod_mor BYY Y 11 o biproduct_prod_mor BYY f (zero_morphism X Y) =
f
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
biproduct_coprod_mor BYY Y 11 o (inl BYY o f) = f
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
biproduct_coprod_mor BYY Y 11 o inl BYY o f = f
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
1 o f = f
apply left_identity.Qed.(** The codiagonal of a pairing with zero on the left recovers the right map. *)
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
biproduct_codiagonal Y o biproduct_prod_mor BYY (zero_morphism X Y) f = f
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
biproduct_codiagonal Y o biproduct_prod_mor BYY (zero_morphism X Y) f = f
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
biproduct_coprod_mor BYY Y 11 o biproduct_prod_mor BYY (zero_morphism X Y) f =
f
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
biproduct_coprod_mor BYY Y 11 o (inr BYY o f) = f
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
biproduct_coprod_mor BYY Y 11 o inr BYY o f = f
C: PreCategory Z: ZeroObject C X, Y: C BYY: Biproduct Z Y Y f: morphism C X Y
1 o f = f
apply left_identity.Qed.(** The codiagonal is invariant under swapping the two summands. *)
C: PreCategory Z: ZeroObject C Y: C BYY: Biproduct Z Y Y
biproduct_codiagonal Y o biproduct_swap = biproduct_codiagonal Y
C: PreCategory Z: ZeroObject C Y: C BYY: Biproduct Z Y Y
biproduct_codiagonal Y o biproduct_swap = biproduct_codiagonal Y
C: PreCategory Z: ZeroObject C Y: C BYY: Biproduct Z Y Y
biproduct_codiagonal Y o biproduct_swap o inl BYY = 1
C: PreCategory Z: ZeroObject C Y: C BYY: Biproduct Z Y Y
biproduct_codiagonal Y o biproduct_swap o inr BYY = 1
C: PreCategory Z: ZeroObject C Y: C BYY: Biproduct Z Y Y
biproduct_codiagonal Y o biproduct_swap o inl BYY = 1
C: PreCategory Z: ZeroObject C Y: C BYY: Biproduct Z Y Y
biproduct_codiagonal Y o (biproduct_swap o inl BYY) = 1
C: PreCategory Z: ZeroObject C Y: C BYY: Biproduct Z Y Y
biproduct_codiagonal Y o inr BYY = 1
apply biproduct_coprod_beta_r.
C: PreCategory Z: ZeroObject C Y: C BYY: Biproduct Z Y Y
biproduct_codiagonal Y o biproduct_swap o inr BYY = 1
C: PreCategory Z: ZeroObject C Y: C BYY: Biproduct Z Y Y
biproduct_codiagonal Y o (biproduct_swap o inr BYY) = 1
C: PreCategory Z: ZeroObject C Y: C BYY: Biproduct Z Y Y