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