By a utility function we mean a GAP function which is: item needed by other functions in this package, item not (as far as we know) provided by the standard GAP library, item more suitable for inclusion in the main library than in this package.
The first two utilities give particular group homomorphisms,
InclusionMorphism(H,G)
and ZeroMorphism(G,H)
. We often prefer
gap> incs3 := InclusionMorphism( s3, s3 ); IdentityMapping( s3 ) gap> incs3.genimages; [ (1,2), (2,3) ]
to IdentityMapping(s3)
because the latter does not provide the
fields .generators
and the .genimages
which many of the functions
in this package expect homomorphisms to possess.
The second set of utilities involve endomorphisms and automorphisms of groups. For example:
gap> end8 := EndomorphismClasses( d8 );; gap> RecFields( end8 ); [ "isDomain", "isEndomorphismClasses", "areNonTrivial", "classes", "intersectionFree", "group", "latticeLength", "latticeReps" ] gap> Length( end8.classes ); 11 gap> end8.classes[3]; rec( quotient := d8.Q3, projection := OperationHomomorphism( d8, d8.Q3 ), autoGroup := Group( IdentityMapping( d8.Q3 ) ), rangeNumber := 2, isomorphism := GroupHomomorphismByImages( d8.Q3, d8.H2, [ (1,2) ], [ (1,5)(2,6)(3,7)(4,8) ] ), conj := [ () ] ) gap> innd8 := InnerAutomorphismGroup( d8 ); Inn(d8) gap> innd8.generators; [ InnerAutomorphism( d8, (1,3,5,7)(2,4,6,8) ), InnerAutomorphism( d8, (1,3)(4,8)(5,7) ) ] gap> IsAutomorphismGroup( innd8 ); true
The third set of functions construct isomorphic pairs of groups, where a faithful permutation representation of a given type of group is constructed. Types covered include finitely presented groups, groups of automorphisms and semidirect products. A typical pair record includes the following fields:
.type & the given group G,
.perm & the permutation representation P,
.t2p & the isomorphism G to P,
.p2t & the inverse isomorphism P to G,
.isTypePair & a boolean flag, normally true
.
The inner automorphism group of the dihedral group d8
is isomorphic
to k4
:
gap> Apair := AutomorphismPair( innd8 ); rec( auto := Inn(d8), perm := PermInn(d8), a2p := OperationHomomorphism( Inn(d8), PermInn(d8) ), p2a := GroupHomomorphismByImages( PermInn(d8), Inn(d8), [ (1,3), (2,4) ], [ InnerAutomorphism( d8, (1,3,5,7)(2,4,6,8) ), InnerAutomorphism( d8, (1,3)(4,8)(5,7) ) ] ), isAutomorphismPair := true ) gap> IsAutomorphismPair( Apair ); true
The final set of functions deal with lists of subsets of [1..n]
and
construct systems of distinct and common representatives using simple,
non-recursive, combinatorial algorithms. The latter function returns
two lists: the set of representatives, and a permutation of the
subsets of the second list. It may also be used to provide a common
transversal for sets of left and right cosets of a subgroup H of a
group G, although a greedy algorithm is usually quicker.
gap> L := [ [1,4], [1,2], [2,3], [1,3], [5] ];; gap> DistinctRepresentatives( L ); [ 4, 2, 3, 1, 5 ] gap> M := [ [2,5], [3,5], [4,5], [1,2,3], [1,2,3] ];; gap> CommonRepresentatives( L, M ); [ [ 4, 1, 3, 1, 5 ], [ 3, 5, 2, 4, 1 ] ] gap> CommonTransversal( s4, c3 ); [ (), (3,4), (2,3), (1,3)(2,4), (1,2)(3,4), (2,4), (1,4), (1,4)(2,3) ]
GAP 3.4.4