Built with Alectryon, running Coq+SerAPI v8.19.0+0.19.3. 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.
(** * Zero objects in categories Zero objects (both initial and terminal) and zero morphisms, foundational concepts for additive and stable category theory.*)
[Loading ML file number_string_notation_plugin.cmxs (using legacy method) ... done]
From HoTT.Categories Require Import Category Functor NaturalTransformation.From HoTT.Categories Require Import InitialTerminalCategory.(** * Zero objects A zero object in a category is an object that is both initial and terminal. Such objects play a fundamental role in additive and abelian categories, where they enable the definition of zero morphisms and kernels.*)ClassZeroObject (C : PreCategory) := {
zero : object C;
is_initial :: IsInitialObject C zero;
is_terminal :: IsTerminalObject C zero
}.Coercionzero : ZeroObject >-> object.Arguments zero {C} z : rename.Arguments is_initial {C} z : rename.Arguments is_terminal {C} z : rename.Instanceinitialobject_zeroobject {C : PreCategory} (Z : ZeroObject C)
: InitialObject C
:= {| object_initial := zero Z; isinitial_object_initial := _ |}.Instanceterminalobject_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. *)Definitionzero_morphism {C : PreCategory} {Z : ZeroObject C} (XY : 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 *)(** Any morphism that factors through a zero object is the zero morphism. *)
C: PreCategory Z: ZeroObject C X, Y: C f: morphism C X Z g: morphism C Z Y
(g o f)%morphism = zero_morphism X Y
C: PreCategory Z: ZeroObject C X, Y: C f: morphism C X Z g: morphism C Z Y
(g o f)%morphism = zero_morphism X Y
C: PreCategory Z: ZeroObject C X, Y: C f: morphism C X Z g: morphism C Z Y
(g o f)%morphism =
(morphism_from_initial Y o morphism_to_terminal X)%morphism
C: PreCategory Z: ZeroObject C X, Y: C f: morphism C X Z g: morphism C Z Y
g = morphism_from_initial Y
C: PreCategory Z: ZeroObject C X, Y: C f: morphism C X Z g: morphism C Z Y
f = morphism_to_terminal X
C: PreCategory Z: ZeroObject C X, Y: C f: morphism C X Z g: morphism C Z Y
g = morphism_from_initial Y
rapply initial_morphism_unique.
C: PreCategory Z: ZeroObject C X, Y: C f: morphism C X Z g: morphism C Z Y
f = morphism_to_terminal X
rapply terminal_morphism_unique.Qed.(** ** Composition properties of zero morphisms *)(** Composition with zero morphism on the right. *)
C: PreCategory Z: ZeroObject C X, Y, W: C g: morphism C Y W
(g o zero_morphism X Y)%morphism = zero_morphism X W
C: PreCategory Z: ZeroObject C X, Y, W: C g: morphism C Y W
(g o zero_morphism X Y)%morphism = zero_morphism X W
C: PreCategory Z: ZeroObject C X, Y, W: C g: morphism C Y W
(g o morphism_from_initial Y o morphism_to_terminal X)%morphism =
zero_morphism X W
apply morphism_through_zero_is_zero.Qed.(** Composition with zero morphism on the left. *)
C: PreCategory Z: ZeroObject C X, Y, W: C f: morphism C X Y
(zero_morphism Y W o f)%morphism = zero_morphism X W
C: PreCategory Z: ZeroObject C X, Y, W: C f: morphism C X Y
(zero_morphism Y W o f)%morphism = zero_morphism X W
C: PreCategory Z: ZeroObject C X, Y, W: C f: morphism C X Y
(morphism_from_initial W
o (morphism_to_terminal Y o f))%morphism =
zero_morphism X W