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.
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).
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.
> 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); 0We 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