The Hom Functor

Hom(G, H) : GrpPC, GrpPC -> GrpAb, Map
Hom(G, H) : GrpAb, GrpAb -> GrpAb, Map
Given finite abelian groups G and H, return an abelian group A isomorphic to (Hom)(G, H), and a transfer map t such that, given an element a of A, t(a) yields the corresponding (Magma Map type) homomorphism from G to H. The structure of (Hom)(G, H) may thus be analyzed by examining A.
HomGenerators(G, H) : GrpAb, GrpAb -> GrpAb, Map
Given finite abelian groups G and H, return a sequence of (Z-module) generators of (Hom)(G, H). The generators are returned as actual (Magma Map type) homomorphisms. Note that (Hom)(G, H) is usually not free, so it is difficult to generate all homomorphisms uniquely using the generators alone (use Hom or Homomorphisms if that is desired).
AllHomomorphisms(G, H) : GrpAb, GrpAb -> [Map]
AllHomomorphisms(G, H) : GrpPC, GrpPC -> [Map]
Homomorphisms(G, H) : GrpAb, GrpAb -> [Map]
Given finite abelian groups G and H, return a sequence containing all elements of (Hom)(G, H). The elements are returned as actual (Magma Map type) homomorphisms. Note that this function simply uses Hom, transferring each element of the returned group to the actual Magma Map type homomorphism.

Example GrpAb_Relations (H75E14)

We examine A=(Hom)(G, H), for certain abelian groups G and H.
> G := AbelianGroup([2, 3]);
> H := AbelianGroup([4, 6]);
> A, t := Hom(G, H);
> #A;
12
> A;
Abelian Group isomorphic to Z/2 + Z/6
Defined on 2 generators
Relations:
    2*A.1 = 0
    6*A.2 = 0
> h := t(A.1);
> h;
Mapping from: GrpAb: G to GrpAb: H
> h(G.1);
3*H.2
> h(G.2);
0
We now enumerate all elements of A and examine the images of each generator of G under each homomorphism. We note that each possible list of images occurs only once.
> I := [<h(G.1), h(G.2)> where h is t(x): x in A];
> I;
[
    <0, 0>,
    <3*H.2, 0>,
    <2*H.1, 2*H.2>,
    <2*H.1 + 3*H.2, 2*H.2>,
    <0, 4*H.2>,
    <3*H.2, 4*H.2>,
    <2*H.1, 0>,
    <2*H.1 + 3*H.2, 0>,
    <0, 2*H.2>,
    <3*H.2, 2*H.2>,
    <2*H.1, 4*H.2>,
    <2*H.1 + 3*H.2, 4*H.2>
]
> #I;
12
> #Set(I);
12
V2.28, 13 July 2023