> < ^ From:

< ^ Subject:

Dear GAP-Forum,

Anatolii^ Rukolaine asked about computing class multiplication coefficients.

As Thomas Breuer already pointed out, ususally the easiest and by far

fastest way to get those coefficients is via the character table (even

though the character table for a group in general is computed by the

Dixon-Schneider Algorithm, using class multiplication coefficients).

The reason for this is that the algorithm for 'CharTable' tries to

compute as few coefficients as possible, picking classes for which

the coefficients are computed cheaply.

However the situation might occur that one wants to compute only very few

coefficients of a group for which the computation of the complete

character table is not possible (take for example a group of size a few

100000 with 2000 conjugacy classes or a group too big to compute the full

character table in reasonable time). For this situation I want to describe

shortly how to access functions, 'CharTable' uses. These functions are

somehow internal, therefore one should not use them in any other way than

described here. The function 'ClassMatrixColumn' uses not just a simple

evaluation of all class products, but also orbits of the centralizer of one

element (if c\in C_G(y) then xy and x^c*y are in the same class) and orbits

of the Galois group. (For groups like M12 this usually reduces the number

of tests neccessary by a factor of 10 or more.) They also try to identify

classes quickly. If you are interested in the details: they are described

in my diploma thesis which can be found on my WWW homepage:

http://www.math.rwth-aachen.de/~ahulpke

As an example, lets compute part of the coefficients corresponding to class

6B and 5A in M12.

# get M12 gap> g:=OnePrimitiveGroup(DegreeOperation,12,i->Size(i)>95000,true); M(12) # prepare for usage of the Dixon functions: # note: This function enforces computation of the conjugacy classes. gap> d:=DixonInit(g); DixonRecord(M(12)) # we have to use the classes in the ordering used by the dixon functions. # * this ordering might be different than the one stored in group or # character table ! * gap> d.conjugacyClasses; [ ConjugacyClass( M(12), () ), ConjugacyClass( M(12), ( 1,10)( 2, 7)( 3,12) ( 4, 5)( 6, 9)( 8,11) ), ConjugacyClass( M(12), ( 1,10)( 2,11)( 3,12) ( 5, 6) ), ConjugacyClass( M(12), ( 2, 6, 3)( 4, 7, 8)( 5,12,11) ), ConjugacyClass( M(12), ( 1, 8, 2)( 3,11,12)( 4, 6, 7)( 5, 9,10) ), ConjugacyClass( M(12), ( 2, 4, 5,12)( 3, 7,10, 6) ), ConjugacyClass( M(12), ( 1,11, 3, 8)( 2, 6)( 4, 5, 7,12)( 9,10) ), ConjugacyClass( M(12), ( 1, 8, 4, 2, 5,11)( 3,12, 9, 6,10, 7) ), ConjugacyClass( M(12), ( 1, 4, 9,12,10, 6, 3, 8,11, 2, 5) ), ConjugacyClass( M(12), ( 1, 3, 4, 8, 9,11,12, 2,10, 5, 6) ), ConjugacyClass( M(12), ( 1, 8, 6, 7,12)( 2, 3,10,11, 9) ), ConjugacyClass( M(12), ( 1, 2, 8, 3, 6,10, 7,11,12, 9)( 4, 5) ), ConjugacyClass( M(12), ( 1, 5, 7, 6, 4, 8, 2,11)( 3,12,10, 9) ), ConjugacyClass( M(12), ( 1,11)( 2, 7, 4,10, 5, 6,12, 3) ), ConjugacyClass( M(12), ( 1,10)( 2,12, 6,11, 3, 5)( 4, 8, 7) ) ] # class 6B is at position 15 (use permutation character), 5A at position 11.

# get an empty matrix

gap> m:=0*IdentityMat(15,1);;

# compute the 11-th column of matrix 15

gap> d.ClassMatrixColumn(d,m,15,11);

# look at it gap> m; [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 280, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 440, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 510, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1320, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1440, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1440, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1560, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1560, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1980, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1980, 0, 0, 0, 0 ], [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2680, 0, 0, 0, 0 ] ]

# just to check, compare with the value from the character table. Here 6B is

# class number 10 and 5A class number 8

gap> c:=CharTable("m12");

CharTable( "M12" )

# as we see, the values agree gap> MatClassMultCoeffsCharTable(c,10); [ [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0 ], [ 0, 0, 0, 54, 72, 96, 96, 60, 72, 54, 72, 72, 60, 66, 66 ], [ 0, 0, 192, 72, 96, 80, 80, 80, 96, 87, 72, 72, 80, 88, 88 ], [ 0, 240, 256, 270, 288, 304, 304, 280, 288, 330, 288, 288, 280, 286, 286 ], [ 0, 480, 512, 432, 432, 416, 416, 440, 432, 464, 432, 432, 440, 440, 440 ], [ 0, 720, 480, 513, 468, 384, 528, 510, 468, 489, 540, 468, 510, 495, 495 ], [ 0, 720, 480, 513, 468, 528, 384, 510, 468, 489, 468, 540, 510, 495, 495 ], [ 0, 1440, 1536, 1512, 1584, 1632, 1632, 1560, 1584, 1608, 1584, 1584, 1560, 1584, 1584 ], [ 0, 1440, 1536, 1296, 1296, 1248, 1248, 1320, 1296, 1392, 1296, 1296, 1320, 1320, 1320 ], [ 15840, 2160, 2784, 2970, 2784, 2608, 2608, 2680, 2784, 2574, 2592, 2592, 2680, 2618, 2618 ], [ 0, 2160, 1728, 1944, 1944, 2160, 1872, 1980, 1944, 1944, 1944, 2088, 1980, 1980, 1980 ], [ 0, 2160, 1728, 1944, 1944, 1872, 2160, 1980, 1944, 1944, 2088, 1944, 1980, 1980, 1980 ], [ 0, 1440, 1536, 1512, 1584, 1632, 1632, 1560, 1584, 1608, 1584, 1584, 1560, 1584, 1584 ], [ 0, 1440, 1536, 1404, 1440, 1440, 1440, 1440, 1440, 1428, 1440, 1440, 1440, 1452, 1452 ], [ 0, 1440, 1536, 1404, 1440, 1440, 1440, 1440, 1440, 1428, 1440, 1440, 1440, 1452, 1452 ] ] gap> List(MatClassMultCoeffsCharTable(c,10),i->i[8]); [ 0, 60, 80, 280, 440, 510, 510, 1560, 1320, 2680, 1980, 1980, 1560, 1440, 1440 ]

Hope this helps,

Alexander Hulpke

> < [top]