  
  [1X4 [33X[0;0YComputing character tables with [5XCCTab[105X[101X[1X[133X[101X
  
  [33X[0;0YAn  [2XIsCCTable[102X  ([14X4.1-1[114X)  object  is  the  central data structure used by this
  package  to  incrementally  collect  information  about  the generalized and
  irreducible characters of a finite group, using an induce-reduce algorithm.[133X
  
  
  [1X4.1 [33X[0;0YThe [2XIsCCTable[102X[101X[1X ([14X4.1-1[114X) object[133X[101X
  
  [1X4.1-1 CCTable[101X
  
  [33X[1;0Y[29X[2XCCTable[102X( [3XG[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Yan [2XIsCCTable[102X object[133X
  
  [33X[1;0Y[29X[2XIsCCTable[102X( [3XCCT[103X ) [32X filter[133X
  
  [33X[0;0YFor  a finite group [3XG[103X [2XCCTable[102X returns an (initially empty) [13Xpartial character
  table  container[113X  object,  in  the  filter  [2XIsCCTable[102X. Such an object stores
  incrementally  growing information about the (still unknown) generalized and
  irreducible  characters  of [3XG[103X, and is used as the central data structure for
  computing  the  irreducible  characters  of  [3XG[103X  with  the tools in the [5XCCTab[105X
  package.  The  group  [3XG[103X is stored as [10XUnderlyingGroup([3XCCT[103X[10X)[110X in the result [3XCCT[103X.
  Many  attributes  of [3XG[103X (for example [2XRationalClassesInfo[102X ([14X3.2-4[114X)) can also be
  called with [3XCCT[103X (and delegate to [3XG[103X).[133X
  
  [33X[0;0YGeneralized  characters are stored in an [2XIsCCTable[102X object as integer vectors
  (for  each rational class only the value on the representing conjugacy class
  is  stored  by  [10XPhi(c)[110X  integers  where  [10Xc[110X is the conductor of that rational
  class).  See  [2XEncodeForCCTable[102X  ([14X4.1-2[114X) below for a more precise description
  and  for  computing  this  representation  of a generalized character from a
  class function object.[133X
  
  [33X[0;0YGeneralized   characters   can   be   added  to  an  [2XIsCCTable[102X  object  with
  [2XImportToCCTable[102X  ([14X4.1-3[114X).  The  lattice  spanned  by  the  known generalized
  characters  is stored via the Hermite normal form of the characters, encoded
  as integer vectors (in a component [10X!.hnfs[110X).[133X
  
  [33X[0;0YIf  the  group  [3XG[103X  has  a  non-trivial  center  it  can  be  useful  to call
  [2XSplitByCentre[102X ([14X4.3-1[114X) with [3XCCT[103X. This is not done by default because this may
  cause some non-negligible computations with conjugacy classes.[133X
  
  [33X[0;0YThe default method for [2XIrr[102X ([14XReference: Irr[114X) for an [2XIsCCTable[102X object computes
  the  full set of irreducible characters of [3XG[103X. If the [5XCCTab[105X package is loaded
  then  for  many  groups  [3XG[103X its [10XCharacterTable([3XG[103X[10X)[110X will also have an attribute
  [2XCCTable[102X  and  delegate the computation of the irreducible characters to this
  [2XCCTable[102X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := AlternatingGroup(5);;[127X[104X
    [4X[25Xgap>[125X [27XG := AlternatingGroup(5);;[127X[104X
    [4X[25Xgap>[125X [27XCCT := CCTable(G);[127X[104X
    [4X[28XCCTable( Alt( [ 1 .. 5 ] ) )[128X[104X
    [4X[25Xgap>[125X [27XIsCCTable(CCT);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XIrr(CCT);[127X[104X
    [4X[28X[ [ 1, 1, 1, 1, 0, 0, 0 ], [ 3, -1, 0, 0, 0, -1, -1 ], [128X[104X
    [4X[28X  [ 3, -1, 0, 1, 0, 1, 1 ], [ 4, 0, 1, -1, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 5, 1, -1, 0, 0, 0, 0 ] ][128X[104X
    [4X[25Xgap>[125X [27XExpandFromCCTable(CCT, Irr(CCT));[127X[104X
    [4X[28X[ [ 1, 1, 1, 1, 1 ], [ 3, -1, 0, -E(5)^2-E(5)^3, -E(5)-E(5)^4 ], [128X[104X
    [4X[28X  [ 3, -1, 0, -E(5)-E(5)^4, -E(5)^2-E(5)^3 ], [ 4, 0, 1, -1, -1 ], [128X[104X
    [4X[28X  [ 5, 1, -1, 0, 0 ] ][128X[104X
  [4X[32X[104X
  
  [1X4.1-2 EncodeForCCTable[101X
  
  [33X[1;0Y[29X[2XEncodeForCCTable[102X( [3XCCT[103X, [3Xl[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Yan integer vector, or a list of integer vectors[133X
  
  [33X[1;0Y[29X[2XExpandFromCCTable[102X( [3XCCT[103X[, [3Xenc[103X] ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ya character, or a list of characters[133X
  
  [33X[0;0YLet  [3XCCT[103X  be  an [2XIsCCTable[102X ([14X4.1-1[114X) object. The argument [3Xl[103X is either a single
  character,  or  a  list  of characters, of the underlying group of [3XCCT[103X, each
  given  either  as  a  list  of  values (in the order of the [2XConjugacyClasses[102X
  ([14XReference:  ConjugacyClasses  attribute[114X)  of  the underlying group) or as a
  class     function     object    (with    values    in    the    order    of
  [2XIdentificationOfConjugacyClasses[102X                                 ([14XReference:
  IdentificationOfConjugacyClasses[114X)) of its character table.[133X
  
  [33X[0;0Y[2XEncodeForCCTable[102X  returns the encoded form in which characters are stored in
  the    [2XIsCCTable[102X    ([14X4.1-1[114X)   object:   for   each   rational   class   (see
  [2XRationalClassesInfo[102X  ([14X3.2-4[114X))  with  conductor  [22X1[122X this is simply the integer
  value  on that class; for a rational class with conductor [22Xc > 1[122X the value on
  that  class  is a cyclotomic integer in the [22Xc[122X-th cyclotomic field, and it is
  encoded  by the (integer) coefficients of its representation as a polynomial
  in   [22XE(c)[122X   modulo   the   [22Xc[122X-th   cyclotomic   polynomial.  The  entries  of
  [10XRationalClassesInfo([3XCCT[103X[10X)[110X  have  a  component  [10X.ind[110X  telling the positions of
  these  integer  coefficients.  If  [3Xl[103X is a single character, a single integer
  vector  is  returned, otherwise a list of vectors, one for each character in
  [3Xl[103X.[133X
  
  [33X[0;0Y[2XExpandFromCCTable[102X  is the converse function. If the optional argument [3Xenc[103X is
  not given, all irreducible characters of [3XCCT[103X found so far are expanded.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := AlternatingGroup(5);;[127X[104X
    [4X[25Xgap>[125X [27XG := AlternatingGroup(5);;[127X[104X
    [4X[25Xgap>[125X [27XCCT := CCTable(G);;[127X[104X
    [4X[25Xgap>[125X [27Xind := InducedFromAllMaximalCyclicSubgroups(G);;[127X[104X
    [4X[25Xgap>[125X [27Xenc := EncodeForCCTable(CCT, ind);[127X[104X
    [4X[28X[ [ 12, 0, 0, 2, 0, 0, 0 ], [ 12, 0, 0, 0, 0, 1, 1 ], [128X[104X
    [4X[28X  [ 12, 0, 0, -1, 0, -1, -1 ], [ 20, 0, -1, 0, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 20, 0, 2, 0, 0, 0, 0 ], [ 30, -2, 0, 0, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 30, 2, 0, 0, 0, 0, 0 ] ][128X[104X
    [4X[25Xgap>[125X [27XExpandFromCCTable(CCT);[127X[104X
    [4X[28X[  ][128X[104X
    [4X[25Xgap>[125X [27XExpandFromCCTable(CCT, enc);[127X[104X
    [4X[28X[ [ 12, 0, 0, 2, 2 ], [ 12, 0, 0, E(5)^2+E(5)^3, E(5)+E(5)^4 ], [128X[104X
    [4X[28X  [ 12, 0, 0, E(5)+E(5)^4, E(5)^2+E(5)^3 ], [ 20, 0, -1, 0, 0 ], [128X[104X
    [4X[28X  [ 20, 0, 2, 0, 0 ], [ 30, -2, 0, 0, 0 ], [ 30, 2, 0, 0, 0 ] ][128X[104X
  [4X[32X[104X
  
  [1X4.1-3 ImportToCCTable[101X
  
  [33X[1;0Y[29X[2XImportToCCTable[102X( [3XCCT[103X, [3Xchs[103X ) [32X function[133X
  [33X[1;0Y[29X[2XImportEncodedToCCTable[102X( [3XCCT[103X, [3Xenc[103X ) [32X function[133X
  
  [33X[0;0YLet  [3XCCT[103X  be  an  [2XIsCCTable[102X  ([14X4.1-1[114X)  object,  and  let [3Xchs[103X be a generalized
  character, or list of generalized characters, of the underlying group, given
  as  for [2XEncodeForCCTable[102X ([14X4.1-2[114X) (that is, [13Xnot[113X yet encoded). [2XImportToCCTable[102X
  encodes [3Xchs[103X via [2XEncodeForCCTable[102X ([14X4.1-2[114X) and imports the result into [3XCCT[103X via
  [2XImportEncodedToCCTable[102X.[133X
  
  [33X[0;0Y[2XImportEncodedToCCTable[102X  imports  [3Xenc[103X  into [3XCCT[103X: the (encoded) projections of
  already  known  irreducible  characters  of  [3XCCT[103X  are  subtracted,  and  the
  remaining  vectors  are  added  to  the  list(s)  of newly found generalized
  characters  stored  in  [3XCCT[103X (split according to the splitting centre of [3XCCT[103X,
  see  [2XSplitByCentre[102X  ([14X4.3-1[114X), if that has been set). This does not yet update
  the  Hermite normal forms describing the lattice(s) of found characters, see
  [2XUpdateHNFCCTable[102X ([14X4.1-4[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := AlternatingGroup(5);;[127X[104X
    [4X[25Xgap>[125X [27Xind := InducedFromAllMaximalCyclicSubgroups(G);;[127X[104X
    [4X[25Xgap>[125X [27XCCT := CCTable(G);;[127X[104X
    [4X[25Xgap>[125X [27XImportToCCTable(CCT, ind);[127X[104X
    [4X[25Xgap>[125X [27XUpdateHNFCCTable(CCT);[127X[104X
    [4X[28X0[128X[104X
    [4X[25Xgap>[125X [27XHasFullRankCCTable(CCT);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  [1X4.1-4 UpdateHNFCCTable[101X
  
  [33X[1;0Y[29X[2XUpdateHNFCCTable[102X( [3XCCT[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ya non-negative integer[133X
  
  [33X[0;0YLet  [3XCCT[103X  be  an  [2XIsCCTable[102X  ([14X4.1-1[114X)  object. This function incorporates the
  generalized  characters recently imported via [2XImportEncodedToCCTable[102X ([14X4.1-3[114X)
  (or  [2XImportToCCTable[102X  ([14X4.1-3[114X)) into the Hermite normal form basis (or bases,
  in  case of a splitting centre, see [2XSplitByCentre[102X ([14X4.3-1[114X)) of the lattice of
  generalized characters of [3XCCT[103X found so far, using [2XAddVectorToHNF[102X ([14X4.1-10[114X).[133X
  
  [33X[0;0YIf [2XHasFullRankCCTable[102X ([14X4.1-5[114X) is [9Xtrue[109X for [3XCCT[103X, the return value is the index
  by  which  the  lattice found so far has shrunk (that is, the product of all
  indices  returned  by  the  individual  calls  to  [2XAddVectorToHNF[102X ([14X4.1-10[114X));
  otherwise  the Hermite normal forms are simply recomputed from scratch and [22X0[122X
  is returned.[133X
  
  [1X4.1-5 HasFullRankCCTable[101X
  
  [33X[1;0Y[29X[2XHasFullRankCCTable[102X( [3XCCT[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Y[9Xtrue[109X or [9Xfalse[109X[133X
  
  [33X[0;0YLet  [3XCCT[103X  be  an [2XIsCCTable[102X ([14X4.1-1[114X) object. This function returns [9Xtrue[109X if the
  total  number  of  characters currently collected in the Hermite normal form
  data  of  [3XCCT[103X  (see [2XUpdateHNFCCTable[102X ([14X4.1-4[114X)), together with the irreducible
  characters  already  found,  equals  the  number of conjugacy classes of the
  underlying  group, that is if the lattice of characters found so far already
  has  full  rank  (the index in the full lattice of generalized characters is
  finite).[133X
  
  [33X[0;0YFor  example,  the  induced  characters  from all (maximal) cyclic subgroups
  always  span  a  lattice  of  full rank, see the example for [2XImportToCCTable[102X
  ([14X4.1-3[114X).[133X
  
  [1X4.1-6 FindIndexCCTable[101X
  
  [33X[1;0Y[29X[2XFindIndexCCTable[102X( [3XCCT[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ya positive integer, or [9Xfail[109X[133X
  
  [33X[0;0YLet  [3XCCT[103X  be  an [2XIsCCTable[102X ([14X4.1-1[114X) object. If [10XHasFullRankCCTable([3XCCT[103X[10X) = [110X[9Xtrue[109X
  this  function  returns  the  index  of  the  lattice  spanned  by the class
  functions  stored  in  [3XCCT[103X  in  the  full lattice spanned by the irreducible
  characters of the underlying group. Otherwise, [9Xfail[109X is returned.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := AlternatingGroup(5);;[127X[104X
    [4X[25Xgap>[125X [27XG := AlternatingGroup(5);;[127X[104X
    [4X[25Xgap>[125X [27XCCT := CCTable(G);;[127X[104X
    [4X[25Xgap>[125X [27XImportInducedFromAllMaximalCyclicToCCTable(CCT);[127X[104X
    [4X[25Xgap>[125X [27XFindIndexCCTable(CCT);[127X[104X
    [4X[28X2[128X[104X
    [4X[25Xgap>[125X [27XImportToCCTable(CCT, SmallPowerMapCharacters(G));[127X[104X
    [4X[25Xgap>[125X [27XUpdateHNFCCTable(CCT);[127X[104X
    [4X[28X2[128X[104X
    [4X[25Xgap>[125X [27XFindIrreduciblesInFullLattices(CCT);[127X[104X
    [4X[25Xgap>[125X [27XCCT!.irr;[127X[104X
    [4X[28X[ [ 1, 1, 1, 1, 0, 0, 0 ], [ 3, -1, 0, 0, 0, -1, -1 ], [128X[104X
    [4X[28X  [ 3, -1, 0, 1, 0, 1, 1 ], [ 4, 0, 1, -1, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 5, 1, -1, 0, 0, 0, 0 ] ][128X[104X
  [4X[32X[104X
  
  [1X4.1-7 ImportInducedFromAllMaximalCyclicToCCTable[101X
  
  [33X[1;0Y[29X[2XImportInducedFromAllMaximalCyclicToCCTable[102X( [3XCCT[103X ) [32X function[133X
  
  [33X[0;0YLet [3XCCT[103X be an [2XIsCCTable[102X ([14X4.1-1[114X) object of a group [22XG[122X. Unless this has already
  been  done  (recorded  in  a  component  of [3XCCT[103X), this function computes the
  characters  of  [22XG[122X  induced  from  all  maximal  cyclic  subgroups  of [22XG[122X (via
  [2XInducedFromAllMaximalCyclicSubgroups[102X  ([14X3.2-7[114X)),  imports  them into [3XCCT[103X, and
  updates  its Hermite normal form data. It also computes and stores, for each
  part  of the (possibly split) lattice, the index of the resulting lattice of
  generalized  characters in the full lattice of generalized characters, using
  that  this  index  is  only  divisible  by  primes  [22Xp[122X  for  which  the Sylow
  [22Xp[122X-subgroups   of   [22XG[122X   are   not   cyclic.   The   algorithm  makes  use  of
  [2XElementaryDivisorsPPartRk[102X ([14XEDIM: ElementaryDivisorsPPartRk[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := MathieuGroup(24);;[127X[104X
    [4X[25Xgap>[125X [27XCCT := CCTable(G);;[127X[104X
    [4X[25Xgap>[125X [27XImportInducedFromAllMaximalCyclicToCCTable(CCT);[127X[104X
    [4X[25Xgap>[125X [27XFindIndexCCTable(CCT);[127X[104X
    [4X[28X4718592[128X[104X
    [4X[25Xgap>[125X [27XStringCollectedFactors(FindIndexCCTable(CCT));[127X[104X
    [4X[28X"2^19 3^2"[128X[104X
  [4X[32X[104X
  
  [1X4.1-8 FindIrreduciblesInFullLattices[101X
  
  [33X[1;0Y[29X[2XFindIrreduciblesInFullLattices[102X( [3XCCT[103X ) [32X function[133X
  
  [33X[0;0YLet [3XCCT[103X be an [2XIsCCTable[102X ([14X4.1-1[114X) object. For every orthogonal subspace in the
  HNF  data  of  [3XCCT[103X  which  contains  an  integer  basis of the corresponding
  sublattice  this  function  computes  the  irreducible  characters  in  that
  sublattice    using    a    variant    of    the    LLL    algorithm    (see
  [2XLLLTransformUnimodularGram[102X  ([14X3.4-4[114X)).  The  irreducible  characters are then
  moved  into  the  list of known irreducibles ([10XCCT!.irr[110X) and this part of the
  HNF  data  is  cleared. If [2XSplitByCentre[102X ([14X4.3-1[114X) was used, the function also
  adds Galois conjugates of the found irreducibles.[133X
  
  [33X[0;0YSee [2XFindIndexCCTable[102X ([14X4.1-6[114X) for an example.[133X
  
  [1X4.1-9 IrrCCTableHNF[101X
  
  [33X[1;0Y[29X[2XIrrCCTableHNF[102X( [3XCCT[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ya list of irreducible characters, or [9Xfail[109X[133X
  
  [33X[0;0YLet  [3XCCT[103X  be  an  [2XIsCCTable[102X  ([14X4.1-1[114X)  object  of  a  group  [22XG[122X. This function
  implements  an induce-reduce algorithm that computes and returns the list of
  irreducible  characters of [22XG[122X, and is installed as the default method for [2XIrr[102X
  ([14XReference: Irr[114X) for [2XIsCCTable[102X ([14X4.1-1[114X) objects.[133X
  
  [33X[0;0YIt   successively   imports   into  [3XCCT[103X  (via  [2XImportToCCTable[102X  ([14X4.1-3[114X)  and
  [2XUpdateHNFCCTable[102X  ([14X4.1-4[114X))  the  characters  induced from all maximal cyclic
  subgroups   (via  [2XImportInducedFromAllMaximalCyclicToCCTable[102X  ([14X4.1-7[114X)),  the
  trivial  and  [2XNaturalCharacters[102X  ([14X4.4-1[114X)  of [22XG[122X, cheap generalized characters
  obtained  from  power  maps  (via  [2XSmallPowerMapCharacters[102X ([14X3.2-9[114X)), and, if
  still  needed, the characters induced from the maximal non-cyclic elementary
  subgroups   of   [22XG[122X   (via  [2XMaximalNonCyclicElementarySubgroups[102X  ([14X3.3-1[114X)  and
  [2XInductionDataFromElementaryCCTable[102X    ([14X3.3-4[114X)),    stopping   as   soon   as
  [2XFindIndexCCTable[102X      ([14X4.1-6[114X)      returns      [22X1[122X.     It     then     calls
  [2XFindIrreduciblesInFullLattices[102X ([14X4.1-8[114X) to extract the irreducible characters
  from the completed lattice.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := AlternatingGroup(5);;[127X[104X
    [4X[25Xgap>[125X [27XG := AlternatingGroup(5);;[127X[104X
    [4X[25Xgap>[125X [27XCCT := CCTable(G);;[127X[104X
    [4X[25Xgap>[125X [27XIrrCCTableHNF(CCT);[127X[104X
    [4X[28X[ [ 1, 1, 1, 1, 0, 0, 0 ], [ 3, -1, 0, 0, 0, -1, -1 ], [128X[104X
    [4X[28X  [ 3, -1, 0, 1, 0, 1, 1 ], [ 4, 0, 1, -1, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 5, 1, -1, 0, 0, 0, 0 ] ][128X[104X
  [4X[32X[104X
  
  [33X[0;0YFinally,  we  document  a  utility function for adjusting the Hermite normal
  form of an integer by adding a further vector to the lattices spanned by its
  rows.[133X
  
  [1X4.1-10 AddVectorToHNF[101X
  
  [33X[1;0Y[29X[2XAddVectorToHNF[102X( [3Xhnf[103X, [3Xpiv[103X, [3Xv[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Ya positive integer[133X
  
  [33X[0;0YHere  [3Xhnf[103X is an integer matrix in Hermite normal form, already of the (full)
  rank  of the ambient lattice, [3Xpiv[103X is the list of its pivot column positions,
  and  [3Xv[103X  is a further integer vector in the rational span of the rows of [3Xhnf[103X.
  This  function  changes [3Xhnf[103X in place to a Hermite normal form of the lattice
  generated by the old rows of [3Xhnf[103X together with [3Xv[103X (which, since the rank does
  not change, still has the same number of rows), and returns the index of the
  old  lattice  of  [3Xhnf[103X  in  this  new  lattice  (which  is [22X1[122X if [3Xv[103X was already
  contained in the old lattice). This is used by [2XUpdateHNFCCTable[102X ([14X4.1-4[114X).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27Xhnf := [ [ 1, 0, 1, 478, -2, -649 ], [ 0, 1, 1, 362, 2, -492 ],[127X[104X
    [4X[25X>[125X [27X[ 0, 0, 0, 546, 0, -742 ] ];;[127X[104X
    [4X[25Xgap>[125X [27Xpiv := [1,2,4];;[127X[104X
    [4X[25Xgap>[125X [27Xv := [3, 7, 1, 6, 0, -1];;[127X[104X
    [4X[25Xgap>[125X [27XAddVectorToHNF(hnf, piv, v);[127X[104X
    [4X[28X39[128X[104X
    [4X[25Xgap>[125X [27Xhnf;[127X[104X
    [4X[28X[ [ 1, 0, 1, 2, -1090, 779 ], [ 0, 1, 1, 12, -798, 558 ], [128X[104X
    [4X[28X  [ 0, 0, 0, 14, 32, -42 ] ][128X[104X
  [4X[32X[104X
  
  
  [1X4.2 [33X[0;0YScalar products[133X[101X
  
  [1X4.2-1 CCTScalarProduct[101X
  
  [33X[1;0Y[29X[2XCCTScalarProduct[102X( [3XCCT[103X, [3Xc[103X, [3Xd[103X ) [32X function[133X
  [6XReturns:[106X  [33X[0;10Yan integer[133X
  
  [33X[0;0YLet  [3XCCT[103X  be an [2XIsCCTable[102X ([14X4.1-1[114X) object, and let [3Xc[103X and [3Xd[103X be two generalized
  characters   of   [3XCCT[103X,   encoded   as   integer   vectors   as  produced  by
  [2XEncodeForCCTable[102X  ([14X4.1-2[114X). This function returns the scalar product of [3Xc[103X and
  [3Xd[103X.[133X
  
  [33X[0;0YThis  is  used as the method for [2XScalarProduct[102X ([14XReference: ScalarProduct for
  two vector objects[114X) for characters of an [2XIsCCTable[102X ([14X4.1-1[114X) object. The [5XCCTab[105X
  also  provides  faster implementations of this function as kernel extension.
  (It     can     be     checked     if     this     is     installed     with
  [10XIsBound(CCTScalarProductInternal2);[110X.[133X
  
  [33X[0;0YNote  that  this  function  cannot be used for arbitrary class functions, it
  only  works  for  class  functions which are rational linear combinations of
  irreducible characters.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := AlternatingGroup(5);;[127X[104X
    [4X[25Xgap>[125X [27XG := AlternatingGroup(5);;[127X[104X
    [4X[25Xgap>[125X [27XCCT := CCTable(G);;[127X[104X
    [4X[25Xgap>[125X [27Xirr := Irr(CCT);[127X[104X
    [4X[28X[ [ 1, 1, 1, 1, 0, 0, 0 ], [ 3, -1, 0, 0, 0, -1, -1 ], [128X[104X
    [4X[28X  [ 3, -1, 0, 1, 0, 1, 1 ], [ 4, 0, 1, -1, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 5, 1, -1, 0, 0, 0, 0 ] ][128X[104X
    [4X[25Xgap>[125X [27XList(irr, c-> List(irr, d-> ScalarProduct(CCT, c, d)));[127X[104X
    [4X[28X[ [ 1, 0, 0, 0, 0 ], [ 0, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0 ], [128X[104X
    [4X[28X  [ 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, 1 ] ][128X[104X
  [4X[32X[104X
  
  
  [1X4.3 [33X[0;0YSplitting by the centre[133X[101X
  
  [1X4.3-1 SplitByCentre[101X
  
  [33X[1;0Y[29X[2XSplitByCentre[102X( [3XCCT[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XSplitByCentre[102X( [3XCCT[103X, [3Xzind[103X ) [32X method[133X
  [33X[1;0Y[29X[2XHasSplittingCentre[102X( [3XCCT[103X ) [32X filter[133X
  [33X[1;0Y[29X[2XSplittingCentre[102X( [3XCCT[103X ) [32X attribute[133X
  
  [33X[0;0YLet  [3XCCT[103X  be  an  [2XIsCCTable[102X ([14X4.1-1[114X) object of a group [22XG[122X. In the second form,
  [3Xzind[103X  must be a list of numbers of conjugacy classes of [3XG[103X forming a subgroup
  [22XZ[122X  of  the  center of [22XG[122X (with the class of the identity first). In the first
  form,  [3Xzind[103X  is computed as the set of classes of length [22X1[122X, that is the full
  centre of [22XG[122X.[133X
  
  [33X[0;0YEach  irreducible  character  of  [3XG[103X  restricted  to  [22XZ[122X  is  a multiple of an
  irreducible   character   of   [22XZ[122X  (Schur's  Lemma).  We  get  an  orthogonal
  decomposition  of  the  lattice  of  generalized characters into sublattices
  spanned  by  irreducible characters whose restrictions to [22XZ[122X are multiples of
  the  same  irreducible  character.  [2XSplitByCentre[102X  computes a data structure
  which   allows   to  split  any  generalized  character  according  to  this
  decomposition.  We only need to store class functions for one character of [22XZ[122X
  per  Galois  orbit  (the  others  can  be  computed by [2XGaloisCyc[102X ([14XReference:
  GaloisCyc for a cyclotomic[114X)).[133X
  
  [33X[0;0YThis  splitting  is  applied to all generalized characters already stored in
  [3XCCT[103X and to all generalized characters which are imported afterwards.[133X
  
  [33X[0;0YAfter  a successful call with non-trivial [22XZ[122X the filter [2XHasSplittingCentre[102X is
  set in [3XCCT[103X and the attribute [2XSplittingCentre[102X of [3XCCT[103X is set to [3Xzind[103X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := SL(4,5);;[127X[104X
    [4X[25Xgap>[125X [27XCCT := CCTable(G);;[127X[104X
    [4X[25Xgap>[125X [27XSplitByCentre(CCT);[127X[104X
    [4X[25Xgap>[125X [27XHasSplittingCentre(CCT);[127X[104X
    [4X[28Xtrue[128X[104X
    [4X[25Xgap>[125X [27XSplittingCentre(CCT);[127X[104X
    [4X[28X[ 1, 10, 19, 28 ][128X[104X
  [4X[32X[104X
  
  [1X4.3-2 SplitCharacterByCentre[101X
  
  [33X[1;0Y[29X[2XSplitCharacterByCentre[102X( [3XCCT[103X, [3Xch[103X ) [32X operation[133X
  [33X[1;0Y[29X[2XSplitEncodedCharacterByCentre[102X( [3XCCT[103X, [3Xech[103X ) [32X operation[133X
  [6XReturns:[106X  [33X[0;10Ya list of (encoded) characters[133X
  
  [33X[0;0YLet  [3XCCT[103X be an [2XIsCCTable[102X ([14X4.1-1[114X) object with [10XHasSplittingCentre(CCT) = [110X[9Xtrue[109X.
  In the first form let [3Xch[103X be a generalized character of the underlying group,
  given  by  a  list  of  values  on  [13Xall[113X conjugacy classes (not encoded as by
  [2XEncodeForCCTable[102X ([14X4.1-2[114X)). In the second form [3Xech[103X is a character endoded for
  [3XCCT[103X.  This  function  decomposes  the  character  according to the splitting
  centre (see [2XSplitByCentre[102X ([14X4.3-1[114X)).[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := SmallGroup(96, 14);;[127X[104X
    [4X[25Xgap>[125X [27XG := SmallGroup(96, 14);;[127X[104X
    [4X[25Xgap>[125X [27XCCT := CCTable(G);;[127X[104X
    [4X[25Xgap>[125X [27XSplitByCentre(CCT);[127X[104X
    [4X[25Xgap>[125X [27XU := TrivialSubgroup(G);;[127X[104X
    [4X[25Xgap>[125X [27Xreg := InducedClassFunction(TrivialCharacter(U), G);;[127X[104X
    [4X[25Xgap>[125X [27XSplitCharacterByCentre(CCT, reg);[127X[104X
    [4X[28X[ [ 24, 0, 0, 24, 0, 24, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, [128X[104X
    [4X[28X      0, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 24, 0, 0, -24, 0, 24, 0, 0, 0, 0, 0, 0, 0, -24, 0, 0, 0, 0, 0, 0, [128X[104X
    [4X[28X      0, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 24, 0, 0, 24, 0, -24, 0, 0, 0, 0, 0, 0, 0, -24, 0, 0, 0, 0, 0, 0, [128X[104X
    [4X[28X      0, 0, 0, 0 ], [128X[104X
    [4X[28X  [ 24, 0, 0, -24, 0, -24, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, [128X[104X
    [4X[28X      0, 0, 0, 0 ] ][128X[104X
  [4X[32X[104X
  
  
  [1X4.4 [33X[0;0YNatural characters[133X[101X
  
  [1X4.4-1 NaturalCharacters[101X
  
  [33X[1;0Y[29X[2XNaturalCharacters[102X( [3XG[103X ) [32X attribute[133X
  [6XReturns:[106X  [33X[0;10Ya list of characters[133X
  
  [33X[0;0YReturns a list of characters of the finite group [3XG[103X derived from the way [3XG[103X is
  represented,  these  are  ususally cheap to compute. The following cases are
  handled:[133X
  
  [8Xpermutation groups[108X
        [33X[0;6Ythe  permutation  characters  on the orbits of moved points, minus the
        trivial character[133X
  
  [8Xmatrix groups in characteristic zero[108X
        [33X[0;6Ythe character of traces of the elements[133X
  
  [8Xmatrix groups over finite fields[108X
        [33X[0;6Ythe  permutation  characters  on  the  non-zero vectors of the natural
        module   (over   the  field  of  definition  and  over  its  quadratic
        extension), and on the one-dimensional subspaces of the natural module[133X
  
  [8Xotherwise[108X
        [33X[0;6Ythe regular character of [3XG[103X[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XNaturalCharacters(AlternatingGroup(5));[127X[104X
    [4X[28X[ Character( CharacterTable( Alt( [ 1 .. 5 ] ) ),[128X[104X
    [4X[28X  [ 4, 0, 1, -1, -1 ] ) ][128X[104X
    [4X[25Xgap>[125X [27XNaturalCharacters(SL(3,5));[127X[104X
    [4X[28X[ Character( CharacterTable( SL(3,5) ),[128X[104X
    [4X[28X  [ 124, 4, 4, 0, 0, 4, 24, 4, 4, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, [128X[104X
    [4X[28X      0, 0, 0, 0, 0, 0, 0, 0, 0 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(3,5) ),[128X[104X
    [4X[28X  [ 15624, 24, 24, 0, 0, 24, 624, 24, 24, 0, 0, 24, 0, 0, 0, 0, 0, 0, [128X[104X
    [4X[28X      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ), [128X[104X
    [4X[28X  Character( CharacterTable( SL(3,5) ),[128X[104X
    [4X[28X  [ 30, 6, 0, 6, 6, 2, 5, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, -1, [128X[104X
    [4X[28X      -1, -1, -1, -1, -1, -1, -1, -1, -1 ] ) ][128X[104X
    [4X[25Xgap>[125X [27XNaturalCharacters(SmallGroup(24,4));[127X[104X
    [4X[28X[ Character( CharacterTable( <pc group of size 24 with [128X[104X
    [4X[28X    4 generators> ), [ 24, 0, 0, 0, 0, 0, 0, 0, 0 ] ) ][128X[104X
  [4X[32X[104X
  
