> < ^ From:

^ Subject:

Group Identification functions in GAP =====================================

In discussions with other mathematicians I recently found out that a couple

of very helpful GAP functions do not seem to be well known, probably because

they are hidden in the manual. To change this I decided to use the forum

to give a short explanation of them.

In this mail I want to describe some identification functions for groups.

These functions compare given groups with those in one of GAPs group

libraries and identify the type up to isomorphism. This is done by

searching for properties that identify the groups uniquely rather

than searching explicitely for isomorphisms. Accordingly, the functions

are relatively fast. They don't give Isomorphisms, however. I will give

relatively short descriptions, the manual gives more information.

The first of the functions to be mentioned is 'GroupId'. It will recognize

the abstract isomorphism type of a given group. The function returns a

record with several components (depending on the group), see the manual for

further explanation. Sometimes components give the

name or other identifications. If the size of the group is at most 100, the

component 'catalogue' (of the form [size,nr]) gives the isomorphic group in

the catalogue of solvable groups of small order: SolvableGroup(size,nr). (The

only exception is A5, which is group 60/13; but obviously nonsolvable.)

If the group is a 2-group or a 3-group, the component 'pGroupId' gives the

number in Eamonn O'Brien's catalogue of 2- and 3-groups. To use this

feature also for p-groups of size>100, the ANU PQ share package must be loaded.

To get an actual isomorphism, you would need to call

'IsomorphismGroups(group1,group2)'.

The corresponding manual section is 'GroupId'.

As an example, we show that the central product of Q8 with Q8 is isomorphic

to the central product of D8 with D8:

gap> f:=FreeGroup(4); Group( f.1, f.2, f.3, f.4 ) #D8 central product D8 gap> g:=f/[f.1^4,f.2^2,f.1^f.2*f.1,f.3^4,f.4^2,f.3^f.4*f.3,f.1^2/f.3^2, > Comm(f.1,f.3),Comm(f.1,f.4),Comm(f.2,f.3),Comm(f.2,f.4)]; Group( f.1, f.2, f.3, f.4 ) gap> Size(g); 32

# GroupId does not work for finitely presented groups, as it compares elements.

# So we make a permutaton group.

gap> p:=OperationCosetsFpGroup(g,TrivialSubgroup(g));;

gap> GroupId(p);

rec(

catalogue := [ 32, 42 ],

names := [ "D8YD8" ],

size := 32,

pGroupId := 49 )

#Q8 central product Q8 gap> h:=f/[f.1^4,f.2^4,(f.1/f.2)^2/f.1^2,f.1^2/f.2^2, > f.3^4,f.4^4,(f.3/f.4)^2/f.3^2,f.3^2/f.4^2,f.1^2/f.3^2, > Comm(f.1,f.3),Comm(f.1,f.4),Comm(f.2,f.3),Comm(f.2,f.4)]; Group( f.1, f.2, f.3, f.4 ) gap> Size(h); 32 gap> q:=OperationCosetsFpGroup(h,TrivialSubgroup(h));; gap> GroupId(q); rec( catalogue := [ 32, 42 ], names := [ "D8YD8" ], size := 32, pGroupId := 49 )

(Finding the isomorphism using 'IsomorphismGroups' would be quite difficult

in this case, as both groups have a Frattini factor group 2^4).

The other function is 'TransitiveIdentification'. It identifies

transitive permutation groups up to conjugacy in the symmetric group and

returns the number in the catalogue of transitive groups of the same degree

(provided the degree is at most 15). Calling the corresponding group (with

'TransitiveGroup(deg,nr)') provides you with a name.

To get the conjugating permutation, one would have to embed both groups in

the symmetric group and to use 'RepresentativeOperation(Sn,group1,group2)'.

The respective manual section is 'The transitive groups library'.

As an example, we determine the conjugacy classes of maximal transitive

subgroups of S3\wr S4:

gap> g:=TransitiveGroup(12,280); [S(3)^4]A(4) = S(3) wr A(4) gap> a:=AgGroup(g);; gap> s:=SpecialAgGroup(a); Group( g7, g1, g2, g3, g5, g6, g4, g8, g9, g10, g11 ) gap> m:=ConjugacyClassesMaximalSubgroups(s);; gap> m:=List(m,Representative);; gap> m:=List(m,i->Image(a.bijection,Image(s.bijection,i)));; gap> m:=Filtered(m,i->IsTransitive(i,[1..12])); [Subgroup([S(3)^4]A(4)=S(3)wrA(4),[(1,2,3)(5,6,7)(9,10,11), (1,2)(3,4)(5,6)(7,8)(9,10)(11,12),(1,4)(2,3)(5,8)(6,7)(9,12)(10,11), (1,5)(2,6)(3,7)(4,8),(2,6)(3,7),(3,7)(4,8),(1,5,9),(2,6,10),(3,7,11), (4,8,12)]), Subgroup([S(3)^4]A(4)=S(3)wrA(4),[(1,2)(3,4)(5,6)(7,8)(9,10)(11,12), (1,4)(2,3)(5,8)(6,7)(9,12)(10,11),(1,5)(2,6)(3,7)(4,8),(2,6)(3,7),(3,7)(4,8), (3,7),(1,5,9),(2,6,10),(3,7,11),(4,8,12)])] gap> List(m,TransitiveIdentification); [ 271, 261 ] gap> List(last,i->TransitiveGroup(12,i)); [ [3^4:2^3]A(4), [S(3)^4]E(4) = S(3) wr E(4) ]

I hope these descriptions are helpful,

Alexander Hulpke

> < [top]