Image-to-kernel comparison maps #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
Whenever f : A ⟶ B
and g : B ⟶ C
satisfy w : f ≫ g = 0
,
we have image_le_kernel f g w : image_subobject f ≤ kernel_subobject g
(assuming the appropriate images and kernels exist).
image_to_kernel f g w
is the corresponding morphism between objects in C
.
We define homology f g w
of such a pair as the cokernel of image_to_kernel f g w
.
The canonical morphism image_subobject f ⟶ kernel_subobject g
when f ≫ g = 0
.
Equations
Instances for image_to_kernel
Prefer image_to_kernel
.
image_to_kernel
for A --0--> B --g--> C
, where g
is a mono is itself an epi
(i.e. the sequence is exact at B
).
image_to_kernel
for A --f--> B --0--> C
, where g
is an epi is itself an epi
(i.e. the sequence is exact at B
).
The homology of a pair of morphisms f : A ⟶ B
and g : B ⟶ C
satisfying f ≫ g = 0
is the cokernel of the image_to_kernel
morphism for f
and g
.
Equations
- homology f g w = category_theory.limits.cokernel (image_to_kernel f g w)
The morphism from cycles to homology.
Equations
- homology.π f g w = category_theory.limits.cokernel.π (image_to_kernel f g w)
To construct a map out of homology, it suffices to construct a map out of the cycles which vanishes on boundaries.
Equations
- homology.desc f g w k p = category_theory.limits.cokernel.desc (image_to_kernel f g w) k p
To check two morphisms out of homology f g w
are equal, it suffices to check on cycles.
The cokernel of the map Im f ⟶ Ker 0
is isomorphic to the cokernel of f.
Equations
- homology_of_zero_right f = category_theory.limits.cokernel.map_iso (image_to_kernel f 0 category_theory.limits.comp_zero) (category_theory.limits.image.ι f) (category_theory.limits.image_subobject_iso f) (category_theory.limits.kernel_subobject_iso 0 ≪≫ category_theory.limits.kernel_zero_iso_source) _ ≪≫ category_theory.limits.cokernel_image_ι f
The kernel of the map Im 0 ⟶ Ker f
is isomorphic to the kernel of f.
homology 0 0 _
is just the middle object.
Equations
- homology_zero_zero = {hom := homology.desc 0 0 homology_zero_zero._proof_12 (category_theory.limits.kernel_subobject 0).arrow homology_zero_zero._proof_13, inv := category_theory.inv (category_theory.limits.kernel_subobject 0).arrow ≫ homology.π 0 0 homology_zero_zero._proof_15, hom_inv_id' := _, inv_hom_id' := _}
Given compatible commutative squares between
a pair f g
and a pair f' g'
satisfying f ≫ g = 0
and f' ≫ g' = 0
,
the image_to_kernel
morphisms intertwine the induced map on kernels and the induced map on images.
Given compatible commutative squares between
a pair f g
and a pair f' g'
satisfying f ≫ g = 0
and f' ≫ g' = 0
,
we get a morphism on homology.
Equations
- homology.map w w' α β p = category_theory.limits.cokernel.desc (image_to_kernel f g w) (category_theory.limits.kernel_subobject_map β ≫ category_theory.limits.cokernel.π (image_to_kernel f' g' w')) _
Auxiliary lemma for homology computations.
An isomorphism between two three-term complexes induces an isomorphism on homology.
Equations
- homology.map_iso w₁ w₂ α β p = {hom := homology.map w₁ w₂ α.hom β.hom p, inv := homology.map w₂ w₁ α.inv β.inv _, hom_inv_id' := _, inv_hom_id' := _}
homology f g w ≅ homology f' g' w'
if f = f'
and g = g'
.
(Note the objects are not changing here.)
Equations
- homology.congr w w' pf pg = {hom := homology.map w w' {left := 𝟙 (category_theory.arrow.mk f).left, right := 𝟙 (category_theory.arrow.mk f).right, w' := _} {left := 𝟙 (category_theory.arrow.mk g).left, right := 𝟙 (category_theory.arrow.mk g).right, w' := _} _, inv := homology.map w' w {left := 𝟙 (category_theory.arrow.mk f').left, right := 𝟙 (category_theory.arrow.mk f').right, w' := _} {left := 𝟙 (category_theory.arrow.mk g').left, right := 𝟙 (category_theory.arrow.mk g').right, w' := _} _, hom_inv_id' := _, inv_hom_id' := _}
We provide a variant image_to_kernel' : image f ⟶ kernel g
,
and use this to give alternative formulas for homology f g w
.
While image_to_kernel f g w
provides a morphism
image_subobject f ⟶ kernel_subobject g
in terms of the subobject API,
this variant provides a morphism
image f ⟶ kernel g
,
which is sometimes more convenient.
Equations
homology f g w
can be computed as the cokernel of image_to_kernel' f g w
.
Equations
- homology_iso_cokernel_image_to_kernel' f g w = {hom := category_theory.limits.cokernel.map (image_to_kernel f g w) (image_to_kernel' f g w) (category_theory.limits.image_subobject_iso f).hom (category_theory.limits.kernel_subobject_iso g).hom _, inv := category_theory.limits.cokernel.map (image_to_kernel' f g w) (image_to_kernel f g w) (category_theory.limits.image_subobject_iso f).inv (category_theory.limits.kernel_subobject_iso g).inv _, hom_inv_id' := _, inv_hom_id' := _}
homology f g w
can be computed as the cokernel of kernel.lift g f w
.