Kernels and cokernels #
In a category with zero morphisms, the kernel of a morphism f : X ⟶ Y
is
the equalizer of f
and 0 : X ⟶ Y
. (Similarly the cokernel is the coequalizer.)
The basic definitions are
-
kernel : (X ⟶ Y) → C
-
kernel.condition : kernel.ι f ≫ f = 0
and -
kernel.lift (k : W ⟶ X) (h : k ≫ f = 0) : W ⟶ kernel f
(as well as the dual versions)
Main statements #
Besides the definition and lifts, we prove
kernel.ιZeroIsIso
: a kernel map of a zero morphism is an isomorphismkernel.eq_zero_of_epi_kernel
: ifkernel.ι f
is an epimorphism, thenf = 0
kernel.ofMono
: the kernel of a monomorphism is the zero objectkernel.liftMono
: the lift of a monomorphismk : W ⟶ X
such thatk ≫ f = 0
is still a monomorphismkernel.isLimitConeZeroCone
: if our category has a zero object, then the map from the zero object is a kernel map of any monomorphismkernel.ιOfZero
:kernel.ι (0 : X ⟶ Y)
is an isomorphism
and the corresponding dual statements.
Future work #
- TODO: connect this with existing work in the group theory and ring theory libraries.
Implementation notes #
As with the other special shapes in the limits library, all the definitions here are given as
abbreviation
s of the general statements for limits, so all the simp
lemmas and theorems about
general limits can be used.
References #
- [F. Borceux, Handbook of Categorical Algebra 2][borceux-vol2]
A morphism f
has a kernel if the functor ParallelPair f 0
has a limit.
A morphism f
has a cokernel if the functor ParallelPair f 0
has a colimit.
A kernel fork is just a fork where the second morphism is a zero morphism.
Equations
A morphism ι
satisfying ι ≫ f = 0
determines a kernel fork over f
.
Equations
Every kernel fork s
is isomorphic (actually, equal) to fork.ofι (fork.ι s) _
.
Equations
If ι = ι'
, then fork.ofι ι _
and fork.ofι ι' _
are isomorphic.
If F
is an equivalence, then applying F
to a diagram indexing a (co)kernel of f
yields
the diagram indexing the (co)kernel of F.map f
.
Equations
- One or more equations did not get rendered due to their size.
If s
is a limit kernel fork and k : W ⟶ X
satisfies k ≫ f = 0
, then there is some
l : W ⟶ s.X
such that l ≫ fork.ι s = k
.
Equations
- CategoryTheory.Limits.KernelFork.IsLimit.lift' hs k h = { val := hs.lift (CategoryTheory.Limits.KernelFork.ofι k h), property := ⋯ }
This is a slightly more convenient method to verify that a kernel fork is a limit cone. It only asks for a proof of facts that carry any mathematical content
Equations
- CategoryTheory.Limits.isLimitAux t lift fac uniq = { lift := lift, fac := ⋯, uniq := ⋯ }
This is a more convenient formulation to show that a KernelFork
constructed using
KernelFork.ofι
is a limit cone.
Equations
- One or more equations did not get rendered due to their size.
This is a more convenient formulation to show that a KernelFork
of the form
KernelFork.ofι i _
is a limit cone when we know that i
is a monomorphism.
Equations
- One or more equations did not get rendered due to their size.
Every kernel of f
induces a kernel of f ≫ g
if g
is mono.
Equations
- One or more equations did not get rendered due to their size.
Every kernel of f ≫ g
is also a kernel of f
, as long as c.ι ≫ f
vanishes.
Equations
- One or more equations did not get rendered due to their size.
X
identifies to the kernel of a zero map X ⟶ Y
.
Equations
- One or more equations did not get rendered due to their size.
Any zero object identifies to the kernel of a given monomorphisms.
Equations
- CategoryTheory.Limits.KernelFork.IsLimit.ofMonoOfIsZero c hf h = CategoryTheory.Limits.isLimitAux c (fun (s : CategoryTheory.Limits.KernelFork f) => 0) ⋯ ⋯
The morphism between points of kernel forks induced by a morphism in the category of arrows.
Equations
- CategoryTheory.Limits.KernelFork.mapOfIsLimit kf hf' φ = hf'.lift (CategoryTheory.Limits.KernelFork.ofι (CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.Fork.ι kf) φ.left) ⋯)
The isomorphism between points of limit kernel forks induced by an isomorphism in the category of arrows.
Equations
- One or more equations did not get rendered due to their size.
The kernel of a morphism, expressed as the equalizer with the 0 morphism.
Equations
The map from kernel f
into the source of f
.
Equations
The kernel built from kernel.ι f
is limiting.
Equations
- One or more equations did not get rendered due to their size.
Given any morphism k : W ⟶ X
satisfying k ≫ f = 0
, k
factors through kernel.ι f
via kernel.lift : W ⟶ kernel f
.
Equations
Instances For
Equations
- ⋯ = ⋯
Any morphism k : W ⟶ X
satisfying k ≫ f = 0
induces a morphism l : W ⟶ kernel f
such that
l ≫ kernel.ι f = k
.
Equations
- CategoryTheory.Limits.kernel.lift' f k h = { val := CategoryTheory.Limits.kernel.lift f k h, property := ⋯ }
A commuting square induces a morphism of kernels.
Equations
Given a commutative diagram X --f--> Y --g--> Z | | | | | | v v v X' -f'-> Y' -g'-> Z' with horizontal arrows composing to zero, then we obtain a commutative square X ---> kernel g | | | | kernel.map | | v v X' --> kernel g'
A commuting square of isomorphisms induces an isomorphism of kernels.
Equations
- One or more equations did not get rendered due to their size.
Every kernel of the zero morphism is an isomorphism
Equations
- ⋯ = ⋯
The kernel of a zero morphism is isomorphic to the source.
Equations
- CategoryTheory.Limits.kernelZeroIsoSource = CategoryTheory.Limits.equalizer.isoSourceOfSelf 0
If two morphisms are known to be equal, then their kernels are isomorphic.
Equations
- ⋯ = ⋯
When g
is a monomorphism, the kernel of f ≫ g
is isomorphic to the kernel of f
.
Equations
- One or more equations did not get rendered due to their size.
Equations
- ⋯ = ⋯
When f
is an isomorphism, the kernel of f ≫ g
is isomorphic to the kernel of g
.
Equations
- One or more equations did not get rendered due to their size.
The morphism from the zero object determines a cone on a kernel diagram
Equations
- CategoryTheory.Limits.kernel.zeroKernelFork f = { pt := 0, π := { app := fun (j : CategoryTheory.Limits.WalkingParallelPair) => 0, naturality := ⋯ } }
The map from the zero object is a kernel of a monomorphism
Equations
The kernel of a monomorphism is isomorphic to the zero object
Equations
- One or more equations did not get rendered due to their size.
The kernel morphism of a monomorphism is a zero morphism
If g ≫ f = 0
implies g = 0
for all g
, then 0 : 0 ⟶ X
is a kernel of f
.
Equations
- CategoryTheory.Limits.zeroKernelOfCancelZero f hf = CategoryTheory.Limits.Fork.IsLimit.mk (CategoryTheory.Limits.KernelFork.ofι 0 ⋯) (fun (s : CategoryTheory.Limits.Fork f 0) => 0) ⋯ ⋯
If i
is an isomorphism such that l ≫ i.hom = f
, then any kernel of f
is a kernel of l
.
Equations
- One or more equations did not get rendered due to their size.
If i
is an isomorphism such that l ≫ i.hom = f
, then the kernel of f
is a kernel of l
.
Equations
If s
is any limit kernel cone over f
and if i
is an isomorphism such that
i.hom ≫ s.ι = l
, then l
is a kernel of f
.
Equations
- CategoryTheory.Limits.IsKernel.isoKernel f l hs i h = CategoryTheory.Limits.IsLimit.ofIsoLimit hs (CategoryTheory.Limits.Cones.ext i.symm ⋯)
If i
is an isomorphism such that i.hom ≫ kernel.ι f = l
, then l
is a kernel of f
.
Equations
The kernel morphism of a zero morphism is an isomorphism
A cokernel cofork is just a cofork where the second morphism is a zero morphism.
Equations
A morphism π
satisfying f ≫ π = 0
determines a cokernel cofork on f
.
Equations
Every cokernel cofork s
is isomorphic (actually, equal) to cofork.ofπ (cofork.π s) _
.
Equations
If π = π'
, then CokernelCofork.of_π π _
and CokernelCofork.of_π π' _
are isomorphic.
If s
is a colimit cokernel cofork, then every k : Y ⟶ W
satisfying f ≫ k = 0
induces
l : s.X ⟶ W
such that cofork.π s ≫ l = k
.
Equations
- CategoryTheory.Limits.CokernelCofork.IsColimit.desc' hs k h = { val := hs.desc (CategoryTheory.Limits.CokernelCofork.ofπ k h), property := ⋯ }
This is a slightly more convenient method to verify that a cokernel cofork is a colimit cocone. It only asks for a proof of facts that carry any mathematical content
Equations
- CategoryTheory.Limits.isColimitAux t desc fac uniq = { desc := desc, fac := ⋯, uniq := ⋯ }
This is a more convenient formulation to show that a CokernelCofork
constructed using
CokernelCofork.ofπ
is a limit cone.
Equations
- One or more equations did not get rendered due to their size.
This is a more convenient formulation to show that a CokernelCofork
of the form
CokernelCofork.ofπ p _
is a colimit cocone when we know that p
is an epimorphism.
Equations
- One or more equations did not get rendered due to their size.
Every cokernel of f
induces a cokernel of g ≫ f
if g
is epi.
Equations
- One or more equations did not get rendered due to their size.
Every cokernel of g ≫ f
is also a cokernel of f
, as long as f ≫ c.π
vanishes.
Equations
- One or more equations did not get rendered due to their size.
Y
identifies to the cokernel of a zero map X ⟶ Y
.
Equations
- One or more equations did not get rendered due to their size.
Any zero object identifies to the cokernel of a given epimorphisms.
Equations
- CategoryTheory.Limits.CokernelCofork.IsColimit.ofEpiOfIsZero c hf h = CategoryTheory.Limits.isColimitAux c (fun (s : CategoryTheory.Limits.CokernelCofork f) => 0) ⋯ ⋯
The morphism between points of cokernel coforks induced by a morphism in the category of arrows.
Equations
- One or more equations did not get rendered due to their size.
The isomorphism between points of limit cokernel coforks induced by an isomorphism in the category of arrows.
Equations
- One or more equations did not get rendered due to their size.
The cokernel of a morphism, expressed as the coequalizer with the 0 morphism.
Equations
The map from the target of f
to cokernel f
.
Equations
The cokernel built from cokernel.π f
is colimiting.
Equations
- One or more equations did not get rendered due to their size.
Given any morphism k : Y ⟶ W
such that f ≫ k = 0
, k
factors through cokernel.π f
via cokernel.desc : cokernel f ⟶ W
.
Equations
Instances For
Equations
- ⋯ = ⋯
Any morphism k : Y ⟶ W
satisfying f ≫ k = 0
induces l : cokernel f ⟶ W
such that
cokernel.π f ≫ l = k
.
Equations
- CategoryTheory.Limits.cokernel.desc' f k h = { val := CategoryTheory.Limits.cokernel.desc f k h, property := ⋯ }
A commuting square induces a morphism of cokernels.
Equations
Given a commutative diagram X --f--> Y --g--> Z | | | | | | v v v X' -f'-> Y' -g'-> Z' with horizontal arrows composing to zero, then we obtain a commutative square cokernel f ---> Z | | | cokernel.map | | | v v cokernel f' --> Z'
A commuting square of isomorphisms induces an isomorphism of cokernels.
Equations
- One or more equations did not get rendered due to their size.
The cokernel of the zero morphism is an isomorphism
Equations
- ⋯ = ⋯
The cokernel of a zero morphism is isomorphic to the target.
Equations
- CategoryTheory.Limits.cokernelZeroIsoTarget = CategoryTheory.Limits.coequalizer.isoTargetOfSelf 0
If two morphisms are known to be equal, then their cokernels are isomorphic.
Equations
- ⋯ = ⋯
When g
is an isomorphism, the cokernel of f ≫ g
is isomorphic to the cokernel of f
.
Equations
- One or more equations did not get rendered due to their size.
Equations
- ⋯ = ⋯
When f
is an epimorphism, the cokernel of f ≫ g
is isomorphic to the cokernel of g
.
Equations
- One or more equations did not get rendered due to their size.
The morphism to the zero object determines a cocone on a cokernel diagram
Equations
- CategoryTheory.Limits.cokernel.zeroCokernelCofork f = { pt := 0, ι := { app := fun (j : CategoryTheory.Limits.WalkingParallelPair) => 0, naturality := ⋯ } }
The morphism to the zero object is a cokernel of an epimorphism
Equations
- One or more equations did not get rendered due to their size.
The cokernel of an epimorphism is isomorphic to the zero object
Equations
- One or more equations did not get rendered due to their size.
The cokernel morphism of an epimorphism is a zero morphism
The cokernel of the image inclusion of a morphism f
is isomorphic to the cokernel of f
.
(This result requires that the factorisation through the image is an epimorphism. This holds in any category with equalizers.)
Equations
- One or more equations did not get rendered due to their size.
The cokernel of a zero morphism is an isomorphism
The kernel of the cokernel of an epimorphism is an isomorphism
Equations
- ⋯ = ⋯
The cokernel of the kernel of a monomorphism is an isomorphism
Equations
- ⋯ = ⋯
If f ≫ g = 0
implies g = 0
for all g
, then 0 : Y ⟶ 0
is a cokernel of f
.
Equations
- One or more equations did not get rendered due to their size.
If i
is an isomorphism such that i.hom ≫ l = f
, then any cokernel of f
is a cokernel of
l
.
Equations
- One or more equations did not get rendered due to their size.
If i
is an isomorphism such that i.hom ≫ l = f
, then the cokernel of f
is a cokernel of
l
.
If s
is any colimit cokernel cocone over f
and i
is an isomorphism such that
s.π ≫ i.hom = l
, then l
is a cokernel of f
.
Equations
If i
is an isomorphism such that cokernel.π f ≫ i.hom = l
, then l
is a cokernel of f
.
The comparison morphism for the kernel of f
.
This is an isomorphism iff G
preserves the kernel of f
; see
CategoryTheory/Limits/Preserves/Shapes/Kernels.lean
Equations
- CategoryTheory.Limits.kernelComparison f G = CategoryTheory.Limits.kernel.lift (G.map f) (G.map (CategoryTheory.Limits.kernel.ι f)) ⋯
The comparison morphism for the cokernel of f
.
Equations
- CategoryTheory.Limits.cokernelComparison f G = CategoryTheory.Limits.cokernel.desc (G.map f) (G.map (CategoryTheory.Limits.coequalizer.π f 0)) ⋯
HasKernels
represents the existence of kernels for every morphism.
- has_limit : ∀ {X Y : C} (f : X ⟶ Y), CategoryTheory.Limits.HasKernel f
HasCokernels
represents the existence of cokernels for every morphism.
- has_colimit : ∀ {X Y : C} (f : X ⟶ Y), CategoryTheory.Limits.HasCokernel f
Equations
- ⋯ = ⋯