Library HoTT.Categories.Additive.ZeroObjects
Zero objects in categories
From HoTT Require Import Basics Types.
From HoTT.Categories Require Import Category Functor NaturalTransformation.
From HoTT.Categories Require Import InitialTerminalCategory.
Zero objects
Class ZeroObject (C : PreCategory) := {
zero : object C;
is_initial :: IsInitialObject C zero;
is_terminal :: IsTerminalObject C zero
}.
Coercion zero : ZeroObject >-> object.
Arguments zero {C} z : rename.
Arguments is_initial {C} z : rename.
Arguments is_terminal {C} z : rename.
Instance initialobject_zeroobject {C : PreCategory} (Z : ZeroObject C)
: InitialObject C
:= {| object_initial := zero Z; isinitial_object_initial := _ |}.
Instance terminalobject_zeroobject {C : PreCategory} (Z : ZeroObject C)
: TerminalObject C
:= {| object_terminal := zero Z; isterminal_object_terminal := _ |}.
The zero morphism between any two objects is the unique morphism
that factors through the zero object.
Definition zero_morphism {C : PreCategory} {Z : ZeroObject C} (X Y : object C)
: morphism C X Y
:= morphism_from_initial Y o morphism_to_terminal X.
Arguments zero_morphism {C Z} X Y : simpl never.
Basic properties of zero objects
Properties of zero morphisms
Lemma morphism_through_zero_is_zero {C : PreCategory}
{Z : ZeroObject C} {X Y : object C}
(f : morphism C X Z)
(g : morphism C Z Y)
: (g o f)%morphism = zero_morphism X Y.
Proof.
unfold zero_morphism.
apply ap011.
- rapply initial_morphism_unique.
- rapply terminal_morphism_unique.
Qed.
{Z : ZeroObject C} {X Y : object C}
(f : morphism C X Z)
(g : morphism C Z Y)
: (g o f)%morphism = zero_morphism X Y.
Proof.
unfold zero_morphism.
apply ap011.
- rapply initial_morphism_unique.
- rapply terminal_morphism_unique.
Qed.
Lemma zero_morphism_right {C : PreCategory} {Z : ZeroObject C}
{X Y W : object C}
(g : morphism C Y W)
: (g o zero_morphism X Y)%morphism = zero_morphism X W.
Proof.
rewrite <- Category.Core.associativity.
apply morphism_through_zero_is_zero.
Qed.
{X Y W : object C}
(g : morphism C Y W)
: (g o zero_morphism X Y)%morphism = zero_morphism X W.
Proof.
rewrite <- Category.Core.associativity.
apply morphism_through_zero_is_zero.
Qed.
Composition with zero morphism on the left.
Lemma zero_morphism_left {C : PreCategory} {Z : ZeroObject C}
{X Y W : object C}
(f : morphism C X Y)
: (zero_morphism Y W o f)%morphism = zero_morphism X W.
Proof.
rewrite Category.Core.associativity.
apply morphism_through_zero_is_zero.
Qed.
{X Y W : object C}
(f : morphism C X Y)
: (zero_morphism Y W o f)%morphism = zero_morphism X W.
Proof.
rewrite Category.Core.associativity.
apply morphism_through_zero_is_zero.
Qed.