  
  [1X71 [33X[0;0YCharacter Tables[133X[101X
  
  [33X[0;0YThis chapter describes operations for [13Xcharacter tables of finite groups[113X.[133X
  
  [33X[0;0YOperations  for [13Xcharacters[113X (or, more general, [13Xclass functions[113X) are described
  in Chapter [14X72[114X.[133X
  
  [33X[0;0YFor  a  description of the [5XGAP[105X Library of Character Tables, see the separate
  manual for the [5XGAP[105X package [5XCTblLib[105X.[133X
  
  [33X[0;0YSeveral  examples in this chapter require the [5XGAP[105X Character Table Library to
  be available. If it is not yet loaded then we load it now.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XLoadPackage( "ctbllib" );[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X71.1 [33X[0;0YSome Remarks about Character Theory in [5XGAP[105X[101X[1X[133X[101X
  
  [33X[0;0YIt  seems  to be necessary to state some basic facts –and maybe warnings– at
  the beginning of the character theory package. This holds for people who are
  familiar  with  character  theory  because  there  is no global reference on
  computational  character  theory,  although  there  are  many papers on this
  topic, such as [NPP84] or [LP91]. It holds, however, also for people who are
  familiar  with [5XGAP[105X because the general concept of domains (see Chapter [14X12.4[114X)
  plays no important role here –we will justify this later in this section.[133X
  
  [33X[0;0YIntuitively,  [13Xcharacters[113X  (or  more  generally, [13Xclass functions[113X) of a finite
  group  [22XG[122X  can be thought of as certain mappings defined on [22XG[122X, with values in
  the  complex  number field; the set of all characters of [22XG[122X forms a semiring,
  with  both addition and multiplication defined pointwise, which is naturally
  embedded into the ring of [13Xgeneralized[113X (or [13Xvirtual[113X) [13Xcharacters[113X in the natural
  way.  A  [22Xℤ[122X-basis  of this ring, and also a vector space basis of the complex
  vector space of class functions of [22XG[122X, is given by the irreducible characters
  of [22XG[122X.[133X
  
  [33X[0;0YAt  this  stage  one  could  ask  where  there is a problem, since all these
  algebraic structures are supported by [5XGAP[105X. But in practice, these structures
  are of minor importance, compared to individual characters and the [13Xcharacter
  tables[113X themselves (which are not domains in the sense of [5XGAP[105X).[133X
  
  [33X[0;0YFor  computations  with  characters  of  a  finite  group [22XG[122X with [22Xn[122X conjugacy
  classes,  say,  we  fix  an  ordering of the classes, and then identify each
  class  with its position according to this ordering. Each character of [22XG[122X can
  be  represented  by  a  list  of  length  [22Xn[122X in which the character value for
  elements of the [22Xi[122X-th class is stored at the [22Xi[122X-th position. Note that we need
  not  know the conjugacy classes of [22XG[122X physically, even our knowledge of [22XG[122X may
  be implicit in the sense that, e.g., we know how many classes of involutions
  [22XG[122X  has,  and  which  length  these  classes  have, but we never have seen an
  element  of  [22XG[122X,  or a presentation or representation of [22XG[122X. This allows us to
  work  with the character tables of very large groups, e.g., of the so-called
  monster, where [5XGAP[105X has (currently) no chance to deal with the group.[133X
  
  [33X[0;0YAs  a  consequence,  also  other  information  involving characters is given
  implicitly.  For example, we can talk about the kernel of a character not as
  a  group  but  as a list of classes (more exactly: a list of their positions
  according  to  the  chosen  ordering of classes) forming this kernel; we can
  deduce  the group order, the contained cyclic subgroups and so on, but we do
  not get the group itself.[133X
  
  [33X[0;0YSo  typical  calculations  with  characters  involve  loops  over  lists  of
  character  values. For example, the scalar product of two characters [22Xχ[122X, [22Xψ[122X of
  [22XG[122X given by[133X
  
  
        [33X[1;6Y[24X[33X[0;0Y[ χ, ψ ] = ( ∑_{g ∈ G} χ(g) ψ(g^{-1}) ) / |G|[133X[124X[133X
  
  
  [33X[0;0Ycan be written as[133X
  
  [4X[32X[104X
    [4XSum( [ 1 .. n ], i -> SizesConjugacyClasses( t )[i] * chi[i][104X
    [4X                          * ComplexConjugate( psi[i] ) ) / Size( t );[104X
  [4X[32X[104X
  
  [33X[0;0Ywhere [10Xt[110X is the character table of [22XG[122X, and [10Xchi[110X, [10Xpsi[110X are the lists of values of
  [22Xχ[122X, [22Xψ[122X, respectively.[133X
  
  [33X[0;0YIt  is  one  of  the  advantages  of  character  theory  that  after one has
  translated  a  problem  concerning  groups  into  a  problem concerning only
  characters,  the  necessary calculations are mostly simple. For example, one
  can  often  prove  that  a  group is a Galois group over the rationals using
  calculations  with  structure  constants  that  can  be  computed  from  the
  character  table,  and  information  about (the character tables of) maximal
  subgroups.  When  one  deals  with  such  questions, the translation back to
  groups is just an interpretation by the user, it does not take place in [5XGAP[105X.[133X
  
  [33X[0;0Y[5XGAP[105X  uses  character  [13Xtables[113X  to  store  information  such as class lengths,
  element orders, the irreducible characters of [22XG[122X etc. in a consistent way; in
  the  example above, we have seen that [2XSizesConjugacyClasses[102X ([14X71.9-3[114X) returns
  the  list  of  class  lengths of its argument. Note that the values of these
  attributes  rely  on  the  chosen ordering of conjugacy classes, a character
  table  is  not  determined  by  something similar to generators of groups or
  rings  in  [5XGAP[105X  where  knowledge  could  in  principle be recovered from the
  generators but is stored mainly for the sake of efficiency.[133X
  
  [33X[0;0YNote  that the character table of a group [22XG[122X in [5XGAP[105X must [13Xnot[113X be mixed up with
  the  list of complex irreducible characters of [22XG[122X. The irreducible characters
  are stored in a character table via the attribute [2XIrr[102X ([14X71.8-2[114X).[133X
  
  [33X[0;0YTwo  further important instances of information that depends on the ordering
  of conjugacy classes are [13Xpower maps[113X and [13Xfusion maps[113X. Both are represented as
  lists of integers in [5XGAP[105X. The [22Xk[122X-th power map maps each class to the class of
  [22Xk[122X-th  powers  of  its  elements,  the  corresponding  list  contains at each
  position  the  position of the image. A class fusion map between the classes
  of  a  subgroup  [22XH[122X  of [22XG[122X and the classes of [22XG[122X maps each class [22Xc[122X of [22XH[122X to that
  class  of  [22XG[122X  that  contains  [22Xc[122X,  the  corresponding list contains again the
  positions  of image classes; if we know only the character tables of [22XH[122X and [22XG[122X
  but  not the groups themselves, this means with respect to a fixed embedding
  of  [22XH[122X  into  [22XG[122X.  More  about  power  maps  and  fusion  maps can be found in
  Chapter [14X73[114X.[133X
  
  [33X[0;0YSo  class functions, power maps, and fusion maps are represented by lists in
  [5XGAP[105X.  If  they  are  plain  lists  then they are regarded as class functions
  etc. of an appropriate character table when they are passed to [5XGAP[105X functions
  that  expect class functions etc. For example, a list with all entries equal
  to 1 is regarded as the trivial character if it is passed to a function that
  expects a character. Note that this approach requires the character table as
  an argument for such a function.[133X
  
  [33X[0;0YOne  can  construct  class  function  objects  that  store  their underlying
  character table and other attribute values (see Chapter [14X72[114X). This allows one
  to omit the character table argument in many functions, and it allows one to
  use infix operations for tensoring or inducing class functions.[133X
  
  
  [1X71.2 [33X[0;0YHistory of Character Theory Stuff in GAP[133X[101X
  
  [33X[0;0Y[5XGAP[105X  provides  functions for dealing with group characters since the version
  [5XGAP[105X 3.1, which was released in March 1992. The reason for adding this branch
  of  mathematics  to  the  topics  of  [5XGAP[105X  was (apart from the usefulness of
  character  theoretic  computations in general) the insight that [5XGAP[105X provides
  an ideal environment for developing the algorithms needed. In particular, it
  had  been  decided  at  Lehrstuhl  D  für  Mathematik that the [5XCAS[105X system (a
  standalone  Fortran  program  together  with a database of character tables,
  see [NPP84])  should  not  be developed further and the functionality of [5XCAS[105X
  should  be  made available in [5XGAP[105X. The background was that extending [5XCAS[105X (by
  new  Fortran  code)  had  turned  out  to be much less flexible than writing
  analogous [5XGAP[105X library code.[133X
  
  [33X[0;0YFor  integrating  the  existing  character  theory  algorithms, [5XGAP[105X's memory
  management  and  long  integer  arithmetic  were  useful as well as the list
  handling  –it  is  an  important feature of character theoretic methods that
  questions  about  groups  are translated into manipulations of lists; on the
  other  hand,  the datatype of cyclotomics (see Chapter [2XCyclotomics[102X ([14X18.1-2[114X))
  was  added to the [5XGAP[105X kernel because of the character theory algorithms. For
  developing   further   code,  also  other  areas  of  [5XGAP[105X's  library  became
  interesting, such as permutation groups, finite fields, and polynomials.[133X
  
  [33X[0;0YThe  development  of  character  theory  code  for [5XGAP[105X has been supported by
  several  DFG  grants,  in  particular  the  project [21XRepresentation Theory of
  Finite  Groups  and  Finite  Dimensional  Algebras[121X  (until  1991),  and  the
  Schwerpunkt [21XAlgorithmische Zahlentheorie und Algebra[121X (from 1991 until 1997).
  Besides  that, several Diploma theses at Lehrstuhl D were concerned with the
  development  and/or  implementation of algorithms dealing with characters in
  [5XGAP[105X.[133X
  
  [33X[0;0YThe major contributions can be listed as follows.[133X
  
  [30X    [33X[0;6YThe  arithmetic  for the cyclotomics data type, following [Zum89], was
        first  implemented  by  Marco  van Meegen; an alternative approach was
        studied  in  the  diploma thesis of Michael Scherner (see [Sch92]) but
        was   not   efficient  enough;  later  Martin  Schönert  replaced  the
        implementation by a better one.[133X
  
  [30X    [33X[0;6YThe basic routines for characters and character tables were written by
        Thomas Breuer and Götz Pfeiffer.[133X
  
  [30X    [33X[0;6YThe    lattice    related    functions,   such   as   [2XLLL[102X   ([14X72.10-4[114X),
        [2XOrthogonalEmbeddings[102X   ([14X25.6-1[114X),   and   [2XDnLattice[102X   ([14X72.10-8[114X),   were
        implemented by Ansgar Kaup (see [Kau92]).[133X
  
  [30X    [33X[0;6YFunctions  for  computing possible class fusions, possible power maps,
        and table automorphisms were written by Thomas Breuer (see [Bre91]).[133X
  
  [30X    [33X[0;6YFunctions  for  computing possible permutation characters were written
        by Thomas Breuer (see [Bre91]) and Götz Pfeiffer (see [Pfe91]).[133X
  
  [30X    [33X[0;6YFunctions  for  computing character tables from groups were written by
        Alexander  Hulpke  (Dixon-Schneider  algorithm,  see [Hul93]) and Hans
        Ulrich Besche (Baum algorithm and Conlon algorithm, see [Bes92]).[133X
  
  [30X    [33X[0;6YFunctions  for  dealing  with  Clifford  matrices  were written by Ute
        Schiffer (see [Sch94]).[133X
  
  [30X    [33X[0;6YFunctions  for monomiality questions were written by Thomas Breuer and
        Erzsébet Horváth.[133X
  
  [33X[0;0YSince  then,  the code has been maintained and extended further by Alexander
  Hulpke (code related to his implementation of the Dixon-Schneider algorithm)
  and Thomas Breuer.[133X
  
  [33X[0;0YCurrently  [5XGAP[105X  does  not provide special functionality for computing Brauer
  character  tables, but there is an interface to the [5XMOC[105X system (see [HJLP]),
  and  the  [5XGAP[105X  Character  Table Library contains many known Brauer character
  tables.[133X
  
  
  [1X71.3 [33X[0;0YCreating Character Tables[133X[101X
  
  [33X[0;0YThere  are  in  general five different ways to get a character table in [5XGAP[105X.
  You can[133X
  
  [31X1[131X   [33X[0;6Ycompute the table from a group,[133X
  
  [31X2[131X   [33X[0;6Yread a file that contains the table data,[133X
  
  [31X3[131X   [33X[0;6Yconstruct the table using generic formulae,[133X
  
  [31X4[131X   [33X[0;6Yderive it from known character tables, or[133X
  
  [31X5[131X   [33X[0;6Ycombine partial information about conjugacy classes, power maps of the
        group  in question, and about (character tables of) some subgroups and
        supergroups.[133X
  
  [33X[0;0YIn  1.,  the  computation of the irreducible characters is the hardest part;
  the   different  algorithms  available  for  this  are  described  in [14X71.14[114X.
  Possibility  2. is  used for the character tables in the [5XGAP[105X Character Table
  Library,  see  the  manual  of  this  library.  Generic character tables –as
  addressed  by  3.–  are  described  in [14X'CTblLib:  Generic Character Tables'[114X.
  Several  occurrences  of  4. are  described  in [14X71.20[114X. The last of the above
  possibilities  [13Xis currently not supported and will be described in a chapter
  of its own when it becomes available[113X.[133X
  
  [33X[0;0YThe operation [2XCharacterTable[102X ([14X71.3-1[114X) can be used for the cases 1. to 3.[133X
  
  
  [1X71.3-1 [33X[0;0YCharacterTable[133X[101X
  
  [29X[2XCharacterTable[102X( [3XG[103X[, [3Xp[103X] ) [32X operation
  [29X[2XCharacterTable[102X( [3Xordtbl[103X, [3Xp[103X ) [32X operation
  [29X[2XCharacterTable[102X( [3Xname[103X[, [3Xparam[103X] ) [32X operation
  
  [33X[0;0YCalled    with    a    group   [3XG[103X,   [2XCharacterTable[102X   calls   the   attribute
  [2XOrdinaryCharacterTable[102X  ([14X71.8-4[114X). Called with first argument a group [3XG[103X or an
  ordinary   character   table   [3Xordtbl[103X,   and  second  argument  a  prime  [3Xp[103X,
  [2XCharacterTable[102X calls the operation [2XBrauerTable[102X ([14X71.3-2[114X).[133X
  
  [33X[0;0YCalled   with   a   string  [3Xname[103X  and  perhaps  optional  parameters  [3Xparam[103X,
  [2XCharacterTable[102X  tries  to  access  a  character table from the [5XGAP[105X Character
  Table  Library. See the manual of the [5XGAP[105X package [5XCTblLib[105X for an overview of
  admissible  arguments.  An  error  is  signalled  if this [5XGAP[105X package is not
  loaded in this case.[133X
  
  [33X[0;0YProbably  the  most interesting information about the character table is its
  list  of  irreducibles,  which can be accessed as the value of the attribute
  [2XIrr[102X  ([14X71.8-2[114X).  If  the argument of [2XCharacterTable[102X is a string [3Xname[103X then the
  irreducibles  are  just  read  from the library file, therefore the returned
  table stores them already. However, if [2XCharacterTable[102X is called with a group
  [3XG[103X or with an ordinary character table [3Xordtbl[103X, the irreducible characters are
  [13Xnot[113X computed by [2XCharacterTable[102X. They are only computed when the [2XIrr[102X ([14X71.8-2[114X)
  value  is  accessed  for the first time, for example when [2XDisplay[102X ([14X6.3-6[114X) is
  called for the table (see [14X71.13[114X). This means for example that [2XCharacterTable[102X
  returns  its  result very quickly, and the first call of [2XDisplay[102X ([14X6.3-6[114X) for
  this  table  may  take  some time because the irreducible characters must be
  computed  at  that  time  before  they  can be displayed together with other
  information  stored  on  the character table. The value of the filter [10XHasIrr[110X
  indicates whether the irreducible characters have been computed already.[133X
  
  [33X[0;0YThe reason why [2XCharacterTable[102X does not compute the irreducible characters is
  that  there are situations where one only needs the [21Xtable head[121X, that is, the
  information  about class lengths, power maps etc., but not the irreducibles.
  For  example, if one wants to inspect permutation characters of a group then
  all  one  has  to do is to induce the trivial characters of subgroups one is
  interested in; for that, only class lengths and the class fusion are needed.
  Or  if  one  wants to compute the Molien series (see [2XMolienSeries[102X ([14X72.12-1[114X))
  for  a  given complex matrix group, the irreducible characters of this group
  are in general of no interest.[133X
  
  [33X[0;0YFor   details   about   different  algorithms  to  compute  the  irreducible
  characters, see [14X71.14[114X.[133X
  
  [33X[0;0YIf  the  group  [3XG[103X  is  given  as  an  argument,  [2XCharacterTable[102X accesses the
  conjugacy  classes of [3XG[103X and therefore causes that these classes are computed
  if they were not yet stored (see [14X71.6[114X).[133X
  
  
  [1X71.3-2 [33X[0;0YBrauerTable[133X[101X
  
  [29X[2XBrauerTable[102X( [3Xordtbl[103X, [3Xp[103X ) [32X operation
  [29X[2XBrauerTable[102X( [3XG[103X, [3Xp[103X ) [32X operation
  [29X[2XBrauerTableOp[102X( [3Xordtbl[103X, [3Xp[103X ) [32X operation
  [29X[2XComputedBrauerTables[102X( [3Xordtbl[103X ) [32X attribute
  
  [33X[0;0YCalled  with  an  ordinary  character table [3Xordtbl[103X or a group [3XG[103X, [2XBrauerTable[102X
  returns  its  [3Xp[103X-modular  character  table if [5XGAP[105X can compute this table, and
  [9Xfail[109X  otherwise.  The  [3Xp[103X-modular table can be computed for [3Xp[103X-solvable groups
  (using  the  Fong-Swan  Theorem) and in the case that [3Xordtbl[103X is a table from
  the  [5XGAP[105X  character  table  library  for  which  also the [3Xp[103X-modular table is
  contained in the table library.[133X
  
  [33X[0;0YThe  default method for a group and a prime delegates to [2XBrauerTable[102X for the
  ordinary  character  table of this group. The default method for [3Xordtbl[103X uses
  the  attribute [2XComputedBrauerTables[102X for storing the computed Brauer table at
  position  [3Xp[103X, and calls the operation [2XBrauerTableOp[102X for computing values that
  are not yet known.[133X
  
  [33X[0;0YSo  if one wants to install a new method for computing Brauer tables then it
  is sufficient to install it for [2XBrauerTableOp[102X.[133X
  
  [33X[0;0YThe  [9Xmod[109X  operator for a character table and a prime (see [14X71.7[114X) delegates to
  [2XBrauerTable[102X.[133X
  
  [1X71.3-3 CharacterTableRegular[101X
  
  [29X[2XCharacterTableRegular[102X( [3Xtbl[103X, [3Xp[103X ) [32X function
  
  [33X[0;0YFor   an   ordinary   character   table   [3Xtbl[103X   and   a   prime  integer  [3Xp[103X,
  [2XCharacterTableRegular[102X  returns  the  [21Xtable  head[121X  of  the  [3Xp[103X-modular  Brauer
  character  table  of  [3Xtbl[103X.  This  is the restriction of [3Xtbl[103X to its [3Xp[103X-regular
  classes,  like  the  return  value  of [2XBrauerTable[102X ([14X71.3-2[114X), but without the
  irreducible  Brauer  characters.  (In  general, these characters are hard to
  compute,  and  [2XBrauerTable[102X ([14X71.3-2[114X) may return [9Xfail[109X for the given arguments,
  for example if [3Xtbl[103X is a table from the [5XGAP[105X character table library.)[133X
  
  [33X[0;0YThe  returned  table head can be used to create [3Xp[103X-modular Brauer characters,
  by  restricting  ordinary  characters, for example when one is interested in
  approximations of the (unknown) irreducible Brauer characters.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xg:= SymmetricGroup( 4 );[127X[104X
    [4X[28XSym( [ 1 .. 4 ] )[128X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( g );;  HasIrr( tbl );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27Xtblmod2:= CharacterTable( tbl, 2 );[127X[104X
    [4X[28XBrauerTable( Sym( [ 1 .. 4 ] ), 2 )[128X[104X
    [4X[25Xgap>[125X [27Xtblmod2 = CharacterTable( tbl, 2 );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xtblmod2 = BrauerTable( tbl, 2 );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xtblmod2 = BrauerTable( g, 2 );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xlibtbl:= CharacterTable( "M" );[127X[104X
    [4X[28XCharacterTable( "M" )[128X[104X
    [4X[25Xgap>[125X [27XCharacterTableRegular( libtbl, 2 );[127X[104X
    [4X[28XBrauerTable( "M", 2 )[128X[104X
    [4X[25Xgap>[125X [27XBrauerTable( libtbl, 2 );[127X[104X
    [4X[28Xfail[128X[104X
    [4X[25Xgap>[125X [27XCharacterTable( "Symmetric", 4 );[127X[104X
    [4X[28XCharacterTable( "Sym(4)" )[128X[104X
    [4X[25Xgap>[125X [27XComputedBrauerTables( tbl );[127X[104X
    [4X[28X[ , BrauerTable( Sym( [ 1 .. 4 ] ), 2 ) ][128X[104X
  [4X[32X[104X
  
  [1X71.3-4 SupportedCharacterTableInfo[101X
  
  [29X[2XSupportedCharacterTableInfo[102X[32X global variable
  
  [33X[0;0Y[2XSupportedCharacterTableInfo[102X  is  a  list  that  contains at position [22X3i-2[122X an
  attribute  getter function, at position [22X3i-1[122X the name of this attribute, and
  at  position  [22X3i[122X  a  list  containing  one  or  two  of the strings [10X"class"[110X,
  [10X"character"[110X, depending on whether the attribute value relies on the ordering
  of classes or characters. This allows one to set exactly the components with
  these names in the record that is later converted to the new table, in order
  to  use  the values as attribute values. So the record components that shall
  [13Xnot[113X be regarded as attribute values can be ignored. Also other attributes of
  the old table are ignored.[133X
  
  [33X[0;0Y[2XSupportedCharacterTableInfo[102X  is  used  when  (ordinary  or Brauer) character
  table  objects  are  created  from  records,  using  [2XConvertToCharacterTable[102X
  ([14X71.3-5[114X).[133X
  
  [33X[0;0YNew attributes and properties can be notified to [2XSupportedCharacterTableInfo[102X
  by  creating  them  with  [10XDeclareAttributeSuppCT[110X  and  [10XDeclarePropertySuppCT[110X
  instead of [2XDeclareAttribute[102X ([14X79.17-3[114X) and [2XDeclareProperty[102X ([14X79.17-4[114X).[133X
  
  [1X71.3-5 ConvertToCharacterTable[101X
  
  [29X[2XConvertToCharacterTable[102X( [3Xrecord[103X ) [32X function
  [29X[2XConvertToCharacterTableNC[102X( [3Xrecord[103X ) [32X function
  
  [33X[0;0YLet  [3Xrecord[103X  be  a  record.  [2XConvertToCharacterTable[102X  converts [3Xrecord[103X into a
  component  object  (see [14X79.9[114X)  representing a character table. The values of
  those  components of [3Xrecord[103X whose names occur in [2XSupportedCharacterTableInfo[102X
  ([14X71.3-4[114X) correspond to attribute values of the returned character table. All
  other  components  of  the  record simply become components of the character
  table object.[133X
  
  [33X[0;0YIf  inconsistencies  in  [3Xrecord[103X  are detected, [9Xfail[109X is returned. [3Xrecord[103X must
  have        the        component        [10XUnderlyingCharacteristic[110X       bound
  (cf. [2XUnderlyingCharacteristic[102X  ([14X71.9-5[114X)),  since  this decides about whether
  the  returned  character  table  lies  in  [2XIsOrdinaryTable[102X  ([14X71.4-1[114X)  or  in
  [2XIsBrauerTable[102X ([14X71.4-1[114X).[133X
  
  [33X[0;0Y[2XConvertToCharacterTableNC[102X does the same except that all checks of [3Xrecord[103X are
  omitted.[133X
  
  [33X[0;0YAn  example of a conversion from a record to a character table object can be
  found in Section [2XPrintCharacterTable[102X ([14X71.13-5[114X).[133X
  
  
  [1X71.4 [33X[0;0YCharacter Table Categories[133X[101X
  
  [1X71.4-1 IsNearlyCharacterTable[101X
  
  [29X[2XIsNearlyCharacterTable[102X( [3Xobj[103X ) [32X Category
  [29X[2XIsCharacterTable[102X( [3Xobj[103X ) [32X Category
  [29X[2XIsOrdinaryTable[102X( [3Xobj[103X ) [32X Category
  [29X[2XIsBrauerTable[102X( [3Xobj[103X ) [32X Category
  [29X[2XIsCharacterTableInProgress[102X( [3Xobj[103X ) [32X Category
  
  [33X[0;0YEvery   [21Xcharacter   table   like   object[121X   in  [5XGAP[105X  lies  in  the  category
  [2XIsNearlyCharacterTable[102X.  There  are four important subcategories, namely the
  [13Xordinary[113X  tables in [2XIsOrdinaryTable[102X, the [13XBrauer[113X tables in [2XIsBrauerTable[102X, the
  union  of  these two in [2XIsCharacterTable[102X, and the [13Xincomplete ordinary[113X tables
  in [2XIsCharacterTableInProgress[102X.[133X
  
  [33X[0;0YWe want to distinguish ordinary and Brauer tables because a Brauer table may
  delegate  tasks  to  the  ordinary  table of the same group, for example the
  computation  of  power  maps. A Brauer table is constructed from an ordinary
  table  and  stores  this table upon construction (see [2XOrdinaryCharacterTable[102X
  ([14X71.8-4[114X)).[133X
  
  [33X[0;0YFurthermore,  [2XIsOrdinaryTable[102X and [2XIsBrauerTable[102X denote character tables that
  provide  enough  information  to  compute  all  power  maps  and irreducible
  characters (and in the case of Brauer tables to get the ordinary table), for
  example because the underlying group (see [2XUnderlyingGroup[102X ([14X71.6-1[114X)) is known
  or because the table is a library table (see the manual of the [5XGAP[105X Character
  Table  Library).  We  want  to distinguish these tables from partially known
  ordinary  tables  that cannot be asked for all power maps or all irreducible
  characters.[133X
  
  [33X[0;0YThe  character  table  objects  in  [2XIsCharacterTable[102X  are  always  immutable
  (see [14X12.6[114X).  This  means  mainly that the ordering of conjugacy classes used
  for  the  various  attributes  of  the  character  table  cannot be changed;
  see [14X71.21[114X  for how to compute a character table with a different ordering of
  classes.[133X
  
  [33X[0;0YThe  [5XGAP[105X objects in [2XIsCharacterTableInProgress[102X represent incomplete ordinary
  character  tables.  This  means that not all irreducible characters, not all
  power  maps  are  known,  and  perhaps  even  the  number of classes and the
  centralizer  orders are known. Such tables occur when the character table of
  a  group  [22XG[122X  is  constructed  using  character  tables of related groups and
  information  about  [22XG[122X  but  for  example  without  explicitly  computing the
  conjugacy  classes of [22XG[122X. An object in [2XIsCharacterTableInProgress[102X is first of
  all  [13Xmutable[113X,  so  [13Xnothing  is  stored  automatically[113X on such a table, since
  otherwise  one  has no control of side-effects when a hypothesis is changed.
  Operations  for  such  tables  may return more general values than for other
  tables, for example class functions may contain unknowns (see Chapter [14X74[114X) or
  lists  of possible values in certain positions, the same may happen also for
  power maps and class fusions (see [14X73.5[114X). [13XIncomplete tables in this sense are
  currently not supported and will be described in a chapter of their own when
  they  become  available.[113X  Note  that the term [21Xincomplete table[121X shall express
  that  [5XGAP[105X  cannot  compute  certain values such as irreducible characters or
  power  maps.  A table with access to its group is therefore always complete,
  also if its irreducible characters are not yet stored.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xg:= SymmetricGroup( 4 );;[127X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( g );  modtbl:= tbl mod 2;[127X[104X
    [4X[28XCharacterTable( Sym( [ 1 .. 4 ] ) )[128X[104X
    [4X[28XBrauerTable( Sym( [ 1 .. 4 ] ), 2 )[128X[104X
    [4X[25Xgap>[125X [27XIsCharacterTable( tbl );  IsCharacterTable( modtbl );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIsBrauerTable( modtbl );  IsBrauerTable( tbl );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsOrdinaryTable( tbl );  IsOrdinaryTable( modtbl );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsCharacterTable( g );  IsCharacterTable( Irr( g ) );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[28Xfalse[128X[104X
  [4X[32X[104X
  
  [1X71.4-2 InfoCharacterTable[101X
  
  [29X[2XInfoCharacterTable[102X[32X info class
  
  [33X[0;0Yis the info class (see [14X7.4[114X) for computations with character tables.[133X
  
  [1X71.4-3 NearlyCharacterTablesFamily[101X
  
  [29X[2XNearlyCharacterTablesFamily[102X[32X global variable
  
  [33X[0;0YEvery character table like object lies in this family (see [14X13.1[114X).[133X
  
  
  [1X71.5 [33X[0;0YConventions for Character Tables[133X[101X
  
  [33X[0;0YThe following few conventions should be noted.[133X
  
  [30X    [33X[0;6YThe  class  of  the  [13Xidentity element[113X is expected to be the first one;
        thus the degree of a character is the character value at position [22X1[122X.[133X
  
  [30X    [33X[0;6YThe  [13Xtrivial  character[113X  of a character table need not be the first in
        the list of irreducibles.[133X
  
  [30X    [33X[0;6YMost  functions  that  take  a character table as an argument and work
        with  characters expect these characters as an argument, too. For some
        functions,  the  list of irreducible characters serves as the default,
        i.e,  the value of the attribute [2XIrr[102X ([14X71.8-2[114X); in these cases, the [2XIrr[102X
        ([14X71.8-2[114X) value is automatically computed if it was not yet known.[133X
  
  [30X    [33X[0;6YFor  a  stored  class  fusion,  the  image  table  is  denoted  by its
        [2XIdentifier[102X  ([14X71.9-8[114X) value; each library table has a unique identifier
        by which it can be accessed (see [14X'CTblLib: Accessing a Character Table
        from  the Library'[114X in the manual for the [5XGAP[105X Character Table Library),
        tables constructed from groups get an identifier that is unique in the
        current [5XGAP[105X session.[133X
  
  
  [1X71.6 [33X[0;0YThe Interface between Character Tables and Groups[133X[101X
  
  [33X[0;0YFor  a character table with underlying group (see [2XUnderlyingGroup[102X ([14X71.6-1[114X)),
  the  interface  between  table and group consists of three attribute values,
  namely   the   [13Xgroup[113X,  the  [13Xconjugacy  classes[113X  stored  in  the  table  (see
  [2XConjugacyClasses[102X  ([14X71.6-2[114X)  below)  and  the [13Xidentification[113X of the conjugacy
  classes  of  table  and group (see [2XIdentificationOfConjugacyClasses[102X ([14X71.6-3[114X)
  below).[133X
  
  [33X[0;0YCharacter   tables   constructed   from   groups   know  these  values  upon
  construction,  and  for  character  tables constructed without groups, these
  values are usually not known and cannot be computed from the table.[133X
  
  [33X[0;0YHowever,  given  a  group [22XG[122X and a character table of a group isomorphic to [22XG[122X
  (for example a character table from the [5XGAP[105X table library), one can tell [5XGAP[105X
  to  compute a new instance of the given table and to use it as the character
  table of [22XG[122X (see [2XCharacterTableWithStoredGroup[102X ([14X71.6-4[114X)).[133X
  
  [33X[0;0YTasks  may  be  delegated  from a group to its character table or vice versa
  only if these three attribute values are stored in the character table.[133X
  
  [1X71.6-1 UnderlyingGroup[101X
  
  [29X[2XUnderlyingGroup[102X( [3Xordtbl[103X ) [32X attribute
  
  [33X[0;0YFor  an  ordinary character table [3Xordtbl[103X of a finite group, the group can be
  stored as value of [2XUnderlyingGroup[102X.[133X
  
  [33X[0;0YBrauer  tables  do  not  store  the underlying group, they access it via the
  ordinary table (see [2XOrdinaryCharacterTable[102X ([14X71.8-4[114X)).[133X
  
  [1X71.6-2 ConjugacyClasses[101X
  
  [29X[2XConjugacyClasses[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YFor   a   character   table   [3Xtbl[103X   with   known  underlying  group  [22XG[122X,  the
  [2XConjugacyClasses[102X value of [3Xtbl[103X is a list of conjugacy classes of [22XG[122X. All those
  lists  stored  in  the  table  that are related to the ordering of conjugacy
  classes  (such  as  sizes  of  centralizers and conjugacy classes, orders of
  representatives,  power maps, and all class functions) refer to the ordering
  of this list.[133X
  
  [33X[0;0YThis  ordering  need  [13Xnot[113X coincide with the ordering of conjugacy classes as
  stored in the underlying group of the table (see [14X71.21[114X). One reason for this
  is  that  otherwise  we  would  not be allowed to use a library table as the
  character  table  of  a  group  for  which  the conjugacy classes are stored
  already.  (Another,  less important reason is that we can use the same group
  as underlying group of character tables that differ only w.r.t. the ordering
  of classes.)[133X
  
  [33X[0;0YThe class of the identity element must be the first class (see [14X71.5[114X).[133X
  
  [33X[0;0YIf [3Xtbl[103X was constructed from [22XG[122X then the conjugacy classes have been stored at
  the same time when [22XG[122X was stored. If [22XG[122X and [3Xtbl[103X have been connected later than
  in  the  construction  of  [3Xtbl[103X,  the  recommended  way  to  do  this  is via
  [2XCharacterTableWithStoredGroup[102X   ([14X71.6-4[114X).   So   there   is  no  method  for
  [2XConjugacyClasses[102X that computes the value for [3Xtbl[103X if it is not yet stored.[133X
  
  [33X[0;0YBrauer  tables  do  not store the ([22Xp[122X-regular) conjugacy classes, they access
  them   via  the  ordinary  table  (see [2XOrdinaryCharacterTable[102X  ([14X71.8-4[114X))  if
  necessary.[133X
  
  [1X71.6-3 IdentificationOfConjugacyClasses[101X
  
  [29X[2XIdentificationOfConjugacyClasses[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YFor  an  ordinary  character  table  [3Xtbl[103X  with  known  underlying  group  [22XG[122X,
  [2XIdentificationOfConjugacyClasses[102X  returns  a  list of positive integers that
  contains  at  position  [22Xi[122X the position of the [22Xi[122X-th conjugacy class of [3Xtbl[103X in
  the [2XConjugacyClasses[102X ([14X71.6-2[114X) value of [22XG[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xg:= SymmetricGroup( 4 );;[127X[104X
    [4X[25Xgap>[125X [27Xrepres:= [ (1,2), (1,2,3), (1,2,3,4), (1,2)(3,4), () ];;[127X[104X
    [4X[25Xgap>[125X [27Xccl:= List( repres, x -> ConjugacyClass( g, x ) );;[127X[104X
    [4X[25Xgap>[125X [27XSetConjugacyClasses( g, ccl );[127X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( g );;   # the table stores already the values[127X[104X
    [4X[25Xgap>[125X [27XHasConjugacyClasses( tbl );  HasUnderlyingGroup( tbl );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingGroup( tbl ) = g;[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XHasIdentificationOfConjugacyClasses( tbl );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIdentificationOfConjugacyClasses( tbl );[127X[104X
    [4X[28X[ 5, 1, 2, 3, 4 ][128X[104X
  [4X[32X[104X
  
  [1X71.6-4 CharacterTableWithStoredGroup[101X
  
  [29X[2XCharacterTableWithStoredGroup[102X( [3XG[103X, [3Xtbl[103X[, [3Xinfo[103X] ) [32X function
  
  [33X[0;0YLet  [3XG[103X  be  a  group and [3Xtbl[103X a character table of (a group isomorphic to) [3XG[103X,
  such  that  [3XG[103X  does  not  store  its  [2XOrdinaryCharacterTable[102X ([14X71.8-4[114X) value.
  [2XCharacterTableWithStoredGroup[102X   calls  [2XCompatibleConjugacyClasses[102X  ([14X71.6-5[114X),
  trying to identify the classes of [3XG[103X with the columns of [3Xtbl[103X.[133X
  
  [33X[0;0YIf   this   identification   is   unique   up   to   automorphisms   of  [3Xtbl[103X
  (see [2XAutomorphismsOfTable[102X  ([14X71.9-4[114X))  then  [3Xtbl[103X  is stored as [2XCharacterTable[102X
  ([14X71.3-1[114X)  value  of  [3XG[103X,  and  a  new  character  table  is  returned that is
  equivalent  to  [3Xtbl[103X, is sorted in the same way as [3Xtbl[103X, and has the values of
  [2XUnderlyingGroup[102X      ([14X71.6-1[114X),      [2XConjugacyClasses[102X      ([14X71.6-2[114X),      and
  [2XIdentificationOfConjugacyClasses[102X ([14X71.6-3[114X) set.[133X
  
  [33X[0;0YOtherwise, i.e., if [5XGAP[105X cannot identify the classes of [3XG[103X up to automorphisms
  of [3Xtbl[103X, [9Xfail[109X is returned.[133X
  
  [33X[0;0YIf  a  record is present as the third argument [3Xinfo[103X, its meaning is the same
  as the optional argument [3Xarec[103X for [2XCompatibleConjugacyClasses[102X ([14X71.6-5[114X).[133X
  
  [33X[0;0YIf  a  list  is  entered  as  third  argument  [3Xinfo[103X  it  is used as value of
  [2XIdentificationOfConjugacyClasses[102X  ([14X71.6-3[114X), relative to the [2XConjugacyClasses[102X
  ([14X71.6-2[114X)  value  of  [3XG[103X,  without  further  checking,  and  the corresponding
  character table is returned.[133X
  
  [1X71.6-5 CompatibleConjugacyClasses[101X
  
  [29X[2XCompatibleConjugacyClasses[102X( [[3XG[103X, [3Xccl[103X, ][3Xtbl[103X[, [3Xarec[103X] ) [32X operation
  
  [33X[0;0YIf  the  arguments  [3XG[103X  and  [3Xccl[103X  are  present then [3Xccl[103X must be a list of the
  conjugacy classes of the group [3XG[103X, and [3Xtbl[103X the ordinary character table of [3XG[103X.
  Then  [2XCompatibleConjugacyClasses[102X  returns a list [22Xl[122X of positive integers that
  describes an identification of the columns of [3Xtbl[103X with the conjugacy classes
  [3Xccl[103X in the sense that [22Xl[i][122X is the position in [3Xccl[103X of the class corresponding
  to  the  [22Xi[122X-th  column  of  [3Xtbl[103X,  if  this  identification  is  unique  up to
  automorphisms  of  [3Xtbl[103X  (see [2XAutomorphismsOfTable[102X  ([14X71.9-4[114X));  if [5XGAP[105X cannot
  identify the classes, [9Xfail[109X is returned.[133X
  
  [33X[0;0YIf  [3Xtbl[103X  is  the first argument then it must be an ordinary character table,
  and  [2XCompatibleConjugacyClasses[102X  checks  whether  the  columns of [3Xtbl[103X can be
  identified  with  the  conjugacy  classes  of a group isomorphic to that for
  which  [3Xtbl[103X  is  the character table; the return value is a list of all those
  sets of class positions for which the columns of [3Xtbl[103X cannot be distinguished
  with  the invariants used, up to automorphisms of [3Xtbl[103X. So the identification
  is unique if and only if the returned list is empty.[133X
  
  [33X[0;0YThe usual approach is that one first calls [2XCompatibleConjugacyClasses[102X in the
  second  form for checking quickly whether the first form will be successful,
  and  only if this is the case the more time consuming calculations with both
  group and character table are done.[133X
  
  [33X[0;0YThe following invariants are used.[133X
  
  [31X1[131X   [33X[0;6Yelement orders (see [2XOrdersClassRepresentatives[102X ([14X71.9-1[114X)),[133X
  
  [31X2[131X   [33X[0;6Yclass lengths (see [2XSizesConjugacyClasses[102X ([14X71.9-3[114X)),[133X
  
  [31X3[131X   [33X[0;6Ypower maps (see [2XPowerMap[102X ([14X73.1-1[114X), [2XComputedPowerMaps[102X ([14X73.1-1[114X)),[133X
  
  [31X4[131X   [33X[0;6Ysymmetries of the table (see [2XAutomorphismsOfTable[102X ([14X71.9-4[114X)).[133X
  
  [33X[0;0YIf  the  optional  argument  [3Xarec[103X  is present then it must be a record whose
  components describe additional information for the class identification. The
  following components are supported.[133X
  
  [8X[10Xnatchar[110X [108X
        [33X[0;6Yif  [22XG[122X  is  a  permutation group or matrix group then the value of this
        component  is  regarded as the list of values of the natural character
        (see [2XNaturalCharacter[102X  ([14X72.7-2[114X))  of [3XG[103X, w.r.t. the ordering of classes
        in [3Xtbl[103X,[133X
  
  [8X[10Xbijection[110X [108X
        [33X[0;6Ya  list  describing  a partial bijection; the [22Xi[122X-th entry, if bound, is
        the position of the [22Xi[122X-th conjugacy class of [3Xtbl[103X in the list [3Xccl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xg:= AlternatingGroup( 5 );[127X[104X
    [4X[28XAlt( [ 1 .. 5 ] )[128X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "A5" );[127X[104X
    [4X[28XCharacterTable( "A5" )[128X[104X
    [4X[25Xgap>[125X [27XHasUnderlyingGroup( tbl );  HasOrdinaryCharacterTable( g );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XCompatibleConjugacyClasses( tbl );   # unique identification[127X[104X
    [4X[28X[  ][128X[104X
    [4X[25Xgap>[125X [27Xnew:= CharacterTableWithStoredGroup( g, tbl );[127X[104X
    [4X[28XCharacterTable( Alt( [ 1 .. 5 ] ) )[128X[104X
    [4X[25Xgap>[125X [27XIrr( new ) = Irr( tbl );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XHasConjugacyClasses( new );  HasUnderlyingGroup( new );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIdentificationOfConjugacyClasses( new );[127X[104X
    [4X[28X[ 1, 2, 3, 4, 5 ][128X[104X
    [4X[25Xgap>[125X [27X# Here is an example where the identification is not unique.[127X[104X
    [4X[25Xgap>[125X [27XCompatibleConjugacyClasses( CharacterTable( "J2" ) );[127X[104X
    [4X[28X[ [ 17, 18 ], [ 9, 10 ] ][128X[104X
  [4X[32X[104X
  
  
  [1X71.7 [33X[0;0YOperators for Character Tables[133X[101X
  
  [33X[0;0YThe following infix operators are defined for character tables.[133X
  
  [8X[10X[3Xtbl1[103X[10X * [3Xtbl2[103X[10X[110X[108X
        [33X[0;6Ythe      direct      product      of      two     character     tables
        (see [2XCharacterTableDirectProduct[102X ([14X71.20-1[114X)),[133X
  
  [8X[10X[3Xtbl[103X[10X / [3Xlist[103X[10X[110X[108X
        [33X[0;6Ythe  table  of  the factor group modulo the normal subgroup spanned by
        the   classes   in   the   list   [3Xlist[103X  (see [2XCharacterTableFactorGroup[102X
        ([14X71.20-3[114X)),[133X
  
  [8X[10X[3Xtbl[103X[10X mod [3Xp[103X[10X[110X[108X
        [33X[0;6Ythe  [3Xp[103X-modular  Brauer  character  table corresponding to the ordinary
        character table [3Xtbl[103X (see [2XBrauerTable[102X ([14X71.3-2[114X)),[133X
  
  [8X[10X[3Xtbl[103X[10X.[3Xname[103X[10X[110X[108X
        [33X[0;6Ythe  position  of  the  class  with  name  [3Xname[103X in [3Xtbl[103X (see [2XClassNames[102X
        ([14X71.9-6[114X)).[133X
  
  
  [1X71.8 [33X[0;0YAttributes and Properties for Groups and Character Tables[133X[101X
  
  [33X[0;0YSeveral [13Xattributes for groups[113X are valid also for character tables.[133X
  
  [33X[0;0YThese  are first those that have the same meaning for both the group and its
  character table, and whose values can be read off or computed, respectively,
  from  the  character  table,  such  as [2XSize[102X ([14X71.8-5[114X), [2XIsAbelian[102X ([14X71.8-5[114X), or
  [2XIsSolvable[102X ([14X71.8-5[114X).[133X
  
  [33X[0;0YSecond, there are attributes whose meaning for character tables is different
  from the meaning for groups, such as [2XConjugacyClasses[102X ([14X71.6-2[114X).[133X
  
  
  [1X71.8-1 [33X[0;0YCharacterDegrees[133X[101X
  
  [29X[2XCharacterDegrees[102X( [3XG[103X[, [3Xp[103X] ) [32X attribute
  [29X[2XCharacterDegrees[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YIn  the first form, [2XCharacterDegrees[102X returns a collected list of the degrees
  of the absolutely irreducible characters of the group [3XG[103X; the optional second
  argument   [3Xp[103X   must   be  either  zero  or  a  prime  integer  denoting  the
  characteristic,  the  default value is zero. In the second form, [3Xtbl[103X must be
  an  (ordinary  or  Brauer)  character  table, and [2XCharacterDegrees[102X returns a
  collected  list  of  the degrees of the absolutely irreducible characters of
  [3Xtbl[103X.[133X
  
  [33X[0;0Y(The  default  method for the call with only argument a group is to call the
  operation with second argument [10X0[110X.)[133X
  
  [33X[0;0YFor solvable groups, the default method is based on [Con90b].[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XCharacterDegrees( SymmetricGroup( 4 ) );[127X[104X
    [4X[28X[ [ 1, 2 ], [ 2, 1 ], [ 3, 2 ] ][128X[104X
    [4X[25Xgap>[125X [27XCharacterDegrees( SymmetricGroup( 4 ), 2 );[127X[104X
    [4X[28X[ [ 1, 1 ], [ 2, 1 ] ][128X[104X
    [4X[25Xgap>[125X [27XCharacterDegrees( CharacterTable( "A5" ) );[127X[104X
    [4X[28X[ [ 1, 1 ], [ 3, 2 ], [ 4, 1 ], [ 5, 1 ] ][128X[104X
    [4X[25Xgap>[125X [27XCharacterDegrees( CharacterTable( "A5" ) mod 2 );[127X[104X
    [4X[28X[ [ 1, 1 ], [ 2, 2 ], [ 4, 1 ] ][128X[104X
  [4X[32X[104X
  
  
  [1X71.8-2 [33X[0;0YIrr[133X[101X
  
  [29X[2XIrr[102X( [3XG[103X[, [3Xp[103X] ) [32X attribute
  [29X[2XIrr[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YCalled  with  a  group  [3XG[103X,  [2XIrr[102X  returns  the  irreducible characters of the
  ordinary  character table of [3XG[103X. Called with a group [3XG[103X and a prime integer [3Xp[103X,
  [2XIrr[102X  returns  the irreducible characters of the [3Xp[103X-modular Brauer table of [3XG[103X.
  Called  with  an  (ordinary  or Brauer) character table [3Xtbl[103X, [2XIrr[102X returns the
  list of all complex absolutely irreducible characters of [3Xtbl[103X.[133X
  
  [33X[0;0YFor  a  character  table  [3Xtbl[103X with underlying group, [2XIrr[102X may delegate to the
  group.  For  a  group [3XG[103X, [2XIrr[102X may delegate to its character table only if the
  irreducibles are already stored there.[133X
  
  [33X[0;0Y(If   [3XG[103X  is  [3Xp[103X-solvable  (see [2XIsPSolvable[102X  ([14X39.15-23[114X))  then  the  [3Xp[103X-modular
  irreducible  characters  can  be  computed  by the Fong-Swan Theorem; in all
  other cases, there may be no method.)[133X
  
  [33X[0;0YNote that the ordering of columns in the [2XIrr[102X matrix of the group [3XG[103X refers to
  the ordering of conjugacy classes in the [2XCharacterTable[102X ([14X71.3-1[114X) value of [3XG[103X,
  which  may differ from the ordering of conjugacy classes in [3XG[103X (see [14X71.6[114X). As
  an  extreme example, for a character table obtained from sorting the classes
  of  the  [2XCharacterTable[102X  ([14X71.3-1[114X) value of [3XG[103X, the ordering of columns in the
  [2XIrr[102X  matrix respects the sorting of classes (see [14X71.21[114X), so the irreducibles
  of such a table will in general not coincide with the irreducibles stored as
  the [2XIrr[102X value of [3XG[103X although also the sorted table stores the group [3XG[103X.[133X
  
  [33X[0;0YThe  ordering  of  the  entries  in  the  attribute  [2XIrr[102X of a group need [13Xnot[113X
  coincide  with  the  ordering  of  its  [2XIrreducibleRepresentations[102X ([14X71.14-4[114X)
  value.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XIrr( SymmetricGroup( 4 ) );[127X[104X
    [4X[28X[ Character( CharacterTable( Sym( [ 1 .. 4 ] ) ), [ 1, -1, 1, 1, -1 [128X[104X
    [4X[28X     ] ), Character( CharacterTable( Sym( [ 1 .. 4 ] ) ), [128X[104X
    [4X[28X    [ 3, -1, -1, 0, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( Sym( [ 1 .. 4 ] ) ), [ 2, 0, 2, -1, 0 ] )[128X[104X
    [4X[28X    , Character( CharacterTable( Sym( [ 1 .. 4 ] ) ), [128X[104X
    [4X[28X    [ 3, 1, -1, 0, -1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( Sym( [ 1 .. 4 ] ) ), [ 1, 1, 1, 1, 1 ] ) [128X[104X
    [4X[28X ][128X[104X
    [4X[25Xgap>[125X [27XIrr( SymmetricGroup( 4 ), 2 );[127X[104X
    [4X[28X[ Character( BrauerTable( Sym( [ 1 .. 4 ] ), 2 ), [ 1, 1 ] ), [128X[104X
    [4X[28X  Character( BrauerTable( Sym( [ 1 .. 4 ] ), 2 ), [ 2, -1 ] ) ][128X[104X
    [4X[25Xgap>[125X [27XIrr( CharacterTable( "A5" ) );[127X[104X
    [4X[28X[ Character( CharacterTable( "A5" ), [ 1, 1, 1, 1, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "A5" ), [128X[104X
    [4X[28X    [ 3, -1, 0, -E(5)-E(5)^4, -E(5)^2-E(5)^3 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "A5" ), [128X[104X
    [4X[28X    [ 3, -1, 0, -E(5)^2-E(5)^3, -E(5)-E(5)^4 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "A5" ), [ 4, 0, 1, -1, -1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "A5" ), [ 5, 1, -1, 0, 0 ] ) ][128X[104X
    [4X[25Xgap>[125X [27XIrr( CharacterTable( "A5" ) mod 2 );[127X[104X
    [4X[28X[ Character( BrauerTable( "A5", 2 ), [ 1, 1, 1, 1 ] ), [128X[104X
    [4X[28X  Character( BrauerTable( "A5", 2 ), [128X[104X
    [4X[28X    [ 2, -1, E(5)+E(5)^4, E(5)^2+E(5)^3 ] ), [128X[104X
    [4X[28X  Character( BrauerTable( "A5", 2 ), [128X[104X
    [4X[28X    [ 2, -1, E(5)^2+E(5)^3, E(5)+E(5)^4 ] ), [128X[104X
    [4X[28X  Character( BrauerTable( "A5", 2 ), [ 4, 1, -1, -1 ] ) ][128X[104X
  [4X[32X[104X
  
  
  [1X71.8-3 [33X[0;0YLinearCharacters[133X[101X
  
  [29X[2XLinearCharacters[102X( [3XG[103X[, [3Xp[103X] ) [32X attribute
  [29X[2XLinearCharacters[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0Y[2XLinearCharacters[102X  returns  the linear (i.e., degree [22X1[122X) characters in the [2XIrr[102X
  ([14X71.8-2[114X)  list  of  the group [3XG[103X or the character table [3Xtbl[103X, respectively. In
  the second form, [2XLinearCharacters[102X returns the [3Xp[103X-modular linear characters of
  the group [3XG[103X.[133X
  
  [33X[0;0YFor  a  character  table  [3Xtbl[103X  with  underlying  group, [2XLinearCharacters[102X may
  delegate  to  the group. For a group [3XG[103X, [2XLinearCharacters[102X may delegate to its
  character table only if the irreducibles are already stored there.[133X
  
  [33X[0;0YThe ordering of linear characters in [3Xtbl[103X need not coincide with the ordering
  of linear characters in the irreducibles of [3Xtbl[103X (see [2XIrr[102X ([14X71.8-2[114X)).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XLinearCharacters( SymmetricGroup( 4 ) );[127X[104X
    [4X[28X[ Character( CharacterTable( Sym( [ 1 .. 4 ] ) ), [ 1, 1, 1, 1, 1 ] ),[128X[104X
    [4X[28X  Character( CharacterTable( Sym( [ 1 .. 4 ] ) ), [ 1, -1, 1, 1, -1 [128X[104X
    [4X[28X     ] ) ][128X[104X
  [4X[32X[104X
  
  
  [1X71.8-4 [33X[0;0YOrdinaryCharacterTable[133X[101X
  
  [29X[2XOrdinaryCharacterTable[102X( [3XG[103X ) [32X attribute
  [29X[2XOrdinaryCharacterTable[102X( [3Xmodtbl[103X ) [32X attribute
  
  [33X[0;0Y[2XOrdinaryCharacterTable[102X  returns  the ordinary character table of the group [3XG[103X
  or the Brauer character table [3Xmodtbl[103X, respectively.[133X
  
  [33X[0;0YSince  Brauer  character  tables  are  constructed from ordinary tables, the
  attribute value for [3Xmodtbl[103X is already stored (cf. [14X71.4[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XOrdinaryCharacterTable( SymmetricGroup( 4 ) );[127X[104X
    [4X[28XCharacterTable( Sym( [ 1 .. 4 ] ) )[128X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "A5" );;  modtbl:= tbl mod 2;[127X[104X
    [4X[28XBrauerTable( "A5", 2 )[128X[104X
    [4X[25Xgap>[125X [27XOrdinaryCharacterTable( modtbl ) = tbl;[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X71.8-5 [33X[0;0YGroup Operations Applicable to Character Tables[133X[101X
  
  [29X[2XAbelianInvariants[102X( [3Xtbl[103X ) [32X attribute
  [29X[2XCommutatorLength[102X( [3Xtbl[103X ) [32X attribute
  [29X[2XExponent[102X( [3Xtbl[103X ) [32X attribute
  [29X[2XIsAbelian[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsAlmostSimple[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsCyclic[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsElementaryAbelian[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsFinite[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsMonomial[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsNilpotent[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsPerfect[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsSimple[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsSolvable[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsSporadicSimple[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsSupersolvable[102X( [3Xtbl[103X ) [32X property
  [29X[2XIsomorphismTypeInfoFiniteSimpleGroup[102X( [3Xtbl[103X ) [32X attribute
  [29X[2XNrConjugacyClasses[102X( [3Xtbl[103X ) [32X attribute
  [29X[2XSize[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YThese  operations for groups are applicable to character tables and mean the
  same  for  a character table as for its underlying group; see Chapter [14X39[114X for
  the  definitions.  The  operations are mainly useful for selecting character
  tables  with certain properties, also for character tables without access to
  a group.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtables:= [ CharacterTable( CyclicGroup( 3 ) ),[127X[104X
    [4X[25X>[125X [27X              CharacterTable( SymmetricGroup( 4 ) ),[127X[104X
    [4X[25X>[125X [27X              CharacterTable( AlternatingGroup( 5 ) ) ];;[127X[104X
    [4X[25Xgap>[125X [27XList( tables, AbelianInvariants );[127X[104X
    [4X[28X[ [ 3 ], [ 2 ], [  ] ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, CommutatorLength );[127X[104X
    [4X[28X[ 1, 1, 1 ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, Exponent );[127X[104X
    [4X[28X[ 3, 12, 30 ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, IsAbelian );[127X[104X
    [4X[28X[ true, false, false ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, IsAlmostSimple );[127X[104X
    [4X[28X[ false, false, true ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, IsCyclic );[127X[104X
    [4X[28X[ true, false, false ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, IsFinite );[127X[104X
    [4X[28X[ true, true, true ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, IsMonomial );[127X[104X
    [4X[28X[ true, true, false ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, IsNilpotent );[127X[104X
    [4X[28X[ true, false, false ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, IsPerfect );[127X[104X
    [4X[28X[ false, false, true ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, IsSimple );[127X[104X
    [4X[28X[ true, false, true ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, IsSolvable );[127X[104X
    [4X[28X[ true, true, false ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, IsSupersolvable );[127X[104X
    [4X[28X[ true, false, false ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, NrConjugacyClasses );[127X[104X
    [4X[28X[ 3, 5, 5 ][128X[104X
    [4X[25Xgap>[125X [27XList( tables, Size );[127X[104X
    [4X[28X[ 3, 24, 60 ][128X[104X
    [4X[25Xgap>[125X [27XIsomorphismTypeInfoFiniteSimpleGroup( CharacterTable( "C5" ) );[127X[104X
    [4X[28Xrec( name := "Z(5)", parameter := 5, series := "Z" )[128X[104X
    [4X[25Xgap>[125X [27XIsomorphismTypeInfoFiniteSimpleGroup( CharacterTable( "S3" ) );[127X[104X
    [4X[28Xfail[128X[104X
    [4X[25Xgap>[125X [27XIsomorphismTypeInfoFiniteSimpleGroup( CharacterTable( "S6(3)" ) );[127X[104X
    [4X[28Xrec( name := "C(3,3) = S(6,3)", parameter := [ 3, 3 ], series := "C" )[128X[104X
    [4X[25Xgap>[125X [27XIsomorphismTypeInfoFiniteSimpleGroup( CharacterTable( "O7(3)" ) );[127X[104X
    [4X[28Xrec( name := "B(3,3) = O(7,3)", parameter := [ 3, 3 ], series := "B" )[128X[104X
    [4X[25Xgap>[125X [27XIsomorphismTypeInfoFiniteSimpleGroup( CharacterTable( "A8" ) );[127X[104X
    [4X[28Xrec( name := "A(8) ~ A(3,2) = L(4,2) ~ D(3,2) = O+(6,2)", [128X[104X
    [4X[28X  parameter := 8, series := "A" )[128X[104X
    [4X[25Xgap>[125X [27XIsomorphismTypeInfoFiniteSimpleGroup( CharacterTable( "L3(4)" ) );[127X[104X
    [4X[28Xrec( name := "A(2,4) = L(3,4)", parameter := [ 3, 4 ], series := "L" )[128X[104X
  [4X[32X[104X
  
  
  [1X71.9 [33X[0;0YAttributes and Properties only for Character Tables[133X[101X
  
  [33X[0;0YThe      following     three     [13Xattributes     for     character     tables[113X
  –[2XOrdersClassRepresentatives[102X   ([14X71.9-1[114X),   [2XSizesCentralizers[102X   ([14X71.9-2[114X),  and
  [2XSizesConjugacyClasses[102X  ([14X71.9-3[114X)– would make sense also for groups but are in
  fact  [13Xnot[113X used for groups. This is because the values depend on the ordering
  of  conjugacy  classes stored as the value of [2XConjugacyClasses[102X ([14X71.6-2[114X), and
  this  value  may differ for a group and its character table (see [14X71.6[114X). Note
  that  for  character  tables,  the  consistency  of attribute values must be
  guaranteed,  whereas  for  groups,  there  is  no  need  to  impose  such  a
  consistency rule.[133X
  
  [33X[0;0YThe  other  attributes  introduced  in  this section apply only to character
  tables, not to groups.[133X
  
  [1X71.9-1 OrdersClassRepresentatives[101X
  
  [29X[2XOrdersClassRepresentatives[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0Yis a list of orders of representatives of conjugacy classes of the character
  table [3Xtbl[103X, in the same ordering as the conjugacy classes of [3Xtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "A5" );;[127X[104X
    [4X[25Xgap>[125X [27XOrdersClassRepresentatives( tbl );[127X[104X
    [4X[28X[ 1, 2, 3, 5, 5 ][128X[104X
  [4X[32X[104X
  
  [1X71.9-2 SizesCentralizers[101X
  
  [29X[2XSizesCentralizers[102X( [3Xtbl[103X ) [32X attribute
  [29X[2XSizesCentralisers[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0Yis  a  list  that  stores  at  position [22Xi[122X the size of the centralizer of any
  element in the [22Xi[122X-th conjugacy class of the character table [3Xtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "A5" );;[127X[104X
    [4X[25Xgap>[125X [27XSizesCentralizers( tbl );[127X[104X
    [4X[28X[ 60, 4, 3, 5, 5 ][128X[104X
  [4X[32X[104X
  
  [1X71.9-3 SizesConjugacyClasses[101X
  
  [29X[2XSizesConjugacyClasses[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0Yis  a list that stores at position [22Xi[122X the size of the [22Xi[122X-th conjugacy class of
  the character table [3Xtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "A5" );;[127X[104X
    [4X[25Xgap>[125X [27XSizesConjugacyClasses( tbl );[127X[104X
    [4X[28X[ 1, 15, 20, 12, 12 ][128X[104X
  [4X[32X[104X
  
  [1X71.9-4 AutomorphismsOfTable[101X
  
  [29X[2XAutomorphismsOfTable[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0Yis  the  permutation group of all column permutations of the character table
  [3Xtbl[103X  that  leave the set of irreducibles and each power map of [3Xtbl[103X invariant
  (see also [2XTableAutomorphisms[102X ([14X71.22-2[114X)).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "Dihedral", 8 );;[127X[104X
    [4X[25Xgap>[125X [27XAutomorphismsOfTable( tbl );[127X[104X
    [4X[28XGroup([ (4,5) ])[128X[104X
    [4X[25Xgap>[125X [27XOrdersClassRepresentatives( tbl );[127X[104X
    [4X[28X[ 1, 4, 2, 2, 2 ][128X[104X
    [4X[25Xgap>[125X [27XSizesConjugacyClasses( tbl );[127X[104X
    [4X[28X[ 1, 2, 1, 2, 2 ][128X[104X
  [4X[32X[104X
  
  
  [1X71.9-5 [33X[0;0YUnderlyingCharacteristic[133X[101X
  
  [29X[2XUnderlyingCharacteristic[102X( [3Xtbl[103X ) [32X attribute
  [29X[2XUnderlyingCharacteristic[102X( [3Xpsi[103X ) [32X attribute
  
  [33X[0;0YFor an ordinary character table [3Xtbl[103X, the result is [10X0[110X, for a [22Xp[122X-modular Brauer
  table [3Xtbl[103X, it is [22Xp[122X. The underlying characteristic of a class function [3Xpsi[103X is
  equal to that of its underlying character table.[133X
  
  [33X[0;0YThe  underlying characteristic must be stored when the table is constructed,
  there is no method to compute it.[133X
  
  [33X[0;0YWe  cannot  use the attribute [2XCharacteristic[102X ([14X31.10-1[114X) to denote this, since
  of  course each Brauer character is an element of characteristic zero in the
  sense of [5XGAP[105X (see Chapter [14X72[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "A5" );;[127X[104X
    [4X[25Xgap>[125X [27XUnderlyingCharacteristic( tbl );[127X[104X
    [4X[28X0[128X[104X
    [4X[25Xgap>[125X [27XUnderlyingCharacteristic( tbl mod 17 );[127X[104X
    [4X[28X17[128X[104X
  [4X[32X[104X
  
  
  [1X71.9-6 [33X[0;0YClass Names and Character Names[133X[101X
  
  [29X[2XClassNames[102X( [3Xtbl[103X[, [3X"ATLAS"[103X] ) [32X attribute
  [29X[2XCharacterNames[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0Y[2XClassNames[102X  and  [2XCharacterNames[102X  return  lists  of  strings,  one  for  each
  conjugacy  class  or  irreducible  character, respectively, of the character
  table [3Xtbl[103X. These names are used when [3Xtbl[103X is displayed.[133X
  
  [33X[0;0YThe  default  method  for  [2XClassNames[102X computes class names consisting of the
  order of an element in the class and at least one distinguishing letter.[133X
  
  [33X[0;0YThe  default  method for [2XCharacterNames[102X returns the list [10X[ "X.1", "X.2", ...
  ][110X, whose length is the number of irreducible characters of [3Xtbl[103X.[133X
  
  [33X[0;0YThe position of the class with name [3Xname[103X in [3Xtbl[103X can be accessed as [10X[3Xtbl[103X[10X.[3Xname[103X[10X[110X.[133X
  
  [33X[0;0YWhen  [2XClassNames[102X  is  called with two arguments, the second being the string
  [10X"ATLAS"[110X,  the  class names returned obey the convention used in the [5XAtlas[105X of
  Finite  Groups  [CCNPW85,  Chapter  7,  Section  5]. If one is interested in
  [21Xrelative[121X class names of almost simple [5XAtlas[105X groups, one can use the function
  [2XAtlasClassNames[102X ([14XAtlasRep: AtlasClassNames[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "A5" );;[127X[104X
    [4X[25Xgap>[125X [27XClassNames( tbl );[127X[104X
    [4X[28X[ "1a", "2a", "3a", "5a", "5b" ][128X[104X
    [4X[25Xgap>[125X [27Xtbl.2a;[127X[104X
    [4X[28X2[128X[104X
  [4X[32X[104X
  
  
  [1X71.9-7 [33X[0;0YClass Parameters and Character Parameters[133X[101X
  
  [29X[2XClassParameters[102X( [3Xtbl[103X ) [32X attribute
  [29X[2XCharacterParameters[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YThe  values  of  these  attributes are lists containing a parameter for each
  conjugacy  class  or  irreducible  character, respectively, of the character
  table [3Xtbl[103X.[133X
  
  [33X[0;0YIt  depends  on  [3Xtbl[103X  what  these  parameters are, so there is no default to
  compute class and character parameters.[133X
  
  [33X[0;0YFor  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 the manual of the [5XGAP[105X
  Character Table Library) usually have class and character parameters stored.[133X
  
  [33X[0;0YIf  [3Xtbl[103X is a [22Xp[122X-modular Brauer table such that class parameters are stored in
  the  underlying  ordinary table (see [2XOrdinaryCharacterTable[102X ([14X71.8-4[114X)) of [3Xtbl[103X
  then [2XClassParameters[102X returns the sublist of class parameters of the ordinary
  table, for [22Xp[122X-regular classes.[133X
  
  [1X71.9-8 Identifier[101X
  
  [29X[2XIdentifier[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0Yis  a  string  that  identifies  the  character table [3Xtbl[103X in the current [5XGAP[105X
  session.  It  is  used  mainly for class fusions into [3Xtbl[103X that are stored on
  other  character  tables. For character tables without group, the identifier
  is  also  used  to print the table; this is the case for library tables, but
  also   for   tables   that  are  constructed  as  direct  products,  factors
  etc. involving tables that may or may not store their groups.[133X
  
  [33X[0;0YThe default method for ordinary tables constructs strings of the form [10X"CT[3Xn[103X[10X"[110X,
  where   [3Xn[103X  is  a  positive  integer.  [10XLARGEST_IDENTIFIER_NUMBER[110X  is  a  list
  containing the largest integer [3Xn[103X used in the current [5XGAP[105X session.[133X
  
  [33X[0;0YThe  default  method  for  Brauer  tables  returns  the concatenation of the
  identifier  of the ordinary table, the string [10X"mod"[110X, and the (string of the)
  underlying characteristic.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XIdentifier( CharacterTable( "A5" ) );[127X[104X
    [4X[28X"A5"[128X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( Group( () ) );;[127X[104X
    [4X[25Xgap>[125X [27XIdentifier( tbl );  Identifier( tbl mod 2 );[127X[104X
    [4X[28X"CT8"[128X[104X
    [4X[28X"CT8mod2"[128X[104X
  [4X[32X[104X
  
  [1X71.9-9 InfoText[101X
  
  [29X[2XInfoText[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0Yis a mutable string with information about the character table [3Xtbl[103X. There is
  no default method to create an info text.[133X
  
  [33X[0;0YThis  attribute is used mainly for library tables (see the manual of the [5XGAP[105X
  Character  Table  Library). Usual parts of the information are the origin of
  the table, tests it has passed ([10X1.o.r.[110X for the test of orthogonality, [10Xpow[[3Xp[103X[10X][110X
  for  the  construction  of  the [3Xp[103X-th power map, [10XDEC[110X for the decomposition of
  ordinary  into  Brauer  characters,  [10XTENS[110X  for  the  decomposition of tensor
  products of irreducibles), and choices made without loss of generality.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XPrint( InfoText( CharacterTable( "A5" ) ), "\n" );[127X[104X
    [4X[28Xorigin: ATLAS of finite groups, tests: 1.o.r., pow[2,3,5][128X[104X
  [4X[32X[104X
  
  [1X71.9-10 InverseClasses[101X
  
  [29X[2XInverseClasses[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YFor  a  character  table  [3Xtbl[103X,  [2XInverseClasses[102X returns the list mapping each
  conjugacy  class  to its inverse class. This list can be regarded as [22X(-1)[122X-st
  power map of [3Xtbl[103X (see [2XPowerMap[102X ([14X73.1-1[114X)).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XInverseClasses( CharacterTable( "A5" ) );[127X[104X
    [4X[28X[ 1, 2, 3, 4, 5 ][128X[104X
    [4X[25Xgap>[125X [27XInverseClasses( CharacterTable( "Cyclic", 3 ) );[127X[104X
    [4X[28X[ 1, 3, 2 ][128X[104X
  [4X[32X[104X
  
  [1X71.9-11 RealClasses[101X
  
  [29X[2XRealClasses[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YFor  a  character table [3Xtbl[103X, [2XRealClasses[102X returns the strictly sorted list of
  positions of classes in [3Xtbl[103X that consist of real elements.[133X
  
  [33X[0;0YAn element [22Xx[122X is [13Xreal[113X iff it is conjugate to its inverse [22Xx^{-1} = x^{o(x)-1}[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XRealClasses( CharacterTable( "A5" ) );[127X[104X
    [4X[28X[ 1, 2, 3, 4, 5 ][128X[104X
    [4X[25Xgap>[125X [27XRealClasses( CharacterTable( "Cyclic", 3 ) );[127X[104X
    [4X[28X[ 1 ][128X[104X
  [4X[32X[104X
  
  [1X71.9-12 ClassOrbit[101X
  
  [29X[2XClassOrbit[102X( [3Xtbl[103X, [3Xcc[103X ) [32X operation
  
  [33X[0;0Yis  the  list of positions of those conjugacy classes of the character table
  [3Xtbl[103X  that  are  Galois  conjugate  to  the [3Xcc[103X-th class. That is, exactly the
  classes  at  positions  given  by  the  list  returned by [2XClassOrbit[102X contain
  generators of the cyclic group generated by an element in the [3Xcc[103X-th class.[133X
  
  [33X[0;0YThis information is computed from the power maps of [3Xtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XClassOrbit( CharacterTable( "A5" ), 4 );[127X[104X
    [4X[28X[ 4, 5 ][128X[104X
  [4X[32X[104X
  
  [1X71.9-13 ClassRoots[101X
  
  [29X[2XClassRoots[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YFor  a character table [3Xtbl[103X, [2XClassRoots[102X returns a list containing at position
  [22Xi[122X the list of positions of the classes of all nontrivial [22Xp[122X-th roots, where [22Xp[122X
  runs over the prime divisors of the [2XSize[102X ([14X71.8-5[114X) value of [3Xtbl[103X.[133X
  
  [33X[0;0YThis information is computed from the power maps of [3Xtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XClassRoots( CharacterTable( "A5" ) );[127X[104X
    [4X[28X[ [ 2, 3, 4, 5 ], [  ], [  ], [  ], [  ] ][128X[104X
    [4X[25Xgap>[125X [27XClassRoots( CharacterTable( "Cyclic", 6 ) );[127X[104X
    [4X[28X[ [ 3, 4, 5 ], [  ], [ 2 ], [ 2, 6 ], [ 6 ], [  ] ][128X[104X
  [4X[32X[104X
  
  
  [1X71.10 [33X[0;0YNormal Subgroups Represented by Lists of Class Positions[133X[101X
  
  [33X[0;0YThe  following attributes for a character table [3Xtbl[103X correspond to attributes
  for  the  group  [22XG[122X  of  [3Xtbl[103X.  But instead of a normal subgroup (or a list of
  normal  subgroups)  of  [22XG[122X,  they  return  a strictly sorted list of positive
  integers  (or a list of such lists) which are the positions –relative to the
  [2XConjugacyClasses[102X  ([14X71.6-2[114X) value of [3Xtbl[103X– of those classes forming the normal
  subgroup in question.[133X
  
  [1X71.10-1 ClassPositionsOfNormalSubgroups[101X
  
  [29X[2XClassPositionsOfNormalSubgroups[102X( [3Xordtbl[103X ) [32X attribute
  [29X[2XClassPositionsOfMaximalNormalSubgroups[102X( [3Xordtbl[103X ) [32X attribute
  [29X[2XClassPositionsOfMinimalNormalSubgroups[102X( [3Xordtbl[103X ) [32X attribute
  
  [33X[0;0Ycorrespond  to  [2XNormalSubgroups[102X ([14X39.19-8[114X), [2XMaximalNormalSubgroups[102X ([14X39.19-9[114X),
  [2XMinimalNormalSubgroups[102X  ([14X39.19-10[114X)  for  the group of the ordinary character
  table [3Xordtbl[103X.[133X
  
  [33X[0;0YThe  entries  of the result lists are sorted according to increasing length.
  (So this total order respects the partial order of normal subgroups given by
  inclusion.)[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbls4:= CharacterTable( "Symmetric", 4 );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfNormalSubgroups( tbls4 );[127X[104X
    [4X[28X[ [ 1 ], [ 1, 3 ], [ 1, 3, 4 ], [ 1 .. 5 ] ][128X[104X
  [4X[32X[104X
  
  [1X71.10-2 ClassPositionsOfAgemo[101X
  
  [29X[2XClassPositionsOfAgemo[102X( [3Xordtbl[103X, [3Xp[103X ) [32X operation
  
  [33X[0;0Ycorresponds to [2XAgemo[102X ([14X39.14-2[114X) for the group of the ordinary character table
  [3Xordtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbls4:= CharacterTable( "Symmetric", 4 );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfAgemo( tbls4, 2 );[127X[104X
    [4X[28X[ 1, 3, 4 ][128X[104X
  [4X[32X[104X
  
  [1X71.10-3 ClassPositionsOfCentre[101X
  
  [29X[2XClassPositionsOfCentre[102X( [3Xordtbl[103X ) [32X attribute
  [29X[2XClassPositionsOfCenter[102X( [3Xordtbl[103X ) [32X attribute
  
  [33X[0;0Ycorresponds to [2XCentre[102X ([14X35.4-5[114X) for the group of the ordinary character table
  [3Xordtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbld8:= CharacterTable( "Dihedral", 8 );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfCentre( tbld8 );[127X[104X
    [4X[28X[ 1, 3 ][128X[104X
  [4X[32X[104X
  
  [1X71.10-4 ClassPositionsOfDirectProductDecompositions[101X
  
  [29X[2XClassPositionsOfDirectProductDecompositions[102X( [3Xtbl[103X[, [3Xnclasses[103X] ) [32X attribute
  
  [33X[0;0YLet [3Xtbl[103X be the ordinary character table of the group [22XG[122X, say. Called with the
  only  argument  [3Xtbl[103X, [2XClassPositionsOfDirectProductDecompositions[102X returns the
  list  of  all  those pairs [22X[ l_1, l_2 ][122X where [22Xl_1[122X and [22Xl_2[122X are lists of class
  positions  of  normal  subgroups  [22XN_1[122X,  [22XN_2[122X of [22XG[122X such that [22XG[122X is their direct
  product and [22X|N_1| ≤ |N_2|[122X holds. Called with second argument a list [3Xnclasses[103X
  of     class     positions    of    a    normal    subgroup    [22XN[122X    of    [22XG[122X,
  [2XClassPositionsOfDirectProductDecompositions[102X   returns   the  list  of  pairs
  describing  the  decomposition  of  [22XN[122X  as  a  direct  product  of two normal
  subgroups of [22XG[122X.[133X
  
  [1X71.10-5 ClassPositionsOfDerivedSubgroup[101X
  
  [29X[2XClassPositionsOfDerivedSubgroup[102X( [3Xordtbl[103X ) [32X attribute
  
  [33X[0;0Ycorresponds  to  [2XDerivedSubgroup[102X  ([14X39.12-3[114X)  for  the  group of the ordinary
  character table [3Xordtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbld8:= CharacterTable( "Dihedral", 8 );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfDerivedSubgroup( tbld8 );[127X[104X
    [4X[28X[ 1, 3 ][128X[104X
  [4X[32X[104X
  
  [1X71.10-6 ClassPositionsOfElementaryAbelianSeries[101X
  
  [29X[2XClassPositionsOfElementaryAbelianSeries[102X( [3Xordtbl[103X ) [32X attribute
  
  [33X[0;0Ycorresponds  to  [2XElementaryAbelianSeries[102X  ([14X39.17-9[114X)  for  the  group  of the
  ordinary character table [3Xordtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbls4:= CharacterTable( "Symmetric", 4 );;[127X[104X
    [4X[25Xgap>[125X [27Xtbla5:= CharacterTable( "A5" );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfElementaryAbelianSeries( tbls4 );[127X[104X
    [4X[28X[ [ 1 .. 5 ], [ 1, 3, 4 ], [ 1, 3 ], [ 1 ] ][128X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfElementaryAbelianSeries( tbla5 );[127X[104X
    [4X[28Xfail[128X[104X
  [4X[32X[104X
  
  [1X71.10-7 ClassPositionsOfFittingSubgroup[101X
  
  [29X[2XClassPositionsOfFittingSubgroup[102X( [3Xordtbl[103X ) [32X attribute
  
  [33X[0;0Ycorresponds  to  [2XFittingSubgroup[102X  ([14X39.12-5[114X)  for  the  group of the ordinary
  character table [3Xordtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbls4:= CharacterTable( "Symmetric", 4 );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfFittingSubgroup( tbls4 );[127X[104X
    [4X[28X[ 1, 3 ][128X[104X
  [4X[32X[104X
  
  [1X71.10-8 ClassPositionsOfLowerCentralSeries[101X
  
  [29X[2XClassPositionsOfLowerCentralSeries[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0Ycorresponds  to  [2XLowerCentralSeriesOfGroup[102X  ([14X39.17-11[114X)  for the group of the
  ordinary character table [3Xordtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbls4:= CharacterTable( "Symmetric", 4 );;[127X[104X
    [4X[25Xgap>[125X [27Xtbld8:= CharacterTable( "Dihedral", 8 );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfLowerCentralSeries( tbls4 );[127X[104X
    [4X[28X[ [ 1 .. 5 ], [ 1, 3, 4 ] ][128X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfLowerCentralSeries( tbld8 );[127X[104X
    [4X[28X[ [ 1 .. 5 ], [ 1, 3 ], [ 1 ] ][128X[104X
  [4X[32X[104X
  
  [1X71.10-9 ClassPositionsOfUpperCentralSeries[101X
  
  [29X[2XClassPositionsOfUpperCentralSeries[102X( [3Xordtbl[103X ) [32X attribute
  
  [33X[0;0Ycorresponds  to  [2XUpperCentralSeriesOfGroup[102X  ([14X39.17-12[114X)  for the group of the
  ordinary character table [3Xordtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbls4:= CharacterTable( "Symmetric", 4 );;[127X[104X
    [4X[25Xgap>[125X [27Xtbld8:= CharacterTable( "Dihedral", 8 );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfUpperCentralSeries( tbls4 );[127X[104X
    [4X[28X[ [ 1 ] ][128X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfUpperCentralSeries( tbld8 );[127X[104X
    [4X[28X[ [ 1, 3 ], [ 1, 2, 3, 4, 5 ] ][128X[104X
  [4X[32X[104X
  
  [1X71.10-10 ClassPositionsOfSupersolvableResiduum[101X
  
  [29X[2XClassPositionsOfSupersolvableResiduum[102X( [3Xordtbl[103X ) [32X attribute
  
  [33X[0;0Ycorresponds  to  [2XSupersolvableResiduum[102X  ([14X39.12-11[114X)  for  the  group  of  the
  ordinary character table [3Xordtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbls4:= CharacterTable( "Symmetric", 4 );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfSupersolvableResiduum( tbls4 );[127X[104X
    [4X[28X[ 1, 3 ][128X[104X
  [4X[32X[104X
  
  [1X71.10-11 ClassPositionsOfPCore[101X
  
  [29X[2XClassPositionsOfPCore[102X( [3Xordtbl[103X, [3Xp[103X ) [32X operation
  
  [33X[0;0Ycorresponds to [2XPCore[102X ([14X39.11-3[114X) for the group of the ordinary character table
  [3Xordtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbls4:= CharacterTable( "Symmetric", 4 );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfPCore( tbls4, 2 );[127X[104X
    [4X[28X[ 1, 3 ][128X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfPCore( tbls4, 3 );[127X[104X
    [4X[28X[ 1 ][128X[104X
  [4X[32X[104X
  
  [1X71.10-12 ClassPositionsOfNormalClosure[101X
  
  [29X[2XClassPositionsOfNormalClosure[102X( [3Xordtbl[103X, [3Xclasses[103X ) [32X operation
  
  [33X[0;0Yis the sorted list of the positions of all conjugacy classes of the ordinary
  character  table  [3Xordtbl[103X  that  form  the  normal closure (see [2XNormalClosure[102X
  ([14X39.11-4[114X)) of the conjugacy classes at positions in the list [3Xclasses[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbls4:= CharacterTable( "Symmetric", 4 );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfNormalClosure( tbls4, [ 1, 4 ] );[127X[104X
    [4X[28X[ 1, 3, 4 ][128X[104X
  [4X[32X[104X
  
  
  [1X71.11 [33X[0;0YOperations Concerning Blocks[133X[101X
  
  [1X71.11-1 PrimeBlocks[101X
  
  [29X[2XPrimeBlocks[102X( [3Xordtbl[103X, [3Xp[103X ) [32X operation
  [29X[2XPrimeBlocksOp[102X( [3Xordtbl[103X, [3Xp[103X ) [32X operation
  [29X[2XComputedPrimeBlockss[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YFor  an  ordinary  character table [3Xordtbl[103X and a prime integer [3Xp[103X, [2XPrimeBlocks[102X
  returns a record with the following components.[133X
  
  [8X[10Xblock[110X[108X
        [33X[0;6Ya  list,  the  value  [22Xj[122X  at position [22Xi[122X means that the [22Xi[122X-th irreducible
        character of [3Xordtbl[103X lies in the [22Xj[122X-th [3Xp[103X-block of [3Xordtbl[103X,[133X
  
  [8X[10Xdefect[110X[108X
        [33X[0;6Ya list containing at position [22Xi[122X the defect of the [22Xi[122X-th block,[133X
  
  [8X[10Xheight[110X[108X
        [33X[0;6Ya  list  containing  at  position [22Xi[122X the height of the [22Xi[122X-th irreducible
        character of [3Xordtbl[103X in its block,[133X
  
  [8X[10Xrelevant[110X[108X
        [33X[0;6Ya  list  of  class  positions  such that only the restriction to these
        classes need be checked for deciding whether two characters lie in the
        same block, and[133X
  
  [8X[10Xcentralcharacter[110X[108X
        [33X[0;6Ya  list  containing at position [22Xi[122X a list whose values at the positions
        stored in the component [10Xrelevant[110X are the values of a central character
        in the [22Xi[122X-th block.[133X
  
  [33X[0;0YThe   components  [10Xrelevant[110X  and  [10Xcentralcharacters[110X  are  used  by  [2XSameBlock[102X
  ([14X71.11-2[114X).[133X
  
  [33X[0;0YIf  [2XInfoCharacterTable[102X  ([14X71.4-2[114X)  has  level  at least 2, the defects of the
  blocks and the heights of the characters are printed.[133X
  
  [33X[0;0YThe  default  method uses the attribute [2XComputedPrimeBlockss[102X for storing the
  computed  value  at  position  [3Xp[103X,  and calls the operation [2XPrimeBlocksOp[102X for
  computing values that are not yet known.[133X
  
  [33X[0;0YTwo ordinary irreducible characters [22Xχ, ψ[122X of a group [22XG[122X are said to lie in the
  same   [22Xp[122X-[13Xblock[113X   if   the  images  of  their  central  characters  [22Xω_χ,  ω_ψ[122X
  (see [2XCentralCharacter[102X  ([14X72.8-17[114X)) under the natural ring epimorphism [22XR → R /
  M[122X  are  equal, where [22XR[122X denotes the ring of algebraic integers in the complex
  number  field,  and [22XM[122X is a maximal ideal in [22XR[122X with [22XpR ⊆ M[122X. (The distribution
  to [22Xp[122X-blocks is in fact independent of the choice of [22XM[122X, see [Isa76].)[133X
  
  [33X[0;0YFor  [22X|G|  =  p^a  m[122X  where [22Xp[122X does not divide [22Xm[122X, the [13Xdefect[113X of a block is the
  integer  [22Xd[122X  such  that  [22Xp^{a-d}[122X  is  the largest power of [22Xp[122X that divides the
  degrees of all characters in the block.[133X
  
  [33X[0;0YThe  [13Xheight[113X of a character [22Xχ[122X in the block is defined as the largest exponent
  [22Xh[122X for which [22Xp^h[122X divides [22Xχ(1) / p^{a-d}[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "L3(2)" );;[127X[104X
    [4X[25Xgap>[125X [27Xpbl:= PrimeBlocks( tbl, 2 );[127X[104X
    [4X[28Xrec( block := [ 1, 1, 1, 1, 1, 2 ], [128X[104X
    [4X[28X  centralcharacter := [ [ ,, 56,, 24 ], [ ,, -7,, 3 ] ], [128X[104X
    [4X[28X  defect := [ 3, 0 ], height := [ 0, 0, 0, 1, 0, 0 ], [128X[104X
    [4X[28X  relevant := [ 3, 5 ] )[128X[104X
  [4X[32X[104X
  
  [1X71.11-2 SameBlock[101X
  
  [29X[2XSameBlock[102X( [3Xp[103X, [3Xomega1[103X, [3Xomega2[103X, [3Xrelevant[103X ) [32X function
  
  [33X[0;0YLet  [3Xp[103X  be  a prime integer, [3Xomega1[103X and [3Xomega2[103X be two central characters (or
  their  values  lists)  of  a  character  table,  and  [3Xrelevant[103X  be a list of
  positions  as  is  stored  in the component [10Xrelevant[110X of a record returned by
  [2XPrimeBlocks[102X ([14X71.11-1[114X).[133X
  
  [33X[0;0Y[2XSameBlock[102X  returns  [9Xtrue[109X  if  [3Xomega1[103X and [3Xomega2[103X are equal modulo any maximal
  ideal in the ring of complex algebraic integers containing the ideal spanned
  by [3Xp[103X, and [9Xfalse[109X otherwise.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xomega:= List( Irr( tbl ), CentralCharacter );;[127X[104X
    [4X[25Xgap>[125X [27XSameBlock( 2, omega[1], omega[2], pbl.relevant );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XSameBlock( 2, omega[1], omega[6], pbl.relevant );[127X[104X
    [4X[28Xfalse[128X[104X
  [4X[32X[104X
  
  [1X71.11-3 BlocksInfo[101X
  
  [29X[2XBlocksInfo[102X( [3Xmodtbl[103X ) [32X attribute
  
  [33X[0;0YFor  a  Brauer  character table [3Xmodtbl[103X, the value of [2XBlocksInfo[102X is a list of
  (mutable)  records,  the  [22Xi[122X-th  entry  containing information about the [22Xi[122X-th
  block. Each record has the following components.[133X
  
  [8X[10Xdefect[110X[108X
        [33X[0;6Ythe defect of the block,[133X
  
  [8X[10Xordchars[110X[108X
        [33X[0;6Ythe  list  of  positions of the ordinary characters that belong to the
        block, relative to [10XIrr( OrdinaryCharacterTable( [3Xmodtbl[103X[10X ) )[110X,[133X
  
  [8X[10Xmodchars[110X[108X
        [33X[0;6Ythe  list  of  positions  of  the Brauer characters that belong to the
        block, relative to [10XIBr( [3Xmodtbl[103X[10X )[110X.[133X
  
  [33X[0;0YOptional components are[133X
  
  [8X[10Xbasicset[110X[108X
        [33X[0;6Ya  list  of  positions  of  ordinary  characters  in  the  block whose
        restriction  to  [3Xmodtbl[103X is maximally linearly independent, relative to
        [10XIrr( OrdinaryCharacterTable( [3Xmodtbl[103X[10X ) )[110X,[133X
  
  [8X[10Xdecmat[110X[108X
        [33X[0;6Ythe decomposition matrix of the block, it is stored automatically when
        [2XDecompositionMatrix[102X ([14X71.11-4[114X) is called for the block,[133X
  
  [8X[10Xdecinv[110X[108X
        [33X[0;6Yinverse  of  the  decomposition matrix of the block, restricted to the
        ordinary characters described by [10Xbasicset[110X,[133X
  
  [8X[10Xbrauertree[110X[108X
        [33X[0;6Ya  list  that describes the Brauer tree of the block, in the case that
        the block is of defect [22X1[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XBlocksInfo( CharacterTable( "L3(2)" ) mod 2 );[127X[104X
    [4X[28X[ rec( basicset := [ 1, 2, 3 ], [128X[104X
    [4X[28X      decinv := [ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ] ], [128X[104X
    [4X[28X      defect := 3, modchars := [ 1, 2, 3 ], [128X[104X
    [4X[28X      ordchars := [ 1, 2, 3, 4, 5 ] ), [128X[104X
    [4X[28X  rec( basicset := [ 6 ], decinv := [ [ 1 ] ], defect := 0, [128X[104X
    [4X[28X      modchars := [ 4 ], ordchars := [ 6 ] ) ][128X[104X
  [4X[32X[104X
  
  [1X71.11-4 DecompositionMatrix[101X
  
  [29X[2XDecompositionMatrix[102X( [3Xmodtbl[103X[, [3Xblocknr[103X] ) [32X operation
  
  [33X[0;0YLet [3Xmodtbl[103X be a Brauer character table.[133X
  
  [33X[0;0YCalled  with  one  argument,  [2XDecompositionMatrix[102X  returns the decomposition
  matrix  of [3Xmodtbl[103X, where the rows and columns are indexed by the irreducible
  characters  of  the  ordinary  character table of [3Xmodtbl[103X and the irreducible
  characters of [3Xmodtbl[103X, respectively,[133X
  
  [33X[0;0YCalled  with  two  arguments,  [2XDecompositionMatrix[102X returns the decomposition
  matrix  of  the block of [3Xmodtbl[103X with number [3Xblocknr[103X; the matrix is stored as
  value  of  the  [10Xdecmat[110X  component  of the [3Xblocknr[103X-th entry of the [2XBlocksInfo[102X
  ([14X71.11-3[114X) list of [3Xmodtbl[103X.[133X
  
  [33X[0;0YAn  ordinary  irreducible  character  is  in  block  [22Xi[122X  if  and  only if all
  characters before the first character of the same block lie in [22Xi-1[122X different
  blocks.  An  irreducible  Brauer  character  is in block [22Xi[122X if it has nonzero
  scalar product with an ordinary irreducible character in block [22Xi[122X.[133X
  
  [33X[0;0Y[2XDecompositionMatrix[102X  is  based  on  the  more general function [2XDecomposition[102X
  ([14X25.4-1[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xmodtbl:= CharacterTable( "L3(2)" ) mod 2;[127X[104X
    [4X[28XBrauerTable( "L3(2)", 2 )[128X[104X
    [4X[25Xgap>[125X [27XDecompositionMatrix( modtbl );[127X[104X
    [4X[28X[ [ 1, 0, 0, 0 ], [ 0, 1, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 1, 0 ], [128X[104X
    [4X[28X  [ 1, 1, 1, 0 ], [ 0, 0, 0, 1 ] ][128X[104X
    [4X[25Xgap>[125X [27XDecompositionMatrix( modtbl, 1 );[127X[104X
    [4X[28X[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, 1 ], [ 0, 1, 1 ], [ 1, 1, 1 ] ][128X[104X
    [4X[25Xgap>[125X [27XDecompositionMatrix( modtbl, 2 );[127X[104X
    [4X[28X[ [ 1 ] ][128X[104X
  [4X[32X[104X
  
  [1X71.11-5 LaTeXStringDecompositionMatrix[101X
  
  [29X[2XLaTeXStringDecompositionMatrix[102X( [3Xmodtbl[103X[, [3Xblocknr[103X][, [3Xoptions[103X] ) [32X function
  
  [33X[0;0Yis  a  string  that  contains  LaTeX  code  to  print a decomposition matrix
  (see [2XDecompositionMatrix[102X ([14X71.11-4[114X)) nicely.[133X
  
  [33X[0;0YThe  optional argument [3Xoptions[103X, if present, must be a record with components
  [10Xphi[110X,  [10Xchi[110X  (strings  used  in  each  label for columns and rows), [10Xcollabels[110X,
  [10Xrowlabels[110X  (subscripts  for  the  labels).  The defaults for [10Xphi[110X and [10Xchi[110X are
  [10X"{\\tt  Y}"[110X and [10X"{\\tt X}"[110X, the defaults for [10Xcollabels[110X and [10Xrowlabels[110X are the
  lists  of  positions of the Brauer characters and ordinary characters in the
  respective lists of irreducibles in the character tables.[133X
  
  [33X[0;0YThe  optional  components  [10Xnrows[110X and [10Xncols[110X denote the maximal number of rows
  and  columns  per array; if they are present then each portion of [10Xnrows[110X rows
  and [10Xncols[110X columns forms an array of its own which is enclosed in [10X\[[110X, [10X\][110X.[133X
  
  [33X[0;0YIf   the  component  [10Xdecmat[110X  is  bound  in  [3Xoptions[103X  then  it  must  be  the
  decomposition  matrix  in  question, in this case the matrix is not computed
  from the information in [3Xmodtbl[103X.[133X
  
  [33X[0;0YFor  those  character  tables  from the [5XGAP[105X table library that belong to the
  [5XAtlas[105X   of   Finite  Groups [CCNPW85],  [2XAtlasLabelsOfIrreducibles[102X  ([14XCTblLib:
  AtlasLabelsOfIrreducibles[114X)  constructs  character labels that are compatible
  with  those  used in the [5XAtlas[105X (see [14X'CTblLib: Atlas Tables'[114X in the manual of
  the [5XGAP[105X Character Table Library).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xmodtbl:= CharacterTable( "L3(2)" ) mod 2;;[127X[104X
    [4X[25Xgap>[125X [27XPrint( LaTeXStringDecompositionMatrix( modtbl, 1 ) );[127X[104X
    [4X[28X\[[128X[104X
    [4X[28X\begin{array}{r|rrr} \hline[128X[104X
    [4X[28X & {\tt Y}_{1}[128X[104X
    [4X[28X & {\tt Y}_{2}[128X[104X
    [4X[28X & {\tt Y}_{3}[128X[104X
    [4X[28X \rule[-7pt]{0pt}{20pt} \\ \hline[128X[104X
    [4X[28X{\tt X}_{1} & 1 & . & . \rule[0pt]{0pt}{13pt} \\[128X[104X
    [4X[28X{\tt X}_{2} & . & 1 & . \\[128X[104X
    [4X[28X{\tt X}_{3} & . & . & 1 \\[128X[104X
    [4X[28X{\tt X}_{4} & . & 1 & 1 \\[128X[104X
    [4X[28X{\tt X}_{5} & 1 & 1 & 1 \rule[-7pt]{0pt}{5pt} \\[128X[104X
    [4X[28X\hline[128X[104X
    [4X[28X\end{array}[128X[104X
    [4X[28X\][128X[104X
    [4X[25Xgap>[125X [27Xoptions:= rec( phi:= "\\varphi", chi:= "\\chi" );;[127X[104X
    [4X[25Xgap>[125X [27XPrint( LaTeXStringDecompositionMatrix( modtbl, 1, options ) );[127X[104X
    [4X[28X\[[128X[104X
    [4X[28X\begin{array}{r|rrr} \hline[128X[104X
    [4X[28X & \varphi_{1}[128X[104X
    [4X[28X & \varphi_{2}[128X[104X
    [4X[28X & \varphi_{3}[128X[104X
    [4X[28X \rule[-7pt]{0pt}{20pt} \\ \hline[128X[104X
    [4X[28X\chi_{1} & 1 & . & . \rule[0pt]{0pt}{13pt} \\[128X[104X
    [4X[28X\chi_{2} & . & 1 & . \\[128X[104X
    [4X[28X\chi_{3} & . & . & 1 \\[128X[104X
    [4X[28X\chi_{4} & . & 1 & 1 \\[128X[104X
    [4X[28X\chi_{5} & 1 & 1 & 1 \rule[-7pt]{0pt}{5pt} \\[128X[104X
    [4X[28X\hline[128X[104X
    [4X[28X\end{array}[128X[104X
    [4X[28X\][128X[104X
  [4X[32X[104X
  
  
  [1X71.12 [33X[0;0YOther Operations for Character Tables[133X[101X
  
  [33X[0;0YIn  the  following,  we  list  operations  for character tables that are not
  attributes.[133X
  
  [1X71.12-1 Index[101X
  
  [29X[2XIndex[102X( [3Xtbl[103X, [3Xsubtbl[103X ) [32X operation
  
  [33X[0;0YFor  two  character tables [3Xtbl[103X and [3Xsubtbl[103X, [2XIndex[102X returns the quotient of the
  [2XSize[102X  ([14X71.8-5[114X)  values  of [3Xtbl[103X and [3Xsubtbl[103X. The containment of the underlying
  groups  of  [3Xsubtbl[103X  and [3Xtbl[103X is [13Xnot[113X checked; so the distinction between [2XIndex[102X
  ([14X39.3-2[114X) and [2XIndexNC[102X ([14X39.3-2[114X) is not made for character tables.[133X
  
  [1X71.12-2 IsInternallyConsistent[101X
  
  [29X[2XIsInternallyConsistent[102X( [3Xtbl[103X ) [32X method
  
  [33X[0;0YFor  an [13Xordinary[113X character table [3Xtbl[103X, [2XIsInternallyConsistent[102X ([14X12.8-3[114X) checks
  the consistency of the following attribute values (if stored).[133X
  
  [30X    [33X[0;6Y[2XSize[102X  ([14X30.4-6[114X),  [2XSizesCentralizers[102X ([14X71.9-2[114X), and [2XSizesConjugacyClasses[102X
        ([14X71.9-3[114X).[133X
  
  [30X    [33X[0;6Y[2XSizesCentralizers[102X ([14X71.9-2[114X) and [2XOrdersClassRepresentatives[102X ([14X71.9-1[114X).[133X
  
  [30X    [33X[0;6Y[2XComputedPowerMaps[102X ([14X73.1-1[114X) and [2XOrdersClassRepresentatives[102X ([14X71.9-1[114X).[133X
  
  [30X    [33X[0;6Y[2XSizesCentralizers[102X ([14X71.9-2[114X) and [2XIrr[102X ([14X71.8-2[114X).[133X
  
  [30X    [33X[0;6Y[2XIrr[102X ([14X71.8-2[114X) (first orthogonality relation).[133X
  
  [33X[0;0YFor a [13XBrauer[113X table [3Xtbl[103X, [2XIsInternallyConsistent[102X checks the consistency of the
  following attribute values (if stored).[133X
  
  [30X    [33X[0;6Y[2XSize[102X  ([14X30.4-6[114X),  [2XSizesCentralizers[102X ([14X71.9-2[114X), and [2XSizesConjugacyClasses[102X
        ([14X71.9-3[114X).[133X
  
  [30X    [33X[0;6Y[2XSizesCentralizers[102X ([14X71.9-2[114X) and [2XOrdersClassRepresentatives[102X ([14X71.9-1[114X).[133X
  
  [30X    [33X[0;6Y[2XComputedPowerMaps[102X ([14X73.1-1[114X) and [2XOrdersClassRepresentatives[102X ([14X71.9-1[114X).[133X
  
  [30X    [33X[0;6Y[2XIrr[102X ([14X71.8-2[114X) (closure under complex conjugation and Frobenius map).[133X
  
  [33X[0;0YIf  no  inconsistency occurs, [9Xtrue[109X is returned, otherwise each inconsistency
  is  printed  to the screen if the level of [2XInfoWarning[102X ([14X7.4-7[114X) is at least [22X1[122X
  (see [14X7.4[114X), and [9Xfalse[109X is returned at the end.[133X
  
  [1X71.12-3 IsPSolvableCharacterTable[101X
  
  [29X[2XIsPSolvableCharacterTable[102X( [3Xtbl[103X, [3Xp[103X ) [32X operation
  [29X[2XIsPSolubleCharacterTable[102X( [3Xtbl[103X, [3Xp[103X ) [32X operation
  [29X[2XIsPSolvableCharacterTableOp[102X( [3Xtbl[103X, [3Xp[103X ) [32X operation
  [29X[2XIsPSolubleCharacterTableOp[102X( [3Xtbl[103X, [3Xp[103X ) [32X operation
  [29X[2XComputedIsPSolvableCharacterTables[102X( [3Xtbl[103X ) [32X attribute
  [29X[2XComputedIsPSolubleCharacterTables[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0Y[2XIsPSolvableCharacterTable[102X  for  the ordinary character table [3Xtbl[103X corresponds
  to  [2XIsPSolvable[102X  ([14X39.15-23[114X)  for  the group of [3Xtbl[103X, [3Xp[103X must be either a prime
  integer or [10X0[110X.[133X
  
  [33X[0;0YThe default method uses the attribute [2XComputedIsPSolvableCharacterTables[102X for
  storing   the  computed  value  at  position  [3Xp[103X,  and  calls  the  operation
  [2XIsPSolvableCharacterTableOp[102X for computing values that are not yet known.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "Sz(8)" );;[127X[104X
    [4X[25Xgap>[125X [27XIsPSolvableCharacterTable( tbl, 2 );[127X[104X
    [4X[28Xfalse[128X[104X
    [4X[25Xgap>[125X [27XIsPSolvableCharacterTable( tbl, 3 );[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  [1X71.12-4 IsClassFusionOfNormalSubgroup[101X
  
  [29X[2XIsClassFusionOfNormalSubgroup[102X( [3Xsubtbl[103X, [3Xfus[103X, [3Xtbl[103X ) [32X function
  
  [33X[0;0YFor  two  ordinary  character  tables  [3Xtbl[103X  and  [3Xsubtbl[103X of a group [22XG[122X and its
  subgroup  [22XU[122X,  say,  and  a  list [3Xfus[103X of positive integers that describes the
  class fusion of [22XU[122X into [22XG[122X, [2XIsClassFusionOfNormalSubgroup[102X returns [9Xtrue[109X if [22XU[122X is
  a normal subgroup of [22XG[122X, and [9Xfalse[109X otherwise.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtblc2:= CharacterTable( "Cyclic", 2 );;[127X[104X
    [4X[25Xgap>[125X [27Xtbld8:= CharacterTable( "Dihedral", 8 );;[127X[104X
    [4X[25Xgap>[125X [27Xfus:= PossibleClassFusions( tblc2, tbld8 );[127X[104X
    [4X[28X[ [ 1, 3 ], [ 1, 4 ], [ 1, 5 ] ][128X[104X
    [4X[25Xgap>[125X [27XList(fus, map -> IsClassFusionOfNormalSubgroup(tblc2, map, tbld8));[127X[104X
    [4X[28X[ true, false, false ][128X[104X
  [4X[32X[104X
  
  [1X71.12-5 Indicator[101X
  
  [29X[2XIndicator[102X( [3Xtbl[103X[, [3Xcharacters[103X], [3Xn[103X ) [32X operation
  [29X[2XIndicatorOp[102X( [3Xtbl[103X, [3Xcharacters[103X, [3Xn[103X ) [32X operation
  [29X[2XComputedIndicators[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YIf  [3Xtbl[103X  is  an  ordinary character table then [2XIndicator[102X returns the list of
  [3Xn[103X-th  Frobenius-Schur  indicators  of the characters in the list [3Xcharacters[103X;
  the default of [3Xcharacters[103X is [10XIrr( [3Xtbl[103X[10X )[110X.[133X
  
  [33X[0;0YThe  [22Xn[122X-th Frobenius-Schur indicator [22Xν_n(χ)[122X of an ordinary character [22Xχ[122X of the
  group [22XG[122X is given by [22Xν_n(χ) = ( ∑_{g ∈ G} χ(g^n) ) / |G|[122X.[133X
  
  [33X[0;0YIf  [3Xtbl[103X  is  a  Brauer  table in characteristic [22X≠ 2[122X and [22X[3Xn[103X = 2[122X then [2XIndicator[102X
  returns the second indicator.[133X
  
  [33X[0;0YThe  default  method  uses  the attribute [2XComputedIndicators[102X for storing the
  computed  value  at  position  [3Xn[103X,  and  calls  the operation [2XIndicatorOp[102X for
  computing values that are not yet known.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "L3(2)" );;[127X[104X
    [4X[25Xgap>[125X [27XIndicator( tbl, 2 );[127X[104X
    [4X[28X[ 1, 0, 0, 1, 1, 1 ][128X[104X
  [4X[32X[104X
  
  [1X71.12-6 NrPolyhedralSubgroups[101X
  
  [29X[2XNrPolyhedralSubgroups[102X( [3Xtbl[103X, [3Xc1[103X, [3Xc2[103X, [3Xc3[103X ) [32X function
  
  [33X[0;0Yreturns the number and isomorphism type of polyhedral subgroups of the group
  with  ordinary  character  table  [3Xtbl[103X which are generated by an element [22Xg[122X of
  class  [3Xc1[103X and an element [22Xh[122X of class [3Xc2[103X with the property that the product [22Xgh[122X
  lies in class [3Xc3[103X.[133X
  
  [33X[0;0YAccording  to  [NPP84,  p.  233],  the  number  of  polyhedral  subgroups of
  isomorphism  type [22XV_4[122X, [22XD_2n[122X, [22XA_4[122X, [22XS_4[122X, and [22XA_5[122X can be derived from the class
  multiplication  coefficient  (see [2XClassMultiplicationCoefficient[102X  ([14X71.12-7[114X))
  and the number of Galois conjugates of a class (see [2XClassOrbit[102X ([14X71.9-12[114X)).[133X
  
  [33X[0;0YThe classes [3Xc1[103X, [3Xc2[103X and [3Xc3[103X in the parameter list must be ordered according to
  the  order  of the elements in these classes. If elements in class [3Xc1[103X and [3Xc2[103X
  do not generate a polyhedral group then [9Xfail[109X is returned.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XNrPolyhedralSubgroups( tbl, 2, 2, 4 );[127X[104X
    [4X[28Xrec( number := 21, type := "D8" )[128X[104X
  [4X[32X[104X
  
  [1X71.12-7 ClassMultiplicationCoefficient[101X
  
  [29X[2XClassMultiplicationCoefficient[102X( [3Xtbl[103X, [3Xi[103X, [3Xj[103X, [3Xk[103X ) [32X operation
  
  [33X[0;0Yreturns  the  class multiplication coefficient of the classes [3Xi[103X, [3Xj[103X, and [3Xk[103X of
  the group [22XG[122X with ordinary character table [3Xtbl[103X.[133X
  
  [33X[0;0YThe class multiplication coefficient [22Xc_{i,j,k}[122X of the classes [3Xi[103X, [3Xj[103X, [3Xk[103X equals
  the  number of pairs [22X(x,y)[122X of elements [22Xx, y ∈ G[122X such that [22Xx[122X lies in class [3Xi[103X,
  [22Xy[122X lies in class [3Xj[103X, and their product [22Xxy[122X is a fixed element of class [3Xk[103X.[133X
  
  [33X[0;0YIn  the  center  of  the  group  algebra  of  [22XG[122X,  these numbers are found as
  coefficients  of  the decomposition of the product of two class sums [22XK_i[122X and
  [22XK_j[122X into class sums:[133X
  
  
        [33X[1;6Y[24X[33X[0;0YK_i K_j = ∑_k c_ijk K_k .[133X[124X[133X
  
  
  [33X[0;0YGiven  the  character table of a finite group [22XG[122X, whose classes are [22XC_1, ...,
  C_r[122X  with  representatives  [22Xg_i  ∈ C_i[122X, the class multiplication coefficient
  [22Xc_ijk[122X can be computed with the following formula:[133X
  
  
        [33X[1;6Y[24X[33X[0;0Yc_ijk = |C_i| ⋅ |C_j| / |G| ⋅ ∑_{χ ∈ Irr(G)} χ(g_i) χ(g_j) χ(g_k^{-1})
        / χ(1).[133X[124X[133X
  
  
  [33X[0;0YOn  the  other  hand  the knowledge of the class multiplication coefficients
  admits    the    computation   of   the   irreducible   characters   of   [22XG[122X,
  see [2XIrrDixonSchneider[102X ([14X71.14-1[114X).[133X
  
  [1X71.12-8 ClassStructureCharTable[101X
  
  [29X[2XClassStructureCharTable[102X( [3Xtbl[103X, [3Xclasses[103X ) [32X function
  
  [33X[0;0Yreturns  the  so-called  class structure of the classes in the list [3Xclasses[103X,
  for the character table [3Xtbl[103X of the group [22XG[122X. The length of [3Xclasses[103X must be at
  least 2.[133X
  
  [33X[0;0YLet  [22XC  =  (C_1, C_2, ..., C_n)[122X denote the [22Xn[122X-tuple of conjugacy classes of [22XG[122X
  that  are  indexed by [3Xclasses[103X. The class structure [22Xn(C)[122X equals the number of
  [22Xn[122X-tuples  [22X(g_1, g_2, ..., g_n)[122X of elements [22Xg_i ∈ C_i[122X with [22Xg_1 g_2 ⋯ g_n = 1[122X.
  Note   the   difference  to  the  definition  of  the  class  multiplication
  coefficients in [2XClassMultiplicationCoefficient[102X ([14X71.12-7[114X).[133X
  
  [33X[0;0Y[22Xn(C_1, C_2, ..., C_n)[122X is computed using the formula[133X
  
  
        [33X[1;6Y[24X[33X[0;0Yn(C_1, C_2, ..., C_n) = |C_1| |C_2| ⋯ |C_n| / |G| ⋅ ∑_{χ ∈ Irr(G)}
        χ(g_1) χ(g_2) ⋯ χ(g_n) / χ(1)^{n-2} .[133X[124X[133X
  
  
  [1X71.12-9 MatClassMultCoeffsCharTable[101X
  
  [29X[2XMatClassMultCoeffsCharTable[102X( [3Xtbl[103X, [3Xi[103X ) [32X function
  
  [33X[0;0YFor   an   ordinary   character   table   [3Xtbl[103X   and   a  class  position  [3Xi[103X,
  [10XMatClassMultCoeffsCharTable[110X  returns the matrix [22X[ a_ijk ]_{j,k}[122X of structure
  constants (see [2XClassMultiplicationCoefficient[102X ([14X71.12-7[114X)).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "L3(2)" );;[127X[104X
    [4X[25Xgap>[125X [27XClassMultiplicationCoefficient( tbl, 2, 2, 4 );[127X[104X
    [4X[28X4[128X[104X
    [4X[25Xgap>[125X [27XClassStructureCharTable( tbl, [ 2, 2, 4 ] );[127X[104X
    [4X[28X168[128X[104X
    [4X[25Xgap>[125X [27XClassStructureCharTable( tbl, [ 2, 2, 2, 4 ] );[127X[104X
    [4X[28X1848[128X[104X
    [4X[25Xgap>[125X [27XMatClassMultCoeffsCharTable( tbl, 2 );[127X[104X
    [4X[28X[ [ 0, 1, 0, 0, 0, 0 ], [ 21, 4, 3, 4, 0, 0 ], [ 0, 8, 6, 8, 7, 7 ], [128X[104X
    [4X[28X  [ 0, 8, 6, 1, 7, 7 ], [ 0, 0, 3, 4, 0, 7 ], [ 0, 0, 3, 4, 7, 0 ] ][128X[104X
  [4X[32X[104X
  
  
  [1X71.13 [33X[0;0YPrinting Character Tables[133X[101X
  
  [1X71.13-1 ViewObj[101X
  
  [29X[2XViewObj[102X( [3Xtbl[103X ) [32X method
  
  [33X[0;0YThe  default [2XViewObj[102X ([14X6.3-5[114X) method for ordinary character tables prints the
  string   [10X"CharacterTable"[110X,   followed   by  the  identifier  (see [2XIdentifier[102X
  ([14X71.9-8[114X))  or,  if  known,  the  group  of  the  character table enclosed in
  brackets.  [2XViewObj[102X  ([14X6.3-5[114X) for Brauer tables does the same, except that the
  first  string  is  replaced by [10X"BrauerTable"[110X, and that the characteristic is
  also shown.[133X
  
  [1X71.13-2 PrintObj[101X
  
  [29X[2XPrintObj[102X( [3Xtbl[103X ) [32X method
  
  [33X[0;0YThe  default  [2XPrintObj[102X  ([14X6.3-5[114X) method for character tables does the same as
  [2XViewObj[102X  ([14X6.3-5[114X), except that [2XPrintObj[102X ([14X6.3-5[114X) is used for the group instead
  of [2XViewObj[102X ([14X6.3-5[114X).[133X
  
  [1X71.13-3 Display[101X
  
  [29X[2XDisplay[102X( [3Xtbl[103X ) [32X method
  
  [33X[0;0YThere are various ways to customize the [2XDisplay[102X ([14X6.3-6[114X) output for character
  tables.  First  we  describe  the  default  behaviour, alternatives are then
  described below.[133X
  
  [33X[0;0YThe default [2XDisplay[102X ([14X6.3-6[114X) method prepares the data in [3Xtbl[103X for a columnwise
  output. The number of columns printed at one time depends on the actual line
  length,  which  can  be  accessed  and  changed  by  the function [2XSizeScreen[102X
  ([14X6.12-1[114X).[133X
  
  [33X[0;0YAn  interesting  variant  of  [2XDisplay[102X  ([14X6.3-6[114X)  is  the function [2XPageDisplay[102X
  ([14XGAPDoc:  PageDisplay[114X).  Convenient ways to print the [2XDisplay[102X ([14X6.3-6[114X) format
  to  a file are given by the function [2XPrintTo1[102X ([14XGAPDoc: PrintTo1[114X) or by using
  [2XPageDisplay[102X  ([14XGAPDoc:  PageDisplay[114X)  and  the  facilities of the pager used,
  cf. [2XPager[102X ([14X2.4-1[114X).[133X
  
  [33X[0;0YAn  interactive  variant  of  [2XDisplay[102X ([14X6.3-6[114X) is the [2XBrowse[102X ([14XBrowse: Browse[114X)
  method  for character tables that is provided by the [5XGAP[105X package [5XBrowse[105X, see
  [2XBrowse[102X ([14XBrowse: Browse (for character tables)[114X).[133X
  
  [33X[0;0Y[2XDisplay[102X  ([14X6.3-6[114X)  shows  certain  characters  (by  default  all  irreducible
  characters)  of  [3Xtbl[103X,  together  with  the  orders  of  the  centralizers in
  factorized   form   and  the  available  power  maps  (see [2XComputedPowerMaps[102X
  ([14X73.1-1[114X)). The [3Xn[103X-th displayed character is given the name [10XX.[3Xn[103X[10X[110X.[133X
  
  [33X[0;0YThe  first  lines  of the output describe the order of the centralizer of an
  element of the class factorized into its prime divisors.[133X
  
  [33X[0;0YThe  next line gives the name of each class. If no class names are stored on
  [3Xtbl[103X, [2XClassNames[102X ([14X71.9-6[114X) is called.[133X
  
  [33X[0;0YPreceded  by  a  name  [10XP[3Xn[103X[10X[110X,  the next lines show the [3Xn[103Xth power maps of [3Xtbl[103X in
  terms of the former shown class names.[133X
  
  [33X[0;0YEvery  ambiguous or unknown (see Chapter [14X74[114X) value of the table is displayed
  as a question mark [10X?[110X.[133X
  
  [33X[0;0YIrrational  character  values are not printed explicitly because the lengths
  of  their  printed  representation might disturb the layout. Instead of that
  every irrational value is indicated by a name, which is a string of at least
  one capital letter.[133X
  
  [33X[0;0YOnce  a  name  for  an  irrational  value  is found, it is used all over the
  printed   table.   Moreover   the  complex  conjugate  (see [2XComplexConjugate[102X
  ([14X18.5-2[114X),  [2XGaloisCyc[102X ([14X18.5-1[114X)) and the star of an irrationality (see [2XStarCyc[102X
  ([14X18.5-3[114X))  are  represented  by  that  very  name  preceded  by a [10X/[110X and a [10X*[110X,
  respectively.[133X
  
  [33X[0;0YThe printed character table is then followed by a legend, a list identifying
  the   occurring   symbols   with  their  actual  values.  Occasionally  this
  identification   is  supplemented  by  a  quadratic  representation  of  the
  irrationality (see [2XQuadratic[102X ([14X18.5-4[114X)) together with the corresponding [5XAtlas[105X
  notation (see [CCNPW85]).[133X
  
  [33X[0;0YThis  default  style can be changed by prescribing a record [3Xarec[103X of options,
  which can be given[133X
  
  [31X1[131X   [33X[0;6Yas an optional argument in the call to [2XDisplay[102X ([14X6.3-6[114X),[133X
  
  [31X2[131X   [33X[0;6Yas  the  value of the attribute [2XDisplayOptions[102X ([14X71.13-4[114X) if this value
        is stored in the table,[133X
  
  [31X3[131X   [33X[0;6Yas       the       value       of       the       global      variable
        [10XCharacterTableDisplayDefaults.User[110X, or[133X
  
  [31X4[131X   [33X[0;6Yas       the       value       of       the       global      variable
        [10XCharacterTableDisplayDefaults.Global[110X[133X
  
  [33X[0;0Y(in this order of precedence).[133X
  
  [33X[0;0YThe following components of [3Xarec[103X are supported.[133X
  
  [8X[10Xcentralizers[110X[108X
        [33X[0;6Y[9Xfalse[109X  to  suppress the printing of the orders of the centralizers, or
        the string [10X"ATLAS"[110X to force the printing of non-factorized centralizer
        orders  in  a  style  similar  to  that  used  in  the [5XAtlas[105X of Finite
        Groups [CCNPW85],[133X
  
  [8X[10Xchars[110X[108X
        [33X[0;6Yan  integer  or  a  list  of  integers  to  select  a  sublist  of the
        irreducible characters of [3Xtbl[103X, or a list of characters of [3Xtbl[103X (in this
        case the letter [10X"X"[110X is replaced by [10X"Y"[110X),[133X
  
  [8X[10Xclasses[110X[108X
        [33X[0;6Yan integer or a list of integers to select a sublist of the classes of
        [3Xtbl[103X,[133X
  
  [8X[10Xindicator[110X[108X
        [33X[0;6Y[9Xtrue[109X  enables  the printing of the second Frobenius Schur indicator, a
        list  of integers enables the printing of the corresponding indicators
        (see [2XIndicator[102X ([14X71.12-5[114X)),[133X
  
  [8X[10Xletter[110X[108X
        [33X[0;6Ya  single  capital  letter  (e. g. [10X"P"[110X  for permutation characters) to
        replace the default [10X"X"[110X in character names,[133X
  
  [8X[10Xpowermap[110X[108X
        [33X[0;6Yan  integer  or a list of integers to select a subset of the available
        power  maps,  [9Xfalse[109X  to  suppress  the  printing of power maps, or the
        string  [10X"ATLAS"[110X to force a printing of class names and power maps in a
        style similar to that used in the [5XAtlas[105X of Finite Groups [CCNPW85],[133X
  
  [8X[10XDisplay[110X[108X
        [33X[0;6Ythe  function  that  is actually called in order to display the table;
        the  arguments are the table and the optional record, whose components
        can be used inside the [10XDisplay[110X function,[133X
  
  [8X[10XStringEntry[110X[108X
        [33X[0;6Ya  function  that  takes either a character value or a character value
        and  the  return value of [10XStringEntryData[110X (see below), and returns the
        string  that  is  actually  displayed;  it is called for all character
        values  to  be  displayed, and also for the displayed indicator values
        (see above),[133X
  
  [8X[10XStringEntryData[110X[108X
        [33X[0;6Ya  unary  function  that  is  called once with argument [3Xtbl[103X before the
        character  values  are displayed; it returns an object that is used as
        second argument of the function [10XStringEntry[110X,[133X
  
  [8X[10XLegend[110X[108X
        [33X[0;6Ya  function  that  takes the result of the [10XStringEntryData[110X call as its
        only  argument,  after  the  character  table  has been displayed; the
        return  value  is  a  string  that  describes  the symbols used in the
        displayed  table in a formatted way, it is printed below the displayed
        table.[133X
  
  [1X71.13-4 DisplayOptions[101X
  
  [29X[2XDisplayOptions[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YThere  is  no  default  method  to compute a value, one can set a value with
  [10XSetDisplayOptions[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "A5" );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( tbl );[127X[104X
    [4X[28XA5[128X[104X
    [4X[28X[128X[104X
    [4X[28X     2  2  2  .  .  .[128X[104X
    [4X[28X     3  1  .  1  .  .[128X[104X
    [4X[28X     5  1  .  .  1  1[128X[104X
    [4X[28X[128X[104X
    [4X[28X       1a 2a 3a 5a 5b[128X[104X
    [4X[28X    2P 1a 1a 3a 5b 5a[128X[104X
    [4X[28X    3P 1a 2a 1a 5b 5a[128X[104X
    [4X[28X    5P 1a 2a 3a 1a 1a[128X[104X
    [4X[28X[128X[104X
    [4X[28XX.1     1  1  1  1  1[128X[104X
    [4X[28XX.2     3 -1  .  A *A[128X[104X
    [4X[28XX.3     3 -1  . *A  A[128X[104X
    [4X[28XX.4     4  .  1 -1 -1[128X[104X
    [4X[28XX.5     5  1 -1  .  .[128X[104X
    [4X[28X[128X[104X
    [4X[28XA = -E(5)-E(5)^4[128X[104X
    [4X[28X  = (1-Sqrt(5))/2 = -b5[128X[104X
    [4X[25Xgap>[125X [27XCharacterTableDisplayDefaults.User:= rec([127X[104X
    [4X[25X>[125X [27X       powermap:= "ATLAS", centralizers:= "ATLAS", chars:= false );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( CharacterTable( "A5" ) );[127X[104X
    [4X[28XA5[128X[104X
    [4X[28X[128X[104X
    [4X[28X    60  4  3  5  5[128X[104X
    [4X[28X[128X[104X
    [4X[28X p      A  A  A  A[128X[104X
    [4X[28X p'     A  A  A  A[128X[104X
    [4X[28X    1A 2A 3A 5A B*[128X[104X
    [4X[28X[128X[104X
    [4X[25Xgap>[125X [27Xoptions:= rec( chars:= 4, classes:= [ tbl.3a .. tbl.5a ],[127X[104X
    [4X[25X>[125X [27X                  centralizers:= false, indicator:= true,[127X[104X
    [4X[25X>[125X [27X                  powermap:= [ 2 ] );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( tbl, options );[127X[104X
    [4X[28XA5[128X[104X
    [4X[28X[128X[104X
    [4X[28X          3a 5a[128X[104X
    [4X[28X       2P 3a 5b[128X[104X
    [4X[28X       2[128X[104X
    [4X[28XX.4    +   1 -1[128X[104X
    [4X[25Xgap>[125X [27XSetDisplayOptions( tbl, options );  Display( tbl );[127X[104X
    [4X[28XA5[128X[104X
    [4X[28X[128X[104X
    [4X[28X          3a 5a[128X[104X
    [4X[28X       2P 3a 5b[128X[104X
    [4X[28X       2[128X[104X
    [4X[28XX.4    +   1 -1[128X[104X
    [4X[25Xgap>[125X [27XUnbind( CharacterTableDisplayDefaults.User );[127X[104X
  [4X[32X[104X
  
  [1X71.13-5 PrintCharacterTable[101X
  
  [29X[2XPrintCharacterTable[102X( [3Xtbl[103X, [3Xvarname[103X ) [32X function
  
  [33X[0;0YLet   [3Xtbl[103X   be   a   nearly   character   table,   and   [3Xvarname[103X  a  string.
  [2XPrintCharacterTable[102X   prints   those  values  of  the  supported  attributes
  (see [2XSupportedCharacterTableInfo[102X ([14X71.3-4[114X)) that are known for [3Xtbl[103X.[133X
  
  [33X[0;0YThe  output of [2XPrintCharacterTable[102X is [5XGAP[105X readable; actually reading it into
  [5XGAP[105X  will  bind  the  variable  with  name [3Xvarname[103X to a character table that
  coincides with [3Xtbl[103X for all printed components.[133X
  
  [33X[0;0YThis  is  used  mainly  for  saving  character tables to files. A more human
  readable form is produced by [2XDisplay[102X ([14X6.3-6[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XPrintCharacterTable( CharacterTable( "Cyclic", 2 ), "tbl" );[127X[104X
    [4X[28Xtbl:= function()[128X[104X
    [4X[28Xlocal tbl, i;[128X[104X
    [4X[28Xtbl:=rec();[128X[104X
    [4X[28Xtbl.Irr:=[128X[104X
    [4X[28X[ [ 1, 1 ], [ 1, -1 ] ];[128X[104X
    [4X[28Xtbl.NrConjugacyClasses:=[128X[104X
    [4X[28X2;[128X[104X
    [4X[28Xtbl.Size:=[128X[104X
    [4X[28X2;[128X[104X
    [4X[28Xtbl.OrdersClassRepresentatives:=[128X[104X
    [4X[28X[ 1, 2 ];[128X[104X
    [4X[28Xtbl.SizesCentralizers:=[128X[104X
    [4X[28X[ 2, 2 ];[128X[104X
    [4X[28Xtbl.UnderlyingCharacteristic:=[128X[104X
    [4X[28X0;[128X[104X
    [4X[28Xtbl.ClassParameters:=[128X[104X
    [4X[28X[ [ 1, 0 ], [ 1, 1 ] ];[128X[104X
    [4X[28Xtbl.CharacterParameters:=[128X[104X
    [4X[28X[ [ 1, 0 ], [ 1, 1 ] ];[128X[104X
    [4X[28Xtbl.Identifier:=[128X[104X
    [4X[28X"C2";[128X[104X
    [4X[28Xtbl.InfoText:=[128X[104X
    [4X[28X"computed using generic character table for cyclic groups";[128X[104X
    [4X[28Xtbl.ComputedPowerMaps:=[128X[104X
    [4X[28X[ , [ 1, 1 ] ];[128X[104X
    [4X[28XConvertToLibraryCharacterTableNC(tbl);[128X[104X
    [4X[28Xreturn tbl;[128X[104X
    [4X[28Xend;[128X[104X
    [4X[28Xtbl:= tbl();[128X[104X
  [4X[32X[104X
  
  
  [1X71.14 [33X[0;0YComputing the Irreducible Characters of a Group[133X[101X
  
  [33X[0;0YSeveral algorithms are available for computing the irreducible characters of
  a  finite  group [22XG[122X. The default method for arbitrary finite groups is to use
  the   Dixon-Schneider   algorithm   (see [2XIrrDixonSchneider[102X  ([14X71.14-1[114X)).  For
  supersolvable   groups,   Conlon's  algorithm  can  be  used  (see [2XIrrConlon[102X
  ([14X71.14-2[114X)).  For abelian-by-supersolvable groups, the Baum-Clausen algorithm
  for         computing         the         irreducible        representations
  (see [2XIrreducibleRepresentations[102X  ([14X71.14-4[114X))  can  be  used  to  compute  the
  irreducible characters (see [2XIrrBaumClausen[102X ([14X71.14-3[114X)).[133X
  
  [33X[0;0YThese  functions  are  installed in methods for [2XIrr[102X ([14X71.8-2[114X), but explicitly
  calling one of them will [13Xnot[113X set the [2XIrr[102X ([14X71.8-2[114X) value of [22XG[122X.[133X
  
  [1X71.14-1 IrrDixonSchneider[101X
  
  [29X[2XIrrDixonSchneider[102X( [3XG[103X ) [32X attribute
  
  [33X[0;0Ycomputes  the  irreducible  characters  of  the  finite  group  [3XG[103X, using the
  Dixon-Schneider   method  (see [14X71.16[114X).  It  calls  [2XDixonInit[102X  ([14X71.17-2[114X)  and
  [2XDixonSplit[102X  ([14X71.17-4[114X),  and  finally  returns the list returned by [2XDixontinI[102X
  ([14X71.17-3[114X). See also the sections [14X71.18[114X and [14X71.19[114X.[133X
  
  [1X71.14-2 IrrConlon[101X
  
  [29X[2XIrrConlon[102X( [3XG[103X ) [32X attribute
  
  [33X[0;0YFor  a  finite  solvable  group  [3XG[103X,  [2XIrrConlon[102X  returns  a  list  of certain
  irreducible  characters  of  [3XG[103X,  among  those all irreducibles that have the
  supersolvable  residuum of [3XG[103X in their kernels; so if [3XG[103X is supersolvable, all
  irreducible  characters of [3XG[103X are returned. An error is signalled if [3XG[103X is not
  solvable.[133X
  
  [33X[0;0YThe   characters   are   computed  using  Conlon's  algorithm  (see [Con90a]
  and [Con90b]).  For  each  irreducible  character  in the returned list, the
  monomiality information (see [2XTestMonomial[102X ([14X75.4-1[114X)) is stored.[133X
  
  [1X71.14-3 IrrBaumClausen[101X
  
  [29X[2XIrrBaumClausen[102X( [3XG[103X ) [32X attribute
  
  [33X[0;0Y[2XIrrBaumClausen[102X returns the absolutely irreducible ordinary characters of the
  factor  group  of the finite solvable group [3XG[103X by the derived subgroup of its
  supersolvable residuum.[133X
  
  [33X[0;0YThe  characters  are  computed  using  the  algorithm  by  Baum  and Clausen
  (see [BC94]). An error is signalled if [3XG[103X is not solvable.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xg:= SL(2,3);;[127X[104X
    [4X[25Xgap>[125X [27Xirr1:= IrrDixonSchneider( g );[127X[104X
    [4X[28X[ Character( CharacterTable( SL(2,3) ), [ 1, 1, 1, 1, 1, 1, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [128X[104X
    [4X[28X    [ 1, E(3)^2, E(3), 1, E(3), E(3)^2, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [128X[104X
    [4X[28X    [ 1, E(3), E(3)^2, 1, E(3)^2, E(3), 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [ 2, 1, 1, -2, -1, -1, 0 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [128X[104X
    [4X[28X    [ 2, E(3)^2, E(3), -2, -E(3), -E(3)^2, 0 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [128X[104X
    [4X[28X    [ 2, E(3), E(3)^2, -2, -E(3)^2, -E(3), 0 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [ 3, 0, 0, 3, 0, 0, -1 ] ) ][128X[104X
    [4X[25Xgap>[125X [27Xirr2:= IrrConlon( g );[127X[104X
    [4X[28X[ Character( CharacterTable( SL(2,3) ), [ 1, 1, 1, 1, 1, 1, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [128X[104X
    [4X[28X    [ 1, E(3), E(3)^2, 1, E(3)^2, E(3), 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [128X[104X
    [4X[28X    [ 1, E(3)^2, E(3), 1, E(3), E(3)^2, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [ 3, 0, 0, 3, 0, 0, -1 ] ) ][128X[104X
    [4X[25Xgap>[125X [27Xirr3:= IrrBaumClausen( g );[127X[104X
    [4X[28X[ Character( CharacterTable( SL(2,3) ), [ 1, 1, 1, 1, 1, 1, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [128X[104X
    [4X[28X    [ 1, E(3), E(3)^2, 1, E(3)^2, E(3), 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [128X[104X
    [4X[28X    [ 1, E(3)^2, E(3), 1, E(3), E(3)^2, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(2,3) ), [ 3, 0, 0, 3, 0, 0, -1 ] ) ][128X[104X
    [4X[25Xgap>[125X [27Xchi:= irr2[4];;  HasTestMonomial( chi );[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  [1X71.14-4 IrreducibleRepresentations[101X
  
  [29X[2XIrreducibleRepresentations[102X( [3XG[103X[, [3XF[103X] ) [32X attribute
  
  [33X[0;0YCalled  with  a  finite  group  [3XG[103X  and a field [3XF[103X, [2XIrreducibleRepresentations[102X
  returns  a list of representatives of the irreducible matrix representations
  of [3XG[103X over [3XF[103X, up to equivalence.[133X
  
  [33X[0;0YIf  [3XG[103X is the only argument then [2XIrreducibleRepresentations[102X returns a list of
  representatives  of the absolutely irreducible complex representations of [3XG[103X,
  up to equivalence.[133X
  
  [33X[0;0YAt  the  moment,  methods  are  available  for  the following cases: If [3XG[103X is
  abelian by supersolvable the method of [BC94] is used.[133X
  
  [33X[0;0YOtherwise,  if  [3XF[103X and [3XG[103X are both finite, the regular module of [3XG[103X is split by
  MeatAxe methods which can make this an expensive operation.[133X
  
  [33X[0;0YFinally,  if [3XF[103X is not given (i.e. it defaults to the cyclotomic numbers) and
  [3XG[103X     is     a    finite    group,    the    method    of    [Dix93]    (see
  [2XIrreducibleRepresentationsDixon[102X ([14X71.14-5[114X)) is used.[133X
  
  [33X[0;0YFor other cases no methods are implemented yet.[133X
  
  [33X[0;0YThe  representations  obtained  are  [13Xnot[113X  guaranteed to be [21Xnice[121X (for example
  preserving a unitary form) in any way.[133X
  
  [33X[0;0YSee  also [2XIrreducibleModules[102X ([14X71.15-1[114X), which provides efficient methods for
  solvable groups.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xg:= AlternatingGroup( 4 );;[127X[104X
    [4X[25Xgap>[125X [27Xrepr:= IrreducibleRepresentations( g );[127X[104X
    [4X[28X[ Pcgs([ (2,4,3), (1,3)(2,4), (1,2)(3,4) ]) -> [128X[104X
    [4X[28X    [ [ [ 1 ] ], [ [ 1 ] ], [ [ 1 ] ] ], [128X[104X
    [4X[28X  Pcgs([ (2,4,3), (1,3)(2,4), (1,2)(3,4) ]) -> [128X[104X
    [4X[28X    [ [ [ E(3) ] ], [ [ 1 ] ], [ [ 1 ] ] ], [128X[104X
    [4X[28X  Pcgs([ (2,4,3), (1,3)(2,4), (1,2)(3,4) ]) -> [128X[104X
    [4X[28X    [ [ [ E(3)^2 ] ], [ [ 1 ] ], [ [ 1 ] ] ], [128X[104X
    [4X[28X  Pcgs([ (2,4,3), (1,3)(2,4), (1,2)(3,4) ]) -> [128X[104X
    [4X[28X    [ [ [ 0, 0, 1 ], [ 1, 0, 0 ], [ 0, 1, 0 ] ], [128X[104X
    [4X[28X      [ [ -1, 0, 0 ], [ 0, 1, 0 ], [ 0, 0, -1 ] ], [128X[104X
    [4X[28X      [ [ 1, 0, 0 ], [ 0, -1, 0 ], [ 0, 0, -1 ] ] ] ][128X[104X
    [4X[25Xgap>[125X [27XForAll( repr, IsGroupHomomorphism );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XLength( repr );[127X[104X
    [4X[28X4[128X[104X
    [4X[25Xgap>[125X [27Xgens:= GeneratorsOfGroup( g );[127X[104X
    [4X[28X[ (1,2,3), (2,3,4) ][128X[104X
    [4X[25Xgap>[125X [27XList( gens, x -> x^repr[1] );[127X[104X
    [4X[28X[ [ [ 1 ] ], [ [ 1 ] ] ][128X[104X
    [4X[25Xgap>[125X [27X List( gens, x -> x^repr[4] );[127X[104X
    [4X[28X[ [ [ 0, 0, -1 ], [ 1, 0, 0 ], [ 0, -1, 0 ] ], [128X[104X
    [4X[28X  [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ][128X[104X
  [4X[32X[104X
  
  [1X71.14-5 IrreducibleRepresentationsDixon[101X
  
  [29X[2XIrreducibleRepresentationsDixon[102X( [3XG[103X[, [3Xchi[103X] ) [32X function
  
  [33X[0;0YCalled   with  one  argument,  a  group  [3XG[103X,  [2XIrreducibleRepresentationsDixon[102X
  computes  (representatives  of)  all irreducible complex representations for
  the  finite  group  [3XG[103X,  using  the  method  of [Dix93],  which  computes the
  character table and computes the representation as constituent of an induced
  monomial representation of a subgroup.[133X
  
  [33X[0;0YThis  method  can be quite expensive for larger groups, for example it might
  involve calculation of the subgroup lattice of [3XG[103X.[133X
  
  [33X[0;0YA  character [3Xchi[103X of [3XG[103X can be given as the second argument, in this case only
  a representation affording [3Xchi[103X is returned.[133X
  
  [33X[0;0YThe second argument can also be a list of characters of [3XG[103X, in this case only
  representations for characters in this list are computed.[133X
  
  [33X[0;0YNote  that this method might fail if for an irreducible representation there
  is  no  subgroup  in  which  its  reduction  has  a  linear constituent with
  multiplicity one.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xa5:= AlternatingGroup( 5 );[127X[104X
    [4X[28XAlt( [ 1 .. 5 ] )[128X[104X
    [4X[25Xgap>[125X [27Xchar:= First( Irr( a5 ), x -> x[1] = 4 );[127X[104X
    [4X[28XCharacter( CharacterTable( Alt( [ 1 .. 5 ] ) ), [ 4, 0, 1, -1, -1 ] )[128X[104X
    [4X[25Xgap>[125X [27Xhom:=IrreducibleRepresentationsDixon( a5, char );;[127X[104X
    [4X[25Xgap>[125X [27XOrder( a5.1*a5.2 ) = Order( Image( hom, a5.1 )*Image( hom, a5.2 ) );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27Xreps:= List( ConjugacyClasses( a5 ), Representative );;[127X[104X
    [4X[25Xgap>[125X [27XList( reps, g -> TraceMat( Image( hom, g ) ) );[127X[104X
    [4X[28X[ 4, 0, 1, -1, -1 ][128X[104X
  [4X[32X[104X
  
  
  [1X71.15 [33X[0;0YRepresentations Given by Modules[133X[101X
  
  [33X[0;0YThis  section  describes  functions  that  return certain modules of a given
  group.  (Extensions  by  modules  can  be  formed  by the command [2XExtensions[102X
  ([14X46.8-4[114X).)[133X
  
  [1X71.15-1 IrreducibleModules[101X
  
  [29X[2XIrreducibleModules[102X( [3XG[103X, [3XF[103X, [3Xdim[103X ) [32X operation
  
  [33X[0;0Yreturns a list of length 2. The first entry is a generating system of [3XG[103X. The
  second  entry  is a list of all irreducible modules of [3XG[103X over the field [3XF[103X in
  dimension [3Xdim[103X, given as MeatAxe modules (see [2XGModuleByMats[102X ([14X69.1-1[114X)).[133X
  
  [1X71.15-2 AbsolutelyIrreducibleModules[101X
  
  [29X[2XAbsolutelyIrreducibleModules[102X( [3XG[103X, [3XF[103X, [3Xdim[103X ) [32X operation
  [29X[2XAbsoluteIrreducibleModules[102X( [3XG[103X, [3XF[103X, [3Xdim[103X ) [32X operation
  [29X[2XAbsolutIrreducibleModules[102X( [3XG[103X, [3XF[103X, [3Xdim[103X ) [32X operation
  
  [33X[0;0Yreturns a list of length 2. The first entry is a generating system of [3XG[103X. The
  second  entry  is  a  list of all absolute irreducible modules of [3XG[103X over the
  field  [3XF[103X  in  dimension  [3Xdim[103X,  given  as  MeatAxe modules (see [2XGModuleByMats[102X
  ([14X69.1-1[114X)). The other two names are just synonyms.[133X
  
  [1X71.15-3 RegularModule[101X
  
  [29X[2XRegularModule[102X( [3XG[103X, [3XF[103X ) [32X operation
  
  [33X[0;0Yreturns a list of length 2. The first entry is a generating system of [3XG[103X. The
  second  entry  is  the regular module of [3XG[103X over [3XF[103X, given as a MeatAxe module
  (see [2XGModuleByMats[102X ([14X69.1-1[114X)).[133X
  
  
  [1X71.16 [33X[0;0YThe Dixon-Schneider Algorithm[133X[101X
  
  [33X[0;0YThe  [5XGAP[105X  library  implementation  of  the  Dixon-Schneider  algorithm first
  computes  the  linear  characters,  using  the  commutator  factor group. If
  irreducible  characters  are missing afterwards, they are computed using the
  techniques described in [Dix67], [Sch90] and [Hul93].[133X
  
  [33X[0;0YCalled  with  a  group  [22XG[122X,  the  function  [2XCharacterTable[102X ([14X71.3-1[114X) returns a
  character  table  object  that  stores  already  information  such  as class
  lengths,  but  not the irreducible characters. The routines that compute the
  irreducibles may use the information that is already contained in this table
  object.  In  particular  the  ordering of classes in the computed characters
  coincides  with  the  ordering  of  classes  in  the  character  table  of [3XG[103X
  (see [14X71.6[114X). Thus it is possible to combine computations using the group with
  character  theoretic  computations  (see [14X71.17[114X for details), for example one
  can  enter  known  characters.  Note  that  the  user is responsible for the
  correctness of the characters. (There is little use in providing the trivial
  character to the routine.)[133X
  
  [33X[0;0YThe  computation  of irreducible characters from the group needs to identify
  the  classes  of  group elements very often, so it can be helpful to store a
  class  list  of  all  group elements. Since this is obviously limited by the
  group  order,  it  is  controlled  by  the  global  function  [2XIsDxLargeGroup[102X
  ([14X71.17-8[114X).[133X
  
  [33X[0;0YThe  routines  compute in a prime field of size [22Xp[122X, such that the exponent of
  the  group  divides  [22X(p-1)[122X  and  such  that [22X2 sqrt{|G|} < p[122X. Currently prime
  fields  of  size smaller than [22X65536[122X are handled more efficiently than larger
  prime  fields,  so  the  runtime of the character calculation depends on how
  large the chosen prime is.[133X
  
  [33X[0;0YThe  routine  stores a Dixon record (see [2XDixonRecord[102X ([14X71.17-1[114X)) in the group
  that     helps    routines    that    identify    classes,    for    example
  [2XFusionConjugacyClasses[102X ([14X73.3-1[114X), to work much faster. Note that interrupting
  Dixon-Schneider  calculations  will  prevent  [5XGAP[105X from cleaning up the Dixon
  record; when the computation by [2XIrrDixonSchneider[102X ([14X71.14-1[114X) is complete, the
  possibly large record is shrunk to an acceptable size.[133X
  
  
  [1X71.17 [33X[0;0YAdvanced Methods for Dixon-Schneider Calculations[133X[101X
  
  [33X[0;0YThe  computation  of  irreducible  characters  of very large groups may take
  quite  some  time.  On the other hand, for the expert only a few irreducible
  characters  may  be  needed,  since  the  other  ones  can be computed using
  character  theoretic  methods such as tensoring, induction, and restriction.
  Thus  [5XGAP[105X  provides  also  step-by-step routines for doing the calculations.
  These  routines  allow one to compute some characters and to stop before all
  are  calculated.  Note  that  there  is  no  [21Xsafety net[121X: The routines (being
  somehow  internal) do no error checking, and assume the information given is
  correct.[133X
  
  [33X[0;0YWhen  the info level of [2XInfoCharacterTable[102X ([14X71.4-2[114X) if positive, information
  about the progress of splitting is printed. (The default value is zero.)[133X
  
  [1X71.17-1 DixonRecord[101X
  
  [29X[2XDixonRecord[102X( [3XG[103X ) [32X attribute
  
  [33X[0;0YThe  [2XDixonRecord[102X  of  a  group  contains information used by the routines to
  compute   the   irreducible  characters  and  related  information  via  the
  Dixon-Schneider  algorithm  such  as  class arrangement and character spaces
  split  obtained  so  far.  Usually  this record is passed as argument to all
  subfunctions   to   avoid   a   long  argument  list.  It  has  a  component
  [10XconjugacyClasses[110X  which  contains  the classes of [3XG[103X [13Xordered as the algorithm
  needs them[113X.[133X
  
  [1X71.17-2 DixonInit[101X
  
  [29X[2XDixonInit[102X( [3XG[103X ) [32X function
  
  [33X[0;0YThis   function   does  all  the  initializations  for  the  Dixon-Schneider
  algorithm.  This  includes  calculation  of  conjugacy  classes, power maps,
  linear   characters   and   character   morphisms.   It   returns  a  record
  (see [2XDixonRecord[102X  ([14X71.17-1[114X)  and  Section  [14X71.18[114X)  that  can  be  used  when
  calculating the irreducible characters of [3XG[103X interactively.[133X
  
  [1X71.17-3 DixontinI[101X
  
  [29X[2XDixontinI[102X( [3XD[103X ) [32X function
  
  [33X[0;0YThis  function  ends  a Dixon-Schneider calculation. It sorts the characters
  according  to the degree and unbinds components in the Dixon record that are
  not of use any longer. It returns a list of irreducible characters.[133X
  
  [1X71.17-4 DixonSplit[101X
  
  [29X[2XDixonSplit[102X( [3XD[103X ) [32X function
  
  [33X[0;0YThis  function performs one splitting step in the Dixon-Schneider algorithm.
  It  selects  a  class,  computes  the (partial) class sum matrix, uses it to
  split  character  spaces  and stores all the irreducible characters obtained
  that way.[133X
  
  [33X[0;0YThe  class  to use for splitting is chosen via [2XBestSplittingMatrix[102X ([14X71.17-5[114X)
  and the options described for this function apply here.[133X
  
  [33X[0;0Y[2XDixonSplit[102X returns [9Xtrue[109X if a split was performed, and [9Xfail[109X otherwise.[133X
  
  [1X71.17-5 BestSplittingMatrix[101X
  
  [29X[2XBestSplittingMatrix[102X( [3XD[103X ) [32X function
  
  [33X[0;0Yreturns the number of the class sum matrix that is assumed to yield the best
  (cost/earning  ration) split. This matrix then will be the next one computed
  and used.[133X
  
  [33X[0;0YThe   global   option  [10Xmaxclasslen[110X  (defaulting  to  [2Xinfinity[102X  ([14X18.2-1[114X))  is
  recognized  by  [2XBestSplittingMatrix[102X: Only classes whose length is limited by
  the  value  of  this  option  will be considered for splitting. If no usable
  class remains, [9Xfail[109X is returned.[133X
  
  [1X71.17-6 DxIncludeIrreducibles[101X
  
  [29X[2XDxIncludeIrreducibles[102X( [3XD[103X, [3Xnew[103X[, [3Xnewmod[103X] ) [32X function
  
  [33X[0;0YThis  function  takes  a list of irreducible characters [3Xnew[103X, each given as a
  list of values (corresponding to the class arrangement in [3XD[103X), and adds these
  to a partial computed list of irreducibles as maintained by the Dixon record
  [3XD[103X. This permits one to add characters in interactive use obtained from other
  sources  and  to continue the Dixon-Schneider calculation afterwards. If the
  optional  argument [3Xnewmod[103X is given, it must be a list of reduced characters,
  corresponding  to  [3Xnew[103X. (Otherwise the function has to reduce the characters
  itself.)[133X
  
  [33X[0;0YThe   function  closes  the  new  characters  under  the  action  of  Galois
  automorphisms and tensor products with linear characters.[133X
  
  [1X71.17-7 SplitCharacters[101X
  
  [29X[2XSplitCharacters[102X( [3XD[103X, [3Xlist[103X ) [32X function
  
  [33X[0;0YThis  routine  decomposes  the  characters  given  in  [3Xlist[103X according to the
  character  spaces found up to this point. By applying this routine to tensor
  products  etc.,  it  may  result  in  characters  with  smaller  norm,  even
  irreducible  ones. Since the recalculation of characters is only possible if
  the  degree  is  small  enough,  the  splitting  process  is applied only to
  characters of sufficiently small degree.[133X
  
  [1X71.17-8 IsDxLargeGroup[101X
  
  [29X[2XIsDxLargeGroup[102X( [3XG[103X ) [32X function
  
  [33X[0;0Yreturns  [9Xtrue[109X  if the order of the group [3XG[103X is smaller than the current value
  of   the   global   variable  [10XDXLARGEGROUPORDER[110X,  and  [9Xfalse[109X  otherwise.  In
  Dixon-Schneider  calculations,  for  small groups in the above sense a class
  map  is  stored,  whereas  for  large  groups,  each  occurring  element  is
  identified individually.[133X
  
  
  [1X71.18 [33X[0;0YComponents of a Dixon Record[133X[101X
  
  [33X[0;0YThe   [21XDixon  record[121X  [3XD[103X  returned  by  [2XDixonInit[102X  ([14X71.17-2[114X)  stores  all  the
  information that is used by the Dixon-Schneider routines while computing the
  irreducible  characters  of a group. Some entries, however, may be useful to
  know about when using the algorithm interactively, see [14X71.19[114X.[133X
  
  [8X[10Xgroup[110X[108X
        [33X[0;6Ythe group [22XG[122X of which the character table is to be computed,[133X
  
  [8X[10XconjugacyClasses[110X[108X
        [33X[0;6Yclasses  of [22XG[122X (all characters stored in the Dixon record correspond to
        this arrangement of classes),[133X
  
  [8X[10Xirreducibles[110X[108X
        [33X[0;6Ythe  already  known  irreducible  characters  (given as lists of their
        values on the conjugacy classes),[133X
  
  [8X[10XcharacterTable[110X[108X
        [33X[0;6Ythe  [2XCharacterTable[102X  ([14X71.3-1[114X) value of [22XG[122X (whose irreducible characters
        are not yet known),[133X
  
  [8X[10XClassElement( [3XD[103X[10X, [3Xel[103X[10X )[110X[108X
        [33X[0;6Ya function that returns the number of the class of [22XG[122X that contains the
        element [3Xel[103X.[133X
  
  
  [1X71.19 [33X[0;0YAn Example of Advanced Dixon-Schneider Calculations[133X[101X
  
  [33X[0;0YFirst, we set the appropriate info level higher.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XSetInfoLevel( InfoCharacterTable, 1 );[127X[104X
  [4X[32X[104X
  
  [33X[0;0Yfor  printout  of  some  internal results. We now define our group, which is
  isomorphic to PSL[22X_4(3)[122X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xg:= PrimitiveGroup(40,5);[127X[104X
    [4X[28XPSL(4, 3)[128X[104X
    [4X[25Xgap>[125X [27XSize(g);[127X[104X
    [4X[28X6065280[128X[104X
    [4X[25Xgap>[125X [27Xd:= DixonInit( g );;[127X[104X
    [4X[28X#I  29 classes[128X[104X
    [4X[28X#I  choosing prime 65521[128X[104X
    [4X[25Xgap>[125X [27Xc:= d.characterTable;;[127X[104X
  [4X[32X[104X
  
  [33X[0;0YAfter  the  initialisation,  one  structure  matrix  is  evaluated, yielding
  smaller spaces and several irreducible characters.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XDixonSplit( d );[127X[104X
    [4X[28X#I  Matrix 9,Representative of Order 3,Centralizer: 5832[128X[104X
    [4X[28X#I  Dimensions: [ 1, 2, 1, 4, 12, 1, 1, 2, 1, 2, 1 ][128X[104X
    [4X[28X#I  Two-dim space split[128X[104X
    [4X[28X#I  Two-dim space split[128X[104X
    [4X[28X#I  Two-dim space split[128X[104X
    [4X[28X9[128X[104X
  [4X[32X[104X
  
  [33X[0;0YIn  this  case spaces of the listed dimensions are a result of the splitting
  process.  The  three  two  dimensional  spaces  are  split  successfully  by
  combinatoric means.[133X
  
  [33X[0;0YWe  obtain several irreducible characters by tensor products and notify them
  to the Dixon record.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xasp:= AntiSymmetricParts( c, d.irreducibles, 2 );;[127X[104X
    [4X[25Xgap>[125X [27Xro:= ReducedCharacters( c, d.irreducibles, asp );;[127X[104X
    [4X[25Xgap>[125X [27XLength( ro.irreducibles );[127X[104X
    [4X[28X3[128X[104X
    [4X[25Xgap>[125X [27XDxIncludeIrreducibles( d, ro.irreducibles );[127X[104X
  [4X[32X[104X
  
  [33X[0;0YThe tensor products of the nonlinear characters among each other are reduced
  with the irreducible characters. The result is split according to the spaces
  found, which yields characters of smaller norms, but no new irreducibles.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xnlc:= Filtered( d.irreducibles, i -> i[1] > 1 );;[127X[104X
    [4X[25Xgap>[125X [27Xt:= Tensored( nlc, nlc );;[127X[104X
    [4X[25Xgap>[125X [27Xro:= ReducedCharacters( c, d.irreducibles, t );;  ro.irreducibles;[127X[104X
    [4X[28X[  ][128X[104X
    [4X[25Xgap>[125X [27XList( ro.remainders, i -> ScalarProduct( c, i, i) );[127X[104X
    [4X[28X[ 2, 2, 4, 4, 4, 4, 13, 13, 18, 18, 19, 21, 21, 36, 36, 29, 34, 34, [128X[104X
    [4X[28X  42, 34, 48, 54, 62, 68, 68, 78, 84, 84, 88, 90, 159, 169, 169, 172, [128X[104X
    [4X[28X  172, 266, 271, 271, 268, 274, 274, 280, 328, 373, 373, 456, 532, [128X[104X
    [4X[28X  576, 679, 683, 683, 754, 768, 768, 890, 912, 962, 1453, 1453, 1601, [128X[104X
    [4X[28X  1601, 1728, 1739, 1739, 1802, 2058, 2379, 2414, 2543, 2744, 2744, [128X[104X
    [4X[28X  2920, 3078, 3078, 4275, 4275, 4494, 4760, 5112, 5115, 5115, 5414, [128X[104X
    [4X[28X  6080, 6318, 7100, 7369, 7369, 7798, 8644, 10392, 12373, 12922, [128X[104X
    [4X[28X  14122, 14122, 18948, 21886, 24641, 24641, 25056, 38942, 44950, [128X[104X
    [4X[28X  78778 ][128X[104X
    [4X[25Xgap>[125X [27Xt:= SplitCharacters( d, ro.remainders );;[127X[104X
    [4X[25Xgap>[125X [27XList( t, i -> ScalarProduct( c, i, i ) );[127X[104X
    [4X[28X[ 2, 2, 4, 2, 2, 4, 4, 3, 6, 5, 5, 9, 9, 4, 12, 13, 18, 18, 20, 18, [128X[104X
    [4X[28X  20, 24, 26, 32, 32, 16, 42, 59, 69, 69, 72, 72, 36, 72, 78, 78, 84, [128X[104X
    [4X[28X  122, 117, 127, 117, 127, 64, 132, 100, 144, 196, 256, 456, 532, [128X[104X
    [4X[28X  576, 679, 683, 683, 754, 768, 768, 890, 912, 962, 1453, 1453, 1601, [128X[104X
    [4X[28X  1601, 1728, 1739, 1739, 1802, 2058, 2379, 2414, 2543, 2744, 2744, [128X[104X
    [4X[28X  2920, 3078, 3078, 4275, 4275, 4494, 4760, 5112, 5115, 5115, 5414, [128X[104X
    [4X[28X  6080, 6318, 7100, 7369, 7369, 7798, 8644, 10392, 12373, 12922, [128X[104X
    [4X[28X  14122, 14122, 18948, 21886, 24641, 24641, 25056, 38942, 44950, [128X[104X
    [4X[28X  78778 ][128X[104X
  [4X[32X[104X
  
  [33X[0;0YFinally  we  calculate  the characters induced from all cyclic subgroups and
  obtain the missing irreducibles by applying the LLL-algorithm to them.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xic:= InducedCyclic( c, "all" );;[127X[104X
    [4X[25Xgap>[125X [27Xro:= ReducedCharacters( c, d.irreducibles, ic );;[127X[104X
    [4X[25Xgap>[125X [27XLength( ro.irreducibles );[127X[104X
    [4X[28X0[128X[104X
    [4X[25Xgap>[125X [27Xl:= LLL( c, ro.remainders );;[127X[104X
    [4X[25Xgap>[125X [27XLength( l.irreducibles );[127X[104X
    [4X[28X13[128X[104X
  [4X[32X[104X
  
  [33X[0;0YThe  LLL  returns  class  function  objects  (see Chapter [14X72[114X), and the Dixon
  record  works  with  character values lists. So we convert them to a list of
  values before feeding them in the machinery of the Dixon-algorithm.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xl.irreducibles[1];[127X[104X
    [4X[28XCharacter( CharacterTable( PSL(4, 3) ), [128X[104X
    [4X[28X[ 640, E(13)^7+E(13)^8+E(13)^11, E(13)^4+E(13)^10+E(13)^12, [128X[104X
    [4X[28X  E(13)^2+E(13)^5+E(13)^6, E(13)+E(13)^3+E(13)^9, 0, -8, 0, -8, 0, 0, [128X[104X
    [4X[28X  0, 0, 0, -8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1 ] )[128X[104X
    [4X[25Xgap>[125X [27Xl:=List(l.irreducibles,ValuesOfClassFunction);;[127X[104X
    [4X[25Xgap>[125X [27XDxIncludeIrreducibles( d, l );[127X[104X
    [4X[25Xgap>[125X [27XLength( d.irreducibles );[127X[104X
    [4X[28X29[128X[104X
    [4X[25Xgap>[125X [27XLength( d.classes );[127X[104X
    [4X[28X29[128X[104X
  [4X[32X[104X
  
  [33X[0;0YIt  turns out we have found all irreducible characters. As the last step, we
  obtain  the  irreducible  characters  and tell them to the group. This makes
  them available also to the character table.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xirrs:= DixontinI( d );;[127X[104X
    [4X[28X#I  Total:1 matrices,[ 9 ][128X[104X
    [4X[25Xgap>[125X [27XSetIrr(g,irrs);[127X[104X
    [4X[25Xgap>[125X [27XLength(Irr(c));[127X[104X
    [4X[28X29[128X[104X
    [4X[25Xgap>[125X [27XSetInfoLevel( InfoCharacterTable, 0 );[127X[104X
  [4X[32X[104X
  
  
  [1X71.20 [33X[0;0YConstructing Character Tables from Others[133X[101X
  
  [33X[0;0YThe  following  operations  take  one or more character table arguments, and
  return  a  character  table.  This holds also for [2XBrauerTable[102X ([14X71.3-2[114X). note
  that  the  return value of [2XBrauerTable[102X ([14X71.3-2[114X) will in general not know the
  irreducible  Brauer  characters,  and  [5XGAP[105X  might be unable to compute these
  characters.[133X
  
  [33X[0;0Y[13XNote[113X  that  whenever  fusions between input and output tables occur in these
  operations,   they   are   stored   on   the   concerned   tables,  and  the
  [2XNamesOfFusionSources[102X ([14X73.3-5[114X) values are updated.[133X
  
  [33X[0;0Y(The  interactive construction of character tables using character theoretic
  methods  and  incomplete  tables is not described here.) [13XCurrently it is not
  supported  and  will  be  described  in a chapter of its own when it becomes
  available[113X.[133X
  
  [1X71.20-1 CharacterTableDirectProduct[101X
  
  [29X[2XCharacterTableDirectProduct[102X( [3Xtbl1[103X, [3Xtbl2[103X ) [32X operation
  
  [33X[0;0Yis the table of the direct product of the character tables [3Xtbl1[103X and [3Xtbl2[103X.[133X
  
  [33X[0;0YThe   matrix  of  irreducibles  of  this  table  is  the  Kronecker  product
  (see [2XKroneckerProduct[102X ([14X24.5-8[114X)) of the irreducibles of [3Xtbl1[103X and [3Xtbl2[103X.[133X
  
  [33X[0;0YProducts of ordinary and Brauer character tables are supported.[133X
  
  [33X[0;0YIn  general,  the result will not know an underlying group, so missing power
  maps (for prime divisors of the result) and irreducibles of the input tables
  may be computed in order to construct the table of the direct product.[133X
  
  [33X[0;0YThe  embeddings of the input tables into the direct product are stored, they
  can be fetched with [2XGetFusionMap[102X ([14X73.3-3[114X); if [3Xtbl1[103X is equal to [3Xtbl2[103X then the
  two  embeddings  are distinguished by their [10Xspecification[110X components [10X"1"[110X and
  [10X"2"[110X, respectively.[133X
  
  [33X[0;0YAnalogously,  the  projections from the direct product onto the input tables
  are stored, and can be distinguished by the [10Xspecification[110X components.[133X
  
  [33X[0;0YThe  attribute  [2XFactorsOfDirectProduct[102X  ([14X71.20-2[114X)  is  set  to  the lists of
  arguments.[133X
  
  [33X[0;0YThe   [10X*[110X   operator   for   two  character  tables  (see [14X71.7[114X)  delegates  to
  [2XCharacterTableDirectProduct[102X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xc2:= CharacterTable( "Cyclic", 2 );;[127X[104X
    [4X[25Xgap>[125X [27Xs3:= CharacterTable( "Symmetric", 3 );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( CharacterTableDirectProduct( c2, s3 ) );[127X[104X
    [4X[28XC2xSym(3)[128X[104X
    [4X[28X[128X[104X
    [4X[28X     2  2  2  1  2  2  1[128X[104X
    [4X[28X     3  1  .  1  1  .  1[128X[104X
    [4X[28X[128X[104X
    [4X[28X       1a 2a 3a 2b 2c 6a[128X[104X
    [4X[28X    2P 1a 1a 3a 1a 1a 3a[128X[104X
    [4X[28X    3P 1a 2a 1a 2b 2c 2b[128X[104X
    [4X[28X[128X[104X
    [4X[28XX.1     1 -1  1  1 -1  1[128X[104X
    [4X[28XX.2     2  . -1  2  . -1[128X[104X
    [4X[28XX.3     1  1  1  1  1  1[128X[104X
    [4X[28XX.4     1 -1  1 -1  1 -1[128X[104X
    [4X[28XX.5     2  . -1 -2  .  1[128X[104X
    [4X[28XX.6     1  1  1 -1 -1 -1[128X[104X
  [4X[32X[104X
  
  [1X71.20-2 FactorsOfDirectProduct[101X
  
  [29X[2XFactorsOfDirectProduct[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YFor   an   ordinary   character   table   that   has  been  constructed  via
  [2XCharacterTableDirectProduct[102X  ([14X71.20-1[114X),  the value of [2XFactorsOfDirectProduct[102X
  is the list of arguments in the [2XCharacterTableDirectProduct[102X ([14X71.20-1[114X) call.[133X
  
  [33X[0;0YNote   that   there  is  no  default  method  for  [13Xcomputing[113X  the  value  of
  [2XFactorsOfDirectProduct[102X.[133X
  
  [1X71.20-3 CharacterTableFactorGroup[101X
  
  [29X[2XCharacterTableFactorGroup[102X( [3Xtbl[103X, [3Xclasses[103X ) [32X operation
  
  [33X[0;0Yis  the  character table of the factor group of the ordinary character table
  [3Xtbl[103X  by  the  normal closure of the classes whose positions are contained in
  the list [3Xclasses[103X.[133X
  
  [33X[0;0YThe  [10X/[110X  operator  for  a  character  table  and  a  list  of class positions
  (see [14X71.7[114X) delegates to [2XCharacterTableFactorGroup[102X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xs4:= CharacterTable( "Symmetric", 4 );;[127X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfNormalSubgroups( s4 );[127X[104X
    [4X[28X[ [ 1 ], [ 1, 3 ], [ 1, 3, 4 ], [ 1 .. 5 ] ][128X[104X
    [4X[25Xgap>[125X [27Xf:= CharacterTableFactorGroup( s4, [ 3 ] );[127X[104X
    [4X[28XCharacterTable( "Sym(4)/[ 1, 3 ]" )[128X[104X
    [4X[25Xgap>[125X [27XDisplay( f );[127X[104X
    [4X[28XSym(4)/[ 1, 3 ][128X[104X
    [4X[28X[128X[104X
    [4X[28X     2  1  1  .[128X[104X
    [4X[28X     3  1  .  1[128X[104X
    [4X[28X[128X[104X
    [4X[28X       1a 2a 3a[128X[104X
    [4X[28X    2P 1a 1a 3a[128X[104X
    [4X[28X    3P 1a 2a 1a[128X[104X
    [4X[28X[128X[104X
    [4X[28XX.1     1 -1  1[128X[104X
    [4X[28XX.2     2  . -1[128X[104X
    [4X[28XX.3     1  1  1[128X[104X
  [4X[32X[104X
  
  [1X71.20-4 CharacterTableIsoclinic[101X
  
  [29X[2XCharacterTableIsoclinic[102X( [3Xtbl[103X[, [3Xclasses[103X][, [3Xcentre[103X] ) [32X operation
  [29X[2XSourceOfIsoclinicTable[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YIf  [3Xtbl[103X  is  the  (ordinary  or modular) character table of a group with the
  structure  [22X2.G.2[122X  with  a  central  subgroup  [22XZ[122X of order [22X2[122X or [22X4[122X and a normal
  subgroup  [22XN[122X  of index [22X2[122X that contains [22XZ[122X then [2XCharacterTableIsoclinic[102X returns
  the  table of the isoclinic group in the sense of the [5XAtlas[105X of Finite Groups
  [CCNPW85,  Chapter  6,  Section 7]. If [22XN[122X is not uniquely determined then the
  positions  of the classes forming [22XN[122X must be entered as list [3Xclasses[103X. If [22XZ[122X is
  not  unique  inside [22XN[122X then the positions of the classes in [22XZ[122X must be entered
  as list [3Xcentre[103X; If [22XZ[122X has order [22X2[122X then [3Xcentre[103X can be also the position of the
  involution in [22XZ[122X.[133X
  
  [33X[0;0YNote that also if [3Xtbl[103X is a Brauer table then [3Xclasses[103X and [3Xcentre[103X denote class
  numbers w.r.t. the [13Xordinary[113X character table.[133X
  
  [33X[0;0YFor   an   ordinary   character   table   that   has  been  constructed  via
  [2XCharacterTableIsoclinic[102X,  the value of [2XSourceOfIsoclinicTable[102X is the list of
  three arguments in the [2XCharacterTableIsoclinic[102X call.[133X
  
  [33X[0;0YNote   that   there  is  no  default  method  for  [13Xcomputing[113X  the  value  of
  [2XSourceOfIsoclinicTable[102X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xd8:= CharacterTable( "Dihedral", 8 );[127X[104X
    [4X[28XCharacterTable( "Dihedral(8)" )[128X[104X
    [4X[25Xgap>[125X [27Xnsg:= ClassPositionsOfNormalSubgroups( d8 );[127X[104X
    [4X[28X[ [ 1 ], [ 1, 3 ], [ 1 .. 3 ], [ 1, 3, 4 ], [ 1, 3 .. 5 ], [ 1 .. 5 ] [128X[104X
    [4X[28X ][128X[104X
    [4X[25Xgap>[125X [27Xiso:= CharacterTableIsoclinic( d8, nsg[3] );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( iso );[127X[104X
    [4X[28XIsoclinic(Dihedral(8))[128X[104X
    [4X[28X[128X[104X
    [4X[28X     2  3  2  3  2  2[128X[104X
    [4X[28X[128X[104X
    [4X[28X       1a 4a 2a 4b 4c[128X[104X
    [4X[28X    2P 1a 2a 1a 2a 2a[128X[104X
    [4X[28X[128X[104X
    [4X[28XX.1     1  1  1  1  1[128X[104X
    [4X[28XX.2     1  1  1 -1 -1[128X[104X
    [4X[28XX.3     1 -1  1  1 -1[128X[104X
    [4X[28XX.4     1 -1  1 -1  1[128X[104X
    [4X[28XX.5     2  . -2  .  .[128X[104X
    [4X[25Xgap>[125X [27XSourceOfIsoclinicTable( iso );[127X[104X
    [4X[28X[ CharacterTable( "Dihedral(8)" ), [ 1, 2, 3 ], [ 3 ], 3 ][128X[104X
  [4X[32X[104X
  
  [1X71.20-5 CharacterTableWreathSymmetric[101X
  
  [29X[2XCharacterTableWreathSymmetric[102X( [3Xtbl[103X, [3Xn[103X ) [32X function
  
  [33X[0;0Yreturns the character table of the wreath product of a group [22XG[122X with the full
  symmetric group on [3Xn[103X points, where [3Xtbl[103X is the character table of [22XG[122X.[133X
  
  [33X[0;0YThe  result  has values for [2XClassParameters[102X ([14X71.9-7[114X) and [2XCharacterParameters[102X
  ([14X71.9-7[114X)  stored,  the  entries  in these lists are sequences of partitions.
  Note  that  this parametrization prevents the principal character from being
  the first one in the list of irreducibles.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xc3:= CharacterTable( "Cyclic", 3 );;[127X[104X
    [4X[25Xgap>[125X [27Xwr:= CharacterTableWreathSymmetric( c3, 2 );;[127X[104X
    [4X[25Xgap>[125X [27XDisplay( wr );[127X[104X
    [4X[28XC3wrS2[128X[104X
    [4X[28X[128X[104X
    [4X[28X     2  1   .   .   1  .   1  1   1   1[128X[104X
    [4X[28X     3  2   2   2   2  2   2  1   1   1[128X[104X
    [4X[28X[128X[104X
    [4X[28X       1a  3a  3b  3c 3d  3e 2a  6a  6b[128X[104X
    [4X[28X    2P 1a  3b  3a  3e 3d  3c 1a  3c  3e[128X[104X
    [4X[28X    3P 1a  1a  1a  1a 1a  1a 2a  2a  2a[128X[104X
    [4X[28X[128X[104X
    [4X[28XX.1     1   1   1   1  1   1 -1  -1  -1[128X[104X
    [4X[28XX.2     2   A  /A   B -1  /B  .   .   .[128X[104X
    [4X[28XX.3     2  /A   A  /B -1   B  .   .   .[128X[104X
    [4X[28XX.4     1 -/A  -A  -A  1 -/A -1  /A   A[128X[104X
    [4X[28XX.5     2  -1  -1   2 -1   2  .   .   .[128X[104X
    [4X[28XX.6     1  -A -/A -/A  1  -A -1   A  /A[128X[104X
    [4X[28XX.7     1   1   1   1  1   1  1   1   1[128X[104X
    [4X[28XX.8     1 -/A  -A  -A  1 -/A  1 -/A  -A[128X[104X
    [4X[28XX.9     1  -A -/A -/A  1  -A  1  -A -/A[128X[104X
    [4X[28X[128X[104X
    [4X[28XA = -E(3)^2[128X[104X
    [4X[28X  = (1+Sqrt(-3))/2 = 1+b3[128X[104X
    [4X[28XB = 2*E(3)[128X[104X
    [4X[28X  = -1+Sqrt(-3) = 2b3[128X[104X
    [4X[25Xgap>[125X [27XCharacterParameters( wr )[1];[127X[104X
    [4X[28X[ [ 1, 1 ], [  ], [  ] ][128X[104X
  [4X[32X[104X
  
  
  [1X71.21 [33X[0;0YSorted Character Tables[133X[101X
  
  [1X71.21-1 CharacterTableWithSortedCharacters[101X
  
  [29X[2XCharacterTableWithSortedCharacters[102X( [3Xtbl[103X[, [3Xperm[103X] ) [32X operation
  
  [33X[0;0Yis  a  character  table  that differs from [3Xtbl[103X only by the succession of its
  irreducible  characters.  This  affects  the  values  of  the attributes [2XIrr[102X
  ([14X71.8-2[114X)  and [2XCharacterParameters[102X ([14X71.9-7[114X). Namely, these lists are permuted
  by the permutation [3Xperm[103X.[133X
  
  [33X[0;0YIf  no  second  argument  is  given  then  a permutation is used that yields
  irreducible  characters  of  increasing  degree  for  the  result.  For  the
  succession of characters in the result, see [2XSortedCharacters[102X ([14X71.21-2[114X).[133X
  
  [33X[0;0YThe result has all those attributes and properties of [3Xtbl[103X that are stored in
  [2XSupportedCharacterTableInfo[102X  ([14X71.3-4[114X)  and  do not depend on the ordering of
  characters.[133X
  
  [1X71.21-2 SortedCharacters[101X
  
  [29X[2XSortedCharacters[102X( [3Xtbl[103X, [3Xchars[103X[, [3Xflag[103X] ) [32X operation
  
  [33X[0;0Yis a list containing the characters [3Xchars[103X, ordered as specified by the other
  arguments.[133X
  
  [33X[0;0YThere  are  three  possibilities  to  sort  characters:  They  can be sorted
  according  to  ascending  norms  ([3Xflag[103X  is  the string [10X"norm"[110X), to ascending
  degree  ([3Xflag[103X is the string [10X"degree"[110X), or both (no third argument is given),
  i.e.,  characters  with  same norm are sorted according to ascending degree,
  and characters with smaller norm precede those with bigger norm.[133X
  
  [33X[0;0YRational  characters  in the result precede other ones with same norm and/or
  same degree.[133X
  
  [33X[0;0YThe  trivial  character, if contained in [3Xchars[103X, will always be sorted to the
  first position.[133X
  
  [1X71.21-3 CharacterTableWithSortedClasses[101X
  
  [29X[2XCharacterTableWithSortedClasses[102X( [3Xtbl[103X[, [3Xflag[103X] ) [32X operation
  
  [33X[0;0Yis  a  character table obtained by permutation of the classes of [3Xtbl[103X. If the
  second  argument  [3Xflag[103X  is the string [10X"centralizers"[110X then the classes of the
  result  are sorted according to descending centralizer orders. If the second
  argument  is the string [10X"representatives"[110X then the classes of the result are
  sorted  according  to ascending representative orders. If no second argument
  is  given  then  the classes of the result are sorted according to ascending
  representative  orders,  and  classes  with  equal representative orders are
  sorted according to descending centralizer orders.[133X
  
  [33X[0;0YIf  the  second argument is a permutation then the classes of the result are
  sorted by application of this permutation.[133X
  
  [33X[0;0YThe result has all those attributes and properties of [3Xtbl[103X that are stored in
  [2XSupportedCharacterTableInfo[102X  ([14X71.3-4[114X)  and  do not depend on the ordering of
  classes.[133X
  
  [1X71.21-4 SortedCharacterTable[101X
  
  [29X[2XSortedCharacterTable[102X( [3Xtbl[103X, [3Xkernel[103X ) [32X function
  [29X[2XSortedCharacterTable[102X( [3Xtbl[103X, [3Xnormalseries[103X ) [32X function
  [29X[2XSortedCharacterTable[102X( [3Xtbl[103X, [3Xfacttbl[103X, [3Xkernel[103X ) [32X function
  
  [33X[0;0Yis  a  character  table  obtained  on  permutation  of  the  classes and the
  irreducibles characters of [3Xtbl[103X.[133X
  
  [33X[0;0YThe  first  form sorts the classes at positions contained in the list [3Xkernel[103X
  to the beginning, and sorts all characters in [10XIrr( [3Xtbl[103X[10X )[110X such that the first
  characters are those that contain [3Xkernel[103X in their kernel.[133X
  
  [33X[0;0YThe  second  form does the same successively for all kernels [22Xk_i[122X in the list
  [22X[3Xnormalseries[103X = [ k_1, k_2, ..., k_n ][122X where [22Xk_i[122X must be a sublist of [22Xk_{i+1}[122X
  for [22X1 ≤ i ≤ n-1[122X.[133X
  
  [33X[0;0YThe  third  form  computes the table [22XF[122X of the factor group of [3Xtbl[103X modulo the
  normal  subgroup  formed by the classes whose positions are contained in the
  list  [3Xkernel[103X;  [22XF[122X must be permutation equivalent to the table [3Xfacttbl[103X, in the
  sense  of  [2XTransformingPermutationsCharacterTables[102X ([14X71.22-4[114X), otherwise [9Xfail[109X
  is  returned.  The  classes  of  [3Xtbl[103X are sorted such that the preimages of a
  class  of [22XF[122X are consecutive, and that the succession of preimages is that of
  [3Xfacttbl[103X. The [2XIrr[102X ([14X71.8-2[114X) value of [3Xtbl[103X is sorted as with [10XSortCharTable( [3Xtbl[103X[10X,
  [3Xkernel[103X[10X )[110X.[133X
  
  [33X[0;0Y([13XNote[113X that the transformation is only unique up to table automorphisms of [22XF[122X,
  and this need not be unique up to table automorphisms of [3Xtbl[103X.)[133X
  
  [33X[0;0YAll  rearrangements of classes and characters are stable, i.e., the relative
  positions  of  classes  and  characters  that  are  not distinguished by any
  relevant property is not changed.[133X
  
  [33X[0;0YThe result has all those attributes and properties of [3Xtbl[103X that are stored in
  [2XSupportedCharacterTableInfo[102X  ([14X71.3-4[114X)  and  do not depend on the ordering of
  classes and characters.[133X
  
  [33X[0;0YThe  [2XClassPermutation[102X  ([14X71.21-5[114X)  value  of  [3Xtbl[103X  is  changed  if necessary,
  see [14X71.5[114X.[133X
  
  [33X[0;0Y[2XSortedCharacterTable[102X   uses  [2XCharacterTableWithSortedClasses[102X  ([14X71.21-3[114X)  and
  [2XCharacterTableWithSortedCharacters[102X ([14X71.21-1[114X).[133X
  
  [1X71.21-5 ClassPermutation[101X
  
  [29X[2XClassPermutation[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0Yis  a  permutation  [22Xπ[122X of classes of the character table [3Xtbl[103X. If it is stored
  then class fusions into [3Xtbl[103X that are stored on other tables must be followed
  by [22Xπ[122X in order to describe the correct fusion.[133X
  
  [33X[0;0YThis attribute value is bound only if [3Xtbl[103X was obtained from another table by
  permuting  the  classes,  using [2XCharacterTableWithSortedClasses[102X ([14X71.21-3[114X) or
  [2XSortedCharacterTable[102X ([14X71.21-4[114X).[133X
  
  [33X[0;0YIt  is  necessary  because  the original table and the sorted table have the
  same  identifier  (and  the same group if known), and hence the same fusions
  are valid for the two tables.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( "Symmetric", 4 );[127X[104X
    [4X[28XCharacterTable( "Sym(4)" )[128X[104X
    [4X[25Xgap>[125X [27XDisplay( tbl );[127X[104X
    [4X[28XSym(4)[128X[104X
    [4X[28X[128X[104X
    [4X[28X     2  3  2  3  .  2[128X[104X
    [4X[28X     3  1  .  .  1  .[128X[104X
    [4X[28X[128X[104X
    [4X[28X       1a 2a 2b 3a 4a[128X[104X
    [4X[28X    2P 1a 1a 1a 3a 2b[128X[104X
    [4X[28X    3P 1a 2a 2b 1a 4a[128X[104X
    [4X[28X[128X[104X
    [4X[28XX.1     1 -1  1  1 -1[128X[104X
    [4X[28XX.2     3 -1 -1  .  1[128X[104X
    [4X[28XX.3     2  .  2 -1  .[128X[104X
    [4X[28XX.4     3  1 -1  . -1[128X[104X
    [4X[28XX.5     1  1  1  1  1[128X[104X
    [4X[25Xgap>[125X [27Xsrt1:= CharacterTableWithSortedCharacters( tbl );[127X[104X
    [4X[28XCharacterTable( "Sym(4)" )[128X[104X
    [4X[25Xgap>[125X [27XList( Irr( srt1 ), Degree );[127X[104X
    [4X[28X[ 1, 1, 2, 3, 3 ][128X[104X
    [4X[25Xgap>[125X [27Xsrt2:= CharacterTableWithSortedClasses( tbl );[127X[104X
    [4X[28XCharacterTable( "Sym(4)" )[128X[104X
    [4X[25Xgap>[125X [27XSizesCentralizers( tbl );[127X[104X
    [4X[28X[ 24, 4, 8, 3, 4 ][128X[104X
    [4X[25Xgap>[125X [27XSizesCentralizers( srt2 );[127X[104X
    [4X[28X[ 24, 8, 4, 3, 4 ][128X[104X
    [4X[25Xgap>[125X [27Xnsg:= ClassPositionsOfNormalSubgroups( tbl );[127X[104X
    [4X[28X[ [ 1 ], [ 1, 3 ], [ 1, 3, 4 ], [ 1 .. 5 ] ][128X[104X
    [4X[25Xgap>[125X [27Xsrt3:= SortedCharacterTable( tbl, nsg );[127X[104X
    [4X[28XCharacterTable( "Sym(4)" )[128X[104X
    [4X[25Xgap>[125X [27Xnsg:= ClassPositionsOfNormalSubgroups( srt3 );[127X[104X
    [4X[28X[ [ 1 ], [ 1, 2 ], [ 1 .. 3 ], [ 1 .. 5 ] ][128X[104X
    [4X[25Xgap>[125X [27XDisplay( srt3 );[127X[104X
    [4X[28XSym(4)[128X[104X
    [4X[28X[128X[104X
    [4X[28X     2  3  3  .  2  2[128X[104X
    [4X[28X     3  1  .  1  .  .[128X[104X
    [4X[28X[128X[104X
    [4X[28X       1a 2a 3a 2b 4a[128X[104X
    [4X[28X    2P 1a 1a 3a 1a 2a[128X[104X
    [4X[28X    3P 1a 2a 1a 2b 4a[128X[104X
    [4X[28X[128X[104X
    [4X[28XX.1     1  1  1  1  1[128X[104X
    [4X[28XX.2     1  1  1 -1 -1[128X[104X
    [4X[28XX.3     2  2 -1  .  .[128X[104X
    [4X[28XX.4     3 -1  . -1  1[128X[104X
    [4X[28XX.5     3 -1  .  1 -1[128X[104X
    [4X[25Xgap>[125X [27XClassPermutation( srt3 );[127X[104X
    [4X[28X(2,4,3)[128X[104X
  [4X[32X[104X
  
  
  [1X71.22 [33X[0;0YAutomorphisms and Equivalence of Character Tables[133X[101X
  
  [1X71.22-1 MatrixAutomorphisms[101X
  
  [29X[2XMatrixAutomorphisms[102X( [3Xmat[103X[, [3Xmaps[103X, [3Xsubgroup[103X] ) [32X operation
  
  [33X[0;0YFor   a   matrix   [3Xmat[103X,  [2XMatrixAutomorphisms[102X  returns  the  group  of  those
  permutations  of  the  columns  of  [3Xmat[103X  that  leave  the set of rows of [3Xmat[103X
  invariant.[133X
  
  [33X[0;0YIf  the  arguments  [3Xmaps[103X  and  [3Xsubgroup[103X  are  given, only the group of those
  permutations is constructed that additionally fix each list in the list [3Xmaps[103X
  under  pointwise  action  [2XOnTuples[102X  ([14X41.2-5[114X),  and [3Xsubgroup[103X is a permutation
  group that is known to be a subgroup of this group of automorphisms.[133X
  
  [33X[0;0YEach  entry  in  [3Xmaps[103X  must be a list of same length as the rows of [3Xmat[103X. For
  example, if [3Xmat[103X is a list of irreducible characters of a group then the list
  of  element  orders of the conjugacy classes (see [2XOrdersClassRepresentatives[102X
  ([14X71.9-1[114X)) may be an entry in [3Xmaps[103X.[133X
  
  [1X71.22-2 TableAutomorphisms[101X
  
  [29X[2XTableAutomorphisms[102X( [3Xtbl[103X, [3Xcharacters[103X[, [3Xinfo[103X] ) [32X operation
  
  [33X[0;0Y[2XTableAutomorphisms[102X   returns   the   permutation   group   of  those  matrix
  automorphisms  (see [2XMatrixAutomorphisms[102X  ([14X71.22-1[114X))  of  the list [3Xcharacters[103X
  that  leave the element orders (see [2XOrdersClassRepresentatives[102X ([14X71.9-1[114X)) and
  all  stored  power  maps  (see [2XComputedPowerMaps[102X  ([14X73.1-1[114X)) of the character
  table [3Xtbl[103X invariant.[133X
  
  [33X[0;0YIf [3Xcharacters[103X is closed under Galois conjugacy –this is always fulfilled for
  the  list  of  all  irreducible characters of ordinary character tables– the
  string  [10X"closed"[110X may be entered as the third argument [3Xinfo[103X. Alternatively, a
  known  subgroup  of  the  table  automorphisms  can  be entered as the third
  argument [3Xinfo[103X.[133X
  
  [33X[0;0YThe attribute [2XAutomorphismsOfTable[102X ([14X71.9-4[114X) can be used to compute and store
  the table automorphisms for the case that [3Xcharacters[103X equals the [2XIrr[102X ([14X71.8-2[114X)
  value of [3Xtbl[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtbld8:= CharacterTable( "Dihedral", 8 );;[127X[104X
    [4X[25Xgap>[125X [27Xirrd8:= Irr( tbld8 );[127X[104X
    [4X[28X[ Character( CharacterTable( "Dihedral(8)" ), [ 1, 1, 1, 1, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "Dihedral(8)" ), [ 1, 1, 1, -1, -1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "Dihedral(8)" ), [ 1, -1, 1, 1, -1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "Dihedral(8)" ), [ 1, -1, 1, -1, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "Dihedral(8)" ), [ 2, 0, -2, 0, 0 ] ) ][128X[104X
    [4X[25Xgap>[125X [27Xorders:= OrdersClassRepresentatives( tbld8 );[127X[104X
    [4X[28X[ 1, 4, 2, 2, 2 ][128X[104X
    [4X[25Xgap>[125X [27XMatrixAutomorphisms( irrd8 );[127X[104X
    [4X[28XGroup([ (4,5), (2,4) ])[128X[104X
    [4X[25Xgap>[125X [27XMatrixAutomorphisms( irrd8, [ orders ], Group( () ) );[127X[104X
    [4X[28XGroup([ (4,5) ])[128X[104X
    [4X[25Xgap>[125X [27XTableAutomorphisms( tbld8, irrd8 );[127X[104X
    [4X[28XGroup([ (4,5) ])[128X[104X
  [4X[32X[104X
  
  [1X71.22-3 TransformingPermutations[101X
  
  [29X[2XTransformingPermutations[102X( [3Xmat1[103X, [3Xmat2[103X ) [32X operation
  
  [33X[0;0YLet [3Xmat1[103X and [3Xmat2[103X be matrices. [2XTransformingPermutations[102X tries to construct a
  permutation  [22Xπ[122X that transforms the set of rows of the matrix [3Xmat1[103X to the set
  of rows of the matrix [3Xmat2[103X by permuting the columns.[133X
  
  [33X[0;0YIf  such  a  permutation exists, a record with the components [10Xcolumns[110X, [10Xrows[110X,
  and  [10Xgroup[110X  is returned, otherwise [9Xfail[109X. For [10XTransformingPermutations( [3Xmat1[103X[10X,
  [3Xmat2[103X[10X  )  =  [3Xr[103X[10X[110X [22X≠[122X [9Xfail[109X, we have [10X[3Xmat2[103X[10X = Permuted( List( [3Xmat1[103X[10X, x -> Permuted( x,
  [3Xr[103X[10X.columns ) ), [3Xr[103X[10X.rows )[110X.[133X
  
  [33X[0;0Y[3Xr[103X[10X.group[110X    is    the    group    of    matrix    automorphisms    of    [3Xmat2[103X
  (see [2XMatrixAutomorphisms[102X    ([14X71.22-1[114X)).    This    group    stabilizes   the
  transformation in the sense that applying any of its elements to the columns
  of [3Xmat2[103X preserves the set of rows of [3Xmat2[103X.[133X
  
  [1X71.22-4 TransformingPermutationsCharacterTables[101X
  
  [29X[2XTransformingPermutationsCharacterTables[102X( [3Xtbl1[103X, [3Xtbl2[103X ) [32X operation
  
  [33X[0;0YLet        [3Xtbl1[103X        and       [3Xtbl2[103X       be       character       tables.
  [2XTransformingPermutationsCharacterTables[102X  tries  to construct a permutation [22Xπ[122X
  that transforms the set of rows of the matrix [10XIrr( [3Xtbl1[103X[10X )[110X to the set of rows
  of    the    matrix    [10XIrr(    [3Xtbl2[103X[10X    )[110X    by    permuting    the   columns
  (see [2XTransformingPermutations[102X  ([14X71.22-3[114X)),  such  that [22Xπ[122X transforms also the
  power maps and the element orders.[133X
  
  [33X[0;0YIf  such  a  permutation  [22Xπ[122X exists then a record with the components [10Xcolumns[110X
  ([22Xπ[122X),  [10Xrows[110X  (the  permutation  of [10XIrr( [3Xtbl1[103X[10X )[110X corresponding to [22Xπ[122X), and [10Xgroup[110X
  (the     permutation    group    of    table    automorphisms    of    [3Xtbl2[103X,
  see [2XAutomorphismsOfTable[102X  ([14X71.9-4[114X))  is  returned.  If  no  such permutation
  exists, [9Xfail[109X is returned.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xtblq8:= CharacterTable( "Quaternionic", 8 );;[127X[104X
    [4X[25Xgap>[125X [27Xirrq8:= Irr( tblq8 );[127X[104X
    [4X[28X[ Character( CharacterTable( "Q8" ), [ 1, 1, 1, 1, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "Q8" ), [ 1, 1, 1, -1, -1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "Q8" ), [ 1, -1, 1, 1, -1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "Q8" ), [ 1, -1, 1, -1, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( "Q8" ), [ 2, 0, -2, 0, 0 ] ) ][128X[104X
    [4X[25Xgap>[125X [27XOrdersClassRepresentatives( tblq8 );[127X[104X
    [4X[28X[ 1, 4, 2, 4, 4 ][128X[104X
    [4X[25Xgap>[125X [27XTransformingPermutations( irrd8, irrq8 );[127X[104X
    [4X[28Xrec( columns := (), group := Group([ (4,5), (2,4) ]), rows := () )[128X[104X
    [4X[25Xgap>[125X [27XTransformingPermutationsCharacterTables( tbld8, tblq8 );[127X[104X
    [4X[28Xfail[128X[104X
    [4X[25Xgap>[125X [27Xtbld6:= CharacterTable( "Dihedral", 6 );;[127X[104X
    [4X[25Xgap>[125X [27Xtbls3:= CharacterTable( "Symmetric", 3 );;[127X[104X
    [4X[25Xgap>[125X [27XTransformingPermutationsCharacterTables( tbld6, tbls3 );[127X[104X
    [4X[28Xrec( columns := (2,3), group := Group(()), rows := (1,3,2) )[128X[104X
  [4X[32X[104X
  
  [1X71.22-5 FamiliesOfRows[101X
  
  [29X[2XFamiliesOfRows[102X( [3Xmat[103X, [3Xmaps[103X ) [32X function
  
  [33X[0;0Ydistributes  the  rows of the matrix [3Xmat[103X into families, as follows. Two rows
  of  [3Xmat[103X  belong to the same family if there is a permutation of columns that
  maps  one  row  to the other row. Each entry in the list [3Xmaps[103X is regarded to
  form a family of length 1.[133X
  
  [33X[0;0Y[2XFamiliesOfRows[102X returns a record with the components[133X
  
  [8X[10Xfamreps[110X[108X
        [33X[0;6Ythe list of representatives for each family,[133X
  
  [8X[10Xpermutations[110X[108X
        [33X[0;6Ythe  list  that contains at position [22Xi[122X a list of permutations that map
        the  members  of  the  family  with  representative [10Xfamreps[110X[22X[i][122X to that
        representative,[133X
  
  [8X[10Xfamilies[110X[108X
        [33X[0;6Ythe  list that contains at position [22Xi[122X the list of positions of members
        of  the  family of representative [10Xfamreps[110X[22X[i][122X; (for the element [3Xmaps[103X[22X[i][122X
        the only member of the family will get the number [10XLength( [3Xmat[103X[10X ) + [110X[22Xi[122X).[133X
  
  
  [1X71.23 [33X[0;0YStoring Normal Subgroup Information[133X[101X
  
  [1X71.23-1 NormalSubgroupClassesInfo[101X
  
  [29X[2XNormalSubgroupClassesInfo[102X( [3Xtbl[103X ) [32X attribute
  
  [33X[0;0YLet  [3Xtbl[103X  be  the ordinary character table of the group [22XG[122X. Many computations
  for group characters of [22XG[122X involve computations in normal subgroups or factor
  groups of [22XG[122X.[133X
  
  [33X[0;0YIn  some  cases the character table [3Xtbl[103X is sufficient; for example questions
  about  a  normal  subgroup [22XN[122X of [22XG[122X can be answered if one knows the conjugacy
  classes  that  form [22XN[122X, e.g., the question whether a character of [22XG[122X restricts
  irreducibly  to  [22XN[122X. But other questions require the computation of [22XN[122X or even
  more information, like the character table of [22XN[122X.[133X
  
  [33X[0;0YIn  order  to  do  these  computations  only once, one stores in the group a
  record with components to store normal subgroups, the corresponding lists of
  conjugacy classes, and (if necessary) the factor groups, namely[133X
  
  [8X[10Xnsg[110X[108X
        [33X[0;6Ylist of normal subgroups of [22XG[122X, may be incomplete,[133X
  
  [8X[10Xnsgclasses[110X[108X
        [33X[0;6Yat  position  [22Xi[122X,  the  list  of  positions of conjugacy classes of [3Xtbl[103X
        forming the [22Xi[122X-th entry of the [10Xnsg[110X component,[133X
  
  [8X[10Xnsgfactors[110X[108X
        [33X[0;6Yat position [22Xi[122X, if bound, the factor group modulo the [22Xi[122X-th entry of the
        [10Xnsg[110X component.[133X
  
  [33X[0;0Y[2XNormalSubgroupClasses[102X ([14X71.23-3[114X), [2XFactorGroupNormalSubgroupClasses[102X ([14X71.23-4[114X),
  and  [2XClassPositionsOfNormalSubgroup[102X ([14X71.23-2[114X) each use these components, and
  they are the only functions to do so.[133X
  
  [33X[0;0YSo  if  you  need  information about a normal subgroup for that you know the
  conjugacy  classes, you should get it using [2XNormalSubgroupClasses[102X ([14X71.23-3[114X).
  If  the  normal  subgroup was already used it is just returned, with all the
  knowledge  it contains. Otherwise the normal subgroup is added to the lists,
  and will be available for the next call.[133X
  
  [33X[0;0YFor  example,  if  you  are  dealing  with  kernels  of characters using the
  [2XKernelOfCharacter[102X  ([14X72.8-9[114X)  function  you  make use of this feature because
  [2XKernelOfCharacter[102X ([14X72.8-9[114X) calls [2XNormalSubgroupClasses[102X ([14X71.23-3[114X).[133X
  
  [1X71.23-2 ClassPositionsOfNormalSubgroup[101X
  
  [29X[2XClassPositionsOfNormalSubgroup[102X( [3Xtbl[103X, [3XN[103X ) [32X function
  
  [33X[0;0Yis  the  list  of  positions of conjugacy classes of the character table [3Xtbl[103X
  that are contained in the normal subgroup [3XN[103X of the underlying group of [3Xtbl[103X.[133X
  
  [1X71.23-3 NormalSubgroupClasses[101X
  
  [29X[2XNormalSubgroupClasses[102X( [3Xtbl[103X, [3Xclasses[103X ) [32X function
  
  [33X[0;0Yreturns  the  normal  subgroup  of  the  underlying  group [22XG[122X of the ordinary
  character  table  [3Xtbl[103X  that consists of those conjugacy classes of [3Xtbl[103X whose
  positions are in the list [3Xclasses[103X.[133X
  
  [33X[0;0YIf  [10XNormalSubgroupClassesInfo(  [3Xtbl[103X[10X  ).nsg[110X does not yet contain the required
  normal  subgroup, and if [10XNormalSubgroupClassesInfo( [3Xtbl[103X[10X ).normalSubgroups[110X is
  bound    then   the   result   will   be   identical   to   the   group   in
  [10XNormalSubgroupClassesInfo( [3Xtbl[103X[10X ).normalSubgroups[110X.[133X
  
  [1X71.23-4 FactorGroupNormalSubgroupClasses[101X
  
  [29X[2XFactorGroupNormalSubgroupClasses[102X( [3Xtbl[103X, [3Xclasses[103X ) [32X function
  
  [33X[0;0Yis  the  factor  group  of  the underlying group [22XG[122X of the ordinary character
  table  [3Xtbl[103X  modulo the normal subgroup of [22XG[122X that consists of those conjugacy
  classes of [3Xtbl[103X whose positions are in the list [3Xclasses[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xg:= SymmetricGroup( 4 );[127X[104X
    [4X[28XSym( [ 1 .. 4 ] )[128X[104X
    [4X[25Xgap>[125X [27XSetName( g, "S4" );[127X[104X
    [4X[25Xgap>[125X [27Xtbl:= CharacterTable( g );[127X[104X
    [4X[28XCharacterTable( S4 )[128X[104X
    [4X[25Xgap>[125X [27Xirr:= Irr( g );[127X[104X
    [4X[28X[ Character( CharacterTable( S4 ), [ 1, -1, 1, 1, -1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( S4 ), [ 3, -1, -1, 0, 1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( S4 ), [ 2, 0, 2, -1, 0 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( S4 ), [ 3, 1, -1, 0, -1 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( S4 ), [ 1, 1, 1, 1, 1 ] ) ][128X[104X
    [4X[25Xgap>[125X [27Xkernel:= KernelOfCharacter( irr[3] );[127X[104X
    [4X[28XGroup([ (1,2)(3,4), (1,4)(2,3) ])[128X[104X
    [4X[25Xgap>[125X [27XHasNormalSubgroupClassesInfo( tbl );[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XNormalSubgroupClassesInfo( tbl );[127X[104X
    [4X[28Xrec( nsg := [ Group([ (1,2)(3,4), (1,4)(2,3) ]) ], [128X[104X
    [4X[28X  nsgclasses := [ [ 1, 3 ] ], nsgfactors := [  ] )[128X[104X
    [4X[25Xgap>[125X [27XClassPositionsOfNormalSubgroup( tbl, kernel );[127X[104X
    [4X[28X[ 1, 3 ][128X[104X
    [4X[25Xgap>[125X [27XFactorGroupNormalSubgroupClasses( tbl, [ 1, 3 ] );[127X[104X
    [4X[28XGroup([ f1, f2 ])[128X[104X
    [4X[25Xgap>[125X [27XNormalSubgroupClassesInfo( tbl );[127X[104X
    [4X[28Xrec( nsg := [ Group([ (1,2)(3,4), (1,4)(2,3) ]) ], [128X[104X
    [4X[28X  nsgclasses := [ [ 1, 3 ] ], nsgfactors := [ Group([ f1, f2 ]) ] )[128X[104X
  [4X[32X[104X
  
