module Algebra.Group.Ab.Hom where

Maps between abelian groupsπŸ”—

As groups are an algebraic theory, if GG is a group, we can equip the set of functions Xβ†’GX \to G with the pointwise group structure. When considering a pair of groups G,HG, H, however, we’re less interested in the functions Gβ†’HG \to H, and more interested in the homomorphisms Gβ†’HG \to H. Can these be equipped with a group structure?

It turns out that the answer is no: if you try to make Hom\mathbf{Hom} into a functor on Grp\mathbf{Grp}, equipping A→BA \to B the pointwise group structure, you find out that the sum of group homomorphisms can not be shown to be a homomorphism. But when considering abelian groups, i.e. the category Ab\mathbf{Ab}, this does work:

  make-ab-on-hom .mul f g .hom x = f # x B.* g # x
  make-ab-on-hom .mul f g .preserves .pres-⋆ x y =
    f # (x A.* y) B.* g # (x A.* y)          β‰‘βŸ¨ apβ‚‚ B._*_ (f .preserves .pres-⋆ x y) (g .preserves .pres-⋆ x y) ⟩
    (f # x B.* f # y) B.* (g # x B.* g # y)  β‰‘βŸ¨ B.pullr (B.pulll refl)  ⟩
    f # x B.* (f # y B.* g # x) B.* g # y    β‰‘βŸ¨ (Ξ» i β†’ f # x B.* B.commutes {x = f # y} {y = g # x} i B.* (g # y)) ⟩
    f # x B.* (g # x B.* f # y) B.* g # y    β‰‘βŸ¨ B.pushr (B.pushl refl) ⟩
    (f # x B.* g # x) B.* (f # y B.* g # y)  ∎

  make-ab-on-hom .inv f .hom x = B._⁻¹ (f # x)
  make-ab-on-hom .inv f .preserves .pres-⋆ x y =
    f # (x A.* y) B.⁻¹            β‰‘βŸ¨ ap B._⁻¹ (f .preserves .pres-⋆ x y) ⟩
    (f # x B.* f # y) B.⁻¹        β‰‘βŸ¨ B.inv-comm ⟩
    (f # y B.⁻¹) B.* (f # x B.⁻¹) β‰‘βŸ¨ B.commutes ⟩
    (f # x B.⁻¹) B.* (f # y B.⁻¹) ∎

  make-ab-on-hom .1g .hom x = B.1g
  make-ab-on-hom .1g .preserves .pres-⋆ x y = B.introl refl

It’s only a little more work to show that this extends to a functor AbopΓ—Abβ†’Ab\mathbf{Ab}^{\mathrm{op}} \times \mathbf{Ab} \to \mathbf{Ab}.

Ab-hom-functor : βˆ€ {β„“} β†’ Functor (Ab β„“ ^op Γ—αΆœ Ab β„“) (Ab β„“)
Ab-hom-functor .Fβ‚€ (A , B) = Ab[ A , B ]
Ab-hom-functor .F₁ (f , g) .hom h = g Ab.∘ h Ab.∘ f
Ab-hom-functor .F₁ (f , g) .preserves .pres-⋆ x y = ext Ξ» z β†’
  g .preserves .pres-⋆ _ _
Ab-hom-functor .F-id    = trivial!
Ab-hom-functor .F-∘ f g = trivial!