> < ^ Date: Wed, 29 Mar 2000 15:31:22 +0200 (CEST)
> < ^ From: Thomas Breuer <Thomas.Breuer@Math.RWTH-Aachen.DE >
< ^ Subject: Re: ConnectGroupAndCharacterTable

Dear GAP Forum,

Jeremy Rickard asked how to use groups together with the character tables
in the GAP library.

Suppose I have a finite simple group G and want to work with its
Brauer characters. Then I can just use the Brauer character tables in
GAP4's libraries.

Suppose I then want to construct subgroups of G and work with
induced/restricted characters and so on. Then I can get a group
(isomorphic to) G from the libraries with which I can do as I will,
but to use the library character tables I have to use the function
ConnectGroupAndCharacterTable to associate columns of the character
table with conjugacy classes of G in the proper way.

First question: Is this a sensible way to do this, or am I missing
something easier?

Occasionally, ConnectGroupAndCharacterTable will fail. For example, if
G=J2, then up to automorphisms of the character table there are two
ways of associating columns with conjugacy classes that the function
can't decide between.

Second question: If I know which way is correct, is there some way to
tell GAP to use that way to connect the group and character table?

First answer:
Yes, currently this is the intended way to use the ``interface''
between concretely given groups and character tables in the GAP library.

Eventually this interface will be improved by using more database
information.
For many almost simple groups, Rob Wilson and his collaborators
have defined conjugacy class representatives in terms of standard
generators of the groups; this reduces the problem to identify the
classes with the columns of the character tables (in ATLAS format)
to the problem to find standard generators from the given generators.
(See http://www.mat.bham.ac.uk/atlas/ for details.)
A GAP interface to this database will soon be provided.

Second answer:
Yes, such a possibility exists, but it could be more user-friendly.
(The next version of GAP will provide a better solution;
To those interested in it right now,
I can send the function in question in a separate mail on request.)

For the example $G = J_2$, this might look as follows.

First we fetch the group and the library table.
(By the way, the GAP table of marks might be very useful
if one wants to deal with many subgroups of $J_2$.)

gap> tom:= TableOfMarks( "J2" );
TableOfMarks( "J2" )
gap> j2:= UnderlyingGroup( tom );
<permutation group of size 604800 with 2 generators>
gap> tbl:= CharacterTable( "J2" );
CharacterTable( "J2" )
gap> ConnectGroupAndCharacterTable( j2, tbl );
false

So GAP cannot automatically identify the classes of $J_2$.
In order to see which classes cause problems,
we use `CompatibleConjugacyClasses'.

gap> CompatibleConjugacyClasses( tbl );
[ [ 17, 18 ], [ 9, 10 ] ]

The problem is that after choosing one class of element order $5$
and centralizer order $300$ as class {\tt 5A}, distinguishing the
classes {\tt 5C} and {\tt 5D} (and their square roots in the classes
{\tt 10C} and {\tt 10D}) is beyond the criteria used by
`ConnectGroupAndCharacterTable'.
Let us see how we can identify the classes by hand.

gap> ccl:= ConjugacyClasses( j2 );;
gap> reps:= List( ccl, Representative );;
gap> List( reps, Order );
[ 1, 15, 15, 5, 5, 3, 10, 10, 2, 6, 3, 8, 4, 2, 5, 5, 10, 10, 7, 12, 6 ]
gap> reps[2]^3 in ccl[4];               
true

We may choose the class at position $2$ in the list {\tt ccl} to be
{\tt 15A}, then class number $4$ is {\tt 5B}, according to the ATLAS.

gap> OrdersClassRepresentatives( tbl );
[ 1, 2, 2, 3, 3, 4, 5, 5, 5, 5, 6, 6, 7, 8, 10, 10, 10, 10, 12, 15, 15 ]
gap> nr:= NrConjugacyClasses( tbl );                              
21
gap> List( [ 1 .. 21 ],
>          i -> ClassMultiplicationCoefficient( tbl, 8, 7, i ) );
[ 0, 160, 0, 0, 15, 0, 1, 1, 2, 2, 0, 12, 7, 0, 4, 4, 0, 0, 32, 8, 8 ]
gap> List( [ 1 .. 21 ],
>          i -> ClassMultiplicationCoefficient( tbl, 8, 9, i ) );
[ 0, 0, 48, 216, 0, 96, 12, 360, 252, 2, 48, 12, 35, 16, 20, 4, 20, 100,
  24, 18, 93 ]
gap> List( [ 1 .. 21 ],
>          i -> ClassMultiplicationCoefficient( tbl, 8, 10, i ) );
[ 0, 0, 0, 0, 36, 0, 12, 72, 2, 60, 24, 48, 35, 32, 104, 0, 20, 60, 48,
  81, 18 ]

Thus the classes {\tt 5C} and {\tt 5D} can be distinguished by inspecting
products of a {\tt 5B} element with elements in the other conjugacy classes
of element order $5$.

gap> moved:= NrMovedPoints( j2 );
100
gap> IsTransitive( j2, MovedPoints( j2 ) );
true
gap> PermChars( tbl, moved );
[ Character( CharacterTable( "J2" ), [ 100, 20, 0, 10, 4, 8, 0, 0, 0, 0,
      2, 0, 2, 2, 0, 0, 0, 0, 2, 0, 0 ] ) ]
gap> repeat
>      y:= reps[4] * reps[15]^Random( j2 );
> until Order( y ) = 3;
gap> moved - NrMovedPoints( y );
10

We found a {\tt 3A} element as a product of a {\tt 5B} element and an element
in the $15$-th conjugacy class, so this class must be {\tt 5C}.
So we are now able to set up the part of the bijection we need.

gap> bij:= [];;   
gap> bij[20]:=  2;; 
gap> bij[ 9]:= 15;;

Completing this bijection by hand is not difficult but tedious,
and apparently GAP does not provide the possibility to deal with
partial bijections.
As said above, the next version of GAP will behave nicer in this
respect, and this will look as follows.

gap> CompatibleConjugacyClasses( j2, ccl, tbl, rec( bijection:= bij ) );
[ 1, 14, 9, 6, 11, 13, 5, 4, 15, 16, 21, 10, 19, 12, 7, 8, 18, 17, 20, 2,
  3 ]
gap> ConnectGroupAndCharacterTable( j2, tbl, rec( bijection:= bij ) );
true

I hope this helps.

Kind regards,
Thomas


> < [top]