Character Tables in GAP
There are essentially 3 ways of obtaining and working with a character table in GAP. The first is to simply get
the table from GAP’s extensive library of character tables:
gap> c:=CharacterTable("M11");
CharacterTable( "M11" )
gap> OrdersClassRepresentatives(c);
[ 1,2,3,4,5,6,8,8,11,11 ]
gap> SizesCentralizers(c);
[ 7920,48,18,8,5,6,8,8,11,11 ]
gap> Display(c);
The result of Display is the character table with extra information.
M11
2
3
5
11
4
2
1
1
4
1
.
.
1
2
.
.
3
.
.
.
.
.
1
.
1
1
.
.
3
.
.
.
3
.
.
.
.
.
.
1
.
.
.
1
2P
3P
5P
11P
1a
1a
1a
1a
1a
2a
1a
2a
2a
2a
3a
3a
1a
3a
3a
4a
2a
4a
4a
4a
5a
5a
5a
1a
5a
6a
3a
2a
6a
6a
8a
4a
8a
8b
8a
8b
4a
8b
8a
8b
11a
11b
11a
11a
1a
11b
11a
11b
11b
1a
1
10
10
10
11
16
16
44
45
55
1 1 1 1 1 1 1
2 1 2 . -1 . .
-2 1 . . 1 A -A
-2 1 . . 1 -A A
3 2 -1 1 . -1 -1
. -2 . 1 . . .
. -2 . 1 . . .
4 -1 . -1 1 . .
-3 . 1 . . -1 -1
-1 1 -1 . -1 1 1
1
-1
-1
-1
.
B
/B
.
1
.
1
-1
-1
-1
.
/B
B
.
1
.
X.1
X.2
X.3
X.4
X.5
X.6
X.7
X.8
X.9
X.10
A = E(8)+E(8)^3 = ER(-2) = i2
B = E(11)+E(11)^3+E(11)^4+E(11)^5+E(11)^9
= (-1+ER(-11))/2 = b11
Once a table has been obtained,the Irr component can be used to obtain the list of irreducible characters.
Scalar products can be used for decomposition into irreducibles. The character functions also permit to pass
lists of character values as argument,as long as the character table is given as an extra argument.
gap> Irr(c)[2];
Character( CharacterTable( "M11" ),[ 10,2,1,2,0,-1,0,0,-1,-1 ] )
gap> ScalarProduct(Irr(c)[2],Irr(c)[3]);
0
gap> reg:=[7920,0,0,0,0,0,0,0,0,0,0,0,0,0,0];; # regular character
gap> ScalarProduct(c,Irr(c)[2],reg);
10
gap> MatScalarProducts(c,Irr(c),[reg]);
[ [ 1,10,10,10,11,16,16,44,45,55 ] ]
Computing a character table for a group
The second possibility is to use an algorithm due to John Dixon to compute the (central) characters as common
eigenvectors of the structure constants of the character table. GAP will do this automatically if a group is given.
(We will see later in the lecture how it works.)
gap> g:=TransitiveGroup(12,295);
M(12)
gap> c:=CharacterTable(g);
CharacterTable( M(12) )
gap> Display(c);
CT1 [...]
The call to CharacterTable in fact computes only the table head (classes,powermap),the call to Display (or
a call to Irr) will enforce computation of the characters (and thus takes some time). This process can take
substantial time and memory.
Computing a character table by character arithmetic
In this approach,we start with information about conjugacy classes and some representation and try to use the
properties of a character table and character operations to obtain irreducible characters. (This is the method
with which – using many extensions – many tables have been computed for the first time,often without being
able to compute explicitly in the group. The calculations would be feasible by hand, but it is far more convenient
to use the computer.)
We illustrate this in the example of the symmetric group S6 . Its conjugacy classes are given by the partitions
of 6:
∣r∣
∣r G ∣
∣CG (r)∣
1
2
1
2
1 15
720 48
2,2 2,2,2
2
2
45
15
16
48
3
3
40
18
3,2 3,3
6
3
120 40
6 18
4 4,2
4
4
90 90
8
8
5
5
144
5
6
6
120
6
Here we have calculated the class orders by a combinatorial argument and obtained the centralizer orders in
turn.
We now create a character table (head) with this information:
gap> c:=rec(Identifier:="S6",
> OrdersClassRepresentatives:=[ 1,2,2,2,3,6,3,4,4,5,6 ],
> SizesCentralizers:=[ 720,48,16,48,18,6,18,8,8,5,6 ],
> UnderlyingCharacteristic:=0);;
gap> ConvertToCharacterTable(c);
CharacterTable( "S6" )
We start building a list of irreducible characters. Our first entries are the two characters of degree 1 (as S6′ = A6 ).
gap> l:=[];;
gap> Add(l,Character(c,[1,1,1,1,1,1,1,1,1,1,1]));
gap> Add(l,Character(c,[ 1,-1,1,-1,1,-1,1,-1,1,1,-1 ]));
Next we build the permutation character (again based on the cycle shapes of the elements). We find that it has
product 2 with itself and thus must be the sum of two irreducibles. By problem 1 we know that one of them is
the trivial character,but we can also check this with character arithmetic:
gap> p:=Character(c,[ 6,4,2,0,3,1,0,2,0,1,0 ]);;
gap> ScalarProduct(p,p);
2
gap> ScalarProduct(p,l[1]);
1
We thus can subtract the trivial character and obtain an irreducible one:
gap> p:=p-l[1];
VirtualCharacter(CharacterTable("S6"),[5,3,1,-1,2,0,-1,1,-1,0,-1])
In fact it turns out to be more convenient to use the Reduced command. This takes a list of irreducible characters
and a list of characters and projects on the orthogonal complement of the first list. It also notes arising irreducible
characters:
gap> Reduced(l,[p]);
rec( remainders := [ ],
irreducibles :=
[ Character(CharacterTable("S6"),[5 ,1 -1,2,0,-1,1,-1,0,-1]) ]
gap> Add(l,last.irreducibles[1]);
)
We now can use simple products to compute tensor products of characters and immediately get one further
irreducible character:
gap> t:=l[2]*l[3];
Character( CharacterTable("S6"),[ 5,-3,1,1,2,0,-1,-1,-1,0,1 ] )
gap> ScalarProduct(t,t);
1
gap> t in l;
false
gap> Add(l,t);
Next we try the characters for (anti)symmetric parts of a tensor product. By Problem 25 we can calculate
these,once we know the second powermape (which we do from the element cycle structures) and store it in
the table:
gap> pow:=[1,1,1,1,5,5,7,3,3,10,7];;
gap> ComputedPowerMaps(c)[2]:=pow;;
Once we obtain lists of characters,we reduce by the irreducible characters we know and remember found irreducible characters.
gap> s:=AntiSymmetricParts(c,l,2);
[ VirtualCharacter( CharacterTable("S6"),[ 0,0,0,0,0,0,0,0,0,0,0 ] ),
[...]
Character( CharacterTable("S6"),[ 10,2,-2,-2,1,-1,1,0,0,0,1 ] ) ]
gap> r:=Reduced(l,s);
rec( remainders := [ ],
irreducibles := [ Character( CharacterTable("S6"),[ 10,2,-2,-2,1,
-1,1,0,0,0,1 ] ) ] )
gap> Add(l,last.irreducibles[1]);
The same for symmetric parts. (We could iterate for the newly found characters,but this does not give any new
information.)
gap> s:=SymmetricParts(c,l,2);
[ Character( CharacterTable("S6"),[ 1,1,1,1,1,1,1,1,1,1,1 ] ),
[...]
Character( CharacterTable("S6"),[ 55,7,7,7,1,1,1,-1,-1,0,1 ] ) ]
gap> r:=Reduced(l,s);
rec( remainders :=
[ VirtualCharacter( CharacterTable("S6"),[26,0,2,0,-4,0,2,0,-2,1,0 ] ) ],
irreducibles:=[Character( CharacterTable("S6"),[9,3,1,3,0,0,0,-1,1,-1,0])])
gap> Add(l,last.irreducibles[1]);
Finally we form some tensor products,namely of all found irreducible characters with the irreducibles number
3 and 5. Again we reduce.
gap> t:=Tensored(l,l{[3,5]});;
gap> r:=Reduced(l,t);
rec( remainders := [ ],irreducibles :=
[ Character( CharacterTable("S6"),[ 5,-1,1,3,-1,-1,2,1,-1,0,0 ] ),
[...]
Character( CharacterTable("S6"),[ 16,0,0,0,-2,0,-2,0,0,1,0 ] ) ] )
gap> Append(l,last.irreducibles);
We found the correct number or irreducible characters, and thus store them in the table.
gap> Length(l);
11
gap> SetIrr(c,l);
gap> Display(c);
S6
2 4 4 4 4 1 1 1 3 3 . 1
3 2 1 . 1 2 1 2 . . . 1
5 1 . . . . . . . . 1 .
1a 2a 2b 2c 3a 6a 3b 4a 4b 5a 6b
2P 1a 1a 1a 1a 3a 3a 3b 2b 2b 5a 3b
X.1
X.2
X.3
X.4
X.5
X.6
X.7
X.8
X.9
X.10
X.11
1
1
5
5
10
9
5
5
9
10
16
1 1 1 1 1 1 1 1 1 1
-1 1 -1 1 -1 1 -1 1 1 -1
3 1 -1 2 . -1 1 -1 . -1
-3 1 1 2 . -1 -1 -1 . 1
2 -2 -2 1 -1 1 . . . 1
3 1 3 . . . -1 1 -1 .
-1 1 3 -1 -1 2 1 -1 . .
1 1 -3 -1 1 2 -1 -1 . .
-3 1 -3 . . . 1 1 -1 .
-2 -2 2 1 1 1 . . . -1
. . . -2 . -2 . . 1 .
Download

Character Tables in