Preadditive categories #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
A preadditive category is a category in which X ⟶ Y
is an abelian group in such a way that
composition of morphisms is linear in both variables.
This file contains a definition of preadditive category that directly encodes the definition given above. The definition could also be phrased as follows: A preadditive category is a category enriched over the category of Abelian groups. Once the general framework to state this in Lean is available, the contents of this file should become obsolete.
Main results #
- Definition of preadditive categories and basic properties
- In a preadditive category,
f : Q ⟶ R
is mono if and only ifg ≫ f = 0 → g = 0
for all composableg
. - A preadditive category with kernels has equalizers.
Implementation notes #
The simp normal form for negation and composition is to push negations as far as possible to
the outside. For example, f ≫ (-g)
and (-f) ≫ g
both become -(f ≫ g)
, and (-f) ≫ (-g)
is simplified to f ≫ g
.
References #
Tags #
additive, preadditive, Hom group, Ab-category, Ab-enriched
- hom_group : (Π (P Q : C), add_comm_group (P ⟶ Q)) . "apply_instance"
- add_comp' : (∀ (P Q R : C) (f f' : P ⟶ Q) (g : Q ⟶ R), (f + f') ≫ g = f ≫ g + f' ≫ g) . "obviously"
- comp_add' : (∀ (P Q R : C) (f : P ⟶ Q) (g g' : Q ⟶ R), f ≫ (g + g') = f ≫ g + f ≫ g') . "obviously"
A category is called preadditive if P ⟶ Q
is an abelian group such that composition is
linear in both variables.
Instances of this typeclass
Instances of other typeclasses for category_theory.preadditive
- category_theory.preadditive.has_sizeof_inst
- category_theory.subsingleton_preadditive_of_has_binary_biproducts
Equations
- category_theory.preadditive.induced_category F = {hom_group := λ (P Q : category_theory.induced_category C F), category_theory.preadditive.hom_group (F P) (F Q), add_comp' := _, comp_add' := _}
Equations
- category_theory.preadditive.full_subcategory Z = {hom_group := λ (P Q : category_theory.full_subcategory Z), category_theory.preadditive.hom_group P.obj Q.obj, add_comp' := _, comp_add' := _}
Equations
- category_theory.preadditive.category_theory.End.ring X = {add := add_comm_group.add infer_instance, add_assoc := _, zero := add_comm_group.zero infer_instance, zero_add := _, add_zero := _, nsmul := add_comm_group.nsmul infer_instance, nsmul_zero' := _, nsmul_succ' := _, neg := add_comm_group.neg infer_instance, sub := add_comm_group.sub infer_instance, sub_eq_add_neg := _, zsmul := add_comm_group.zsmul infer_instance, zsmul_zero' := _, zsmul_succ' := _, zsmul_neg' := _, add_left_neg := _, add_comm := _, int_cast := add_comm_group_with_one.int_cast._default (add_comm_group_with_one.nat_cast._default monoid.one add_comm_group.add _ add_comm_group.zero _ _ add_comm_group.nsmul _ _) add_comm_group.add _ add_comm_group.zero _ _ add_comm_group.nsmul _ _ monoid.one _ _ add_comm_group.neg add_comm_group.sub _ add_comm_group.zsmul _ _ _ _, nat_cast := add_comm_group_with_one.nat_cast._default monoid.one add_comm_group.add _ add_comm_group.zero _ _ add_comm_group.nsmul _ _, one := monoid.one infer_instance, nat_cast_zero := _, nat_cast_succ := _, int_cast_of_nat := _, int_cast_neg_succ_of_nat := _, mul := monoid.mul infer_instance, mul_assoc := _, one_mul := _, mul_one := _, npow := monoid.npow infer_instance, npow_zero' := _, npow_succ' := _, left_distrib := _, right_distrib := _}
Composition by a fixed left argument as a group homomorphism
Equations
- category_theory.preadditive.left_comp R f = add_monoid_hom.mk' (λ (g : Q ⟶ R), f ≫ g) _
Composition by a fixed right argument as a group homomorphism
Equations
- category_theory.preadditive.right_comp P g = add_monoid_hom.mk' (λ (f : P ⟶ Q), f ≫ g) _
Composition as a bilinear group homomorphism
Equations
- category_theory.preadditive.comp_hom = add_monoid_hom.mk' (λ (f : P ⟶ Q), category_theory.preadditive.left_comp R f) category_theory.preadditive.comp_hom._proof_1
Equations
- category_theory.preadditive.preadditive_has_zero_morphisms = {has_zero := infer_instance (λ (X Y : C), add_zero_class.to_has_zero (X ⟶ Y)), comp_zero' := _, zero_comp' := _}
Equations
- category_theory.preadditive.module_End_right = {to_distrib_mul_action := {to_mul_action := category_theory.End.mul_action_right Y, smul_zero := _, smul_add := _}, add_smul := _, zero_smul := _}
Map a kernel cone on the difference of two morphisms to the equalizer fork.
Map any equalizer fork to a cone on the difference of the two morphisms.
A kernel of f - g
is an equalizer of f
and g
.
An equalizer of f
and g
is a kernel of f - g
.
A preadditive category has an equalizer for f
and g
if it has a kernel for f - g
.
A preadditive category has a kernel for f - g
if it has an equalizer for f
and g
.
Map a cokernel cocone on the difference of two morphisms to the coequalizer cofork.
Map any coequalizer cofork to a cocone on the difference of the two morphisms.
A cokernel of f - g
is a coequalizer of f
and g
.
A coequalizer of f
and g
is a cokernel of f - g
.
Equations
A preadditive category has a coequalizer for f
and g
if it has a cokernel for f - g
.
A preadditive category has a cokernel for f - g
if it has a coequalizer for f
and g
.
If a preadditive category has all kernels, then it also has all equalizers.
If a preadditive category has all cokernels, then it also has all coequalizers.