GroupHomomorphismByImages( G, H, gens, imgs )
GroupHomomorphismByImages returns the group homomorphism with source
G and range H that is defined by mapping the list gens of
generators of G to the list imgs of images in H.
gap> g := Group( (1,2,3,4), (1,2) );;
gap> h := Group( (2,3), (1,2) );;
gap> m := GroupHomomorphismByImages(g,h,g.generators,h.generators);
GroupHomomorphismByImages( Group( (1,2,3,4), (1,2) ), Group( (2,3),
(1,2) ), [ (1,2,3,4), (1,2) ], [ (2,3), (1,2) ] )
gap> Image( m, (1,3,4) );
(1,3,2)
gap> Kernel( m );
Subgroup( Group( (1,2,3,4), (1,2) ), [ (1,4)(2,3), (1,2)(3,4) ] )
Note that the result need not always be a single value mapping, even though the name seems to imply this. Namely if the elements in imgs do not satisfy all relations that hold for the generators gens, no element of G has a unique image under the mapping. This is demonstrated in the following example.
gap> g := Group( (1,2,3,4,5,6,7,8,9,10) );;
gap> h := Group( (1,2,3,4,5,6) );;
gap> m := GroupHomomorphismByImages(g,h,g.generators,h.generators);
GroupHomomorphismByImages( Group( ( 1, 2, 3, 4, 5, 6, 7, 8, 9,10
) ), Group( (1,2,3,4,5,6) ), [ ( 1, 2, 3, 4, 5, 6, 7, 8, 9,10) ],
[ (1,2,3,4,5,6) ] )
gap> IsMapping( m );
false
gap> Images( m, () );
(Subgroup( Group( (1,2,3,4,5,6) ), [ ( 1, 3, 5)( 2, 4, 6) ] )*())
gap> g.1^10;
() # the generator of <g> satisfies this relation
gap> h.1^10;
(1,5,3)(2,6,4) # but its image does not
The set of images of the identity returned by Images is the set of
elements h.1^n such that g.1^n is the identity in g.
The test whether a mapping constructed by GroupHomomorphismByImages is
a single valued mapping, is usually quite expensive. Note that this test
is automatically performed the first time that you apply a function that
expects a single valued mapping, e.g., Image or Images. There are
two possibilities to avoid this test. When you know that the mapping
constructed is really a single valued mapping, you can set the flag
map.isMapping to true. Then the functions assume that map is
indeed a mapping and do not test it again. On the other hand if you are
not certain whether the mapping is single valued, you can use
ImagesRepresentative instead of Image (see ImagesRepresentative).
ImagesRepresentative returns just one possible image, without testing
whether there might actually be more than one possible image.
GroupHomomorphismByImages calls
G.operations.GroupHomomorphismByImages( G, H, gens, imgs )
and returns this value.
The default function called this way is
GroupOps.GroupHomomorphismByImages. Below we describe how the mapping
functions are implemented for such a mapping. The functions not
mentioned below are implemented by the default functions described in
Mapping Functions for Group Homomorphisms.
All the function below first compute the list of elements of G with an
orbit algorithm, sorts this list, and stores this list in
hom.elements. In parallel they computes and sort a list of images,
and store this list in hom.images.
IsMapping( map )
The mapping constructed by GroupHomomorphismByImages is a single valued
mapping if for each i and for each k the following equation holds
map.images[Position(map.elements,map.elements[i]*gens[k])] .
= map.images[i] * imgs[k]
Image( map, elm )
If the mapping map is a single valued mapping, the image of an element
elm is computed as map.images[ Position(map.elements,elm) ].
ImagesRepresentative( map, elm )
The representative of the images of an element elm under the mapping
map is computed as map.images[ Position(map.elements,elm) ].
InverseMapping( map )
The inverse of the mapping map is constructed as
GroupHomomorphismByImages( H, G, imgs, gens ).
CompositionMapping( map1, map2 )
If map2 is a mapping constructed by GroupHomomorphismByImages the
composition is constructed by making a copy of map2 and replacing every
element in map2.images with its image under map1.
Look under GroupHomomorphismByImages in the index to see for which groups this function is overlaid.
GAP 3.4.4