% This file was created automatically from ctbllibr.msk.
% DO NOT EDIT!
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%W  ctbllibr.msk          GAP 4 package `ctbllib'               Thomas Breuer
%%
%H  @(#)$Id: ctbllibr.msk,v 1.16 2004/03/23 10:11:17 gap Exp $
%%
%Y  Copyright (C) 2001,  Lehrstuhl D fuer Mathematik,   RWTH Aachen,  Germany
%%
\Chapter{The GAP Character Table Library}

\index{character tables!library of}%
\index{tables!library of}%
\index{library tables}%
\index{generic character tables}

This chapter informs you about
\beginlist
\item{--}
    the currently available character tables
    (see~"Contents of the GAP Character Table Library"),
\item{--}
    how to access library tables (see~"Access to Library Character Tables"),
\item{--}
    generic character tables
    (see~"Generic Character Tables"
    and "Examples of Generic Character Tables"),
\item{--}
    the subsets of {\ATLAS} tables
    (see~"ATLAS Tables" and "Examples of the ATLAS Format for GAP Tables")
    and {\sf CAS} tables (see~"CAS Tables"),
\item{--}
    the organization of the table library
    (see~"Organization of the Character Table Library"), and
\item{--}
    how to extend the library
    (see~"How to Extend the Character Table Library").
\endlist
The latter two sections are rather technical,
they are thought only for those who want to maintain or extend the table
library.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Contents of the GAP Character Table Library}

\index{character tables!library of}%
\index{tables!library of}\index{library of character tables}

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~"Organization of the Character Table Library".

The changes in the character table library since the first release of
{\GAP}~4 are listed in a file that can be fetched from
\URL{http://www.math.rwth-aachen.de/~Thomas.Breuer/ctbllib/htm/ctbldiff.html}

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~"ref:Operations Concerning Blocks" in the {\GAP} Reference Manual
for details).
A collection of DVI and PostScript files of the known decomposition matrices
of almost simple groups in the {\GAP} table library can also be found
at~\URL{http://www.math.rwth-aachen.de/~MOC/decomposition/}


*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 *connections* between the tables.

As for the source, there are first of all two big sources,
namely the {\ATLAS} of Finite Groups (see~"ATLAS Tables")
and the {\sf CAS} library of character tables (see~\cite{NPP84}).
Many {\ATLAS} tables are contained in the {\sf CAS} library,
and difficulties may arise because the succession of characters and classes
in {\sf CAS} tables and {\ATLAS} tables are in general different,
so see~"CAS Tables" for the relations between these two variants of
character tables of the same group.
A large subset of the {\sf CAS} tables is the set of tables of Sylow
normalizers of sporadic simple groups as published in~\cite{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~\cite{Han88})
that are part of~\cite{HP89} via two microfiches;
these tables are given in {\sf CAS} format (see~"CAS Tables") on the
microfiches,
but they had not been part of the ``official'' {\sf CAS} library.

To avoid confusion about the ordering of classes and characters in a given
table, authorship and so on,
the `InfoText' (see~"ref:InfoText" in the {\GAP} Reference Manual)
value of the table contains the information
\beginitems
`origin: ATLAS of finite groups' &
    for {\ATLAS} tables (see~"ATLAS Tables"),

`origin: Ostermann' &
    for tables contained in~\cite{Ost86},

`origin: CAS library' &
    for any table of the {\sf CAS} table library that is contained
    neither in the {\ATLAS} nor in~\cite{Ost86}, and

`origin: Hanrath library' &
    for tables contained in the microfiches in~\cite{HP89}.
\enditems
The `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 {\sf CAS} library then additional
information may be available via the `CASInfo' value (see~"CASInfo").

If one is interested in the aspect of connections 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
\beginlist
\item{-}
    all {\ATLAS} tables (see~"ATLAS Tables"), i.e., the tables of the
    simple groups which are contained in the {\ATLAS} of Finite Groups,
    and the tables of cyclic and bicyclic extensions of these groups,
\item{-}
    most tables of maximal subgroups of sporadic simple groups
    (*not all* for $B$ and $M$),
\item{-}
    some tables of maximal subgroups of other {\ATLAS} tables,
    where the list of maximal subgroups is complete if the `Maxes' value
    for the table is known (see~"Maxes"),
\item{-}
    the tables of most Sylow normalizers of sporadic simple groups,
    as printed in~\cite{Ost86}
    (*not* $J_4N2$, $Co_1N2$, $Fi_{22}N2$,
    and several for $HN$, $Fi_{23}$, $Fi_{24}^{\prime}$, $B$, $M$)
\item{-}
    some tables of element centralizers
\item{-}
    some tables of Sylow subgroups
\item{-}
    a few other tables, e.g.~`W(F4)'
%T namely which?
\endlist

*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.


*Brauer Tables*

The library contains all tables of the {\ATLAS} of Brauer Tables
(\cite{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
\begintt
origin: modular ATLAS of finite groups
\endtt
in their `InfoText' string
(see~"ref:InfoText" in the {\GAP} Reference Manual).


*Generic Character Tables*

See~"Generic Character Tables" for an overview of generic tables available.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Access to Library Character Tables}

\index{character tables!access to}

This section describes how to access
a specific character table (see~"CharacterTableFromLibrary"),
known character tables of maximal subgroups (see~"Maxes"),
and how to select character tables with prescribed properties
(see~"AllCharacterTableNames", "OneCharacterTableName").

\>CharacterTableFromLibrary( <tblname> ) F
\>CharacterTableFromLibrary( <series>, <param1>[, <param2>] ) F

If the only argument is a string <tblname> and if this is an admissible
name (see below) of a library character table then
`CharacterTableFromLibrary' returns this library table, otherwise `fail'.

If `CharacterTableFromLibrary' is called with more than one argument
then the first must be a string <series> specifying a series of groups
which is implemented via a generic character table,
for example `\"Symmetric\"' for symmetric groups;
the remaining arguments specialise then the desired member of the series
(see~"Generic Character Tables" for a list of available generic tables).
If no generic table with name <series> is available or if the parameters
are not admissible then `CharacterTableFromLibrary' returns `fail'.

A call of `CharacterTableFromLibrary' may cause to read some library
files and to construct the table object from the data stored in these
files,
so fetching a library table may take more time than on expects.

`CharacterTableFromLibrary' is called by `CharacterTable' if the first
argument is a string, so one may also call `CharacterTable'.

Admissible names for the *ordinary character table* $t$ of the group $G$
are
\beginlist
\item{-}
    an {\ATLAS} like name if $t$ is an {\ATLAS} table
    (see~"ATLAS Tables"), for example
    `\"M22\"' for the table of the Mathieu group $M_{22}$,
    `\"L2(13).2\"' for $L_2(13):2$, and
    `\"12_1.U4(3).2_1\"' for $12_1\.U_4(3)\.2_1$,

    (The difference to the name printed in the {\ATLAS} is that
    subscripts and superscripts are omitted except if they are used to
    qualify integer values,
    and double dots are replaced by a single dot.)
\item{-}
    the names that were admissible for tables of $G$ in {\sf CAS}
    if the {\sf CAS} table library contained a table of $G$,
    for example `sl42' for the table of the alternating group $A_8$,

    (But note that the {\GAP} table may be different from that in
    {\sf CAS}, see~"CAS Tables".)
\item{-}
    some ``relative'' names, as follows.

    If $G$ is the <n>--th maximal subgroup (in decreasing group order)
    of a group whose library table $s$ is available in {\GAP} and stores
    the `Maxes' value (see~"Maxes"),
    and if <name> is an admissible name for $s$
    then `<name>M<n>' is admissible for $t$.
    For example, the name `\"J3M2\"' can be used to access the second
    maximal subgroup of the sporadic simple Janko group $J_3$
    which has the admissible name `J3'.

    If $G$ is a nontrivial Sylow $p$ normalizer in a sporadic simple
    group with admissible name <name>,
    --where nontrivial means that $G$ is not isomorphic to a subgroup of
    $p:(p-1)$--
    then `<name>N<p>' is an admissible name of $t$.
    For example, the name `\"J4N11\"' can be used to access the table of
    the Sylow $11$ normalizer in the sporadic simple Janko group $J_4$.

    In a few cases, the table of the Sylow $p$ subgroup of $G$ is
    accessible via the name `<name>Syl<p>' where <name> is an admissible
    name of the table of $G$.
    For example, `\"A11Syl2\"' is an admissible name for the table of the
    Sylow $2$ subgroup of the alternating group $A_{11}$.

    In a few cases, the table of an element centralizer in $G$ is
    accessible via the name `<name>C<cl>'
    where <name> is an admissible name of the table of $G$.
    For example, `\"M11C2\"' is an admissible name for the table of an
    involution centralizer in the Mathieu group $M_{11}$.
\endlist

The recommended way to access *Brauer tables* from the library is via the
`mod' operator from the ordinary table and the desired characteristic
(see~"ref:BrauerTable" and "ref:Operators for Character Tables"
in the {\GAP} Reference Manual),
so it is not necessary to define admissible names of Brauer tables.

A *generic character table* (see~"Generic Character Tables") is
accessible only by the name given by its `Identifier' value
(see~"ref:Identifier!for character tables"
in the {\GAP} Reference Manual).

Case is not significant for character table names.
For example, both `\"suzm3\"' and `\"SuzM3\"' are admissible names for
the third maximal subgroup of the sporadic simple Suzuki group.


\beginexample
gap> s5:= CharacterTable( "A5.2" );
CharacterTable( "A5.2" )
gap> sym5:= CharacterTable( "Symmetric", 5 );
CharacterTable( "Sym(5)" )
gap> TransformingPermutationsCharacterTables( s5, sym5 );
rec( columns := (2,3,4,7,5), rows := (1,7,3,4,6,5,2), group := Group(()) )
\endexample
The above two tables are tables of the symmetric group on five letters;
the first is in {\ATLAS} format (see~"ATLAS Tables"),
the second is constructed from the generic table for symmetric groups
(see~"Generic Character Tables").
\beginexample
gap> CharacterTable( "J5" );
fail
gap> CharacterTable( "A5" ) mod 2;
BrauerTable( "A5", 2 )
\endexample

\>Maxes( <tbl> ) A

is a list of identifiers of the tables of all maximal subgroups of <tbl>.
This is meaningful only for library tables,
and there is no default method to compute the value.

If the `Maxes' value of <tbl> is stored then it lists exactly one
representative for each conjugacy class of maximal subgroups of the group
of <tbl>,
and the tables of these maximal subgroups are available in the {\GAP}
table library, and the fusions to <tbl> are stored on these tables.


\beginexample
gap> tbl:= CharacterTable( "M11" );;
gap> HasMaxes( tbl );
true
gap> maxes:= Maxes( tbl );
[ "A6.2_3", "L2(11)", "3^2:Q8.2", "A5.2", "2.S4" ]
gap> CharacterTable( maxes[1] );
CharacterTable( "A6.2_3" )
\endexample

\>FusionToTom( <tbl> ) A

If this attribute is set for an ordinary character table <tbl> then
the {\GAP} Library of Tables of Marks contains the table of marks of the
group of <tbl>, and the attribute value is a record with the following
components.
\beginitems
`name' &
    the `Identifier' component of the table of marks of <tbl>,

`map' &
    the fusion map, and

`text' (optional) &
    a string describing the status of the fusion.
\enditems


\beginexample
gap> FusionToTom( CharacterTable( "A5" ) );
rec( name := "A5", map := [ 1, 2, 3, 5, 5 ], text := "fusion map is unique" )
\endexample

\>ProjectivesInfo( <tbl> ) A

If this attribute is set for an ordinary character table <tbl> then
the value is a list of records, each with the following components.
\beginitems
`name' &
    the `Identifier' value of the character table <mult> of the covering
    whose faithful irreducible characters are described by the record,

`chars' &
    a list of values lists of faithful projective irreducibles;
    only one representative of each family of Galois conjugates is
    contained in this list,
    and

`map' &
    a list of positions that maps each class of <tbl> to that preimage in
    <mult> for which the entries in `chars' give the values.
    In a sense, a projection map is an inverse of the factor fusion from
    the table of the covering to the given table
    (see~"ref:ProjectionMap" in the {\GAP} Reference Manual).
\enditems


\beginexample
gap> ProjectivesInfo( CharacterTable( "A5" ) );
[ rec( name := "2.A5", 
      chars := [ [ 2, 0, -1, E(5)+E(5)^4, E(5)^2+E(5)^3 ], [ 2, 0, -1, 
              E(5)^2+E(5)^3, E(5)+E(5)^4 ], [ 4, 0, 1, -1, -1 ], 
          [ 6, 0, 0, 1, 1 ] ], map := [ 1, 3, 4, 6, 8 ] ) ]
\endexample

\>ExtensionInfoCharacterTable( <tbl> ) A

Let <tbl> be the ordinary character table of a group $G$, say.
If this attribute is set for <tbl> then the value is a list of length
two,
the first entry being a string <M> that describes the Schur multiplier
of $G$ and the second entry being a string <A> that describes the outer
automorphism group of $G$.
Trivial multiplier or outer automorphism group are denoted by an empty
string.

If <tbl> is a table from the {\GAP} Character Table Library and $G$ is
(nonabelian and) simple then the value is set.
In this case, an admissible name for the character table of the
Darstellungsgruppe of $G$ (if this table is available and different from
<tbl>) is given by the concatenation of <M>, `"."', and the `Identifier'
value of <tbl>.
Analogously, an admissible name for the character table of the
automorphism group of $G$ (if this table is available and different from
<tbl>) is given by the concatenation of the `Identifier' value of <tbl>,
`"."', and <A>.


\beginexample
gap> ExtensionInfoCharacterTable( CharacterTable( "A5" ) );
[ "2", "2" ]
\endexample

\index{selection function!for character tables}

\>AllCharacterTableNames( [<func>, <val>, ... ] ) F
\>AllCharacterTableNames( <func>, <val>, ...[, OfThose, <func>] ) F

Similar to group libraries (see Chapter~"ref:Group Libraries" in the
{\GAP} Reference Manual),
the {\GAP} character table library can be used to search for ordinary
character tables with prescribed properties.

A specific library table can be selected by an admissible name
(see~"CharacterTableFromLibrary").

The selection function for character tables from the {\GAP} Character
Table Library that have certain abstract properties is
`AllCharacterTableNames'.
Contrary to the situation in the case of group libraries,
the selection function returns a list not of library character tables
but of their names;
using `CharacterTable' one can then access the tables themselves.

`AllCharacterTableNames' takes an arbitrary even number of arguments.
The argument at each odd position must be a function, and
the argument at the subsequent even position must be a value that this
function must return when called for the character table in question,
in order to have the name of the table included in the selection,
or a list of such values.
For example,
\beginexample
gap> names:= AllCharacterTableNames();;
\endexample
returns a list containing one admissible name of each ordinary character
table in the {\GAP} library, and
\beginexample
gap> simpnames:= AllCharacterTableNames( IsSimple, true );;
gap> AllCharacterTableNames( IsSimple, true, Size, [ 1 .. 100 ] );
[ "A5" ]
\endexample
return lists containing an admissible name of each ordinary character
table in the {\GAP} library whose groups are simple or are simple and
have order at most $100$, respectively.

For the sake of efficiency,
the arguments `IsSimple' and `IsSporadicSimple' followed by `true' are
handled in a special way, {\GAP} need not read all files of the table
library in these cases in order to find the desired names.

If the function `OfThose' is an argument at an odd position then the
following argument <func> must be a function that takes a character table
and returns a name of a character table or a list of names;
this is interpreted as replacement of the names computed up to this
position by the union of names returned by <func>.
For example, <func> may be `Maxes' (see~"Maxes") or
`NamesOfFusionSources' (see~"ref:NamesOfFusionSources" in the {\GAP}
Reference Manual).
\beginexample
gap> maxesnames:= AllCharacterTableNames( IsSporadicSimple, true,
>                                         HasMaxes, true,
>                                         OfThose, Maxes );;
\endexample
returns the union of names of ordinary tables of those maximal subgroups
of sporadic simple groups that are contained in the table library in the
sense that the attribute `Maxes' is set.

For the sake of efficiency, `OfThose' followed by one of the arguments
`AutomorphismGroup', `SchurCover', `CompleteGroup' is handled in a
special way.


\>OneCharacterTableName( {<func>, <val>} ) F
\>OneCharacterTableName( <func>, <val>, ...{, OfThose, <func>} ) F

The example function for character tables from the {\GAP} Character
Table Library that have certain abstract properties is
`OneCharacterTableName'.
It is analogous to the selection function `AllCharacterTableNames'
(see~"AllCharacterTableNames"), the difference is that it returns one
`Identifier' value of a character table with the properties in question
instead of the list of all such values.
If no table with the required properties is contained in the {\GAP}
Character Table Library then `fail' is returned.
\beginexample
gap> OneCharacterTableName( IsSimple, true, Size, 60 );
"A5"
gap> OneCharacterTableName( IsSimple, true, Size, 20 );
fail
\endexample



\>CTblLibSetUnload( <value> ) F

If <value> is `false' then the call to `CTblLibSetUnload' has the effect
that data files from the {\GAP} Character TableLibrary are read only once
in the current session.
By default, the contents of only one data file is kept in memory,
in order to keep the space small.
This behaviour can be achieved also by calling `CTblLibSetUnload' with
`true'.




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Generic Character Tables}

\index{character tables!generic}%
\index{tables!generic}%
\index{library tables!generic}%
\index{spin groups!character table}%
\index{symmetric groups!character table}%
\index{alternating groups!character table}%
\index{dihedral groups!character table}%
\index{Suzuki groups!character table}%
\index{Weyl groups!character table}%
\index{cyclic groups!character table}

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
${\rm 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" for an example).
{\GAP} does *not* support the computation of, e.g., generic scalar products.

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'
with the first argument only;
for example, `CharacterTable( \"Cyclic\" )' yields the generic table of
cyclic groups.
\beginlist
\item{}
    `CharacterTable( \"Alternating\", <n> )',
    the table of the *alternating* group on <n> letters,
\item{}
    `CharacterTable( \"Cyclic\", <n> )',
    the table of the *cyclic* group of order <n>,
\item{}
    `CharacterTable( \"Dihedral\", <2n> )',
    the table of the *dihedral* group of order <2n>,
\item{}
    `CharacterTable( \"DoubleCoverAlternating\", <n> )',
    the table of the *Schur double cover of the alternating* group
    on <n> letters (see~\cite{Noe02}),
\item{}
    `CharacterTable( \"DoubleCoverSymmetric\", <n> )',
    the table of the *standard Schur double cover of the symmetric* group
    on <n> letters (see~\cite{Noe02}),
\item{}
    `CharacterTable( \"GL\", 2, <q> )',
    the table of the *general linear* group GL$(2,q)$,
    for a prime power <q>,
\item{}
    `CharacterTable( \"GU\", 3, <q> )',
    the table of the *general unitary* group GU$(3,q)$,
    for a prime power <q>,
\item{}
    `CharacterTable( \"P:Q\", [ <p>, <q> ] )' and
    `CharacterTable( \"P:Q\", [ <p>, <q>, <k> ] )',
    the table of the *Frobenius extension* of the cyclic group of order <p>
    by a cyclic group of order <q> where <q> divides $p-1$;
    if <p> is a prime integer 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>,
\item{}
    `CharacterTable( \"PSL\", 2, <q> )',
    the table of the *projective special linear* group PSL$(2,q)$,
    for a prime power <q>,
\item{}
    `CharacterTable( \"SL\", 2, <q> )',
    the table of the *special linear* group SL$(2,q)$,
    for a prime power <q>,
\item{}
    `CharacterTable( \"SU\", 3, <q> )',
    the table of the *special unitary* group SU$(3,q)$,
    for a prime power <q>,
\item{}
    `CharacterTable( \"Suzuki\", <q> )',
    the table of the *Suzuki* group $Sz(q) = {}^2B_2(q)$,
    for <q> an odd power of $2$,
\item{}
    `CharacterTable( \"Symmetric\", <n> )',
    the table of the *symmetric* group on <n> letters,
\item{}
    `CharacterTable( \"WeylB\", <n> )',
    the table of the *Weyl* group of type $B_n$,
\item{}
    `CharacterTable( \"WeylD\", <n> )',
    the table of the *Weyl* group of type $D_n$.
\endlist
In addition to the above calls that really use generic tables,
the following calls to `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.
\beginlist
\item{}
    `CharacterTable( \"Quaternionic\", <4n> )',
    the table of the *quaternionic* (dicyclic) group of order <4n>,
\item{}
    `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~"ref:CharacterTableWreathSymmetric" in the {\GAP} Reference Manual).
\endlist

\>CharacterTableSpecialized( <generic_table>, <q> ) F

For a record <generic_table> representing a generic character table,
and a parameter value <q>,
`CharacterTableSpecialized' returns a character table object computed by
evaluating <generic_table> at <q>.


\beginexample
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
\endexample
(Also `CharacterTable( \"Cyclic\", 5 )' could have been used to construct
the above table.)

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'
and `CharacterParameters'.

\>ClassParameters( <tbl> ) A
\>CharacterParameters( <tbl> ) A

are lists containing a parameter for each conjugacy class or irreducible
character, respectively, of the character table <tbl>.

It depends on <tbl> what these parameters are,
so there is no default to compute class and character parameters.

For example, the classes of symmetric groups can be parametrized by
partitions, corresponding to the cycle structures of permutations.
Character tables constructed from generic character tables
(see~"Generic Character Tables") usually have class and character
parameters stored.

If <tbl> is a $p$-modular Brauer table such that class parameters are
stored in the underlying ordinary table
(see~"ref:OrdinaryCharacterTable" in the {\GAP} Reference Manual)
of <tbl> then `ClassParameters' returns the sublist of class parameters
of the ordinary table, for $p$-regular classes.


\beginexample
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 ] ] ]
\endexample
Here are examples for ``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.
\beginexample
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
\endexample

Any generic table in {\GAP} is represented by a record.
The following components are supported for generic character table records.
\beginitems
`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]$,

`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' 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' value of the table of $G_q$,

`text' &
    string informing about the generic table
\enditems

In the specialized table, the `ClassParameters' and `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").


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Examples of Generic Character Tables}

\index{tables!generic}\index{character tables!generic}

1. 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
$\frac{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}$.

The library file contains the following generic table.
\begintt
rec(
identifier := "Cyclic",
specializedname := ( q -> Concatenation( "C", String(q) ) ),
size := ( n -> n ),
text := "generic character table for cyclic groups",
centralizers := [ function( n, k ) return n; end ],
classparam := [ ( n -> [ 0 .. n-1 ] ) ],
charparam := [ ( n -> [ 0 .. n-1 ] ) ],
powermap := [ function( n, k, pow ) return [ 1, k*pow mod n ]; end ],
orders := [ function( n, k ) return n / Gcd( n, k ); end ],
irreducibles := [ [ function( n, k, l ) return E(n)^(k*l); end ] ],
domain := IsPosInt,
libinfo := rec( firstname:= "Cyclic", othernames:= [] ),
isGenericTable := true )
\endtt


2. The generic table of the general linear group $\rm{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 elements $\rho\in \F_q^{\ast}$,
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
$\F_q^{\ast}$ for $t_1$ and $t_3$,
with the set
$\{\{\rho,\tau\}; \rho, \tau\in \F_q^{\ast}, \rho\not=\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.
\begintt
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 )
\endtt


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{ATLAS Tables}

\index{character tables!ATLAS}%
\index{tables!library}\index{library of character 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 (\cite{CCN85},
from now on called {\ATLAS}),
and the Brauer tables contained in the {\ATLAS} of Brauer Characters
(\cite{JLPW95}).

These tables have the information
\begintt
origin: ATLAS of finite groups
\endtt
or
\begintt
origin: modular ATLAS of finite groups
\endtt
in their `InfoText' value (see~"ref:InfoText" in the {\GAP} Reference Manual),
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~"ref:LaTeXStringDecompositionMatrix" in the {\GAP} Reference Manual
and~"AtlasLabelsOfIrreducibles".

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


*Improvements*

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~\cite{BN95},
and is printed in the Appendix of~\cite{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~\cite{JLPW95}.
It can be found in the internet, namely, an HTML version
at~\URL{http://web.mat.bham.ac.uk/atlas/html/atlasmods.html}

and a DVI
version at~\URL{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~\URL{http://www.math.rwth-aachen.de/~MOC/ABCerr.html}

and~\URL{http://www.math.rwth-aachen.de/~MOC/ABCerr.pdf}

respectively.

Also some tables are regarded as {\ATLAS} tables which are not printed in
the {\ATLAS} but available in {\ATLAS} format from Cambridge,
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$.


*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~"ref:MatrixAutomorphisms" in the {\GAP} Reference Manual)
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'
strings of the tables.


*Projective Characters and Projections*

If $G$ (or $G\.a$) has a nontrivial Schur multiplier then the attribute
`ProjectivesInfo' of the {\GAP} table object of $G$ (or $G\.a$) is set
(see~"ProjectivesInfo"); 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 {\it proxy characters}),
and the `map' component lists the positions of columns in the covering
for which the column is printed in the {\ATLAS}
(a so--called {\it proxy class}, this preimage is denoted by $g_0$ in
Chapter~7, Section~14 of the {\ATLAS}).


*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 other isoclinic variant can be constructed using
`CharacterTableIsoclinic' (see~"ref:CharacterTableIsoclinic" in the {\GAP}
Reference Manual).


*Ordering of Characters and Classes*

(Throughout this paragraph, $G$ always means the simple group involved.)
\beginlist
\item{1.}
    For $G$ itself, the ordering of classes and characters in the {\GAP}
    table coincides with the one in the {\ATLAS}.
\item{2.}
    For an automorphic extension $G\.a$, there are three types of characters.

    If a character $\chi$ of $G$ extends to $G\.a$ then the different
    extensions $\chi^0, \chi^1, \ldots, \chi^{a-1}$ are consecutive in the
    table of $G\.a$ (see Chapter~7, Section~16 of the {\ATLAS}).

    If some characters of $G$ fuse to give a single character of $G\.a$ then
    the position of that character in the table of $G\.a$ is given by the
    position of the first involved character of $G$.

    If both extension and fusion occur for a character
    then the resulting characters are consecutive in the table of $G\.a$,
    and each replaces the first involved character of $G$.
\item{3.}
    Similarly, there are different types of classes for an automorphic
    extension $G\.a$, as follows.

    If some classes collapse then the resulting class replaces the first
    involved class of $G$.

    For $a > 2$, any proxy class and its algebraic conjugates that are not
    printed in the {\ATLAS} are consecutive in the table of $G\.a$;
    if more than two classes of $G\.a$ have the same proxy class
    (the only case that actually occurs is for $a = 5$)
    then the ordering of non-printed classes is the natural one of
    corresponding Galois conjugacy operators $\ast k$
    (see Chapter~7, Section~19 in the {\ATLAS}).

    For $a_1, a_2$ dividing $a$ such that $a_1 \< a_2$,
    the classes of $G\.a_1$ in $G\.a$ precede the classes of $G\.a_2$ not
    contained in $G\.a_1$.
    This ordering is the same as in the {\ATLAS},
    with the only exception $U_3(8)\.6$.
\item{4.}
    For a central extension $M\.G$, there are two different types of
    characters, as follows.

    Each character can be regarded as a faithful character of a factor group
    $m\.G$, where $m$ divides $M$.
    Characters with the same kernel are consecutive as in the {\ATLAS},
    the ordering of characters with different kernels is given by the order
    of precedence $1, 2, 4, 3, 6, 12$ for the different values of $m$.

    If $m > 2$, a faithful character of $m\.G$ that is printed in the
    {\ATLAS} (a so-called {\it proxy character}) represents two or more
    Galois conjugates.
    In each {\ATLAS} table in {\GAP}, a proxy character always precedes the
    non-printed characters with this proxy.
    The case $m = 12$ is the only one that actually occurs where more than
    one character for a proxy is not printed.
    In this case, the non-printed characters are ordered according to the
    corresponding Galois conjugacy operators $\ast 5$, $\ast 7$, $\ast 11$
    (in that succession).
\item{5.}
    For the classes of a central extension we have the following.

    The preimages of a $G$-class in $M\.G$ are subsequent,
    the ordering is the same as that of the lifting order rows in the
    {\ATLAS} (see Chapter~7, Section~7 there).

    The primitive roots of unity chosen to represent the generating
    central element (i.e., the element in the second class of the {\GAP}
    table) are  `E(3)',  `E(4)',  `E(6)^5' (`= E(2) \* E(3)'), and `E(12)^7'
    (`= E(3) \* E(4)'), for $m = 3$, $4$, $6$, and $12$, respectively.
\item{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.

    Whenever classes of the subgroup $m\.G$ collapse in $m\.G\.a$
    then the resulting class replaces the first involved class.

    Whenever characters of the subgroup $m\.G$ collapse fuse in $m\.G\.a$
    then the result character replaces the first involved character.

    Extensions of a character are subsequent, and the extensions of a
    proxy character precede the extensions of characters with this proxy
    that are not printed.

    Preimages of a class of $G\.a$ in $m\.G\.a$ are subsequent,
    and the preimages of a proxy class precede the preimages of non-printed
    classes with this proxy.
\endlist


\>AtlasLabelsOfIrreducibles( <tbl>[, "short"] ) F

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~\cite{CCN85} or the
{\ATLAS} of Brauer Characters~\cite{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^{\ast}$, or $\chi_i^{\ast 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~Sections~8 and~19 of Chapter~7 in the {\ATLAS} of Finite Groups),
and the image of the printed character $\chi_i$ under the algebraic
conjugacy operator $\ast 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.
\beginlist
\item{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}.
\item{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 the string `\"short\"' was 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}.
\item{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.

    Again, if the string `\"short\"' was entered as the second argument
    then the label has a short form, namely $\chi_{i,j+}$.
\endlist


\beginexample
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+}" ]
\endexample


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Examples of the ATLAS Format for GAP Tables}

\index{character tables!CAS}\index{tables!library}
\index{library of character tables}

We give three little examples for the conventions stated in~"ATLAS Tables",
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
\beginlist
\item{1.}
    as a downward extension of the factor group $C_2$ which contains
    $G$ as a subgroup,
    or equivalently,
    as an upward extension of the subgroup $C_3$ which has a factor group
    isomorphic to $G$,
\item{2.}
    as a downward extension of the factor group $C_3$ which contains
    $G$ as a subgroup,
    or equivalently,
    as an upward extension of the subgroup $C_2$ which has a factor group
    isomorphic to $G$,
\item{3.}
    as a downward extension of the factor groups $C_3$ and $C_2$ which
    have $G$ as a factor group, or
\item{4.}
    as an upward extension of the subgroups $C_3$ or $C_2$ which both
    contain a subgroup isomorphic to $G$.
\endlist

% \def\ttquote{\char13}
% \setlength{\unitlength}{0.1cm}
% %ignore
% \begin{picture}(110,55)
% \put(-2,23){
% \begin{picture}(29,29)
% \put(0,29){\line(1,0){14}}
% \put(0,15){\line(1,0){14}}
% \put(0,14){\line(1,0){14}}
% \put(0,0){\line(1,0){14}}
% \put(15,29){\line(1,0){14}}
% \put(15,15){\line(1,0){14}}
% \put(15,14){\line(1,0){14}}
% \put(15,0){\line(1,0){14}}
% \put(0,15){\line(0,1){14}}
% \put(0,0){\line(0,1){14}}
% \put(14,15){\line(0,1){14}}
% \put(15,15){\line(0,1){14}}
% \put(29,15){\line(0,1){14}}
% \put(14,0){\line(0,1){14}}
% \put(15,0){\line(0,1){14}}
% \put(29,0){\line(0,1){14}}
% \put(7,7){\makebox(0,0){3.G}}
% \put(22,7){\makebox(0,0){3.G.2}}
% \put(7,22){\makebox(0,0){G}}
% \put(22,22){\makebox(0,0){G.2}}
% \end{picture}}
% \put(37,52){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{2in}
% \baselineskip0.9ex
% \parskip0.2ex
% 
% \ \ \ \ ;\ \ \ @\ \ \ ;\ \ \ ;\ \ \ @\ \par
% \ \par
% \ \ \ \ \ \ \ \ 1\ \ \ \ \ \ \ \ \ \ \ 1\ \par
% \ \ p\ power\ \ \ \ \ \ \ \ \ \ \ A\ \par
% \ \ p\ttquote\ part\ \ \ \ \ \ \ \ \ \ \ A\ \par
% \ \ ind\ \ 1A\ fus\ ind\ \ 2A\ \par
% \ \par
% $\chi_1$\ \ +\ \ \ 1\ \ \ \:\ \ ++\ \ \ 1\ \par
% \ \par
% \ \ ind\ \ \ 1\ fus\ ind\ \ \ 2\ \par
% \ \ \ \ \ \ \ \ 3\ \ \ \ \ \ \ \ \ \ \ 6\ \par
% \ \ \ \ \ \ \ \ 3\ \ \ \ \ \ \ \ \ \ \ 6\ \par
% \ \par
% $\chi_2$\ o2\ \ \ 1\ \ \ \:\ oo2\ \ \ 1\ 
% \end{minipage}}}
% 
% \put(83,52){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{2in}
% \baselineskip2.7ex
% \parskip0ex
% 
% \ \ \ 2\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
% \ \ \ 3\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
%  \par
% \ \ \ \ \ \ 1a\ \ 3a\ \ 3b\ \ 2a\ \ 6a\ \ 6b \par
% \ \ 2P\ \ 1a\ \ 3b\ \ 3a\ \ 1a\ \ 3b\ \ 3a \par
% \ \ 3P\ \ 1a\ \ 1a\ \ 1a\ \ 2a\ \ 2a\ \ 2a \par
%  \par
% X.1\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
% X.2\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ -1\ \ -1\ \ -1 \par
% X.3\ \ \ \ 1\ \ \ A\ \ /A\ \ \ 1\ \ \ A\ \ /A \par
% X.4\ \ \ \ 1\ \ \ A\ \ /A\ \ -1\ \ -A\ -/A \par
% X.5\ \ \ \ 1\ \ /A\ \ \ A\ \ \ 1\ \ /A\ \ \ A \par
% X.6\ \ \ \ 1\ \ /A\ \ \ A\ \ -1\ -/A\ \ -A \par
%  \par
% A\ =\ E(3) \par
% \ \ =\ (-1+ER(-3))/2\ =\ b3 \par
% 
% \end{minipage}}}
% \end{picture}
% %end
% %display
Situation 1.~is shown here.
\begintt
 -------   -------         ;   @   ;   ;   @      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
||       || ||       ||  chi1  +   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
                     chi2 o2   1   : oo2   1   X.6    1  /A   A  -1 -/A  -A

                                               A = E(3)
                                                 = (-1+ER(-3))/2 = b3
\endtt
`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'.

% %ignore
% \begin{picture}(110,55)
% \put(-2,23){
% \begin{picture}(29,29)
% \put(0,29){\line(1,0){14}}
% \put(0,15){\line(1,0){14}}
% \put(0,14){\line(1,0){14}}
% \put(0,0){\line(1,0){14}}
% \put(15,29){\line(1,0){14}}
% \put(15,15){\line(1,0){14}}
% \put(15,14){\line(1,0){14}}
% \put(15,0){\line(1,0){14}}
% \put(0,15){\line(0,1){14}}
% \put(0,0){\line(0,1){14}}
% \put(14,15){\line(0,1){14}}
% \put(15,15){\line(0,1){14}}
% \put(29,15){\line(0,1){14}}
% \put(14,0){\line(0,1){14}}
% \put(15,0){\line(0,1){14}}
% \put(29,0){\line(0,1){14}}
% \put(7,7){\makebox(0,0){2.G}}
% \put(22,7){\makebox(0,0){2.G.3}}
% \put(7,22){\makebox(0,0){G}}
% \put(22,22){\makebox(0,0){G.3}}
% \end{picture}}
% \put(37,52){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{2in}
% \baselineskip0.9ex
% \parskip0.2ex
% 
% \ \ \ \ ;\ \ \ @\ \ \ ;\ \ \ ;\ \ \ @ \par
% \ \par
% \ \ \ \ \ \ \ \ 1\ \ \ \ \ \ \ \ \ \ \ 1 \par
% \ \ p\ power\ \ \ \ \ \ \ \ \ \ \ A \par
% \ \ p\ttquote\ part\ \ \ \ \ \ \ \ \ \ \ A \par
% \ \ ind\ \ 1A\ fus\ ind\ \ 3A \par
% \ \par
% $\chi_1$\ \ +\ \ \ 1\ \ \ \:\ +oo\ \ \ 1 \par
% \ \par
% \ \ ind\ \ \ 1\ fus\ ind\ \ \ 3 \par
% \ \ \ \ \ \ \ \ 2\ \ \ \ \ \ \ \ \ \ \ 6 \par
% \ \par
% $\chi_2$\ \ +\ \ \ 1\ \ \ \:\ +oo\ \ \ 1 \par
% \end{minipage}}}
% 
% \put(83,52){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{2in}
% \baselineskip2.7ex
% \parskip0ex
% 
% \ \ \ 2\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
% \ \ \ 3\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
%  \par
% \ \ \ \ \ \ 1a\ \ 2a\ \ 3a\ \ 6a\ \ 3b\ \ 6b \par
% \ \ 2P\ \ 1a\ \ 1a\ \ 3b\ \ 3b\ \ 3a\ \ 3a \par
% \ \ 3P\ \ 1a\ \ 2a\ \ 1a\ \ 2a\ \ 1a\ \ 2a \par
%  \par
% X.1\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
% X.2\ \ \ \ 1\ \ \ 1\ \ \ A\ \ \ A\ \ /A\ \ /A \par
% X.3\ \ \ \ 1\ \ \ 1\ \ /A\ \ /A\ \ \ A\ \ \ A \par
% X.4\ \ \ \ 1\ \ -1\ \ \ 1\ \ -1\ \ \ 1\ \ -1 \par
% X.5\ \ \ \ 1\ \ -1\ \ \ A\ \ -A\ \ /A\ -/A \par
% X.6\ \ \ \ 1\ \ -1\ \ /A\ -/A\ \ \ A\ \ -A \par
%  \par
% A\ =\ E(3) \par
% \ \ =\ (-1+ER(-3))/2\ =\ b3 \par
% \end{minipage}}}
% \end{picture}
% %end
% %display
Situation 2.~is shown here.
\begintt
 -------   -------         ;   @   ;   ;   @      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
||       || ||       ||  chi1  +   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
                     chi2  +   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
\endtt
`X.1'--`X.3' extend $\chi_1$, `X.4'--`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'.

% %ignore
% \begin{picture}(110,70)
% \put(-2,8){
% \begin{picture}(14,59)
% \put(0,59){\line(1,0){14}}
% \put(0,45){\line(1,0){14}}
% \put(0,44){\line(1,0){14}}
% \put(0,30){\line(1,0){14}}
% \put(0,29){\line(1,0){14}}
% \put(0,15){\line(1,0){14}}
% \put(0,14){\line(1,0){14}}
% \put(0,0){\line(1,0){14}}
% \put(0,45){\line(0,1){14}}
% \put(0,30){\line(0,1){14}}
% \put(0,15){\line(0,1){14}}
% \put(0,0){\line(0,1){14}}
% \put(14,45){\line(0,1){14}}
% \put(14,30){\line(0,1){14}}
% \put(14,15){\line(0,1){14}}
% \put(14,0){\line(0,1){14}}
% \put(7,7){\makebox(0,0){6.G}}
% \put(7,22){\makebox(0,0){3.G}}
% \put(7,37){\makebox(0,0){2.G}}
% \put(7,52){\makebox(0,0){G}}
% \end{picture}}
% \put(37,67){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{2in}
% \baselineskip0.9ex
% \parskip0.2ex
% 
% \ \ \ \ ;\ \ \ @ \par
% \ \  \par
% \ \ \ \ \ \ \ \ 1 \par
% \ \ p\ power \par
% \ \ p\ttquote\ part \par
% \ \ ind\ \ 1A \par
% \ \  \par
% $\chi_1$\ \ +\ \ \ 1 \par
% \ \  \par
% \ \ ind\ \ \ 1 \par
% \ \ \ \ \ \ \ \ 2 \par
% \ \  \par
% $\chi_2$\ \ +\ \ \ 1 \par
% \ \  \par
% \ \ ind\ \ \ 1 \par
% \ \ \ \ \ \ \ \ 3 \par
% \ \ \ \ \ \ \ \ 3 \par
% \ \  \par
% $\chi_3$\ o2\ \ \ 1 \par
% \ \  \par
% \ \ ind\ \ \ 1 \par
% \ \ \ \ \ \ \ \ 6 \par
% \ \ \ \ \ \ \ \ 3 \par
% \ \ \ \ \ \ \ \ 2 \par
% \ \ \ \ \ \ \ \ 3 \par
% \ \ \ \ \ \ \ \ 6 \par
% \ \  \par
% $\chi_4$\ o2\ \ \ 1 \par
% \end{minipage}}}
% 
% \put(83,67){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{2in}
% \baselineskip2.7ex
% \parskip0ex
% 
% \ \ \ 2\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
% \ \ \ 3\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
%  \par
% \ \ \ \ \ \ 1a\ \ 6a\ \ 3a\ \ 2a\ \ 3b\ \ 6b \par
% \ \ 2P\ \ 1a\ \ 3a\ \ 3b\ \ 1a\ \ 3a\ \ 3b \par
% \ \ 3P\ \ 1a\ \ 2a\ \ 1a\ \ 2a\ \ 1a\ \ 2a \par
%  \par
% X.1\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
% X.2\ \ \ \ 1\ \ -1\ \ \ 1\ \ -1\ \ \ 1\ \ -1 \par
% X.3\ \ \ \ 1\ \ \ A\ \ /A\ \ \ 1\ \ \ A\ \ /A \par
% X.4\ \ \ \ 1\ \ /A\ \ \ A\ \ \ 1\ \ /A\ \ \ A \par
% X.5\ \ \ \ 1\ \ -A\ \ /A\ \ -1\ \ \ A\ -/A \par
% X.6\ \ \ \ 1\ -/A\ \ \ A\ \ -1\ \ /A\ \ -A \par
%  \par
% A\ =\ E(3) \par
% \ \ =\ (-1+ER(-3))/2\ =\ b3 \par
% \end{minipage}}}
% \end{picture}
% %end
% %display
Situation 3.~is shown here.
\begintt
 -------             ;   @        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
||       ||      chi1  +   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
||       ||      chi2  +   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  ||      chi3 o2   1
||       ||
 -------           ind   1
                         6
                         3
                         2
                         3
                         6

               chi4 o2   1
\endtt
`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.
followers.
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 ]'.

% %ignore
% \begin{picture}(110,55)
% \put(-2,38){
% \begin{picture}(59,14)
% \put(0,0){\line(1,0){14}}
% \put(0,0){\line(0,1){14}}
% \put(0,14){\line(1,0){14}}
% \put(14,0){\line(0,1){14}}
% \put(7,7){\makebox(0,0){G}}
% \put(15,0){\line(1,0){14}}
% \put(15,0){\line(0,1){14}}
% \put(15,14){\line(1,0){14}}
% \put(29,0){\line(0,1){14}}
% \put(22,7){\makebox(0,0){G.2}}
% \put(30,0){\line(1,0){14}}
% \put(30,0){\line(0,1){14}}
% \put(30,14){\line(1,0){14}}
% \put(44,0){\line(0,1){14}}
% \put(37,7){\makebox(0,0){G.3}}
% \put(45,0){\line(1,0){14}}
% \put(45,0){\line(0,1){14}}
% \put(45,14){\line(1,0){14}}
% \put(59,0){\line(0,1){14}}
% \put(52,7){\makebox(0,0){G.6}}
% \end{picture}}
% \put(-2,30){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{4in}
% \baselineskip0.9ex
% \parskip0.2ex
% 
% \ \ \ \ ;\ \ \ @\ \ \ ;\ \ \ ;\ \ \ @\ \ \ ;\ \ \ ;\ \ \ @\ \ \ ;\ \ \ \ \ ;\ \ \ @\ \par
% \ \par
% \ \ \ \ \ \ \ \ 1\ \ \ \ \ \ \ \ \ \ \ 1\ \ \ \ \ \ \ \ \ \ \ 1\ \ \ \ \ \ \ \ \ \ \ \ \ 1\ \par
% \ \ p\ power\ \ \ \ \ \ \ \ \ \ \ A\ \ \ \ \ \ \ \ \ \ \ A\ \ \ \ \ \ \ \ \ \ \ \ AA\ \par
% \ \ p\ttquote\ part\ \ \ \ \ \ \ \ \ \ \ A\ \ \ \ \ \ \ \ \ \ \ A\ \ \ \ \ \ \ \ \ \ \ \ AA\ \par
% \ \ ind\ \ 1A\ fus\ ind\ \ 2A\ fus\ ind\ \ 3A\ fus\ \ \ ind\ \ 6A\ \par
% \ \par
% $\chi_1$\ \ +\ \ \ 1\ \ \ \:\ \ ++\ \ \ 1\ \ \ \:\ +oo\ \ \ 1\ \ \ \:+oo+oo\ \ \ 1\ \par
% \end{minipage}}}
% 
% \put(83,52){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{2in}
% \baselineskip2.7ex
% \parskip0ex
% 
% \ \ \ 2\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
% \ \ \ 3\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
%  \par
% \ \ \ \ \ \ 1a\ \ 2a\ \ 3a\ \ 3b\ \ 6a\ \ 6b \par
% \ \ 2P\ \ 1a\ \ 1a\ \ 3b\ \ 3a\ \ 3b\ \ 3a \par
% \ \ 3P\ \ 1a\ \ 2a\ \ 1a\ \ 1a\ \ 2a\ \ 2a \par
%  \par
% X.1\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
% X.2\ \ \ \ 1\ \ -1\ \ \ A\ \ /A\ \ -A\ -/A \par
% X.3\ \ \ \ 1\ \ \ 1\ \ /A\ \ \ A\ \ /A\ \ \ A \par
% X.4\ \ \ \ 1\ \ -1\ \ \ 1\ \ \ 1\ \ -1\ \ -1 \par
% X.5\ \ \ \ 1\ \ \ 1\ \ \ A\ \ /A\ \ \ A\ \ /A \par
% X.6\ \ \ \ 1\ \ -1\ \ /A\ \ \ A\ -/A\ \ -A \par
%  \par
% A\ =\ E(3) \par
% \ \ =\ (-1+ER(-3))/2\ =\ b3 \par
% \end{minipage}}}
% \end{picture}
% %end
% %display
Finally, situation 4.~is shown here.
\begintt
 -------   -------   -------   -------
||       || ||       || ||       || ||       ||
||   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

chi1  +   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
\endtt
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.

% %ignore
% \begin{picture}(110,95)
% \put(0,33){
% \begin{picture}(29,59)
% \put(0,59){\line(1,0){14}}
% \put(0,45){\line(1,0){14}}
% \put(0,44){\line(1,0){14}}
% \put(0,30){\line(1,0){14}}
% \put(0,29){\line(1,0){14}}
% \put(0,15){\line(1,0){14}}
% \put(0,14){\line(1,0){14}}
% \put(0,0){\line(1,0){14}}
% \put(0,45){\line(0,1){14}}
% \put(0,30){\line(0,1){14}}
% \put(0,15){\line(0,1){14}}
% \put(0,0){\line(0,1){14}}
% \put(14,45){\line(0,1){14}}
% \put(14,30){\line(0,1){14}}
% \put(14,15){\line(0,1){14}}
% \put(14,0){\line(0,1){14}}
% \put(15,59){\line(1,0){14}}
% \put(15,45){\line(1,0){14}}
% \put(15,44){\line(1,0){14}}
% \put(15,30){\line(1,0){14}}
% \put(15,29){\line(1,0){14}}
% \put(15,14){\line(1,0){14}}
% \put(15,45){\line(0,1){14}}
% \put(15,30){\line(0,1){14}}
% \put(15,15){\line(0,1){14}}
% \put(15,0){\line(0,1){14}}
% \put(29,45){\line(0,1){14}}
% \put(29,30){\line(0,1){14}}
% \put(7,7){\makebox(0,0){6.G}}
% \put(7,22){\makebox(0,0){3.G}}
% \put(7,37){\makebox(0,0){2.G}}
% \put(7,52){\makebox(0,0){G}}
% \put(22,7){\makebox(0,0){6.G.2}}
% \put(22,22){\makebox(0,0){3.G.2}}
% \put(22,37){\makebox(0,0){2.G.2}}
% \put(22,52){\makebox(0,0){G.2}}
% \end{picture}}
% \put(39,92){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{2in}
% \baselineskip0.9ex
% \parskip0.2ex
% 
% \ \ \ \ ;\ \ \ @\ \ \ ;\ \ \ ;\ \ @\ \par
% \ \ \ \par
% \ \ \ \ \ \ \ \ 1\ \ \ \ \ \ \ \ \ \ 1\ \par
% \ \ p\ power\ \ \ \ \ \ \ \ \ \ A\ \par
% \ \ p\ttquote\ part\ \ \ \ \ \ \ \ \ \ A\ \par
% \ \ ind\ \ 1A\ fus\ ind\ 2A\ \par
% \ \ \ \par
% $\chi_1$\ \ +\ \ \ 1\ \ \ \:\ \ ++\ \ 1\ \par
% \ \ \ \par
% \ \ ind\ \ \ 1\ fus\ ind\ \ 2\ \par
% \ \ \ \ \ \ \ \ 2\ \ \ \ \ \ \ \ \ \ 2\ \par
% \ \ \ \par
% $\chi_2$\ \ +\ \ \ 1\ \ \ \:\ \ ++\ \ 1\ \par
% \ \ \ \par
% \ \ ind\ \ \ 1\ fus\ ind\ \ 2\ \par
% \ \ \ \ \ \ \ \ 3\ \par
% \ \ \ \ \ \ \ \ 3\ \par
% \ \ \ \par
% $\chi_3$\ o2\ \ \ 1\ \ \ \*\ \ \ +\ \par
% \ \ \ \par
% \ \ ind\ \ \ 1\ fus\ ind\ \ 2\ \par
% \ \ \ \ \ \ \ \ 6\ \ \ \ \ \ \ \ \ \ 2\par
% \ \ \ \ \ \ \ \ 3\ \par
% \ \ \ \ \ \ \ \ 2\ \par
% \ \ \ \ \ \ \ \ 3\ \par
% \ \ \ \ \ \ \ \ 6\ \par
% \ \ \ \par
% $\chi_4$\ o2\ \ \ 1\ \ \ \*\ \ \ +\ \par
% \end{minipage}}}
% 
% \put(85,92){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{2in}
% \baselineskip2.7ex
% \parskip0ex
% 
% $3.G.2$ \par
%  \par
% \ \ \ 2\ \ \ 1\ \ \ .\ \ \ 1 \par
% \ \ \ 3\ \ \ 1\ \ \ 1\ \ \ . \par
%  \par
% \ \ \ \ \ \ 1a\ \ 3a\ \ 2a \par
% \ \ 2P\ \ 1a\ \ 3a\ \ 1a \par
% \ \ 3P\ \ 1a\ \ 1a\ \ 2a \par
%  \par
% X.1\ \ \ \ 1\ \ \ 1\ \ \ 1 \par
% X.2\ \ \ \ 1\ \ \ 1\ \ -1 \par
% X.3\ \ \ \ 2\ \ -1\ \ \ . \par
%  \par
% \ 
%  \par
% $6.G.2$ \par
%  \par
% \ \ \ 2\ \ \ 2\ \ \ 1\ \ \ 1\ \ \ 2\ \ \ 2\ \ \ 2 \par
% \ \ \ 3\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ .\ \ \ . \par
%  \par
% \ \ \ \ \ \ 1a\ \ 6a\ \ 3a\ \ 2a\ \ 2b\ \ 2c \par
% \ \ 2P\ \ 1a\ \ 3a\ \ 3a\ \ 1a\ \ 1a\ \ 1a \par
% \ \ 3P\ \ 1a\ \ 2a\ \ 1a\ \ 2a\ \ 2b\ \ 2c \par
%  \par
% Y.1\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
% Y.2\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ -1\ \ -1 \par
% Y.3\ \ \ \ 1\ \ -1\ \ \ 1\ \ -1\ \ \ 1\ \ -1 \par
% Y.4\ \ \ \ 1\ \ -1\ \ \ 1\ \ -1\ \ -1\ \ \ 1 \par
% Y.5\ \ \ \ 2\ \ -1\ \ -1\ \ \ 2\ \ \ .\ \ \ . \par
% Y.6\ \ \ \ 2\ \ \ 1\ \ -1\ \ -2\ \ \ .\ \ \ . \par
% 
% \end{minipage}}}
% \end{picture}
% %end
% %display
The second example explains the fusion case;
again, $G$ is the trivial group.
\begintt
 -------   -------        ;   @   ;   ;  @      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
||       || ||       ||   X1  +   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
||       || ||           X2  +   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     X3 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
                      X4 o2   1   *   +         Y.4    1 -1  1 -1 -1  1
                                                Y.5    2 -1 -1  2  .  .
                                                Y.6    2  1 -1 -2  .  .
\endtt
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'--`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.
% %ignore
% \begin{picture}(110,125)
% \put(0,93){
% \begin{picture}(29,29)
% \put(0,29){\line(1,0){14}}
% \put(0,15){\line(1,0){14}}
% \put(0,14){\line(1,0){14}}
% \put(0,0){\line(1,0){14}}
% \put(15,29){\line(1,0){14}}
% \put(15,15){\line(1,0){14}}
% \put(15,14){\line(1,0){14}}
% \put(15,0){\line(1,0){14}}
% \put(0,15){\line(0,1){14}}
% \put(0,0){\line(0,1){14}}
% \put(14,15){\line(0,1){14}}
% \put(15,15){\line(0,1){14}}
% \put(29,15){\line(0,1){14}}
% \put(14,0){\line(0,1){14}}
% \put(15,0){\line(0,1){14}}
% \put(29,0){\line(0,1){14}}
% \put(7,7){\makebox(0,0){2.G}}
% \put(22,7){\makebox(0,0){2.G.3}}
% \put(7,22){\makebox(0,0){G}}
% \put(22,22){\makebox(0,0){G.3}}
% \end{picture}}
% 
% \put(81,91){\line(0,1){8}}  % fusion sign in picture
% \put(39,122){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{3in}
% \baselineskip0.9ex
% \parskip0.2ex
% 
% \ \ \ \ ;\ \ \ @\ \ \ @\ \ \ @\ \ \ @\ \ \ ;\ \ \ ;\ \ \ @\ \par
% \ \par
% \ \ \ \ \ \ \ \ 4\ \ \ 4\ \ \ 4\ \ \ 4\ \ \ \ \ \ \ \ \ \ \ 1\ \par
% \ \ p\ power\ \ \ A\ \ \ A\ \ \ A\ \ \ \ \ \ \ \ \ \ \ A\ \par
% \ \ p\ttquote\ part\ \ \ A\ \ \ A\ \ \ A\ \ \ \ \ \ \ \ \ \ \ A\ \par
% \ \ ind\ \ 1A\ \ 2A\ \ 2B\ \ 2C\ fus\ ind\ \ 3A\ \par
% \ \par
% $\chi_1$\ \ +\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ \:\ +oo\ \ \ 1\ \par
% \ \par
% $\chi_2$\ \ +\ \ \ 1\ \ \ 1\ \ -1\ \ -1\ \ \ .\ \ \ +\ \ \ 0\ \par
% \ \par
% $\chi_3$\ \ +\ \ \ 1\ \ -1\ \ \ 1\ \ -1\ \ \ .\ \par
% \ \par
% $\chi_4$\ \ +\ \ \ 1\ \ -1\ \ -1\ \ \ 1\ \ \ .\ \par
% \ \par
% \ \ ind\ \ \ 1\ \ \ 4\ \ \ 4\ \ \ 4\ fus\ ind\ \ \ 3\ \par
% \ \ \ \ \ \ \ \ 2\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 6\ \par
% \ \par
% $\chi_5$\ \ -\ \ \ 2\ \ \ 0\ \ \ 0\ \ \ 0\ \ \ \:\ -oo\ \ \ 1\ \par
% \end{minipage}}}
% 
% \put(102,122){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{3in}
% \baselineskip2.7ex
% \parskip0ex
% $G.3$\par
%  \par
% \ \ \ 2\ \ \ 2\ \ \ 2\ \ \ .\ \ \ . \par
% \ \ \ 3\ \ \ 1\ \ \ .\ \ \ 1\ \ \ 1 \par
%  \par
% \ \ \ \ \ \ 1a\ \ 2a\ \ 3a\ \ 3b \par
% \ \ 2P\ \ 1a\ \ 1a\ \ 3b\ \ 3a \par
% \ \ 3P\ \ 1a\ \ 2a\ \ 1a\ \ 1a \par
%  \par
% X.1\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1 \par
% X.2\ \ \ \ 1\ \ \ 1\ \ \ A\ \ /A \par
% X.3\ \ \ \ 1\ \ \ 1\ \ /A\ \ \ A \par
% X.4\ \ \ \ 3\ \ -1\ \ \ .\ \ \ . \par
%  \par
% A\ =\ E(3) \par
% \ \ =\ (-1+ER(-3))/2\ =\ b3 \par
% \end{minipage}}}
% 
% \put(0,71){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{3in}
% \baselineskip2.7ex
% \parskip0ex
% $2.G$\par
%  \par
% \ \ \ 2\ \ \ 3\ \ \ 3\ \ \ 2\ \ \ 2\ \ \ 2\par
%  \par
% \ \ \ \ \ \ 1a\ \ 2a\ \ 4a\ \ 4b\ \ 4c\par
% \ \ 2P\ \ 1a\ \ 1a\ \ 2a\ \ 1a\ \ 1a\par
% \ \ 3P\ \ 1a\ \ 2a\ \ 4a\ \ 4b\ \ 4c\par
%  \par
% X.1\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\par
% X.2\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ -1\ \ -1\par
% X.3\ \ \ \ 1\ \ \ 1\ \ -1\ \ \ 1\ \ -1\par
% X.4\ \ \ \ 1\ \ \ 1\ \ -1\ \ -1\ \ \ 1\par
% X.5\ \ \ \ 2\ \ -2\ \ \ .\ \ \ .\ \ \ .\par
% \end{minipage}}}
% 
% \put(50,71){\makebox(0,0)[tl]{
% \small\tt
% \begin{minipage}{3in}
% \baselineskip2.7ex
% \parskip0ex
% $2.G.3$\par
%  \par
% \ \ \ 2\ \ \ 3\ \ \ 3\ \ \ 2\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\par
% \ \ \ 3\ \ \ 1\ \ \ 1\ \ \ .\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\par
%  \par
% \ \ \ \ \ \ 1a\ \ 2a\ \ 4a\ \ 3a\ \ 6a\ \ 3b\ \ 6b\par
% \ \ 2P\ \ 1a\ \ 1a\ \ 2a\ \ 3b\ \ 3b\ \ 3a\ \ 3a\par
% \ \ 3P\ \ 1a\ \ 2a\ \ 4a\ \ 1a\ \ 2a\ \ 1a\ \ 2a\par
%  \par
% X.1\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\par
% X.2\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ \ A\ \ \ A\ \ /A\ \ /A\par
% X.3\ \ \ \ 1\ \ \ 1\ \ \ 1\ \ /A\ \ /A\ \ \ A\ \ \ A\par
% X.4\ \ \ \ 3\ \ \ 3\ \ -1\ \ \ .\ \ \ .\ \ \ .\ \ \ .\par
% X.5\ \ \ \ 2\ \ -2\ \ \ .\ \ \ 1\ \ \ 1\ \ \ 1\ \ \ 1\par
% X.6\ \ \ \ 2\ \ -2\ \ \ .\ \ \ A\ \ -A\ \ /A\ -/A\par
% X.7\ \ \ \ 2\ \ -2\ \ \ .\ \ /A\ -/A\ \ \ A\ \ -A\par
%  \par
% A\ =\ E(3) \par
% \ \ =\ (-1+ER(-3))/2\ =\ b3 \par
% \end{minipage}}}
% \end{picture}
% %end
% %display
\begintt
 -------   -------            ;   @   @   @   @   ;   ;   @
||       || ||       ||               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
 -------   -------
||       || ||       ||     chi1  +   1   1   1   1   : +oo   1
||  2.G  || || 2.G.3 ||     chi2  +   1   1  -1  -1   .   +   0
||       || ||       ||     chi3  +   1  -1   1  -1   ||
 -------   -------      chi4  +   1  -1  -1   1   ||

                            ind   1   4   4   4 fus ind   3
                                  2                       6

                        chi5  -   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
  X.4    3  -1   .   .

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

  2.G                          2.G.3

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

                               A = E(3)
                                 = (-1+ER(-3))/2 = b3
\endtt
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 ]'.

(The beautiful La{\TeX} pictures that were part of the {\GAP}~3 manual
will be reintroduced
as soon as the bad decision to use {\TeX} for the manual will be revised.)


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{CAS Tables}

\index{character tables!CAS}%
\index{tables!library}\index{library of character tables}

All character tables of the {\sf CAS} table library (see~\cite{NPP84})
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 {\sf CAS} table is accessible by each of its {\sf CAS} names (except if
stated otherwise in `doc/ctbldiff.pdf'), that is,
the table name or the filename used in {\sf CAS}.

\beginexample
gap> tbl:= CharacterTable( "m10" );
CharacterTable( "A6.2_3" )
\endexample

\>CASInfo( <tbl> ) A

Let <tbl> be an ordinary character table <tbl> in the {\GAP} library
that was (up to permutations of classes and characters) contained already
in the {\sf CAS} table library.
When one fetches <tbl> from the library, one does in general not get the
original {\sf CAS} table.
Namely, in many cases (mostly {\ATLAS} tables, see~"ATLAS Tables")
the identifier of the table (see~"ref:Identifier!for character tables"
in the {\GAP} Reference Manual) as well as the ordering of classes and
characters are different for the {\sf CAS} table and its {\GAP} version.

Note that in several cases, the {\sf 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
{\sf CAS} library.
The records have the components
\beginitems
`name' &
    the name of the {\sf CAS} table,

`permchars' and `permclasses' &
    permutations of the `Irr' values and the classes of <tbl>,
    respectively, that must be applied in order to get the orderings in
    the original {\sf CAS} table, and

`text' &
    the text that was stored on the {\sf CAS} table
    (which may contain incorrect statements).
\enditems


\beginexample
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 classes: \
8\nsource:    cambridge atlas\ncomments:  point stabilizer of mathieu-group m1\
1\ntest:      orth, min, sym[3]\n" ) ]
\endexample

The class fusions stored on tables from the {\sf CAS} library have been
computed anew;
the `text' component of such a fusion record tells if the fusion map is equal
to that in the {\sf CAS} library
--of course modulo the permutation of classes between the table in {\sf CAS}
and its {\GAP} version.

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


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{Organization of the 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
\beginlist
\item{1.}
    comment lines, starting with `' in the first column,
\item{2.}
    assignments to `ALN' (short for ``add library name'',
    see~"NotifyNameOfCharacterTable")
    and to a component of `Revision', at the beginning of the file,
    for example in the file with name `ctoalter.tbl' a value is assigned
    to `Revision.ctoalter_tbl',
\item{3.}
    assignments to `ALN' and to a component of `LIBTABLE.LOADSTATUS',
    at the end of the file, and
\item{4.}
    function calls of the form
    `SET_TABLEFILENAME( <filename> )',
    `MBT( <name>, <data> )' (``make Brauer table''),
    `MOT( <name>, <data> )' (``make ordinary table''),
    `ALF( <from>, <to>, <map> )',
    `ALF( <from>, <to>, <map>, <textlines> )' (``add library fusion''),
    `ALN( <name>, <listofnames> )', and
    `ARC( <name>, <component>, <compdata> )' (``add record component'').

    Here <filename> must be a string corresponding to the filename but
    without suffix, for example `\"ctoalter\"' if the file has the name
    `ctoalter.tbl';
    <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 itegers,
    <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.
\endlist
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',
`E',
`EvalChars',
`GALOIS',
`Length',
`NotifyCharTableName',
`ShallowCopy',
`TENSOR', and
`TransposedMat'.

The `awk' script `maketbl' in the `etc' directory of the `ctbllib'
package expects the file format described above,
and to some extent this format is checked by this script.

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~"ref:Strings and Characters" in the {\GAP} Reference Manual),
i.e., they are enclosed in double quotes;
strings in table library files must not be split over several lines,
because otherwise the `awk' script may get confused.
Additionally, no character table name is allowed to contain double
quotes.

{\GAP}'s knowledge about the ordinary tables in the table library
is given by the file `ctprimar.tbl' (the ``primary file'' of the
table library).
This file can be produced from the library files by the script `maketbl'
in the `etc' directory of the `ctbllib' package.
The information is stored in the global variable `LIBLIST',
which is a record with the following components.
\beginitems
`firstnames' &
    the list of `Identifier' (see~"ref:Identifier!for character tables"
    in the {\GAP} Reference Manual) 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',

`projections' &
    a list of triples $[ <name>, <factname>, <map> ]$
    describing a factor fusion <map> from the table with identifier
    <name> to the table with identifier <factname>
    (this is used to construct the table of <name> using the data of
    the table of <factname>),

`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,

`sporadicSimple' &
    a list of identifiers of the tables of the $26$ sporadic simple
    groups, and

`GENERIC' &
    a record with information about generic tables
    (see~"Generic Character Tables").
\enditems

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 got by restriction 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 defects.

*Ordinary construction tables* have the attribute
`ConstructionInfoCharacterTable' (see~"ConstructionInfoCharacterTable")
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' when the table is
constructed (*not* when the file containing the table is read).
The 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.



\>LibInfoCharacterTable( <tblname> ) F

is a record with components
\beginitems
`firstName' &
    the `Identifier' value (see~"ref:Identifier!for character tables"
    in the {\GAP} Reference Manual) 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.
\enditems
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.




%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\Section{How to Extend the Character Table Library}

\index{library tables!add}%
\index{tables!add to the library}

{\GAP} users may want to extend the character table library in different
respects.
Probably the easiest change is to add new admissible names to library tables,
in order to use these names in calls of `CharacterTable'
(see~"ref:CharacterTable" in the {\GAP} Reference Manual,
and "CharacterTableFromLibrary").
This can be done as follows.

\>NotifyNameOfCharacterTable( <firstname>, <newnames> ) F
\>ALN( <firstname>, <newnames> ) F

notifies the strings in the list <newnames> as new admissible names for
the library table with `Identifier' value <firstname>,
see~"ref:Identifier!for character tables" in the {\GAP} Reference Manual.
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'.

`ALN' is a shorthand for `NotifyNameOfCharacterTable'.
In those library files for which the `maketbl' script has produced the
necessary information for `LIBLIST', `ALN' is set to `Ignore'
in the beginning and back to `NotifyNameOfCharacterTable' in the end.


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

The next kind of changes is the addition of new fusions between library
tables.
Once a fusion map is known, it can be added to the library file containing
the table of the subgroup, using the format produced by `LibraryFusion'.

\>ALF( <from>, <to>, <map>[, <text>, <spec>] ) F

`ALF' stores the fusion map <map> between the ordinary character tables
with identifier strings <from> and <to> in the record encoding the table
with identifier <from>.
If the string <text> is given then it is added as `text' component of the
fusion.
If the argument <spec> is given then it is added as `specification'
component of the fusion.

`ALF' changes the global list `LIBLIST.fusionsource'.

Note that the `ALF' statement should be placed in the file containing the
data for the table with identifier <from>.


\>LibraryFusion( <name>, <fus> ) F

For a string <name> that is an `Identifier' value
(see~"ref:Identifier!for character tables" in the {\GAP} Reference
Manual) 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),
and optionally `text' (a string containing information about the fusion)
and `specification' (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>.

<name> may also be a character table, in this case its `Identifier' value
is used as string.


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

The last kind of changes is the addition of new character tables to the
{\GAP} character table library.
Data files containing tables in library format
(i.e., in the form of calls to `MOT' or `MBT')
can be produced using `PrintToLib'.

\>PrintToLib( <file>, <tbl> ) F

prints the (ordinary or Brauer) character table <tbl> in library format
to the file `<file>.tbl' or <file>
(if this has already the suffix `.tbl'), respectively.

If <tbl> is an ordinary table then the value of the attribute
`NamesOfFusionSources' is ignored by `PrintToLib',
since for library tables this information is extracted from the source
files by the `maketbl' script.


\begintt
gap> PrintToLib( "private", a5 );
\endtt
The above command appends the data of the table `a5' to the file
`private.tbl';
the first lines printed to this file are
\begintt
SET_TABLEFILENAME("private");
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"]);
\endtt

If you have an ordinary character table in library format which you want to
add to the table library, for example because it shall be accessible via
`CharacterTable' (see~"CharacterTableFromLibrary"),
you must notify this table, i.e., tell {\GAP} in which file it can be found,
and which names shall be admissible for it.

\>NotifyCharacterTable( <firstname>, <filename>, <othernames> ) F

notifies a new ordinary table to the library.
This table has `Identifier' value <firstname>,
it is contained (in library format, see~"PrintToLib") 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' 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.)

\begintt
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
\endtt

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~"ref:The .gaprc File" in the {\GAP} Reference Manual),
or into a file that is read via the `.gaprc' file.
For adding interesting character tables to the {\GAP} distribution,
please send the tables to the e-mail address mentioned in the first paragraph
of this chapter.


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%E

