Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind
 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 

4 Contents of the GAP Character Table Library
 4.1 Ordinary and Brauer Tables in the GAP Character Table Library
 4.2 Generic Character Tables
 4.3 Atlas Tables
 4.4 CAS Tables
 4.5 Customizations of the GAP Character Table Library
 4.6 Technicalities of the Access to Character Tables from the Library
 4.7 How to Extend the GAP Character Table Library
 4.8 Sanity Checks for the GAP Character Table Library
 4.9 Maintenance of the GAP Character Table Library

4 Contents of the GAP Character Table Library

This chapter informs you about

The following rather technical sections are thought for those who want to maintain or extend the Character Table Library.

4.1 Ordinary and Brauer Tables in the GAP Character Table Library

This section gives a brief overview of the contents of the GAP character table library. For the details about, e. g., the structure of data files, see Section 4.6.

The changes in the character table library since the first release of GAP 4 are listed in a file that can be fetched from

https://www.math.rwth-aachen.de/~Thomas.Breuer/ctbllib/htm/ctbldiff.htm .

There are three different kinds of character tables in the GAP library, namely ordinary character tables, Brauer tables, and generic character tables. Note that the Brauer table and the corresponding ordinary table of a group determine the decomposition matrix of the group (and the decomposition matrices of its blocks). These decomposition matrices can be computed from the ordinary and modular irreducibles with GAP, see Section Reference: Operations Concerning Blocks for details. A collection of PDF files of the known decomposition matrices of Atlas tables in the GAP Character Table Library can also be found at

https://www.math.rwth-aachen.de/~MOC/decomposition/.

4.1-1 Ordinary Character Tables

Two different aspects are useful to list the ordinary character tables available in GAP, namely the aspect of the source of the tables and that of relations between the tables.

As for the source, there are first of all two big sources, namely the Atlas of Finite Groups (see Section 4.3) and the CAS library of character tables (see [NPP84]). Many Atlas tables are contained in the CAS library, and difficulties may arise because the succession of characters and classes in CAS tables and Atlas tables are in general different, so see Section 4.4 for the relations between these two variants of character tables of the same group. A subset of the CAS tables is the set of tables of Sylow normalizers of sporadic simple groups as published in [Ost86]  this may be viewed as another source of character tables. The library also contains the character tables of factor groups of space groups (computed by W. Hanrath, see [Han88]) that are part of [HP89], in the form of two microfiches; these tables are given in CAS format (see Section 4.4) on the microfiches, but they had not been part of the "official" CAS library.

To avoid confusion about the ordering of classes and characters in a given table, authorship and so on, the InfoText (Reference: InfoText) value of the table contains the information

origin: ATLAS of finite groups

for Atlas tables (see Section 4.3),

origin: Ostermann

for tables contained in [Ost86],

origin: CAS library

for any table of the CAS table library that is contained neither in the Atlas nor in [Ost86], and

origin: Hanrath library

for tables contained in the microfiches in [HP89].

The InfoText (Reference: InfoText) value usually contains more detailed information, for example that the table in question is the character table of a maximal subgroup of an almost simple group. If the table was contained in the CAS library then additional information may be available via the CASInfo (4.4-1) value.

If one is interested in the aspect of relations between the tables, i. e., the internal structure of the library of ordinary tables, the contents can be listed up the following way.

We have

Note that class fusions stored on library tables are not guaranteed to be compatible for any two subgroups of a group and their intersection, and they are not guaranteed to be consistent w. r. t. the composition of maps.

4.1-2 Brauer Tables

The library contains all tables of the Atlas of Brauer Tables ([JLPW95]), and many other Brauer tables of bicyclic extensions of simple groups which are known yet. The Brauer tables in the library contain the information


origin: modular ATLAS of finite groups

in their InfoText (Reference: InfoText) string.

4.2 Generic Character Tables

Generic character tables provide a means for writing down the character tables of all groups in a (usually infinite) series of similar groups, e. g., cyclic groups, or symmetric groups, or the general linear groups GL\((2,q)\) where \(q\) ranges over certain prime powers.

Let \(\{ G_q | q \in I \}\) be such a series, where \(I\) is an index set. The character table of one fixed member \(G_q\) could be computed using a function that takes \(q\) as only argument and constructs the table of \(G_q\). It is, however, often desirable to compute not only the whole table but to access just one specific character, or to compute just one character value, without computing the whole character table.

For example, both the conjugacy classes and the irreducible characters of the symmetric group \(S_n\) are in bijection with the partitions of \(n\). Thus for given \(n\) it makes sense to ask for the character corresponding to a particular partition, or just for its character value at another partition.

A generic character table in GAP allows one such local evaluations. In this sense, GAP can deal also with character tables that are too big to be computed and stored as a whole.

Currently the only operations for generic tables supported by GAP are the specialisation of the parameter \(q\) in order to compute the whole character table of \(G_q\), and local evaluation (see ClassParameters (Reference: ClassParameters) for an example). GAP does not support the computation of, e. g., generic scalar products.

While the numbers of conjugacy classes for the members of a series of groups are usually not bounded, there is always a fixed finite number of types (equivalence classes) of conjugacy classes; very often the equivalence relation is isomorphism of the centralizers of the representatives.

For each type \(t\) of classes and a fixed \(q \in I\), a parametrisation of the classes in \(t\) is a function that assigns to each conjugacy class of \(G_q\) in \(t\) a parameter by which it is uniquely determined. Thus the classes are indexed by pairs \([t,p_t]\) consisting of a type \(t\) and a parameter \(p_t\) for that type.

For any generic table, there has to be a fixed number of types of irreducible characters of \(G_q\), too. Like the classes, the characters of each type are parametrised.

In GAP, the parametrisations of classes and characters for tables computed from generic tables is stored using the attributes ClassParameters (Reference: ClassParameters) and CharacterParameters (Reference: CharacterParameters).

4.2-1 Available generic character tables

Currently, generic tables of the following groups –in alphabetical order– are available in GAP. (A list of the names of generic tables known to GAP is LIBTABLE.GENERIC.firstnames.) We list the function calls needed to get a specialized table, the generic table itself can be accessed by calling CharacterTable (Reference: CharacterTable) with the first argument only; for example, CharacterTable( "Cyclic" ) yields the generic table of cyclic groups.

CharacterTable( "Alternating", \(n\) )

the table of the alternating group on \(n\) letters,

CharacterTable( "Cyclic", \(n\) )

the table of the cyclic group of order \(n\),

CharacterTable( "Dihedral", \(2n\) )

the table of the dihedral group of order \(2n\),

CharacterTable( "DoubleCoverAlternating", \(n\) )

the table of the Schur double cover of the alternating group on \(n\) letters (see [Noe02]),

CharacterTable( "DoubleCoverSymmetric", \(n\) )

the table of the standard Schur double cover of the symmetric group on \(n\) letters (see [Noe02]),

CharacterTable( "GL", 2, \(q\) )

the table of the general linear group GL(2,\(q\)), for a prime power \(q\),

CharacterTable( "GU", 3, \(q\) )

the table of the general unitary group GU(3,\(q\)), for a prime power \(q\),

CharacterTable( "P:Q", \([ p, q ]\) ) and CharacterTable( "P:Q", \([ p, q, k ]\) )

the table of the Frobenius extension of the nontrivial cyclic group of odd order \(p\) by the nontrivial cyclic group of order \(q\) where \(q\) divides \(p_i-1\) for all prime divisors \(p_i\) of \(p\); if \(p\) is a prime power then \(q\) determines the group uniquely and thus the first version can be used, otherwise the action of the residue class of \(k\) modulo \(p\) is taken for forming orbits of length \(q\) each on the nonidentity elements of the group of order \(p\),

CharacterTable( "PSL", 2, \(q\) )

the table of the projective special linear group PSL(2,\(q\)), for a prime power \(q\),

CharacterTable( "SL", 2, \(q\) )

the table of the special linear group SL(2,\(q\)), for a prime power \(q\),

CharacterTable( "SU", 3, \(q\) )

the table of the special unitary group SU(3,\(q\)), for a prime power \(q\),

CharacterTable( "Suzuki", \(q\) )

the table of the Suzuki group Sz(\(q\)) \(= {}^2B_2(q)\), for \(q\) an odd power of \(2\),

CharacterTable( "Symmetric", \(n\) )

the table of the symmetric group on \(n\) letters,

CharacterTable( "WeylB", \(n\) )

the table of the Weyl group of type \(B_n\),

CharacterTable( "WeylD", \(n\) )

the table of the Weyl group of type \(D_n\).

In addition to the above calls that really use generic tables, the following calls to CharacterTable (Reference: CharacterTable) are to some extent "generic" constructions. But note that no local evaluation is possible in these cases, as no generic table object exists in GAP that can be asked for local information.

CharacterTable( "Quaternionic", \(4n\) )

the table of the generalized quaternionic group of order \(4n\),

CharacterTableWreathSymmetric( tbl, \(n\) )

the character table of the wreath product of the group whose table is tbl with the symmetric group on \(n\) letters, see CharacterTableWreathSymmetric (Reference: CharacterTableWreathSymmetric).

4.2-2 CharacterTableSpecialized
‣ CharacterTableSpecialized( gentbl, q )( function )

For a record gentbl representing a generic character table, and a parameter value q, CharacterTableSpecialized returns a character table object computed by evaluating gentbl at q.

gap> c5:= CharacterTableSpecialized( CharacterTable( "Cyclic" ), 5 );
CharacterTable( "C5" )
gap> Display( c5 );
C5

     5  1  1  1  1  1

       1a 5a 5b 5c 5d
    5P 1a 1a 1a 1a 1a

X.1     1  1  1  1  1
X.2     1  A  B /B /A
X.3     1  B /A  A /B
X.4     1 /B  A /A  B
X.5     1 /A /B  B  A

A = E(5)
B = E(5)^2

(Also CharacterTable( "Cyclic", 5 ) could have been used to construct the above table.)

gap> HasClassParameters( c5 );  HasCharacterParameters( c5 );
true
true
gap> ClassParameters( c5 );  CharacterParameters( c5 );
[ [ 1, 0 ], [ 1, 1 ], [ 1, 2 ], [ 1, 3 ], [ 1, 4 ] ]
[ [ 1, 0 ], [ 1, 1 ], [ 1, 2 ], [ 1, 3 ], [ 1, 4 ] ]
gap> ClassParameters( CharacterTable( "Symmetric", 3 ) );
[ [ 1, [ 1, 1, 1 ] ], [ 1, [ 2, 1 ] ], [ 1, [ 3 ] ] ]

Here are examples for the "local evaluation" of generic character tables, first a character value of the cyclic group shown above, then a character value and a representative order of a symmetric group.

gap> CharacterTable( "Cyclic" ).irreducibles[1][1]( 5, 2, 3 );
E(5)
gap> tbl:= CharacterTable( "Symmetric" );;
gap> tbl.irreducibles[1][1]( 5, [ 3, 2 ], [ 2, 2, 1 ] );
1
gap> tbl.orders[1]( 5, [ 2, 1, 1, 1 ] );
2

4.2-3 Components of generic character tables

Any generic table in GAP is represented by a record. The following components are supported for generic character table records.

centralizers

list of functions, one for each class type \(t\), with arguments \(q\) and \(p_t\), returning the centralizer order of the class \([t,p_t]\),

charparam

list of functions, one for each character type \(t\), with argument \(q\), returning the list of character parameters of type \(t\),

classparam

list of functions, one for each class type \(t\), with argument \(q\), returning the list of class parameters of type \(t\),

classtext

list of functions, one for each class type \(t\), with arguments \(q\) and \(p_t\), returning a representative of the class with parameter \([t,p_t]\) (note that this element need not actually lie in the group in question, for example it may be a diagonal matrix but the characteristic polynomial in the group s irreducible),

domain

function of \(q\) returning true if \(q\) is a valid parameter, and false otherwise,

identifier

identifier string of the generic table,

irreducibles

list of list of functions, in row \(i\) and column \(j\) the function of three arguments, namely \(q\) and the parameters \(p_t\) and \(p_s\) of the class type \(t\) and the character type \(s\),

isGenericTable

always true

libinfo

record with components firstname (Identifier (Reference: Identifier for character tables) value of the table) and othernames (list of other admissible names)

matrix

function of \(q\) returning the matrix of irreducibles of \(G_q\),

orders

list of functions, one for each class type \(t\), with arguments \(q\) and \(p_t\), returning the representative order of elements of type \(t\) and parameter \(p_t\),

powermap

list of functions, one for each class type \(t\), each with three arguments \(q\), \(p_t\), and \(k\), returning the pair \([s,p_s]\) of type and parameter for the \(k\)-th power of the class with parameter \([t,p_t]\),

size

function of \(q\) returning the order of \(G_q\),

specializedname

function of \(q\) returning the Identifier (Reference: Identifier for character tables) value of the table of \(G_q\),

text

string informing about the generic table

In the specialized table, the ClassParameters (Reference: ClassParameters) and CharacterParameters (Reference: CharacterParameters) values are the lists of parameters \([t,p_t]\) of classes and characters, respectively.

If the matrix component is present then its value implements a method to compute the complete table of small members \(G_q\) more efficiently than via local evaluation; this method will be called when the generic table is used to compute the whole character table for a given \(q\) (see CharacterTableSpecialized (4.2-2)).

4.2-4 Example: The generic table of cyclic groups

For the cyclic group \(C_q = \langle x \rangle\) of order \(q\), there is one type of classes. The class parameters are integers \(k \in \{ 0, \ldots, q-1 \}\), the class with parameter \(k\) consists of the group element \(x^k\). Group order and centralizer orders are the identity function \(q \mapsto q\), independent of the parameter \(k\). The representative order function maps the parameter pair \([q,k]\) to \(q / \gcd(q,k)\), which is the order of \(x^k\) in \(C_q\); the \(p\)-th power map is the function mapping the triple \((q,k,p)\) to the parameter \([1,(kp \bmod q)]\).

There is one type of characters, with parameters \(l \in \{ 0, \ldots, q-1 \}\); for \(e_q\) a primitive complex \(q\)-th root of unity, the character values are \(\chi_l(x^k) = e_q^{kl}\).

gap> Print( CharacterTable( "Cyclic" ), "\n" );
rec(
  centralizers := [ function ( n, k )
            return n;
        end ],
  charparam := [ function ( n )
            return [ 0 .. n - 1 ];
        end ],
  classparam := [ function ( n )
            return [ 0 .. n - 1 ];
        end ],
  domain := <Category "(IsInt and IsPosRat)">,
  identifier := "Cyclic",
  irreducibles := [ [ function ( n, k, l )
                return E( n ) ^ (k * l);
            end ] ],
  isGenericTable := true,
  libinfo := rec(
      firstname := "Cyclic",
      othernames := [  ] ),
  orders := [ function ( n, k )
            return n / Gcd( n, k );
        end ],
  powermap := [ function ( n, k, pow )
            return [ 1, k * pow mod n ];
        end ],
  size := function ( n )
        return n;
    end,
  specializedname := function ( q )
        return Concatenation( "C", String( q ) );
    end,
  text := "generic character table for cyclic groups" )

4.2-5 Example: The generic table of the general linear group GL\((2,q)\)

We have four types \(t_1, t_2, t_3, t_4\) of classes, according to the rational canonical form of the elements. \(t_1\) describes scalar matrices, \(t_2\) nonscalar diagonal matrices, \(t_3\) companion matrices of \((X - \rho)^2\) for nonzero elements \(\rho \in F_q\), and \(t_4\) companion matrices of irreducible polynomials of degree \(2\) over \(F_q\).

The sets of class parameters of the types are in bijection with nonzero elements in \(F_q\) for \(t_1\) and \(t_3\), with the set

\[ \{ \{ \rho, \tau \}; \rho, \tau \in F_q, \rho ≠ 0, \tau ≠ 0, \rho ≠ \tau \} \]

for \(t_2\), and with the set \(\{ \{ \epsilon, \epsilon^q \}; \epsilon \in F_{{q^2}} \setminus F_q \}\) for \(t_4\).

The centralizer order functions are \(q \mapsto (q^2-1)(q^2-q)\) for type \(t_1\), \(q \mapsto (q-1)^2\) for type \(t_2\), \(q \mapsto q(q-1)\) for type \(t_3\), and \(q \mapsto q^2-1\) for type \(t_4\).

The representative order function of \(t_1\) maps \((q, \rho)\) to the order of \(\rho\) in \(F_q\), that of \(t_2\) maps \((q, \{ \rho, \tau \})\) to the least common multiple of the orders of \(\rho\) and \(\tau\).

The file contains something similar to the following table.

rec(
identifier := "GL2",
specializedname := ( q -> Concatenation( "GL(2,", String(q), ")" ) ),
size := ( q -> (q^2-1)*(q^2-q) ),
text := "generic character table of GL(2,q), see Robert Steinberg: ...",
centralizers := [ function( q, k ) return (q^2-1) * (q^2-q); end,
                  ..., ..., ... ],
classparam := [ ( q -> [ 0 .. q-2 ] ), ..., ..., ... ],
charparam := [ ( q -> [ 0 .. q-2 ] ), ..., ..., ... ],
powermap := [ function( q, k, pow ) return [ 1, (k*pow) mod (q-1) ]; end,
              ..., ..., ... ],
orders:= [ function( q, k ) return (q-1)/Gcd( q-1, k ); end,
           ..., ..., ... ],
irreducibles := [ [ function( q, k, l ) return E(q-1)^(2*k*l); end,
                    ..., ..., ... ],
                  [ ..., ..., ..., ... ],
                  [ ..., ..., ..., ... ],
                  [ ..., ..., ..., ... ] ],
classtext := [ ..., ..., ..., ... ],
domain := IsPrimePowerInt,
isGenericTable := true )

4.3 Atlas Tables

The GAP character table library contains all character tables of bicyclic extensions of simple groups that are included in the Atlas of Finite Groups ([CCN+85], from now on called Atlas), and the Brauer tables contained in the Atlas of Brauer Characters ([JLPW95]).

These tables have the information


origin: ATLAS of finite groups

or


origin: modular ATLAS of finite groups

in their InfoText (Reference: InfoText) value, they are simply called Atlas tables further on.

For displaying Atlas tables with the row labels used in the Atlas, or for displaying decomposition matrices, see LaTeXStringDecompositionMatrix (Reference: LaTeXStringDecompositionMatrix) and AtlasLabelsOfIrreducibles (4.3-6).

In addition to the information given in Chapters 6 to 8 of the Atlas which tell you how to read the printed tables, there are some rules relating these to the corresponding GAP tables.

4.3-1 Improvements to the Atlas

For the GAP Character Table Library not the printed versions of the Atlas of Finite Groups and the Atlas of Brauer Characters are relevant but the revised versions given by the currently three lists of improvements that are maintained by Simon Norton. The first such list is contained in [BN95], and is printed in the Appendix of [JLPW95]; it contains the improvements that had been known until the "Atlas of Brauer Characters" was published. The second list contains the improvements to the Atlas of Finite Groups that were found since the publication of [JLPW95]. It can be found in the internet, an HTML version at

http://web.mat.bham.ac.uk/atlas/html/atlasmods.html

and a DVI version at

http://web.mat.bham.ac.uk/atlas/html/atlasmods.dvi.

The third list contains the improvements to the Atlas of Brauer Characters, HTML and PDF versions can be found in the internet at

https://www.math.rwth-aachen.de/~MOC/ABCerr.html

and

https://www.math.rwth-aachen.de/~MOC/ABCerr.pdf,

respectively.

Also some tables are regarded as Atlas tables that are not printed in the Atlas but available in Atlas format, according to the lists of improvements mentioned above. Currently these are the tables related to \(L_2(49)\), \(L_2(81)\), \(L_6(2)\), \(O_8^-(3)\), \(O_8^+(3)\), \(S_{10}(2)\), and \({}^2E_6(2).3\).

4.3-2 Power Maps

For the tables of \(3.McL\), \(3_2.U_4(3)\) and its covers, and \(3_2.U_4(3).2_3\) and its covers, the power maps are not uniquely determined by the information from the Atlas but determined only up to matrix automorphisms (see MatrixAutomorphisms (Reference: MatrixAutomorphisms)) of the irreducible characters. In these cases, the first possible map according to lexicographical ordering was chosen, and the automorphisms are listed in the InfoText (Reference: InfoText) strings of the tables.

4.3-3 Projective Characters and Projections

If \(G\) (or \(G.a\)) has a nontrivial Schur multiplier then the attribute ProjectivesInfo (3.7-2) of the GAP table object of \(G\) (or \(G.a\)) is set; the chars component of the record in question is the list of values lists of those faithful projective irreducibles that are printed in the Atlas (so-called proxy character), and the map component lists the positions of columns in the covering for which the column is printed in the Atlas (a so-called proxy class, this preimage is denoted by \(g_0\) in Chapter 7, Section 14 of the Atlas).

4.3-4 Tables of Isoclinic Groups

As described in Chapter 6, Section 7 and in Chapter 7, Section 18 of the Atlas, there exist two (often nonisomorphic) groups of structure \(2.G.2\) for a simple group \(G\), which are isoclinic. The table in the GAP Character Table Library is the one printed in the Atlas, the table of the isoclinic variant can be constructed using CharacterTableIsoclinic (Reference: CharacterTableIsoclinic).

4.3-5 Ordering of Characters and Classes

(Throughout this section, \(G\) always means the simple group involved.)

  1. For \(G\) itself, the ordering of classes and characters in the GAP table coincides with the one in the Atlas.

  2. For an automorphic extension \(G.a\), there are three types of characters.

  3. Similarly, there are different types of classes for an automorphic extension \(G.a\), as follows.

  4. For a central extension \(M.G\), there are two different types of characters, as follows.

  5. For the classes of a central extension we have the following.

  6. For tables of bicyclic extensions \(m.G.a\), both the rules for automorphic and central extensions hold. Additionally we have the following three rules.

4.3-6 AtlasLabelsOfIrreducibles
‣ AtlasLabelsOfIrreducibles( tbl[, short] )( function )

Let tbl be the (ordinary or Brauer) character table of a bicyclic extension of a simple group that occurs in the Atlas of Finite Groups [CCN+85] or the Atlas of Brauer Characters [JLPW95]. AtlasLabelsOfIrreducibles returns a list of strings, the \(i\)-th entry being a label for the \(i\)-th irreducible character of tbl.

The labels have the following form. We state the rules only for ordinary characters, the rules for Brauer characters are obtained by replacing \(\chi\) by \(\varphi\).

First consider only downward extensions \(m.G\) of a simple group \(G\). If \(m \leq 2\) then only labels of the form \(\chi_i\) occur, which denotes the \(i\)-th ordinary character shown in the Atlas.

The labels of faithful ordinary characters of groups \(m.G\) with \(m \geq 3\) are of the form \(\chi_i\), \(\chi_i^*\), or \(\chi_i^{{*k}}\), which means the \(i\)-th character printed in the Atlas, the unique character that is not printed and for which \(\chi_i\) acts as proxy (see [CCN+85, Chapter 7, Sections 8 and 19]), and the image of the printed character \(\chi_i\) under the algebraic conjugacy operator \(*k\), respectively.

For groups \(m.G.a\) with \(a > 1\), the labels of the irreducible characters are derived from the labels of the irreducible constituents of their restrictions to \(m.G\), as follows.

  1. If the ordinary irreducible character \(\chi_i\) of \(m.G\) extends to \(m.G.a\) then the \(a^\prime\) extensions are denoted by \(\chi_{{i,0}}, \chi_{{i,1}}, \ldots, \chi_{{i,a^\prime}}\), where \(\chi_{{i,0}}\) is the character whose values are printed in the Atlas.

  2. The label \(\chi_{{i_1 + i_2 + \cdots + i_a}}\) means that \(a\) different characters \(\chi_{{i_1}}, \chi_{{i_2}}, \ldots, \chi_{{i_a}}\) of \(m.G\) induce to an irreducible character of \(m.G.a\) with this label.

    If either true or the string "short" is entered as the second argument then the label has the short form \(\chi_{{i_1+}}\). Note that \(i_2, i_3, \ldots, i_a\) can be read off from the fusion signs in the Atlas.

  3. Finally, the label \(\chi_{{i_1,j_1 + i_2,j_2 + \cdots + i_{{a^\prime}},j_{{a^\prime}}}}\) means that the characters \(\chi_{{i_1}}, \chi_{{i_2}}, \ldots, \chi_{{i_{{a^\prime}}}}\) of \(m.G\) extend to a group that lies properly between \(m.G\) and \(m.G.a\), and the extensions \(\chi_{{i_1, j_1}}, \chi_{{i_2, j_2}}, \ldots \chi_{{i_{{a^\prime}},j_{{a^\prime}}}}\) induce to an irreducible character of \(m.G.a\) with this label.

    If true or the string "short" was entered as the second argument then the label has the short form \(\chi_{{i,j+}}\).

gap> AtlasLabelsOfIrreducibles( CharacterTable( "3.A7.2" ) );
[ "\\chi_{1,0}", "\\chi_{1,1}", "\\chi_{2,0}", "\\chi_{2,1}", 
  "\\chi_{3+4}", "\\chi_{5,0}", "\\chi_{5,1}", "\\chi_{6,0}", 
  "\\chi_{6,1}", "\\chi_{7,0}", "\\chi_{7,1}", "\\chi_{8,0}", 
  "\\chi_{8,1}", "\\chi_{9,0}", "\\chi_{9,1}", "\\chi_{17+17\\ast 2}",
  "\\chi_{18+18\\ast 2}", "\\chi_{19+19\\ast 2}", 
  "\\chi_{20+20\\ast 2}", "\\chi_{21+21\\ast 2}", 
  "\\chi_{22+23\\ast 8}", "\\chi_{22\\ast 8+23}" ]
gap> AtlasLabelsOfIrreducibles( CharacterTable( "3.A7.2" ), "short" );
[ "\\chi_{1,0}", "\\chi_{1,1}", "\\chi_{2,0}", "\\chi_{2,1}", 
  "\\chi_{3+}", "\\chi_{5,0}", "\\chi_{5,1}", "\\chi_{6,0}", 
  "\\chi_{6,1}", "\\chi_{7,0}", "\\chi_{7,1}", "\\chi_{8,0}", 
  "\\chi_{8,1}", "\\chi_{9,0}", "\\chi_{9,1}", "\\chi_{17+}", 
  "\\chi_{18+}", "\\chi_{19+}", "\\chi_{20+}", "\\chi_{21+}", 
  "\\chi_{22+}", "\\chi_{23+}" ]

4.3-7 Examples of the Atlas Format for GAP Tables

We give three little examples for the conventions stated in Section 4.3, listing both the Atlas format and the table displayed by GAP.

First, let \(G\) be the trivial group. We consider the cyclic group \(C_6\) of order \(6\). It can be viewed in several ways, namely

┌───────┐ ┌───────┐       ;   @   ;   ;   @      2   1   1   1   1   1   1
│       │ │       │           1           1      3   1   1   1   1   1   1
│   G   │ │  G.2  │     p power           A
│       │ │       │     p' part           A         1a  3a  3b  2a  6a  6b
└───────┘ └───────┘     ind  1A fus ind  2A     2P  1a  3b  3a  1a  3b  3a
┌───────┐ ┌───────┐                             3P  1a  1a  1a  2a  2a  2a
│       │ │       │  χ_1  +   1   :  ++   1
│  3.G  │ │ 3.G.2 │                           X.1    1   1   1   1   1   1
│       │ │       │     ind   1 fus ind   2   X.2    1   1   1  -1  -1  -1
└───────┘ └───────┘           3           6   X.3    1   A  /A   1   A  /A
                              3           6   X.4    1   A  /A  -1  -A -/A
                                              X.5    1  /A   A   1  /A   A
                     χ_2 o2   1   : oo2   1   X.6    1  /A   A  -1 -/A  -A

                                              A = E(3)
                                                = (-1+ER(-3))/2 = b3

X.1, X.2 extend \(\chi_1\). X.3, X.4 extend the proxy character \(\chi_2\). X.5, X.6 extend the not printed character with proxy \(\chi_2\). The classes 1a, 3a, 3b are preimages of 1A, and 2a, 6a, 6b are preimages of 2A.

┌───────┐ ┌───────┐       ;   @   ;   ;   @      2   1   1   1   1   1   1
│       │ │       │           1           1      3   1   1   1   1   1   1
│   G   │ │  G.3  │     p power           A
│       │ │       │     p' part           A         1a  2a  3a  6a  3b  6b
└───────┘ └───────┘     ind  1A fus ind  3A     2P  1a  1a  3b  3b  3a  3a
┌───────┐ ┌───────┐                             3P  1a  2a  1a  2a  1a  2a
│       │ │       │  χ_1  +   1   : +oo   1
│  2.G  │ │ 2.G.3 │                           X.1    1   1   1   1   1   1
│       │ │       │     ind   1 fus ind   3   X.2    1   1   A   A  /A  /A
└───────┘ └───────┘           2           6   X.3    1   1  /A  /A   A   A
                                              X.4    1  -1   1  -1   1  -1
                     χ_2  +   1   : +oo   1   X.5    1  -1   A  -A  /A -/A
                                              X.6    1  -1  /A -/A   A  -A

                                              A = E(3)
                                                = (-1+ER(-3))/2 = b3

X.1 to X.3 extend \(\chi_1\), X.4 to X.6 extend \(\chi_2\). The classes 1a and 2a are preimages of 1A, 3a and 6a are preimages of the proxy class 3A, and 3b and 6b are preimages of the not printed class with proxy 3A.

┌───────┐           ;   @        2   1   1   1   1   1   1
│       │               1        3   1   1   1   1   1   1
│   G   │         p power
│       │         p' part           1a  6a  3a  2a  3b  6b
└───────┘         ind  1A       2P  1a  3a  3b  1a  3a  3b
┌───────┐                       3P  1a  2a  1a  2a  1a  2a
│       │      χ_1  +   1
│  2.G  │                     X.1    1   1   1   1   1   1
│       │         ind   1     X.2    1  ─1   1  ─1   1  ─1
└───────┘               2     X.3    1   A  /A   1   A  /A
┌───────┐                     X.4    1  /A   A   1  /A   A
│       │      χ_2  +   1     X.5    1  ─A  /A  ─1   A ─/A
│  3.G  │                     X.6    1 ─/A   A  ─1  /A  ─A
│       │         ind   1
└───────┘               3     A = E(3)
┌───────┐               3       = (─1+ER(─3))/2 = b3
│       │
│  6.G  │      χ_3 o2   1
│       │
└───────┘         ind   1
                        6
                        3
                        2
                        3
                        6

               χ_4 o2   1

X.1, X.2 correspond to \(\chi_1, \chi_2\), respectively; X.3, X.5 correspond to the proxies \(\chi_3\), \(\chi_4\), and X.4, X.6 to the not printed characters with these proxies. The factor fusion onto \(3.G\) is given by [ 1, 2, 3, 1, 2, 3 ], that onto \(G.2\) by [ 1, 2, 1, 2, 1, 2 ].

┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐
│       │ │       │ │       │ │       │
│   G   │ │  G.2  │ │  G.3  │ │  G.6  │
│       │ │       │ │       │ │       │
└───────┘ └───────┘ └───────┘ └───────┘

     ;   @   ;   ;   @   ;   ;   @   ;     ;   @

         1           1           1             1
   p power           A           A            AA
   p' part           A           A            AA
   ind  1A fus ind  2A fus ind  3A fus   ind  6A

χ_1  +   1   :  ++   1   : +oo   1   :+oo+oo   1


    2   1   1   1   1   1   1
    3   1   1   1   1   1   1

       1a  2a  3a  3b  6a  6b
   2P  1a  1a  3b  3a  3b  3a
   3P  1a  2a  1a  1a  2a  2a
 X.1    1   1   1   1   1   1
 X.2    1  -1   A  /A  -A -/A
 X.3    1   1  /A   A  /A   A
 X.4    1  -1   1   1  -1  -1
 X.5    1   1   A  /A   A  /A
 X.6    1  -1  /A   A -/A  -A

 A = E(3)
   = (-1+ER(-3))/2 = b3

The classes 1a, 2a correspond to \(1A\), \(2A\), respectively. 3a, 6a correspond to the proxies \(3A\), \(6A\), and 3b, 6b to the not printed classes with these proxies.

The second example explains the fusion case. Again, \(G\) is the trivial group.

┌───────┐ ┌───────┐        ;   @   ;   ;  @      3.G.2
│       │ │       │            1          1
│   G   │ │  G.2  │      p power          A         2   1   .   1
│       │ │       │      p' part          A         3   1   1   .
└───────┘ └───────┘      ind  1A fus ind 2A
┌───────┐ ┌───────┐                                    1a 3a 2a
│       │ │       │   χ_1  +   1   :  ++  1        2P  1a 3a 1a
│  2.G  │ │ 2.G.2 │                                3P  1a 1a 2a
│       │ │       │      ind   1 fus ind  2
└───────┘ └───────┘            2          2      X.1    1  1  1
┌───────┐ ┌───────                               X.2    1  1 ─1
│       │ │           χ_2  +   1   :  ++  1      X.3    2 ─1  .
│  3.G  │ │ 3.G.2
│       │ │              ind   1 fus ind  2
└───────┘                      3                 6.G.2
┌───────┐ ┌───────             3
│       │ │                                         2   2  1  1  2  2  2
│  6.G  │ │ 6.G.2     χ_3 o2   1   *   +            3   1  1  1  1  .  .
│       │ │
└───────┘                ind   1 fus ind  2            1a 6a 3a 2a 2b 2c
                               6          2        2P  1a 3a 3a 1a 1a 1a
                               3                   3P  1a 2a 1a 2a 2b 2c
                               2
                               3                 Y.1    1  1  1  1  1  1
                               6                 Y.2    1  1  1  1 -1 -1
                                                 Y.3    1 -1  1 -1  1 -1
                      χ_4 o2   1   *   +         Y.4    1 -1  1 -1 -1  1
                                                 Y.5    2 -1 -1  2  .  .
                                                 Y.6    2  1 -1 -2  .  .

The tables of \(G\), \(2.G\), \(3.G\), \(6.G\) and \(G.2\) are known from the first example, that of \(2.G.2\) will be given in the next one. So here we print only the GAP tables of \(3.G.2 \cong D_6\) and \(6.G.2 \cong D_{12}\).

In \(3.G.2\), the characters X.1, X.2 extend \(\chi_1\); \(\chi_3\) and its non-printed partner fuse to give X.3, and the two preimages of 1A of order \(3\) collapse.

In \(6.G.2\), Y.1 to Y.4 are extensions of \(\chi_1\), \(\chi_2\), so these characters are the inflated characters from \(2.G.2\) (with respect to the factor fusion [ 1, 2, 1, 2, 3, 4 ]). Y.5 is inflated from \(3.G.2\) (with respect to the factor fusion [ 1, 2, 2, 1, 3, 3 ]), and Y.6 is the result of the fusion of \(\chi_4\) and its non-printed partner.

For the last example, let \(G\) be the elementary abelian group \(2^2\) of order \(4\). Consider the following tables.

┌───────┐ ┌───────┐          ;   @   @   @   @   ;   ;   @
│       │ │       │              4   4   4   4           1
│   G   │ │  G.3  │        p power   A   A   A           A
│       │ │       │        p' part   A   A   A           A
└───────┘ └───────┘        ind  1A  2A  2B  2C fus ind  3A
┌───────┐ ┌───────┐
│       │ │       │     χ_1  +   1   1   1   1   : +oo   1
│  2.G  │ │ 2.G.3 │     χ_2  +   1   1  ─1  ─1   .   +   0
│       │ │       │     χ_3  +   1  ─1   1  ─1   |
└───────┘ └───────┘     χ_4  +   1  ─1  ─1   1   |

                           ind   1   4   4   4 fus ind   3
                                 2                       6

                        χ_5  -   2   0   0   0   : -oo   1

  G.3

     2   2   2   .   .
     3   1   .   1   1

        1a  2a  3a  3b
    2P  1a  1a  3b  3a
    3P  1a  2a  1a  1a

  X.1    1   1   1   1
  X.2    1   1   A  /A
  X.3    1   1  /A   A         2.G.3
  X.4    3  -1   .   .
                                  2   3   3   2   1   1   1   1
  A = E(3)                        3   1   1   .   1   1   1   1
    = (-1+ER(-3))/2 = b3
                                     1a  2a  4a  3a  6a  3b  6b
  2.G                            2P  1a  1a  2a  3b  3b  3a  3a
                                 3P  1a  2a  4a  1a  2a  1a  2a
     2   3   3   2   2   2
                               X.1    1   1   1   1   1   1   1
        1a  2a  4a  4b  4c     X.2    1   1   1   A   A  /A  /A
    2P  1a  1a  2a  1a  1a     X.3    1   1   1  /A  /A   A   A
    3P  1a  2a  4a  4b  4c     X.4    3   3  -1   .   .   .   .
                               X.5    2  -2   .   1   1   1   1
  X.1    1   1   1   1   1     X.6    2  -2   .   A  -A  /A -/A
  X.2    1   1   1  -1  -1     X.7    2  -2   .  /A -/A   A  -A
  X.3    1   1  -1   1  -1
  X.4    1   1  -1  -1   1     A = E(3)
  X.5    2  -2   .   .   .       = (-1+ER(-3))/2 = b3

In the table of \(G.3 \cong A_4\), the characters \(\chi_2\), \(\chi_3\), and \(\chi_4\) fuse, and the classes 2A, 2B and 2C collapse. For getting the table of \(2.G \cong Q_8\), one just has to split the class 2A and adjust the representative orders. Finally, the table of \(2.G.3 \cong SL_2(3)\) is given; the class fusion corresponding to the injection \(2.G \hookrightarrow 2.G.3\) is [ 1, 2, 3, 3, 3 ], and the factor fusion corresponding to the epimorphism \(2.G.3 \rightarrow G.3\) is [ 1, 1, 2, 3, 3, 4, 4 ].

4.4 CAS Tables

One of the predecessors of GAP was CAS (Character Algorithm System, see [NPP84]), which had also a library of character tables. All these character tables are available in GAP except if stated otherwise in the file doc/ctbldiff.pdf. This sublibrary has been completely revised before it was included in GAP, for example, errors have been corrected and power maps have been completed.

Any CAS table is accessible by each of its CAS names (except if stated otherwise in doc/ctbldiff.pdf), that is, the table name or the filename used in CAS.

4.4-1 CASInfo
‣ CASInfo( tbl )( attribute )

Let tbl be an ordinary character table in the GAP library that was (up to permutations of classes and characters) contained already in the CAS table library. When one fetches tbl from the library, one does in general not get the original CAS table. Namely, in many cases (mostly Atlas tables, see Section 4.3), the identifier of the table (see Identifier (Reference: Identifier for character tables)) as well as the ordering of classes and characters are different for the CAS table and its GAP version.

Note that in several cases, the CAS library contains different tables of the same group, in particular these tables may have different names and orderings of classes and characters.

The CASInfo value of tbl, if stored, is a list of records, each describing the relation between tbl and a character table in the CAS library. The records have the components

name

the name of the CAS table,

permchars and permclasses

permutations of the Irr (Reference: Irr) values and the classes of tbl, respectively, that must be applied in order to get the orderings in the original CAS table, and

text

the text that was stored on the CAS table (which may contain incorrect statements).

gap> tbl:= CharacterTable( "m10" );
CharacterTable( "A6.2_3" )
gap> HasCASInfo( tbl );
true
gap> CASInfo( tbl );
[ rec( name := "m10", permchars := (3,5)(4,8,7,6), permclasses := (), 
      text := "names:     m10\norder:     2^4.3^2.5 = 720\nnumber of c\
lasses: 8\nsource:    cambridge atlas\ncomments:  point stabilizer of \
mathieu-group m11\ntest:      orth, min, sym[3]\n" ) ]

The class fusions stored on tables from the CAS library have been computed anew with GAP; the text component of such a fusion record tells if the fusion map is equal to that in the CAS library, up to the permutation of classes between the table in CAS and its GAP version.

gap> First( ComputedClassFusions( tbl ), x -> x.name = "M11" );
rec( map := [ 1, 2, 3, 4, 5, 4, 7, 8 ], name := "M11", 
  text := "fusion is unique up to table automorphisms,\nthe representa\
tive is equal to the fusion map on the CAS table" )

4.5 Customizations of the GAP Character Table Library

4.5-1 Installing the GAP Character Table Library

To install the package unpack the archive file in a directory in the pkg directory of your local copy of GAP 4. This might be the pkg directory of the GAP 4 home directory, see Section Reference: Installing a GAP Package for details. It is however also possible to keep an additional pkg directory in your private directories, see Reference: GAP Root Directories. The latter possibility must be chosen if you do not have write access to the GAP root directory.

The package consists entirely of GAP code, no external binaries need to be compiled.

For checking the installation of the package, you should start GAP and call

gap> ReadPackage( "ctbllib", "tst/testinst.g" );

If the installation is o. k. then true is printed, and the GAP prompt appears again; otherwise the output lines tell you what should be changed.

More testfiles are available in the tst directory of the package.

PDF and HTML versions of the package manual are available in the doc directory of the package.

4.5-2 Unloading Character Table Data

Data files from the GAP Character Table Library may be read only once during a GAP session –this is efficient but requires memory– or the cached data may be erased as soon as a second data file is to be read –this requires less memory but is usually less efficient.

One can choose between these two possibilities via the user preference "UnloadCTblLibFiles" of the CTblLib package, see UserPreference (Reference: UserPreference). The default value of this preference is true, that is, the contents of only one data file is kept in memory. Call SetUserPreference( "CTblLib", "UnloadCTblLibFiles", false ); if you want to change this behaviour.

4.5-3 Changing the display format of several functions

The way how the functions DisplayAtlasContents (3.5-6), DisplayAtlasInfo (AtlasRep: DisplayAtlasInfo), DisplayAtlasMap (3.5-8), and DisplayCTblLibInfo (3.5-1) show tabular information can be customized via the user preference "DisplayFunction" of the AtlasRep package, see Section AtlasRep: User preference DisplayFunction.

4.5-4 User preference MagmaPath

This preference describes the path for calling MAGMA. An empty string (the default) means that MAGMA is not available.

This preference is used by CharacterTableComputedByMagma (6.5-3).

4.6 Technicalities of the Access to Character Tables from the Library

4.6-1 Data Files of the GAP Character Table Library

The data files of the GAP Character Table Library reside in the data directory of the package CTblLib.

The filenames start with ct (for "character table"), followed by either o (for "ordinary"), b (for "Brauer"), or g (for "generic"), then a description of the contents (up to \(5\) characters, e. g., alter for the tables of alternating and related groups), and the suffix .tbl.

The file ctb\(descr\).tbl contains the known Brauer tables corresponding to the ordinary tables in the file cto\(descr\).tbl.

Each data file of the table library is supposed to consist of

  1. comment lines, starting with a hash character # in the first column,

  2. an assignment to a component of LIBTABLE.LOADSTATUS, at the end of the file, and

  3. function calls of the form

    Here \(name\) must be the identifier value of the ordinary character table corresponding to the table to which the command refers; \(data\) must be a comma separated sequence of GAP objects; \(from\) and \(to\) must be identifier values of ordinary character tables, \(map\) a list of positive integers, \(textlines\) and \(listofnames\) lists list of strings, \(component\) a string, and \(compdata\) any GAP object.

    MOT, ALF, ALN, and ARC occur only in files containing ordinary character tables, and MBT occurs only in files containing Brauer tables.

Besides the above calls, the data in files containing ordinary and Brauer tables may contain only the following GAP functions. (Files containing generic character tables may contain calls to arbitrary GAP library functions.)

ACM, Concatenation (Reference: concatenation of lists), E (Reference: E), EvalChars, GALOIS, Length (Reference: Length), ShallowCopy (Reference: ShallowCopy), TENSOR, and TransposedMat (Reference: TransposedMat).

The function CTblLib.RecomputeTOC in the file gap4/maketbl.g of the CTblLib package expects the file format described above, and to some extent it checks this format.

The function calls may be continued over several lines of a file. A semicolon is assumed to be the last character in its line if and only if it terminates a function call.

Names of character tables are strings (see Chapter Reference: Strings and Characters), i. e., they are enclosed in double quotes; strings in table library files must not be split over several lines, because otherwise the function CTblLib.RecomputeTOC may get confused. Additionally, no character table name is allowed to contain double quotes.

There are three different ways how the table data can be stored in the file.

Full ordinary tables

are encoded by a call to the function MOT, where the arguments correspond to the relevant attribute values; each fusion into another library table is added by a call to ALF, values to be stored in components of the table object are added with ARC, and admissible names are notified with ALN. The argument of MOT that encodes the irreducible characters is abbreviated as follows. For each subset of characters that differ just by multiplication with a linear character or by Galois conjugacy, only the first one is given by its values, the others are replaced by [TENSOR,[i,j]] (which means that the character is the tensor product of the i-th and the j-th character in the list) or [GALOIS,[i,j]] (which means that the character is obtained from the i-th character by applying GaloisCyc( ., j ) to it).

Brauer tables

are stored relative to the corresponding ordinary tables; attribute values that can be computed by restricting from the ordinary table to \(p\)-regular classes are not stored, and instead of the irreducible characters the files contain (inverses of) decomposition matrices or Brauer trees for the blocks of nonzero defect.

Ordinary construction tables

have the attribute ConstructionInfoCharacterTable (3.7-4) set, with value a list that contains the name of the construction function used and the arguments for a call to this function; the function call is performed by CharacterTable (Reference: CharacterTable) when the table is constructed (not when the file containing the table is read). One aim of this mechanism is to store structured character tables such as tables of direct products and tables of central extensions of other tables in a compact way, see Chapter 5.

4.6-2 LIBLIST
‣ LIBLIST( global variable )

GAP's knowledge about the ordinary character tables in the GAP Character Table Library is given by several JSON format files that get evaluated when the file gap4/ctprimar.g (the "primary file" of the character table library) is read. These files can be produced from the data files, see Section 4.6-1.

The information is stored in the global variable LIBLIST, which is a record with the following components.

firstnames

the list of Identifier (Reference: Identifier for character tables) values of the ordinary tables,

files

the list of filenames containing the data of ordinary tables,

filenames

a list of positive integers, value \(j\) at position \(i\) means that the table whose identifier is the \(i\)-th in the firstnames list is contained in the \(j\)-th file of the files component,

fusionsource

a list containing at position \(i\) the list of names of tables that store a fusion into the table whose identifier is the \(i\)-th in the firstnames list,

allnames

a list of all admissible names of ordinary library tables,

position

a list that stores at position \(i\) the position in firstnames of the identifier of the table with the \(i\)-th admissible name in allnames,

simpleinfo

a list of triples \([ m, name, a ]\) describing the tables of simple groups in the library; \(name\) is the identifier of the table, \(m\).\(name\) and \(name\).\(a\) are admissible names for its Schur multiplier and automorphism group, respectively, if these tables are available at all,

sporadicSimple

a list of identifiers of the tables of the \(26\) sporadic simple groups, and

GENERIC

a record with information about generic tables (see Section 4.2).

4.6-3 LibInfoCharacterTable
‣ LibInfoCharacterTable( tblname )( function )

is a record with the components

firstName

the Identifier (Reference: Identifier for character tables) value of the library table for which tblname is an admissible name, and

fileName

the name of the file in which the table data is stored.

If no such table exists in the GAP library then fail is returned.

If tblname contains the substring "mod" then it is regarded as the name of a Brauer table. In this case the result is computed from that for the corresponding ordinary table and the characteristic. So if the ordinary table exists then the result is a record although the Brauer table in question need not be contained in the GAP library.

gap> LibInfoCharacterTable( "S5" );
rec( fileName := "ctoalter", firstName := "A5.2" )
gap> LibInfoCharacterTable( "S5mod2" );
rec( fileName := "ctbalter", firstName := "A5.2mod2" )
gap> LibInfoCharacterTable( "J5" );
fail

4.7 How to Extend the GAP Character Table Library

GAP users may want to extend the character table library in different respects.

4.7-1 NotifyNameOfCharacterTable
‣ NotifyNameOfCharacterTable( firstname, newnames )( function )

notifies the strings in the list newnames as new admissible names for the library table with Identifier (Reference: Identifier for character tables) value firstname. If there is already another library table for which some of these names are admissible then an error is signaled.

NotifyNameOfCharacterTable modifies the global variable LIBLIST (4.6-2).

gap> CharacterTable( "private" );
fail
gap> NotifyNameOfCharacterTable( "A5", [ "private" ] );
gap> a5:= CharacterTable( "private" );
CharacterTable( "A5" )

One can notify alternative names for character tables inside data files, using the function ALN instead of NotifyNameOfCharacterTable. The idea is that the additional names of tables from those files can be ignored which are controlled by CTblLib.RecomputeTOC. Therefore, ALN is set to Ignore before the file is read with CTblLib.ReadTbl, otherwise ALN is set to NotifyNameOfCharacterTable.

4.7-2 LibraryFusion
‣ LibraryFusion( name, fus )( function )

For a string name that is an Identifier (Reference: Identifier for character tables) value of an ordinary character table in the GAP library, and a record fus with the components

name

the identifier of the destination table, or this table itself,

map

the fusion map, a list of image positions,

text (optional)

a string describing properties of the fusion, and

specification (optional)

a string or an integer,

LibraryFusion returns a string whose printed value can be used to add the fusion in question to the library file containing the data for the table with identifier name.

If name is a character table then its Identifier (Reference: Identifier for character tables) value is used as the corresponding string.

gap> s5:= CharacterTable( "S5" );
CharacterTable( "A5.2" )
gap> fus:= PossibleClassFusions( a5, s5 );
[ [ 1, 2, 3, 4, 4 ] ]
gap> fusion:= rec( name:= s5, map:= fus[1], text:= "unique" );;
gap> Print( LibraryFusion( "A5", fusion ) );
ALF("A5","A5.2",[1,2,3,4,4],[
"unique"
]);

4.7-3 LibraryFusionTblToTom
‣ LibraryFusionTblToTom( name, fus )( function )

For a string name that is an Identifier (Reference: Identifier for character tables) value of an ordinary character table in the GAP library, and a record fus with the components

name

the identifier of the destination table of marks, or this table itself,

map

the fusion map, a list of image positions,

text (optional)

a string describing properties of the fusion, and

perm (optional)

a permutation,

LibraryFusionTblToTom returns a string whose printed value can be used to add the fusion in question to the library file containing the data for the table with identifier name.

The meaning of the component perm is as follows. Let prim be the primitive permutation characters obtained by computing the PermCharsTom (Reference: PermCharsTom via fusion map) value of the tables of marks, taking the sublist at the positions in the first component of the MaximalSubgroupsTom (Reference: MaximalSubgroupsTom) value of the tables of marks, and restricting these lists via the map component. Permuting prim with the perm component via Permuted (Reference: Permuted) yields the list of permutation characters obtained by inducing the trivial characters of the subgroups given by the Maxes (3.7-1) value of the character table. If the component perm is not present and if the character table has the attribute Maxes (3.7-1) set then the two ways of computing the primitive permutation characters yield the same list.

If name is a character table then its Identifier (Reference: Identifier for character tables) value is used as the corresponding string.

gap> tbl:= CharacterTable( "A5" );     
CharacterTable( "A5" )
gap> tom:= TableOfMarks( "A5" );
TableOfMarks( "A5" )
gap> fus:= PossibleFusionsCharTableTom( tbl, tom );
[ [ 1, 2, 3, 5, 5 ] ]
gap> fusion:= rec( name:= tom, map:= fus[1], text:= "unique" );;
gap> Print( LibraryFusionTblToTom( "A5", fusion ) );
ARC("A5","tomfusion",rec(name:="A5",map:=[1,2,3,5,5],text:=[
"unique"
]));

4.7-4 PrintToLib
‣ PrintToLib( file, tbl )( function )

prints the (ordinary or Brauer) character table tbl in library format to the file file.tbl (or to file if this has already the suffix .tbl).

If tbl is an ordinary table then the value of the attribute NamesOfFusionSources (Reference: NamesOfFusionSources) is ignored by PrintToLib, since for library tables this information is extracted from the source files (see Section 4.6-1).

The names of data files in the GAP Character Table Library begin with cto (for ordinary tables) or ctb (for corresponding Brauer tables), see Section 4.6. This is supported also for private extensions of the library, that is, if the filenames are chosen this way and the ordinary tables in the cto files are notified via NotifyCharacterTable (4.7-5) then the Brauer tables will be found in the ctb files. Alternatively, if the filenames of the files with the ordinary tables do not start with cto then GAP expects the corresponding Brauer tables in the same file as the ordinary tables.

gap> PrintToLib( "private", a5 );

The above command appends the data of the table a5 to the file private.tbl; the first lines printed to this file are

MOT("A5",
[
"origin: ATLAS of finite groups, tests: 1.o.r., pow[2,3,5]"
],
[60,4,3,5,5],
[,[1,1,3,5,4],[1,2,1,5,4],,[1,2,3,1,1]],
[[1,1,1,1,1],[3,-1,0,-E(5)-E(5)^4,-E(5)^2-E(5)^3],
[GALOIS,[2,2]],[4,0,1,-1,-1],[5,1,-1,0,0]],
[(4,5)]);
ARC("A5","projectives",["2.A5",[[2,0,-1,E(5)+E(5)^4,E(5)^2+E(5)^3],
[GALOIS,[1,2]],[4,0,1,-1,-1],[6,0,0,1,1]],]);
ARC("A5","extInfo",["2","2"]);

4.7-5 NotifyCharacterTable
‣ NotifyCharacterTable( firstname, filename, othernames )( function )

notifies a new ordinary table to the library. This table has Identifier (Reference: Identifier for character tables) value firstname, it is contained (in library format, see PrintToLib (4.7-4)) in the file with name filename (without suffix .tbl), and the names contained in the list othernames are admissible for it.

If the initial part of filename is one of ~/, / or ./ then it is interpreted as an absolute path. Otherwise it is interpreted relative to the data directory of the CTblLib package.

NotifyCharacterTable modifies the global variable LIBLIST (4.6-2) for the current GAP session, after having checked that there is no other library table yet with an admissible name equal to firstname or contained in othernames.

For example, let us change the name A5 to icos wherever it occurs in the file private.tbl that was produced above, and then notify the "new" table in this file as follows. (The name change is needed because GAP knows already a table with name A5 and would not accept to add another table with this name.)

gap> NotifyCharacterTable( "icos", "private", [] );
gap> icos:= CharacterTable( "icos" );
CharacterTable( "icos" )
gap> Display( icos );
icos

     2  2  2  .  .  .
     3  1  .  1  .  .
     5  1  .  .  1  1

       1a 2a 3a 5a 5b
    2P 1a 1a 3a 5b 5a
    3P 1a 2a 1a 5b 5a
    5P 1a 2a 3a 1a 1a

X.1     1  1  1  1  1
X.2     3 -1  .  A *A
X.3     3 -1  . *A  A
X.4     4  .  1 -1 -1
X.5     5  1 -1  .  .

A = -E(5)-E(5)^4
  = (1-ER(5))/2 = -b5

So the private table is treated as a library table. Note that the table can be accessed only if it has been notified in the current GAP session. For frequently used private tables, it may be reasonable to put the NotifyCharacterTable statements into your gaprc file (see Reference: The gap.ini and gaprc files), or into a file that is read via the gaprc file.

4.7-6 NotifyCharacterTables
‣ NotifyCharacterTables( list )( function )

notifies several new ordinary tables to the library. The argument list must be a dense list in which each entry is a lists of the form [ firstname, filename, othernames ], with the same meaning as the arguments of NotifyCharacterTable (4.7-5).

4.8 Sanity Checks for the GAP Character Table Library

The fact that the GAP Character Table Library is designed as an open database (see Chapter 1) makes it especially desirable to have consistency checks available which can be run automatically whenever new data get added.

The file tst/testall.g of the package contains Test (Reference: Test) statements for executing a collection of such sanity checks; one can run them by calling ReadPackage( "CTblLib", "tst/testall.g" ). If no problem occurs then GAP prints only lines starting with one of the following.

+ Input file:
+ GAP4stones:

The examples in the package manual form a part of the tests, they are collected in the file tst/docxpl.tst of the package.

The following tests concern only ordinary character tables. In all cases, let \(tbl\) be the ordinary character table of a group \(G\), say. The return value is false if an error occurred, and true otherwise.

CTblLib.Test.InfoText( \(tbl\) )

checks some properties of the InfoText (Reference: InfoText) value of \(tbl\), if available. Currently it is not recommended to use this value programmatically. However, one can rely on the following structure of this value for tables in the GAP Character Table Library.

CTblLib.Test.RelativeNames( \(tbl\)[, \(tblname\)] )

checks some properties of those admissible names for \(tbl\) that refer to a related group \(H\), say. Let \(name\) be an admissible name for the character table of \(H\). (In particular, \(name\) is not an empty string.) Then the following relative names are considered.

\(name\)M\(n\)

\(G\) is isomorphic with the groups in the \(n\)-th class of maximal subgroups of \(H\). An example is "M12M1" for the Mathieu group \(M_{11}\). We consider only cases where \(name\) does not contain the letter x. For example, 2xM12 denotes the direct product of a cyclic group of order two and the Mathieu group \(M_{12}\) but not a maximal subgroup of "2x". Similarly, 3x2.M22M5 denotes the direct product of a cyclic group of order three and a group in the fifth class of maximal subgroups of \(2.M_{22}\) but not a maximal subgroup of "3x2.M22".

\(name\)N\(p\)

\(G\) is isomorphic with the normalizers of the Sylow \(p\)-subgroups of \(H\). An example is "M24N2" for the (self-normalizing) Sylow \(2\)-subgroup in the Mathieu group \(M_{24}\).

\(name\)N\(cnam\)

\(G\) is isomorphic with the normalizers of the cyclic subgroups generated by the elements in the class with the name \(cnam\) of \(H\). An example is "O7(3)N3A" for the normalizer of an element in the class 3A of the simple group \(O_7(3)\).

\(name\)C\(cnam\)

\(G\) is isomorphic with the groups in the centralizers of the elements in the class with the name \(cnam\) of \(H\). An example is "M24C2A" for the centralizer of an element in the class 2A in the Mathieu group \(M_{24}\).

In these cases, CTblLib.Test.RelativeNames checks whether a library table with the admissible name \(name\) exists and a class fusion to \(tbl\) is stored on this table.

In the case of Sylow \(p\)-normalizers, it is also checked whether \(G\) contains a normal Sylow \(p\)-subgroup of the same order as the Sylow \(p\)-subgroups in \(H\). If the normal Sylow \(p\)-subgroup of \(G\) is cyclic then it is also checked whether \(G\) is the full Sylow \(p\)-normalizer in \(H\). (In general this information cannot be read off from the character table of \(H\)).

In the case of normalizers (centralizers) of cyclic subgroups, it is also checked whether \(H\) really normalizes (centralizes) a subgroup of the given order, and whether the class fusion from \(tbl\) to the table of \(H\) is compatible with the relative name.

If the optional argument \(tblname\) is given then only this name is tested. If there is only one argument then all admissible names for \(tbl\) are tested.

CTblLib.Test.FindRelativeNames( \(tbl\) )

runs over the class fusions stored on \(tbl\). If \(tbl\) is the full centralizer/normalizer of a cyclic subgroup in the table to which the class fusion points then the function proposes to make the corresponding relative name an admissible name for \(tbl\).

CTblLib.Test.PowerMaps( \(tbl\) )

checks whether all \(p\)-th power maps are stored on \(tbl\), for prime divisors \(p\) of the order of \(G\), and whether they are correct. (This includes the information about uniqueness of the power maps.)

CTblLib.Test.TableAutomorphisms( \(tbl\) )

checks whether the table automorphisms are stored on \(tbl\), and whether they are correct. Also all available Brauer tables of \(tbl\) are checked.

CTblLib.Test.CompatibleFactorFusions( \(tbl\) )

checks whether triangles and quadrangles of factor fusions from \(tbl\) to other library tables commute (where the entries in the list CTblLib.IgnoreFactorFusionsCompatibility are excluded from the tests), and whether the factor fusions commute with the actions of corresponding outer automorphisms.

CTblLib.Test.FactorsModPCore( \(tbl\) )

checks, for all those prime divisors \(p\) of the order of \(G\) such that \(G\) is not \(p\)-solvable, whether the factor fusion to the character table of \(G/O_p(G)\) is stored on \(tbl\).

Note that if \(G\) is not \(p\)-solvable and \(O_p(G)\) is nontrivial then we can compute the \(p\)-modular Brauer table of \(G\) if that of the factor group \(G/O_p(G)\) is available. The availability of this table is indicated via the availability of the factor fusion from \(tbl\).

CTblLib.Test.Fusions( \(tbl\) )

checks the class fusions that are stored on the table \(tbl\): No duplicates shall occur, each subgroup fusion or factor fusion is tested using CTblLib.Test.SubgroupFusion or CTblLib.Test.FactorFusion, respectively, and a fusion to the table of marks for \(tbl\) is tested using CTblLib.Test.FusionToTom.

CTblLib.Test.Maxes( \(tbl\) )

checks for those character tables \(tbl\) that have the Maxes (3.7-1) set whether the character tables with the given names are really available, that they are ordered w.r.t. non-increasing group order, and that the fusions into \(tbl\) are stored.

CTblLib.Test.ClassParameters( \(tbl\) )

checks the compatibility of class parameters of alternating and symmetric groups (partitions describing cycle structures), using the underlying group stored in the corresponding table of marks.

CTblLib.Test.TablesOfSymmetricGroup( \(n\) )

checks that the class parameters and character parameters of the two character tables of the symmetric group of degree \(n\) (from the Atlas and from the SpinSym package) are consistent. The interesting values of n are in [ 5 .. 13 ].

CTblLib.Test.Constructions( \(tbl\) )

checks the ConstructionInfoCharacterTable (3.7-4) status for the table \(tbl\): If this attribute value is set then tests depending on this value are executed; if this attribute is not set then it is checked whether a description of \(tbl\) via a construction would be appropriate.

CTblLib.Test.ExtensionInfo( \(tbl\) )

checks whether the attribute ExtensionInfoCharacterTable (3.7-3) is known for all nonabelian simple character tables that are not duplicates.

CTblLib.Test.GroupForGroupInfo( \(tbl\) )

checks that the entries in the list returned by GroupInfoForCharacterTable (3.3-1) fit to the character table \(tbl\).

The following tests concern only modular character tables. In all cases, let \(modtbl\) be a Brauer character table of a group \(G\), say.

CTblLib.Test.BlocksInfo( \(modtbl\) )

checks whether the decomposition matrices of all blocks of the Brauer table \(modtbl\) are integral, as well as the inverses of their restrictions to basic sets.

CTblLib.Test.TensorDecomposition( \(modtbl\) )

checks whether the tensor products of irreducible Brauer characters of the Brauer table \(modtbl\) decompose into Brauer characters.

CTblLib.Test.Indicators( \(modtbl\) )

checks the \(2\)-nd indicators of the Brauer table \(modtbl\): The indicator of a Brauer character is zero iff it has at least one nonreal value. In odd characteristic, the indicator of an irreducible Brauer character is equal to the indicator of any ordinary irreducible character that contains it as a constituent, with odd multiplicity. In characteristic two, we test that all nontrivial real irreducible Brauer characters have even degree, and that irreducible Brauer characters with indicator \(-1\) lie in the principal block.

CTblLib.Test.FactorBlocks( \(modtbl\) )

If the Brauer table \(modtbl\) is encoded using references to tables of factor groups then we must make sure that the irreducible characters of the underlying ordinary table and the factors in question are sorted compatibly. (Note that we simply take over the block information about the factors, without applying an explicit mapping.)

4.9 Maintenance of the GAP Character Table Library

It is of course desirable that the information in the GAP Character Table Library is consistent with related data. For example, the ordering of the classes of maximal subgroups stored in the Maxes (3.7-1) list of the character table of a group \(G\), say, should correspond to the ordering shown for \(G\) in the Atlas of Finite Groups [CCN+85], to the ordering of maximal subgroups used for \(G\) in the AtlasRep, and to the ordering of maximal subgroups in the table of marks of \(G\). The fact that the related data collections are developed independently makes it difficult to achieve this kind of consistency. Sometimes it is unavoidable to "adjust" data of the GAP Character Table Library to external data.

An important issue is the consistency of class fusions. Usually such fusions are determined only up to table automorphisms, and one candidate can be chosen. However, other conditions such as known Brauer tables may restrict the choice. The point is that there are class fusions which predate the availability of Brauer tables in the Character Table Library (in fact many of them have been inherited from the table library of the CAS system), but they are not compatible with the Brauer tables. For example, there are four possible class fusion from \(M_{23}\) into \(Co_3\), which lie in one orbit under the relevant groups of table automorphisms; two of these maps are not compatible with the \(3\)-modular Brauer tables of \(M_{23}\) and \(Co_3\), and unfortunately the class fusion that was stored on the CAS tables –and that was available in version 1.0 of the GAP Character Table Library– was one of the not compatible maps. One could argue that the class fusion has older rights, and that the Brauer tables should be adjusted to them, but the Brauer tables are published in the Atlas of Brauer Characters [JLPW95], which is an accepted standard.

 [Top of Book]  [Contents]   [Previous Chapter]   [Next Chapter] 
Goto Chapter: Top 1 2 3 4 5 6 7 Bib Ind

generated by GAPDoc2HTML