A group homomorphism is a mapping from one group to another that respects multiplication and inverses. They are implemented as a special class of mappings, so in particular all operations for mappings, such as Image (32.4-6), PreImage (32.5-6), PreImagesRepresentative (32.5-4), KernelOfMultiplicativeGeneralMapping (32.9-5), Source (32.3-8), Range (32.3-7), IsInjective (32.3-4) and IsSurjective (32.3-5) (see chapter 32, in particular section 32.9) are applicable to them.
Homomorphisms can be used to transfer calculations into isomorphic groups in another representation, for which better algorithms are available. Section 40.5 explains a technique how to enforce this automatically.
Homomorphisms are also used to represent group automorphisms, and section 40.6 explains GAP's facilities to work with automorphism groups.
Section 40.9 explains how to make GAP to search for all homomorphisms between two groups which fulfill certain specifications.
The most important way of creating group homomorphisms is to give images for a set of group generators and to extend it to the group generated by them by the homomorphism property.
A second way to create homomorphisms is to give functions that compute image and preimage. (A similar case are homomorphisms that are induced by conjugation. Special constructors for such mappings are described in section 40.6).
The third class are epimorphisms from a group onto its factor group. Such homomorphisms can be constructed by NaturalHomomorphismByNormalSubgroup (39.18-1).
The fourth class is homomorphisms in a permutation group that are induced by an action on a set. Such homomorphisms are described in the context of group actions, see chapter 41 and in particular ActionHomomorphism (41.7-1).
‣ GroupHomomorphismByImages( G, H[[, gens], imgs] ) | ( function ) |
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.
If omitted, the arguments gens and imgs default to the GeneratorsOfGroup (39.2-4) value of G and H, respectively. If H is not given the mapping is automatically considered as surjective.
If gens does not generate G or if the mapping of the generators does not extend to a homomorphism (i.e., if mapping the generators describes only a multi-valued mapping) then fail is returned.
This test can be quite expensive. If one is certain that the mapping of the generators extends to a homomorphism, one can avoid the checks by calling GroupHomomorphismByImagesNC (40.1-2). (There also is the possibility to construct potentially multi-valued mappings with GroupGeneralMappingByImages (40.1-3) and to test with IsMapping (32.3-3) whether they are indeed homomorphisms.)
‣ GroupHomomorphismByImagesNC( G, H[[, gens], imgs] ) | ( operation ) |
GroupHomomorphismByImagesNC creates a homomorphism as GroupHomomorphismByImages (40.1-1) does, however it does not test whether gens generates G and that the mapping of gens to imgs indeed defines a group homomorphism. Because these tests can be expensive it can be substantially faster than GroupHomomorphismByImages (40.1-1). Results are unpredictable if the conditions do not hold.
If omitted, the arguments gens and imgs default to the GeneratorsOfGroup (39.2-4) value of G and H, respectively.
(For creating a possibly multi-valued mapping from G to H that respects multiplication and inverses, GroupGeneralMappingByImages (40.1-3) can be used.)
gap> gens:=[(1,2,3,4),(1,2)]; [ (1,2,3,4), (1,2) ] gap> g:=Group(gens); Group([ (1,2,3,4), (1,2) ]) gap> h:=Group((1,2,3),(1,2)); Group([ (1,2,3), (1,2) ]) gap> hom:=GroupHomomorphismByImages(g,h,gens,[(1,2),(1,3)]); [ (1,2,3,4), (1,2) ] -> [ (1,2), (1,3) ] gap> Image(hom,(1,4)); (2,3) gap> map:=GroupHomomorphismByImages(g,h,gens,[(1,2,3),(1,2)]); fail
‣ GroupGeneralMappingByImages( G, H, gens, imgs ) | ( operation ) |
‣ GroupGeneralMappingByImages( G, gens, imgs ) | ( operation ) |
‣ GroupGeneralMappingByImagesNC( G, H, gens, imgs ) | ( operation ) |
‣ GroupGeneralMappingByImagesNC( G, gens, imgs ) | ( operation ) |
returns a general mapping defined by extending the mapping from gens to imgs homomorphically. If the range H is not given the mapping will be made automatically surjective. The NC version does not test whether gens are con