module Cat.Abelian.Images {o } {C : Precategory o } (A : is-abelian C) where
open is-abelian A

Images in abelian categories🔗

Let be a morphism in an abelian category which (by definition) admits a canonical decomposition as

where the map is epic, is monic, and the indicated isomorphism arises from in a canonical way, using the universal properties of kernels and cokernels. What we show in this section is that the arrow is an image factorisation for It is the largest monomorphism through which factors. Since this construction does not depend on any specificities of we conclude that every map in an abelian category factors as a regular epi followed by a regular mono.

The image🔗

images :  {A B} (f : Hom A B)  Image C f
images f = im where
  the-img : ↓Obj (!Const (cut f)) Forget-full-subcat
  the-img .x = tt
  the-img .y .fst = cut (Ker.kernel (Coker.coeq f))
  the-img .y .snd {c} = kernels-are-subobjects C  _ (Ker.has-is-kernel _)

Break down as an epi followed by a mono We can take the map as the “image” subobject. We must provide a map filling the dotted line in

but this is the epimorphism in our factorisation. More precisely, it’s the epimorphism followed by the isomorphism in the decomposition

  the-img .map ./-Hom.map = decompose f .fst  Coker.coeq _
  the-img .map ./-Hom.commutes = pulll (Ker.factors _)  Coker.factors _

Universality🔗

Suppose that we’re given another decomposition of as

and we wish to construct a map 1, hence a map such that the triangle

commutes.

  im : Image C f
  im .Initial.bot = the-img
  im .Initial.has⊥ other = contr factor unique where
    factor : ↓Hom (!Const (cut f)) Forget-full-subcat the-img other
    factor .α = tt
    factor .β ./-Hom.map =
        Coker.universal (Ker.kernel f) {e' = other .map .map} path
       coker-ker≃ker-coker f .is-invertible.inv

Observe that by the universal property of 2, if we have a map such that then we can obtain a (unique) map s.t. the triangle above commutes!

      where abstract
        path : other .map .map  0m  other .map .map  kernel f .Kernel.kernel
        path =
          other .y .snd _ _ $ sym $
                pulll (other .map .commutes)
            ·· Ker.equal f
            ·· ∅.zero-∘r _
            ·· 0m-unique
            ·· sym (ap₂ _∘_ refl ∘-zero-r  ∘-zero-r)

To satisfy that equation, observe that since is monic, it suffices to show that but we have assumed that and by the definition of kernel. Some tedious isomorphism-algebra later, we have shown that is the image of

Here’s the tedious isomorphism algebra.
    factor .β ./-Hom.commutes = invertible→epic (coker-ker≃ker-coker f) _ _ $
      Coker.unique₂ (Ker.kernel f)
        (sym (Ker.equal f  ∅.zero-∘r _  0m-unique  sym ∘-zero-r))
        (ap₂ _∘_ ( sym (assoc _ _ _)
                         ap₂ _∘_ refl (cancelr
                          (coker-ker≃ker-coker f .is-invertible.invr))) refl
               pullr (Coker.factors _)  other .map .commutes)
        (sym (decompose f .snd  assoc _ _ _))
    factor .sq = /-Hom-path $ sym $ other .y .snd _ _ $
      pulll (factor .β .commutes)
       the-img .map .commutes
      ·· sym (other .map .commutes)
      ·· ap (other .y .fst .map ∘_) (intror refl)

    unique :  x  factor  x
    unique x = ↓Hom-path _ _ refl $ /-Hom-path $ other .y .snd _ _ $
      sym (x .β .commutes  sym (factor .β .commutes))

  1. this is an inequality in the poset of subobjects of which is a map in the slice over ↩︎

  2. hence of after adjusting by our old friendly isomorphism↩︎