home *** CD-ROM | disk | FTP | other *** search
/ Math Solutions 1995 October / Math_Solutions_CD-ROM_Walnut_Creek_October_1995.iso / pc / mac / discrete / doc / chartabl.tex < prev    next >
Encoding:
Text File  |  1993-05-05  |  111.5 KB  |  2,646 lines

  1. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2. %%
  3. %A  chartabl.tex                GAP documentation              Goetz Pfeiffer
  4. %%
  5. %A  @(#)$Id: chartabl.tex,v 3.35 1993/02/19 11:41:43 gap Exp $
  6. %%
  7. %Y  Copyright 1990-1992,  Lehrstuhl D fuer Mathematik,  RWTH Aachen,  Germany
  8. %%
  9. %H  $Log: chartabl.tex,v $
  10. %H  Revision 3.35  1993/02/19  11:41:43  gap
  11. %H  removed unecessary reference
  12. %H
  13. %H  Revision 3.34  1993/02/19  11:30:42  gap
  14. %H  removed overfull hboxes
  15. %H
  16. %H  Revision 3.33  1993/02/19  10:48:42  gap
  17. %H  adjustments in line length and spelling
  18. %H
  19. %H  Revision 3.32  1993/02/18  16:42:22  fceller
  20. %H  added Alexander's Dixon/Schneider
  21. %H
  22. %H  Revision 3.31  1993/02/18  16:18:11  felsch
  23. %H  documentation of Dixon algorithm added
  24. %H
  25. %H  Revision 3.30  1993/02/12  13:41:02  felsch
  26. %H  examples fixed
  27. %H
  28. %H  Revision 3.28  1992/11/20  18:48:27  martin
  29. %H  fixed a reference and two underfull vboxes
  30. %H
  31. %H  Revision 3.27  1992/11/03  10:24:29  sam
  32. %H  added info about generic table 'P:Q'
  33. %H
  34. %H  Revision 3.26  1992/10/28  14:06:40  goetz
  35. %H  added descriptions of 'CharDegAgGroup', 'CharTableSSGroup'
  36. %H
  37. %H  Revision 3.25  1992/09/07  14:15:31  sam
  38. %H  added info about new tables 'GU3' and 'SU3'
  39. %H
  40. %H  Revision 3.24  1992/08/12  13:24:38  sam
  41. %H  added interface to MOC
  42. %H
  43. %H  Revision 3.23  1992/08/06  13:26:55  hbesche
  44. %H  little change in 'CharTablePGroup'
  45. %H
  46. %H  Revision 3.22  1992/07/03  12:27:37  sam
  47. %H  little change in 'CharTableSplitClasses'
  48. %H
  49. %H  Revision 3.21  1992/07/01  16:51:24  sam
  50. %H  added description of 'SortCharTable'
  51. %H
  52. %H  Revision 3.20  1992/04/27  11:55:51  martin
  53. %H  replaced '\size{<set>}' with '\|<set>\|'
  54. %H
  55. %H  Revision 3.19  1992/04/07  23:05:55  martin
  56. %H  changed the author line
  57. %H
  58. %H  Revision 3.18  1992/04/07  22:58:58  martin
  59. %H  removed overfull and underfull boxes
  60. %H
  61. %H  Revision 3.17  1992/04/07  21:03:56  sam
  62. %H  added documentation of Hans--Ulrich's functions
  63. %H
  64. %H  Revision 3.16  1992/04/03  08:32:27  sam
  65. %H  correction concerning 'SizeScreen'
  66. %H
  67. %H  Revision 3.15  1992/04/02  16:15:15  martin
  68. %H  replaced 'Linelength' by 'SizeScreen'
  69. %H
  70. %H  Revision 3.14  1992/04/01  15:46:26  sam
  71. %H  added citation
  72. %H
  73. %H  Revision 3.13  1992/03/31  09:45:19  sam
  74. %H  *** empty log message ***
  75. %H
  76. %H  Revision 3.12  1992/03/27  16:58:28  sam
  77. %H  added section 'Some Notes on ...'
  78. %H
  79. %H  Revision 3.11  1992/03/27  13:51:48  sam
  80. %H  removed "'" in index entries
  81. %H
  82. %H  Revision 3.10  1992/03/20  16:36:08  sam
  83. %H  removed reference of 'CharTableDixonSchneider'
  84. %H
  85. %H  Revision 3.9  1992/03/13  18:30:17  goetz
  86. %H  added 'CharTableWreathSymmetric'.
  87. %H
  88. %H  Revision 3.8  1992/03/13  18:24:16  goetz
  89. %H  added "WeylB" and "WeylD" to 'CharTable'.
  90. %H
  91. %H  Revision 3.7  1992/03/10  18:02:31  goetz
  92. %H  added 'NrPolyhedralSubgroups'.
  93. %H
  94. %H  Revision 3.6  1992/03/03  14:03:16  sam
  95. %H  added documantation of 'ClassStructureCharTable'
  96. %H
  97. %H  Revision 3.5  1992/02/24  14:04:49  sam
  98. %H  changed format of Brauer tables
  99. %H
  100. %H  Revision 3.4  1992/02/13  15:01:34  sam
  101. %H  renamed 'MatrixAutomorphisms' to 'MatAutomorphisms'
  102. %H
  103. %H  Revision 3.3  1992/02/06  13:03:56  sam
  104. %H  added change in 'GetFusionMap',
  105. %H  reformatted file (to 73 columns)
  106. %H
  107. %H  Revision 3.2  1992/01/14  13:59:15  sam
  108. %H  adjusted citations
  109. %H
  110. %H  Revision 3.1  1991/12/30  08:06:08  sam
  111. %H  initial revision under RCS
  112. %H
  113. %%
  114. \Chapter{Character Tables}\index{tables}
  115.  
  116. This chapter contains
  117.  
  118. the introduction of {\GAP} character tables (see "Some Notes on Character
  119. Theory  in  GAP",  "Character Table  Records",  "Brauer  Table  Records",
  120. "IsCharTable",   "TestCharTable",  "Operations   Records   for  Character
  121. Tables") and  some  conventions for  their  usage  (see  "Conventions for
  122. Character Tables"),
  123.  
  124. the  description how to construct or get  character tables  (see "Getting
  125. Character Tables",  "CharTable";  for the contents  of the table library,
  126. see  Chapter "Character  Table Libraries"),  matrix representations  (see
  127. "MatRepresentationsPGroup").
  128.  
  129. the  description  of  some functions  which  give information  about  the
  130. conjugacy  classes of character tables, that  is, to compute classlengths
  131. (see       "InitClassesCharTable"),      inverse       classes       (see
  132. "InverseClassesCharTable")  and  classnames  (see "ClassNamesCharTable"),
  133. structure        constants        (see         "ClassMultCoeffCharTable",
  134. "MatClassMultCoeffsCharTable",  "ClassStructureCharTable"),  the  set  of
  135. real  classes (see "RealClassesCharTable"), orbits of the Galois group on
  136. the  classes  (see  "ClassOrbitCharTable")  and  roots  of  classes  (see
  137. "ClassRootsCharTable"),
  138.  
  139. the  description  how character tables or parts of them  can be displayed
  140. (see  "DisplayCharTable")   and  sorted  (see  "SortCharactersCharTable",
  141. "SortClassesCharTable", "SortCharTable").
  142.  
  143. the description of functions  which  compute  the automorphism group of a
  144. matrix    (see    "MatAutomorphisms")    or    character    table    (see
  145. "TableAutomorphisms"), or which compute permutations relating permutation
  146. equivalent matrices (see "TransformingPermutations") or  character tables
  147. (see "TransformingPermutationsCharTables"),
  148.  
  149. the description of functions which get fusions from and store fusions on
  150. tables (see "GetFusionMap", "StoreFusion", "FusionConjugacyClasses"),
  151.  
  152. the description of the interface  between {\GAP} and the MOC3 system (see
  153. "MAKElb11",  "ScanMOC", "MOCChars",  "GAPChars", "MOCTable", "PrintToMOC"
  154. ), and  of a function which converts {\GAP} tables  to {\CAS} tables (see
  155. "PrintToCAS").
  156.  
  157. \vspace{5mm}
  158. This chapter does *not* contain information about
  159.  
  160. functions   to  construct  characters  (see  Chapter  "Characters"),   or
  161. functions to construct and use  maps  (see Chapter "Maps and Parametrized
  162. Maps").
  163.  
  164. For some  elaborate examples how character tables are  handled in {\GAP},
  165. see "About Character Tables".
  166.  
  167. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  168. \Section{Some Notes on Character Theory in GAP}
  169.  
  170. It seems to be necessary to state some basic facts --and maybe warnings--
  171. at the beginning of the character theory  package.  This holds for people
  172. who  are  familiar  with  character theory  because there  is  no  global
  173. reference on  computational  character  theory,  although  there are many
  174. papers  on  this  topic,  like~\cite{NPP84}  or~\cite{LP91}.   It  holds,
  175. however, also for people who are familiar with {\GAP} because the general
  176. concept of categories and domains (see "About Domains and Categories" and
  177. chapter  "Domains") plays no important  role here --we  will justify this
  178. later in this section.
  179.  
  180. Intuitively, characters of  the  finite  group  $G$ can be  thought of as
  181. certain mappings defined on $G$, with values in the complex number field;
  182. the set of  all characters  of $G$  forms  a semiring  with addition  and
  183. multiplication  both defined pointwise, which is embedded in the ring  of
  184. generalized (or virtual) characters in the natural way.  A {\bf Z}--basis
  185. of this ring, and also  a vector space  base of the vector space of class
  186. functions, is given by the irreducible characters.
  187.  
  188. At this stage  one  could ask where there  is a problem,  since all these
  189. algebraic structures are supported by {\GAP}, as is described in chapters
  190. "Domains", "Rings", "Vector Spaces", "Mappings", and others.
  191.  
  192. Now,  we  first  should  say  that  characters are  *not*  implemented as
  193. mappings, that there are *no* {\GAP}  domains  denoting character  rings,
  194. and that a character table is *not* a domain.
  195.  
  196. For computations with characters of a finite group $G$ with $n$ conjugacy
  197. classes,  say,  we  fix an order of the classes, and  then identify  each
  198. class with its position according to  this order.  Each character of  $G$
  199. will be  represented as list of length $n$ where at  the $i$--th position
  200. the  character value  for elements of the $i$--th  class is stored.  Note
  201. that we do not need to know the conjugacy classes of $G$ physically, even
  202. our ``knowledge\'\'\ of the group may be  implicit in the sense that e.g.
  203. we  know how  many classes of involutions $G$ has, and which length these
  204. classes have, but we never have seen an element of $G$, or a presentation
  205. or representation  of $G$.  This allows to work with the character tables
  206. of very large  groups, e.g., of the so--called monster,  where {\GAP} has
  207. no chance to work with the group.
  208.  
  209. As a consequence,  also other information involving  characters is  given
  210. implicitly.  For example, we can talk about the kernel of a character not
  211. as a  group but as a list of classes  (more  exactly\:\  a list  of their
  212. positions according to  the order of classes) forming this kernel; we can
  213. deduce the  group order, the contained cyclic subgroups and so on, but we
  214. do not get the group itself.
  215.  
  216. Characters are one kind of class functions, and we also represent general
  217. class functions as lists.  Two important  kinds of these functions  which
  218. are not characters are power maps and fusion maps.  The $k$--th power map
  219. maps  each  class to the class  of $k$--th  powers  of its elements,  the
  220. corresponding list  contains at each position the position of the  image.
  221. A subgroup fusion  map  between the classes  of a subgroup $H$ of $G$ and
  222. the classes of $G$ maps each class $c$ of $H$  to that class of $G$  that
  223. contains $c$;  if  we  know only  the character tables of the two groups,
  224. this means with respect to a fixed embedding of $H$ in $G$.
  225.  
  226. So the  data  mainly consist of  lists,  and  typical  calculations  with
  227. character tables are more or less  loops over these lists.  For  example,
  228. the known scalar product of two characters $\chi$, $\psi$ of $G$ given by
  229. \[ [\chi,\psi] = \frac{1}{\|G\|}  \sum_{g\in G}  \chi(g)  \psi(g^{-1}) \]
  230. can be written as
  231.  
  232. |    Sum( [1..n], i -> t.classes[i]*chi[i]*GaloisCyc(psi[i],-1) );|
  233.  
  234. where 't.classes' is the  list  of classlengths, and 'chi', 'psi' are the
  235. lists  corresponding  to   $\chi$,  $\psi$,  respectively.    Characters,
  236. classlengths,  element  orders,  power  maps,  fusion   maps  and   other
  237. information about a  group is stored in  a  common character table record
  238. just  to avoid  confusion, not to  indicate an algebraic structure (which
  239. would mean a domain in the sense of {\GAP}).
  240.  
  241. A character table is  not determined  by something similar  to generators
  242. for groups or rings in {\GAP} where other components (the knowledge about
  243. the domain) is stored for the sake of efficiency.  In many situations one
  244. works  with incomplete tables or preliminary tables which  are,  strictly
  245. speaking, no character tables but shall be handled like character tables.
  246. Moreover, the correctness or even the consistency of a character table is
  247. hard to prove.  Thus  it is not sufficient to view a character table as a
  248. black box, and to  get information  about it using a  few  property  test
  249. functions.  In fact  there are very few  functions that return  character
  250. tables  or that  are property tests.  Most {\GAP} functions dealing  with
  251. character tables return class functions, or lists of them, or information
  252. about class functions.  For that, {\GAP} directly accesses the components
  253. of  the  table  record, and  the  user will  have to  look  at the record
  254. components, too, in order to  put  the pieces of the puzzle together, and
  255. to decide how to go on.
  256.  
  257. So it is not easy to say what a character table *is*; it *describes* some
  258. properties of  the  underlying group, and it describes  them in  a rather
  259. abstract way.   Also  {\GAP} does not  know whether  or not a list *is* a
  260. character,  it will e.g. regard a list with all entries equal to 1 as the
  261. trivial character if it is passed to a function that expects characters.
  262.  
  263. It is  one of  the advantages  of  character theory that  after  one  has
  264. translated  a problem concerning groups into  a  problem concerning their
  265. character  tables the calculations are mostly  simple.  For  example, one
  266. can often prove that a group is  a Galois group  over the rationals using
  267. calculations  of  structure  constants  that  can be  computed  from  the
  268. character table, and  informations on  (the character tables of)  maximal
  269. subgroups.
  270.  
  271. In this  kind  of  problems the translation back to  the group is just an
  272. interpretation by the  user, it does  not take place in  {\GAP}.   At the
  273. moment, the only interface between handling groups and handling character
  274. tables is the fixed order of conjugacy classes.
  275.  
  276. Note that  algebraic  structures are  not  of  much interest in character
  277. theory.  The main  reason for this is that we have no homomorphisms since
  278. we need not to know anything about the group multiplication.
  279.  
  280. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  281. \Section{Character Table Records}\index{character tables!format}
  282. \index{tables!format}
  283.  
  284. For  {\GAP}, a  character  table is any  record  which has the components
  285. 'centralizers' and 'name' (see "IsCharTable").
  286.  
  287. There are  three different but very similar types of character  tables in
  288. {\GAP},  namely  ordinary  tables,  Brauer  tables  and  generic  tables.
  289. Generic  tables  are described in  Chapter  "Generic  Character  Tables".
  290. Brauer tables are defined and stored relative to ordinary tables, so they
  291. will be described  in  "Brauer Table Records", and we start with ordinary
  292. tables.
  293.  
  294. You may  store arbitrary information on an  ordinary character table, but
  295. these are the only fields used by {\GAP} functions\:
  296.  
  297. 'centralizers':\\  the list of centralizer orders which should be
  298.                    positive integers
  299.  
  300. 'name':\\ the name of the table (a string); it is used for fusions (see
  301.           below), programs for generic tables (see chapter "Generic
  302.           Character Tables") and for access to library tables
  303.           (see "CharTable", "Contents of the Table Libraries")
  304.  
  305. 'order':\\ the group order, a positive integer; in most cases, it is
  306.            equal to 'centralizers[1]'
  307.  
  308. 'classes':\\ the lengths of conjugacy classes, a list of positive
  309.              integers
  310.  
  311. 'orders':\\ the list of representative orders
  312.  
  313. 'powermap':\\ a list where at position <p>, if bound, the <p>-th powermap
  314.               is stored; the <p>-th powermap is a -possibly parametrized-
  315.               map (see "More about Maps and Parametrized Maps")
  316.  
  317. 'fusions':\\ a list of records which describe the fusions into other
  318.              character tables, that is subgroup fusions and factor
  319.              fusions; any record has fields 'name' (the name of the
  320.              destination table) and 'map' (a list of images for the
  321.              classes, it may be parametrized (see "More about Maps and
  322.              Parametrized Maps"));
  323.              if there are different fusions with same destination table,
  324.              the field 'specification' is used to distinguish them;
  325.              optional fields are 'type' (a string that is '\"normal\"'
  326.              for normal subgroup fusions and '\"factor\"' for factor
  327.              fusions) and 'text' (a string with information about the
  328.              fusion)
  329.  
  330. 'fusionsource':\\ a list of the names of those tables which contain a
  331.                   fusion into the actual table
  332.  
  333. 'irreducibles':\\ a list of irreducible characters (see below)
  334.  
  335. 'irredinfo':\\ a list of records with information about 'irreducibles',
  336.                usual entries are 'indicator', 'pblock' and 'charparam'
  337.                (see "Indicator", "PrimeBlocks", "Generic Character
  338.                Tables"); if the field 'irreducibles' is sorted using
  339.                "SortCharactersCharTable", the 'irredinfo' field is
  340.                sorted, too.  So any information about 'irreducibles'
  341.                should be stored here.
  342.  
  343. 'projectives':\\ (only for \ATLAS\ tables, see "ATLAS Tables") a list of
  344.                  records, each with fields 'name' (of the table of a
  345.                  covering group) and 'chars' (a list of --in general not
  346.                  all-- faithful irreducibles of the covering group)
  347.  
  348. 'permutation':\\ the actual permutation of the classes
  349.                  (see "Conventions for Character Tables",
  350.                  "SortClassesCharTable")
  351.  
  352. 'classparam':\\ a list of parameter values specifying the classes of
  353.                 tables constructed via specialisation of a generic
  354.                 character table (see chapter "Generic Character Tables")
  355.  
  356. 'classtext':\\ a list of additional information about the conjugacy
  357.                classes (e.g. representatives of the class for matrix
  358.                groups or permutation groups)
  359.  
  360. 'text':\\ a string containing information about the table; these are
  361.           e.g.\ its source (see Chapter "Character Table Libraries"),
  362.           the tests it has passed ('1.o.r.'\ for the test of
  363.           orthogonality, 'pow[<p>]' for the construction of the <p>-th
  364.           powermap, 'DEC' for the decomposition of ordinary characters in
  365.           Brauer characters),
  366.           and choices made without loss of generality where possible
  367.  
  368. 'automorphisms':\\ the permutation group of column permutations
  369.                    preserving the set 'irreducibles'
  370.                    (see "MatAutomorphisms", "TableAutomorphisms")
  371.  
  372. 'classnames':\\ a list of names for the classes, a string each
  373.                 (see "ClassNamesCharTable")
  374.  
  375. <classnames>:\\ for each entry <clname> in 'classnames', a field
  376.                 <tbl>.<clname> that has the position of <clname> in
  377.                 'classnames' as value (see "ClassNamesCharTable")
  378.  
  379. 'operations':\\ a record with fields 'Print' (see "DisplayCharTable") and
  380.                 'ScalarProduct' (see "ScalarProduct"); the default value
  381.                 of the 'operations' field is 'CharTableOps'
  382.                 (see "Operations Records for Character Tables")
  383.  
  384. 'CAS':\\ a list of records, each with fields 'permchars', 'permclasses'
  385.          (both permutations), 'name' and eventually 'text' and
  386.          'classtext'; application of the two permutations to
  387.          'irreducibles' and classes yields the original {\CAS} library
  388.          table with name 'name' and text 'text' (see "CAS Tables")
  389.  
  390. 'libinfo':\\ a record with fields 'othernames' and eventually 'CASnames'
  391.              which are all admissible names of the table (see
  392.              "CharTable");
  393.              using these records, the list 'LIBLIST.ORDINARY' can be
  394.              constructed from the library using 'MakeLIBLIST'
  395.              (see "Organization of the Table Libraries")
  396.  
  397. 'group':\\ the group the table belongs to; if the table was computed
  398.            using 'CharTable' (see "CharTable") then this component holds
  399.            the group, with conjugacy classes sorted compatible with the
  400.            columns of the table
  401.  
  402. *Note* that tables in library files may have different format
  403. (see chapter "Character Table Libraries").
  404.  
  405. This is a typical example of a character table, first the ``naked\'\'\ 
  406. record, then the displayed version\:
  407.  
  408. |    gap> t:= CharTable( "2.A5" );
  409.     rec( text := "origin: ATLAS of finite groups, tests: 1.o.r., pow[2,3,5\
  410.     ]", centralizers := [ 120, 120, 4, 6, 6, 10, 10, 10, 10 
  411.      ], powermap := [ , [ 1, 1, 2, 4, 4, 8, 8, 6, 6 ], 
  412.       [ 1, 2, 3, 1, 2, 8, 9, 6, 7 ],, [ 1, 2, 3, 4, 5, 1, 2, 1, 2 ] 
  413.      ], fusions := [ rec(
  414.           name := "A5",
  415.           map := [ 1, 1, 2, 3, 3, 4, 4, 5, 5 ],
  416.           type := "factor" ), rec(
  417.           name := "2.A5.2",
  418.           map := [ 1, 2, 3, 4, 5, 6, 7, 6, 7 ],
  419.           type := "normal" ) ], projectionsource := 
  420.     [ "A5" ], irreducibles := [ [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 
  421.       [ 3, 3, -1, 0, 0, -E(5)-E(5)^4, -E(5)-E(5)^4, -E(5)^2-E(5)^3, 
  422.           -E(5)^2-E(5)^3 ], 
  423.       [ 3, 3, -1, 0, 0, -E(5)^2-E(5)^3, -E(5)^2-E(5)^3, -E(5)-E(5)^4, 
  424.           -E(5)-E(5)^4 ], [ 4, 4, 0, 1, 1, -1, -1, -1, -1 ], 
  425.       [ 5, 5, 1, -1, -1, 0, 0, 0, 0 ], 
  426.       [ 2, -2, 0, -1, 1, E(5)+E(5)^4, -E(5)-E(5)^4, E(5)^2+E(5)^3, 
  427.           -E(5)^2-E(5)^3 ], 
  428.       [ 2, -2, 0, -1, 1, E(5)^2+E(5)^3, -E(5)^2-E(5)^3, E(5)+E(5)^4, 
  429.           -E(5)-E(5)^4 ], [ 4, -4, 0, 1, -1, -1, 1, -1, 1 ], 
  430.       [ 6, -6, 0, 0, 0, 1, -1, 1, -1 ] ], irredinfo := [ rec(
  431.           pblock := [ , 1, 1,, 1 ] ), rec(
  432.           pblock := [ , 1, 2,, 1 ] ), rec(
  433.           pblock := [ , 1, 3,, 1 ] ), rec(
  434.           pblock := [ , 2, 1,, 1 ] ), rec(
  435.           pblock := [ , 1, 1,, 2 ] ), rec(
  436.           pblock := [ , 1, 4,, 3 ] ), rec(
  437.           pblock := [ , 1, 4,, 3 ] ), rec(
  438.           pblock := [ , 2, 4,, 3 ] ), rec(
  439.           pblock := [ , 1, 5,, 3 ] ) ], automorphisms := Group( (6,8)
  440.     (7,9) ), libinfo := rec(
  441.       othernames := 
  442.        [ "2.L2(4)", "2.L2(5)", "2.A1(4)", "2.A1(5)", "2.U2(4)", 
  443.           "2.U2(5)", "2.S2(4)", "2.S2(5)", "2.O3(4)", "2.O3(5)", 
  444.           "2.O4-(2)" ],
  445.       firstname := "2.A5",
  446.       filename := "ctoalter" ), name := "2.A5", order := 120, orders := 
  447.     [ 1, 2, 4, 3, 6, 5, 10, 5, 10 ], fusionsource := [  ], projections := 
  448.     [  ], classes := [ 1, 1, 30, 20, 20, 12, 12, 12, 12 
  449.      ], operations := CharTableOps )|
  450.  
  451. \bigskip
  452.  
  453. |    gap> DisplayCharTable( t );
  454.     2.A5
  455.  
  456.        2  3  3  2  1  1   1   1   1   1
  457.        3  1  1  .  1  1   .   .   .   .
  458.        5  1  1  .  .  .   1   1   1   1
  459.     
  460.          1a 2a 4a 3a 6a  5a 10a  5b 10b
  461.       2P 1a 1a 2a 3a 3a  5b  5b  5a  5a
  462.       3P 1a 2a 4a 1a 2a  5b 10b  5a 10a
  463.       5P 1a 2a 4a 3a 6a  1a  2a  1a  2a
  464.     
  465.     X.1   1  1  1  1  1   1   1   1   1
  466.     X.2   3  3 -1  .  .   A   A  *A  *A
  467.     X.3   3  3 -1  .  .  *A  *A   A   A
  468.     X.4   4  4  .  1  1  -1  -1  -1  -1
  469.     X.5   5  5  1 -1 -1   .   .   .   .
  470.     X.6   2 -2  . -1  1  -A   A -*A  *A
  471.     X.7   2 -2  . -1  1 -*A  *A  -A   A
  472.     X.8   4 -4  .  1 -1  -1   1  -1   1
  473.     X.9   6 -6  .  .  .   1  -1   1  -1
  474.     
  475.     A = -E(5)-E(5)^4
  476.       = (1-ER(5))/2 = -b5 |
  477.  
  478. \bigskip
  479.  
  480. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  481. \Section{Brauer Table Records}\index{Brauer tables!format}
  482. \index{tables!format}
  483.  
  484. Brauer table records are similar to the records which represent  ordinary
  485. character  tables.   They   contain   many  of   the  well--known  record
  486. components, like 'name', 'centralizers', 'irreducibles'  etc.; but  there
  487. are two kinds of differences\:
  488.  
  489. First,   the   operations   record   is   'BrauerTableOps'   instead   of
  490. 'CharTableOps' (see "Operations Records for  Character Tables").  Second,
  491. there are two extra components, namely
  492.  
  493. 'ordinary',  which contains the ordinary character table corresponding to
  494. the Brauer table, and
  495.  
  496. 'block', which reflects the *block* information;  it is a list of records
  497. with components
  498.  
  499. 'defect': \\
  500.      the defect of the block,
  501.  
  502. 'ordchars': \\
  503.      a list of integers indexing the ordinary irreducibles in the block,
  504.  
  505. 'modchars': \\
  506.      a list of integers indexing the Brauer characters in the block,
  507.  
  508. 'basicset': \\
  509.      a list of integers indexing the ordinary irreducibles of a basic
  510.      set; *note* that the indices refer to the positions in the whole
  511.      'irreducibles' list of the ordinary table, not to the positions in
  512.      the block,
  513.  
  514. 'decinv': \\
  515.      the inverse of the restriction of the decomposition matrix of the
  516.      block to the basic set given by the 'basicset' component,
  517.      and possibly
  518.  
  519. 'brauertree': \\
  520.      if exists, a list that represents the decomposition matrix which in
  521.      this case is viewed as incidence matrix of a tree (the so--called
  522.      Brauer tree); the entries of the list correspond to the edges of the
  523.      tree, they refer to positions in the block, not in the whole
  524.      'irreducibles' list of the tables.  Brauer trees are mainly used to
  525.      store the information in a more compact way than by decomposition
  526.      matrices, planar embeddings etc.\ are not (or not yet) included.
  527.  
  528. *Note* that Brauer tables in the library have different format
  529. (see "Organization of the Table Libraries").
  530.  
  531. We give an example\:
  532.  
  533. |    gap> CharTable( "M11mod11" );
  534.     rec( name := "M11mod11", text := "origin: modular ATLAS of finite grou\
  535.     ps, tests: DEC, TENS", prime := 11, order := 7920, centralizers := 
  536.     [ 7920, 48, 18, 8, 5, 6, 8, 8 ], orders := [ 1, 2, 3, 4, 5, 6, 8, 8 
  537.      ], classes := [ 1, 165, 440, 990, 1584, 1320, 990, 990 
  538.      ], powermap := [ , [ 1, 1, 3, 2, 5, 3, 4, 4 ], 
  539.       [ 1, 2, 1, 4, 5, 2, 7, 8 ],, [ 1, 2, 3, 4, 1, 6, 8, 7 ],,,,,, 
  540.       [ 1, 2, 3, 4, 5, 6, 7, 8 ] ], fusions := [ rec(
  541.           name := "M11",
  542.           map := [ 1, 2, 3, 4, 5, 6, 7, 8 ],
  543.           type := "choice" ) ], irreducibles := 
  544.     [ [ 1, 1, 1, 1, 1, 1, 1, 1 ], [ 9, 1, 0, 1, -1, -2, -1, -1 ], 
  545.       [ 10, -2, 1, 0, 0, 1, E(8)+E(8)^3, -E(8)-E(8)^3 ], 
  546.       [ 10, -2, 1, 0, 0, 1, -E(8)-E(8)^3, E(8)+E(8)^3 ], 
  547.       [ 11, 3, 2, -1, 1, 0, -1, -1 ], [ 16, 0, -2, 0, 1, 0, 0, 0 ], 
  548.       [ 44, 4, -1, 0, -1, 1, 0, 0 ], [ 55, -1, 1, -1, 0, -1, 1, 1 ] 
  549.      ], irredinfo := [ rec(
  550.            ), rec(
  551.            ), rec(
  552.            ), rec(
  553.            ), rec(
  554.            ), rec(
  555.            ), rec(
  556.            ), rec(
  557.            ) ], blocks := [ rec(
  558.           defect := 1,
  559.           ordchars := [ 1, 2, 3, 4, 6, 7, 9 ],
  560.           modchars := [ 1, 2, 3, 4, 6 ],
  561.           decinv := 
  562.            [ [ 1, 0, 0, 0, 0 ], [ -1, 1, 0, 0, 0 ], [ 0, 0, 1, 0, 0 ], 
  563.               [ 0, 0, 0, 1, 0 ], [ 0, 0, 0, 0, 1 ] ],
  564.           basicset := [ 1, 2, 3, 4, 6 ],
  565.           brauertree := 
  566.            [ [ 1, 2 ], [ 2, 7 ], [ 3, 7 ], [ 4, 7 ], [ 5, 6, 7 ] ] ), rec(
  567.           defect := 0,
  568.           ordchars := [ 5 ],
  569.           modchars := [ 5 ],
  570.           decinv := [ [ 1 ] ],
  571.           basicset := [ 5 ] ), rec(
  572.           defect := 0,
  573.           ordchars := [ 8 ],
  574.           modchars := [ 7 ],
  575.           decinv := [ [ 1 ] ],
  576.           basicset := [ 8 ] ), rec(
  577.           defect := 0,
  578.           ordchars := [ 10 ],
  579.           modchars := [ 8 ],
  580.           decinv := [ [ 1 ] ],
  581.           basicset := [ 10 ] ) 
  582.      ], ordinary := CharTable( "M11" ), operations := BrauerTableOps, auto\
  583.     morphisms := Group( (7,8) ) ) |
  584.  
  585. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  586. \Section{IsCharTable}
  587.  
  588. 'IsCharTable( <obj> )'
  589.  
  590. returns 'true' if <obj> is a record with fields 'centralizers' (a list)
  591. and 'name' (a string), otherwise it returns 'false'.
  592.  
  593. |    gap> IsCharTable( rec( centralizers:= [ 2, 2 ], name:= "C2" ) );
  594.     true|
  595.  
  596. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  597. \Section{TestCharTable}
  598.  
  599. 'TestCharTable( <tbl> )'
  600.  
  601. checks the character table <tbl>:\\
  602.  if '<tbl>.centralizers', '<tbl>.classes', '<tbl>.orders' and the entries
  603.  of '<tbl>.powermap' have same length,\\
  604.  if the product of '<tbl>.centralizers[<i>]' with '<tbl>.classes[<i>]' is
  605.  equal to '<tbl>.order',\\
  606.  if '<tbl>.orders[<i>]' divides '<tbl>.centralizers[<i>]',\\
  607.  if the entries of '<tbl>.classnames' and the corresponding record fields
  608.  are consistent,\\
  609.  if the first orthogonality relation for '<tbl>.irreducibles' is
  610.  satisfied,\\
  611.  if the centralizers agree with the sums of squared
  612.  absolute values of '<tbl>.irreducibles' and\\
  613.  if powermaps and representative orders are consistent.
  614.  
  615. If no inconsistency occurs, 'true' is returned, otherwise each error is
  616. signalled, and 'false' is returned at the end.
  617.  
  618. |    gap> t:= CharTable("A5");; TestCharTable(t);
  619.     true
  620.     gap> t.irreducibles[2]:= t.irreducibles[3] - t.irreducibles[1];;
  621.     gap> TestCharTable(t);
  622.     &E TestCharTable(A5): Scpr( ., X[2], X[1] ) = -1
  623.     &E TestCharTable(A5): Scpr( ., X[2], X[2] ) = 2
  624.     &E TestCharTable(A5): Scpr( ., X[3], X[2] ) = 1
  625.     &E TestCharTable(A5): centralizer orders inconsistent with irreducibles
  626.     false|
  627.  
  628. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  629. \Section{Operations Records for Character Tables}\index{CharTableOps}%
  630. \index{BrauerTableOps}
  631.  
  632. Although a character table is not a domain (see "Some Notes on Character
  633. Theory in GAP"), it needs an operations record.
  634. That for *ordinary character tables* is 'CharTableOps', that for
  635. *Brauer tables* is 'BrauerTableOps'.  At the moment, these
  636. records contain only the fields 'Print' and 'ScalarProduct'.
  637. Character tables are printed using the 'Print' field, one can e.g.\ 
  638. replace the default 'Print' by "DisplayCharTable" 'DisplayCharTable'.
  639.  
  640. Whenever a library function calls the scalar product this is the
  641. 'ScalarProduct' field of the operations record, so one can replace the
  642. default function (which is "ScalarProduct" 'ScalarProduct') by a more
  643. efficient one for special cases.
  644.  
  645. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  646. \Section{Conventions for Character Tables}%
  647. \index{character tables!conventions}
  648.  
  649. The following few conventions should be noted\:
  650. \begin{description}
  651. \item[The identity element] is expected to be in the first class.
  652. \item[Characters] are lists of cyclotomics (see Chapter "Cyclotomics")
  653.       or unknowns (see chapter "Unknowns");
  654.       they do not physically ``belong\'\'\ to a
  655.       table, so when necessary, functions ``regard\'\'\ them as
  656.       characters of a table which is given as another parameter.
  657. \item[Conversely], most functions that take a character table as a
  658.       parameter and work with characters expect these characters as a
  659.       parameter, too.
  660.  
  661.       Some functions, however, expect the characters to be stored in the
  662.       'irreducibles' field of the table (e.g.\ "TestCharTable"
  663.       'TestCharTable')
  664.       or allow application either to a list of characters given by a
  665.       parameter or to the 'irreducibles' field (e.g. "Indicator"
  666.       'Indicator') if this parameter is missing.
  667. \item[The trivial character] need not be the first one in a list of
  668.       characters.
  669. \item[Sort convention\:]
  670.       Whenever "SortClassesCharTable" 'SortClassesCharTable' or
  671.       "SortCharTable" 'SortCharTable' is used to sort the classes of a
  672.       character table, the fusions into that table are *not* adjusted;
  673.       only the 'permutation' field of the sorted table will be
  674.       actualized.
  675.  
  676.       If one handles fusions only using "GetFusionMap" 'GetFusionMap' and
  677.       "StoreFusion" 'StoreFusion', the maps are adjusted automatically
  678.       with respect to the value of the field 'permutation' of the
  679.       destination table.  So one should not change this field by hand.
  680.       Fusion maps that are entered explicitly (e.g. because they are not
  681.       stored on a table) are expected to be sorted, they will not be
  682.       adjusted.
  683. \end{description}
  684.  
  685. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  686. \Section{Getting Character Tables}\index{tables}\index{character tables}
  687. \index{library tables}\index{generic character tables}
  688.  
  689. There are in general four different ways to get a character table which
  690. {\GAP} already ``knows\'\'\:\ You can either
  691.  
  692. read a file that contains the table record,\\
  693. construct the table using generic formulae,\\
  694. derive it from known tables or\\
  695. use a presentation or representation of the group.
  696.  
  697. The first two methods are used by "CharTable" 'CharTable'.
  698. For the conception of generic character tables,
  699. see chapter "Generic Character Tables".
  700. *Note* that library files often contain something that is much different
  701. from the tables returned by 'CharTable', see chapter "Character Table
  702. Libraries".
  703.  
  704. As for the third method, some generic ways to derive a character table
  705. are implemented\::\\
  706. One can obtain it as table of a factor group where the table
  707.       of the group is given (see "CharTableFactorGroup"),\\
  708. for given tables the table of the direct product can be constructed
  709.       (see "CharTableDirectProduct"),\\
  710. the restriction of a table to the $p$-regular classes can be formed
  711.       (see "CharTableRegular"),\\
  712. for special cases, an isoclinic table of a given table can be
  713.       constructed (see "CharTableIsoclinic"),\\
  714. the splitting and fusion of classes may be viewed as a generic process
  715.       (see "CharTableSplitClasses", "CharTableCollapsedClasses").
  716.  
  717. At the moment, for the last method there are algorithms dealing with
  718. arbitrary groups (see "CharTable"), and with finite polycyclic groups
  719. with special properties (see "CharTablePGroup").
  720.  
  721. *Note* that whenever fusions between tables occur in these functions,
  722. they are stored on the concerned tables, and the 'fusionsource' fields
  723. are updated (see "Character Table Records").
  724.  
  725. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  726. \Section{CharTable}\index{character tables!access to}%
  727. \index{character tables!calculate}\index{Dixon Schneider}%
  728. \index{character tables!of groups}
  729.  
  730. 'CharTable( <G> )'\\
  731. 'CharTable( <tblname> )'\\
  732. 'CharTable( <series>, <parameter1>, <parameter2> ... )'
  733.  
  734. 'CharTable( <G> )'
  735.  
  736. returns the  character table  of the group <G>.  If  '<G>.name' is bound,
  737. the table is  baptized  the same.  Otherwise  it is given the name '\"\"'
  738. (empty string).  This  is necessary  since every  character table needs a
  739. name in {\GAP} (see "IsCharTable").
  740.  
  741. 'CharTable'  first  computes  the linear characters, using the commutator
  742. factor group. If irreducible characters  are missing afterwards, they are
  743. computed using the algorithm of Dixon and Schneider (see~\cite{Dix67} and
  744. \cite{Sch90}).
  745.  
  746. |    gap> M11 := Group((1,2,3,4,5,6,7,8,9,10,11), (3,7,11,8)(4,10,5,6));; 
  747.     gap> M11.name := "M11";;
  748.     gap> CharTable(M11);
  749.     rec( order := 7920, centralizers :=
  750.     [ 7920, 8, 48, 8, 8, 5, 6, 18, 11, 11 ], orders :=
  751.     [ 1, 4, 2, 8, 8, 5, 6, 3, 11, 11 ], classes :=
  752.     [ 1, 990, 165, 990, 990, 1584, 1320, 440, 720, 720 ], irreducibles :=
  753.     [ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ],
  754.       [ 10, 2, 2, 0, 0, 0, -1, 1, -1, -1 ],
  755.       [ 10, 0, -2, E(8)+E(8)^3, -E(8)-E(8)^3, 0, 1, 1, -1, -1 ],
  756.       [ 10, 0, -2, -E(8)-E(8)^3, E(8)+E(8)^3, 0, 1, 1, -1, -1 ],
  757.       [ 11, -1, 3, -1, -1, 1, 0, 2, 0, 0 ],
  758.       [ 16, 0, 0, 0, 0, 1, 0, -2, E(11)^2+E(11)^6+E(11)^7+E(11)^8+E(11)^10
  759.             , E(11)+E(11)^3+E(11)^4+E(11)^5+E(11)^9 ],
  760.       [ 16, 0, 0, 0, 0, 1, 0, -2, E(11)+E(11)^3+E(11)^4+E(11)^5+E(11)^9,
  761.           E(11)^2+E(11)^6+E(11)^7+E(11)^8+E(11)^10 ],
  762.       [ 44, 0, 4, 0, 0, -1, 1, -1, 0, 0 ],
  763.       [ 45, 1, -3, -1, -1, 0, 0, 0, 1, 1 ],
  764.       [ 55, -1, -1, 1, 1, 0, -1, 1, 0, 0 ]
  765.      ], operations := CharTableOps, name := "M11", powermap :=
  766.     [ , [ 1, 3, 1, 2, 2, 6, 8, 8, 10, 9 ],
  767.       [ 1, 2, 3, 4, 5, 6, 3, 1, 9, 10 ],,
  768.       [ 1, 2, 3, 5, 4, 1, 7, 8, 9, 10 ],,
  769.       [ 1, 2, 3, 5, 4, 6, 7, 8, 10, 9 ],,,,
  770.       [ 1, 2, 3, 4, 5, 6, 7, 8, 1, 1 ] ], automorphisms := Group(
  771.     ( 4, 5),
  772.     ( 9,10) ), text := "origin: Dixon's Algorithm", permutation :=
  773.     ( 2, 3, 8, 5,10, 6)( 4, 9, 7), group := M11 )|
  774.  
  775. The columns of the table will be sorted in the same order, as the classes
  776. of the group, thus allowing a bijection  between group and table.  If the
  777. conjugacy classes are bound in  '<G>.conjugacyClasses'  the order  is not
  778. changed.  Otherwise  the routine  itself  computes the  classes.  One can
  779. sort  them  in  the  canonical  way,  using  'SortClassesCharTable'  (see
  780. "SortClassesCharTable").  If an entry  '<G>.charTable' exists the routine
  781. uses information contained in this table.  This also  provides a facility
  782. for entering known characters,  but then the user  assumes responsibility
  783. for the correctness  of the characters (There is little use  in providing
  784. the trivial character to the routine).
  785.  
  786. *Note*{\:} The algorithm binds the record component 'automorphisms' of the
  787. character   table.   This  is  a  permutation  group   generated  by  the
  788. *Galois*-morphisms only. Because of this a  component 'isMaybeIncomplete'
  789. is set 'true' in 'automorphisms', but will not be printed by the standard
  790. output routines!
  791.  
  792. The  computation of  character tables  needs  to  identify the classes of
  793. group elements very  often, so it can be helpful to store a class list of
  794. all group elements. Since this is obviously limited by the group size, it
  795. is controlled by the global variable 'LARGEGROUPORDER', which  is set  by
  796. standard to 10000. If the group is smaller,  the  class  map  is  stored.
  797. Otherwise each occuring element is identified individually.
  798.  
  799. *Limitations{\:}* At the moment  there  is a limitation to the group size
  800. given by the  following condition{\:}  the routine  computes  in  a prime
  801. field of size $p$.  $p$ is a prime number, such that the exponent  of the
  802. group divides  $(p-1)$  and  such  that $2  \sqrt{\|G\|}  \< p$.   At the
  803. moment, {\GAP} provides only prime fields up to size 65535.
  804.  
  805. The routine also sets up a component  '<G>.dixon'. Using this  component,
  806. routines  that  identify  classes, for  example 'FusionConjugacyClasses',
  807. will  work  much  faster.  When  interrupting  the algorithm, however,  a
  808. neccessary cleanup has  not  taken place.  Thus you should  call 'Unbind(
  809. <G>.dixon  )' to  avoid possible further confusion.  This is also  a good
  810. idea  because '<G>.dixon' may become very large. When the  computation by
  811. 'CharTable'  is  complete, this record is  shrunk  to an acceptable size,
  812. something that could not be done when interrupting.
  813.  
  814. \vspace{5mm}
  815.  
  816. 'CharTable( <tblname> )'
  817.  
  818. If the only parameter is a string <tblname>  and  this is  an  admissible
  819. name  of  a  library  table,  'CharTable'  returns  this  library  table,
  820. otherwise 'false'.   A call of 'CharTable' may cause to read some library
  821. files and  to construct the table from the data in the files, see chapter
  822. "Character Table Libraries" for the details.
  823.  
  824. Admissible names  for  the *ordinary character table* <tbl> of the  group
  825. <grp> are
  826.  
  827. \begin{itemize}
  828. \item the \ATLAS\ name if <tbl> is an \ATLAS\ table (see "ATLAS Tables"),
  829.       e.g., 'M22' for the table of the Mathieu group $M_{22}$, 'L2(13)'
  830.       for $L_2(13)$ and '12\_1.U4(3).2\_1' for $12_1.U_4(3).2_1$,
  831. \item the names that were admissible for tables of <grp> in {\CAS} if the
  832.       {\CAS} table library contained a table of <grp>, e.g., 'sl42' for
  833.       the table of the alternating group $A_8$ (but note that the table
  834.       may be different from that in {\CAS}, see "CAS Tables") and
  835. \item some ``relative\'\'\ names\:
  836.  
  837.       For <grp> the <n>--th maximal subgroup (in decreasing group order)
  838.       of a sporadic simple group with admissible name <name>, <name>M<n>
  839.       is admissible for <tbl>, e.g., 'J3M2' for the second maximal
  840.       subgroup of the Janko group $J_3$ which has the name 'J3'.
  841.  
  842.       For <grp> a nontrivial Sylow normalizer of a sporadic simple group
  843.       with admissible name <name>, where nontrivial means that the group
  844.       is not contained in $p$\:$(p-1)$, <name>N<p> is an admissible name
  845.       of <tbl>, e.g., $J4N11$ for the Sylow 11 normalizer of the Janko
  846.       group $J_4$.
  847.  
  848.       In a few cases, the table of the Sylow $p$ subgroup of <grp> is
  849.       accessible by <name>Syl<p> where <name> is an admissible name of
  850.       the table of <grp>, e.g., 'A11Syl2' for the Sylow 2 subgroup of the
  851.       alternating group $A_{11}$.
  852.  
  853.       In a few cases, the table of an element centralizer of <grp> is
  854.       accessible by <name>C<cl> where <name> is an admissible name of the
  855.       table of <grp>, e.g., 'M11C2' for an involution centralizer in the
  856.       Mathieu group $M_{11}$.
  857. \end{itemize}
  858.  
  859. Admissible  names for a  *Brauer table* <tbl> (modulo the  prime $p$) are
  860. all names '<name>mod<p>' where <name> is admissible for the corresponding
  861. ordinary  table, e.g., 'M12mod11'  for the 11 modular table  of $M_{12}$,
  862. and 'L2(25).2\_1mod3' for the 3 modular table of $L_2(25).2_1$.
  863.  
  864. *Generic tables* are accessible  only  by the name  given by their 'name'
  865. field (see below).
  866.  
  867. Case  is not significant for table names,  e.g., 'suzm3' and  'SuzM3' are
  868. both  admissible  names  for  the third maximal subgroup of the  sporadic
  869. Suzuki group.
  870.  
  871. The  admissible  names  reflect  the  structure  of  the  libraries,  see
  872. "Contents  of  the  Table  Libraries"  and  "Organization  of  the  Table
  873. Libraries".
  874.  
  875. |    gap> CharTable( "A5.2" );;  # returns the character table of the
  876.                                 # symmetric group on five letters
  877.                                 # (in \ATLAS\ format)
  878.     gap> CharTable( "Symmetric" );;  # returns the generic table of the
  879.                                      # symmetric group
  880.     gap> CharTable( "J5" );
  881.     &E CharTableLibrary: no library table with name 'J5'
  882.     false|
  883.  
  884. If 'CharTable' is called with more than one  parameter, the first must be
  885. a string specifying a series of groups which is implemented via a generic
  886. character  table   (see  chapter   "Generic  Character   Tables"),   e.g.
  887. '\"Symmetric\"'  for  the  symmetric  groups;  the  following  parameters
  888. specialise the required member of the series\:
  889.  
  890. |    gap> CharTable( "Symmetric", 5 );; # the table of the symmetric
  891.                                        # group $S_5$ (got by specializing
  892.                                        # the generic table)|
  893.  
  894. These are the valid calls of 'CharTable' with parameter <series>\:
  895.  
  896. |    |'CharTable( \"Alternating\", <n> )':\\
  897.     returns the table of the alternating group on <n> letters,
  898.  
  899. |    |'CharTable( \"Cyclic\", <n> )':\\
  900.     returns the table of the cyclic group of order <n>,
  901.  
  902. |    |'CharTable( \"Dihedral\", <2n> )':\\
  903.     returns the table of the dihedral group of order <2n>,
  904.  
  905. |    |'CharTable( \"GL\", 2, <q> )':\\
  906.     returns the table of the general linear group $\mbox{\rm GL}(2,q)$
  907.     for a prime power <q>,
  908.  
  909. |    |'CharTable( \"GU\", 3, <q> )':\\
  910.     returns the table of the general unitary group $\mbox{\rm GU}(3,q)$
  911.     for a prime power <q>,
  912.  
  913. |    |'CharTable( \"P\:Q\", [ <p>, <q> ] )':\\
  914.     returns the table of the extension of the cyclic group of prime order 
  915.     <p> by a cyclic group of order <q> where <q> divides $p-1$,
  916.  
  917. |    |'CharTable( \"PSL\", 2, <q> )':\\
  918.     returns the table of the projective special linear group
  919.     $\mbox{\rm PSL}(2,q)$ for a prime power <q>,
  920.  
  921. |    |'CharTable( \"SL\", 2, <q> )':\\
  922.     returns the table of the special linear group $\mbox{\rm SL}(2,q)$
  923.     for a prime power <q>,
  924.  
  925. |    |'CharTable( \"SU\", 3, <q> )':\\
  926.     returns the table of the special unitary group $\mbox{\rm SU}(3,q)$
  927.     for a prime power <q>,
  928.  
  929. |    |'CharTable( \"Quaternionic\", <4n> )':\\
  930.     returns the table of the quaternionic (dicyclic) group of order <4n>,
  931.  
  932. |    |'CharTable( \"Suzuki\", <q> )':\\
  933.     returns the table of the Suzuki group $Sz(q) = ^2B_2(q)$ for <q> an
  934.     odd power of 2,
  935.  
  936. |    |'CharTable( \"Symmetric\", <n> )':\\
  937.     returns the table of the symmetric group on <n> letters.
  938.  
  939. |    |'CharTable( \"WeylB\", <n> )':\\
  940.     returns the table of the Weyl group of type $B_n$.
  941.  
  942. |    |'CharTable( \"WeylD\", <n> )':\\
  943.     returns the table of the Weyl  group of type $D_n$.
  944.  
  945.  
  946. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  947. \Section{Advanced Methods for Dixon Schneider Calculations}
  948. \index{character tables!computation}
  949.  
  950. The computation of character tables  of very large  groups may take quite
  951. some time.  On the other hand, for  the  expert  only a  few  irreducible
  952. characters may  be needed, since the other  ones can  be  computed  using
  953. character  theoretic  methods like tensoring, induction, and restriction.
  954. Thus   {\GAP}  provides   also  step-by-step   routines  for   doing  the
  955. calculations, that will allow to compute some characters, and stop before
  956. all  are calculated.  Note  that there is no  \'safety net\',  i.e.,  the
  957. routines, being  somehow internal, do no error  checking,  and assume the
  958. information given are correct.
  959.  
  960. When the global variable 'InfoCharTable1' if set to 'Print',  information
  961. about  the  progress  of  splitting  is  printed.  The  default  value of
  962. 'InfoCharTable1' is 'Ignore'.
  963.  
  964. 'DixonInit( <G> )'
  965. \index{DixonInit}
  966.  
  967. does  the  setup  for  the  computation  of  characters{\:}  It  computes
  968. conjugacy classes, power  maps  and  linear characters  (in  the  case of
  969. AgGroups  it also  contains  a  call  of  'CharTablePGroup'). 'DixonInit'
  970. returns a special record <D> (see below), which  stores all  informations
  971. needed for the  further computations. The power maps are computed for all
  972. primes  smaller than  the  exponent of  <G>, thus allowing  to induce the
  973. characters   of   all   cyclic   subgroups   by   'InducedCyclic'    (see
  974. "InducedCyclic").  For internal purposes, the  algorithm uses  a permuted
  975. arrangement of the classes and probably a different ---but  isomorphic---
  976. group.   It  is  possible  to  obtain  different  informations  about the
  977. progress of the  splitting  process as  well  as the  partially  computed
  978. character table from the record <D>.
  979.  
  980. 'DixontinI( <D> )'
  981. \index{DixontinI}
  982.  
  983. is the reverse function{\:} It  takes a Dixon  record <D> and returns the
  984. old group  <G>.  It also  does  the cleanup  of <D>.  The  returned group
  985. contains the component 'charTable', containing the character table as far
  986. as known. The  classes are arranged in the  same  way,  as the classes of
  987. <G>.
  988.  
  989. 'DixonSplit( <D> )'
  990. \index{DixonSplit}
  991.  
  992. will  do  the  main splitting task{\:} It chooses a  class and splits the
  993. character spaces using  the  corresponding class matrix.   Characters are
  994. computed as far as possible.
  995.  
  996. 'CombinatoricSplit( <D> )'
  997. \index{CombinatoricSplit}
  998.  
  999. tries to split two-dimensional character spaces by combinatoric means. It
  1000. is called automatically by 'DixonSplit'.  A separate call can be  useful,
  1001. when new  characters have  been  found,  that  reduce  the  size  of  the
  1002. character spaces.
  1003.  
  1004. 'IncludeIrreducibles( <D>, <list> )'
  1005. \index{IncludeIrreducibles}
  1006.  
  1007. If you have found irreducible characters by other means ---like tensoring
  1008. etc.--- you  must not include them in the character  table  yourself, but
  1009. let them include, using this routine. Otherwise {\GAP} would lose control
  1010. of the  characters  yet known.  The  characters given in  <list> must  be
  1011. according to the arrangement of classes in <D>. {\GAP} will automatically
  1012. take the closure of <list> under the galoisgroup and tensor products with
  1013. one-dimensional characters.
  1014.  
  1015. 'SplitCharacters( <D>, <list> )'
  1016. \index{SplitCharacters}
  1017.  
  1018. This routine decomposes  the characters, given in <list> according to the
  1019. character spaces  found up  to this point.  By  applying this routine  to
  1020. tensor products etc., it may result in characters with smaller norm, even
  1021. irreducible ones. Since the recalculation of characters is only possible,
  1022. if the degree is small  enough, the splitting process is applied  only to
  1023. characters of sufficiently small degree.
  1024.  
  1025. Some notes on the record <D> returned by 'DixonInit'{\:}
  1026.  
  1027. This record stores several items of mainly  internal interest.  There are
  1028. some entries, however, that may be  useful  to  know about when using the
  1029. advanced  methods described above. The computation need not to take place
  1030. in the original group,  but in an isomorphic image  <W>.  This may be the
  1031. same group as the group  given, but --- depending on the group --- also a
  1032. new  one.  Additionally the initialisation process will create a new list
  1033. of the conjugacy classes with possibly different arrangement.  For access
  1034. to  these informations, the following record components  of  the  ``Dixon
  1035. Record\'\' <D> might be of interest\:
  1036.  
  1037. 'group':\\
  1038.     the group <W>,
  1039.  
  1040. 'oldG':\\
  1041.     the group <G>, of which the character table is to be computed,
  1042.  
  1043. 'conjugacyClasses':\\
  1044.     classes   of  <W>;  this  list  contains   the  *same*   classes   as
  1045.     '<W>.conjugacyClasses', only the arrangement is different,
  1046.  
  1047. 'charTable':\\
  1048.     contains  the partially computed character table.   The  classes  are
  1049.     arranged according to '<D>.conjugacyClasses',
  1050.  
  1051. 'classPermutation':\\
  1052.     permutation to apply to the classes to obtain the old arrangement.
  1053.  
  1054.  
  1055. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1056. \Section{An Example of Advanced Dixon Schneider Calculations}
  1057.  
  1058. First, we set
  1059.  
  1060. |    gap> InfoCharTable1 := Print;;|
  1061.  
  1062. for  printout of some internal results. We now define our group, which is
  1063. isomorphic  to ${\rm PSL}_4(3)$  (we use  a permutation representation of
  1064. ${\rm  PSL}_4(3)$  instead  of matrices  since  this will  speed  up  the
  1065. computations).
  1066.  
  1067. |    gap> g := PrimitiveGroup(40,5);
  1068.     PSL(4,3)
  1069.     gap> Size(g);
  1070.     6065280
  1071.     gap> d := DixonInit(g);;
  1072.     &I  29 classes
  1073.     gap> c := d.charTable;;|
  1074.  
  1075. After the initialisation, one  structure  matrix  is evaluated,  yielding
  1076. smaller spaces and several irreducible characters.
  1077.  
  1078. |    gap> DixonSplit(d);
  1079.     &I  Matrix 2, Representative of Order 3, Centralizer: 5832
  1080.     &I  Dimensions: [ 1, 12, 2, 2, 4, 2, 1, 1, 1, 1, 1 ]
  1081.     &I  Two-dim space split
  1082.     &I  Two-dim space split
  1083.     &I  Two-dim space split|
  1084.  
  1085. In this  case  spaces  of the  listed  dimensions  are  a result  of  the
  1086. splitting   process.  The   three  two   dimensional   spaces  are  split
  1087. successfully by combinatoric means.
  1088.  
  1089. We obtain  several characters  by tensor products and notify  them to the
  1090. program.   The  tensor products  of the nonlinear characters  are reduced
  1091. with  the  irreducible characters.  The result  is split according to the
  1092. spaces  found,  which  yields characters  of smaller  norms,  but  no new
  1093. irreducibles.
  1094.  
  1095. |    gap> asp:= AntiSymmetricParts( c, c.irreducibles, 2 );;
  1096.     gap> ro:= ReducedOrdinary( c, c.irreducibles, asp );;
  1097.     gap> Length( ro.irreducibles );
  1098.     3
  1099.     gap> IncludeIrreducibles( d, ro.irreducibles );
  1100.     gap> nlc:= Filtered( c.irreducibles, i -> i[1] > 1 );;
  1101.     gap> t:= Tensored( nlc, nlc );;
  1102.     gap> ro:= ReducedOrdinary( c, c.irreducibles, t );; ro.irreducibles;
  1103.     [  ]
  1104.     gap> List( ro.remainders, i -> ScalarProduct( c, i, i) );
  1105.     [ 2, 2, 4, 4, 4, 4, 13, 13, 18, 18, 19, 21, 21, 36, 36, 29, 34, 34,
  1106.       42, 34, 48, 54, 62, 68, 68, 78, 84, 84, 88, 90, 159, 169, 169, 172,
  1107.       172, 266, 271, 271, 268, 274, 274, 280, 328, 373, 373, 456, 532, 
  1108.       576, 679, 683, 683, 754, 768, 768, 890, 912, 962, 1453, 1453, 1601, 
  1109.       1601, 1728, 1739, 1739, 1802, 2058, 2379, 2414, 2543, 2744, 2744, 
  1110.       2920, 3078, 3078, 4275, 4275, 4494, 4760, 5112, 5115, 5115, 5414, 
  1111.       6080, 6318, 7100, 7369, 7369, 7798, 8644, 10392, 12373, 12922, 
  1112.       14122, 14122, 18948, 21886, 24641, 24641, 25056, 38942, 44950, 
  1113.       78778 ]
  1114.     gap> t := SplitCharacters( d, ro.remainders );;
  1115.     gap> List( t, i -> ScalarProduct( c, i, i ) );
  1116.     [ 2, 2, 4, 2, 2, 4, 4, 3, 6, 5, 5, 9, 9, 4, 12, 13, 18, 18, 18, 26,
  1117.       32, 32, 16, 42, 36, 84, 84, 88, 90, 159, 169, 169, 172, 172, 266,
  1118.       271, 271, 268, 274, 274, 280, 328, 373, 373, 456, 532, 576, 679,
  1119.       683, 683, 754, 768, 768, 890, 912, 962, 1453, 1453, 1601, 1601,
  1120.       1728, 1739, 1739, 1802, 2058, 2379, 2414, 2543, 2744, 2744, 2920,
  1121.       3078, 3078, 4275, 4275, 4494, 4760, 5112, 5115, 5115, 5414, 6080,
  1122.       6318, 7100, 7369, 7369, 7798, 8644, 10392, 12373, 12922, 14122,
  1123.       14122, 18948, 21886, 24641, 24641, 25056, 38942, 44950, 78778 ] |
  1124.  
  1125. Finally we calculate the characters induced from all cyclic subgroups and
  1126. obtain the missing irreducibles by applying the LLL-algorithm to them.
  1127.  
  1128. |    gap> ic:= InducedCyclic( c, "all" );;
  1129.     gap> ro:= ReducedOrdinary( c, c.irreducibles, ic );;
  1130.     gap> Length( ro.irreducibles );
  1131.     0
  1132.     gap> l:= LLL( c, ro.remainders );;
  1133.     gap> Length( l.irreducibles );
  1134.     13
  1135.     gap> IncludeIrreducibles( d, l.irreducibles );
  1136.     gap> Length( c.irreducibles );
  1137.     29
  1138.     gap> Length( c.classes );
  1139.     29 |
  1140.  
  1141. As the last step, we return to our original group.
  1142.  
  1143. |    gap> g:= DixontinI( d );
  1144.     &I  Total:1 matrices, [ 2 ]
  1145.     PSL(4,3)
  1146.     gap> c:= g.charTable;;
  1147.     gap> List( c.irreducibles, i -> i[1] );
  1148.     [ 1, 26, 26, 39, 52, 65, 65, 90, 234, 234, 260, 260, 260, 351, 390, 
  1149.       416, 416, 416, 416, 468, 585, 585, 640, 640, 640, 640, 729, 780,
  1150.       1040 ]
  1151.     gap> Sum( last, i -> i^2 );
  1152.     6065280 |
  1153.  
  1154.  
  1155. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1156. \Section{CharTableFactorGroup}\index{table of factor group}
  1157. \index{factor group!table of}
  1158.  
  1159. 'CharTableFactorGroup( <tbl>, <classes\_of\_normal\_subgroup> )'
  1160.  
  1161. returns the table of the factor group of <tbl> with respect to a
  1162. particular normal subgroup\:\ If the list of irreducibles stored in
  1163. '<tbl>.irreducibles' is complete, this normal subgroup is the normal
  1164. closure of <classes\_of\_normal\_subgroup>;
  1165. otherwise it is the intersection of kernels of those irreducibles stored
  1166. on <tbl> which contain <classes\_of\_normal\_subgroups> in their kernel
  1167. --that may cause strange results.
  1168.  
  1169. |    gap> s4:= CharTable( "Symmetric", 4 );;
  1170.     gap> CharTableFactorGroup( s4, [ 3 ] );
  1171.     rec( order := 6, name := "S4modulo[ 3 ]", centralizers := 
  1172.     [ 6, 2, 3 ], powermap := [ , [ 1, 1, 3 ], [ 1, 2, 1 ] ], fusions := 
  1173.     [  ], fusionsource := [ "S4" ], irreducibles := 
  1174.     [ [ 1, -1, 1 ], [ 2, 0, -1 ], [ 1, 1, 1 ] ], irredinfo := 
  1175.     [  ], orders := [ 1, 2, 3 ], classes := 
  1176.     [ 1, 3, 2 ], operations := CharTableOps )
  1177.     gap> s4.fusions;
  1178.     [ rec(
  1179.           map := [ 1, 2, 1, 3, 2 ],
  1180.           type := "factor",
  1181.           name := "S4modulo[ 3 ]" ) ]|
  1182.  
  1183. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1184. \Section{CharTableNormalSubgroup}\index{table of normal subgroup}
  1185. \index{normal subgroup!table of}
  1186.  
  1187. 'CharTableNormalSubgroup( <tbl>, <normal\_subgroup> )'
  1188.  
  1189. returns the restriction of the character table <tbl> to the classes in
  1190. the list <normal\_subgroup>.
  1191. This table is an approximation of the character table of this normal
  1192. subgroup. It has fields 'order', 'name', 'centralizers', 'orders',
  1193. 'classes', 'powermap', 'irreducibles' (contains the set of those
  1194. restrictions of irreducibles of <tbl> which are irreducible), and
  1195. 'fusions' (contains the fusion in <tbl>).
  1196.  
  1197. In most cases, some classes of the normal subgroup must be split, see
  1198. "CharTableSplitClasses".
  1199.  
  1200. |    gap> s5:= CharTable( "A5.2" );;
  1201.     gap> s3:= CharTable( "Symmetric", 3 );;
  1202.     gap> SortCharactersCharTable( s3 );;
  1203.     gap> s5xs3:= CharTableDirectProduct( s5, s3 );;
  1204.     gap> nsg:= [ 1, 3, 4, 6, 7, 9, 10, 12, 14, 17, 20 ];;
  1205.     gap> sub:= CharTableNormalSubgroup( s5xs3, nsg );;
  1206.     &I CharTableNormalSubgroup: classes in [ 8 ] necessarily split
  1207.     gap> sub;
  1208.     rec( name := "Rest(A5.2xS3,[ 1, 3, 4, 6, 7, 9, 10, 12, 14, 17, 20 ])",
  1209.      order := 360, centralizers := [ 360, 180, 24, 12, 18, 9, 15, 15/2, 
  1210.       12, 4, 6 ], orders := [ 1, 3, 2, 6, 3, 3, 5, 15, 2, 4, 6 
  1211.      ], powermap := [ , [ 1, 2, 1, 2, 5, 6, 7, 8, 1, 3, 5 ], 
  1212.       [ 1, 1, 3, 3, 1, 1, 7, 7, 9, 10, 9 ],, 
  1213.       [ 1, 2, 3, 4, 5, 6, 1, 2, 9, 10, 11 ] ], classes := 
  1214.     [ 1, 2, 15, 30, 20, 40, 24, 48, 30, 90, 60 
  1215.      ], operations := CharTableOps, irreducibles := 
  1216.     [ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 
  1217.       [ 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1 ], 
  1218.       [ 2, -1, 2, -1, 2, -1, 2, -1, 0, 0, 0 ], 
  1219.       [ 6, 6, -2, -2, 0, 0, 1, 1, 0, 0, 0 ], 
  1220.       [ 4, 4, 0, 0, 1, 1, -1, -1, 2, 0, -1 ], 
  1221.       [ 4, 4, 0, 0, 1, 1, -1, -1, -2, 0, 1 ], 
  1222.       [ 8, -4, 0, 0, 2, -1, -2, 1, 0, 0, 0 ], 
  1223.       [ 5, 5, 1, 1, -1, -1, 0, 0, 1, -1, 1 ], 
  1224.       [ 5, 5, 1, 1, -1, -1, 0, 0, -1, 1, -1 ], 
  1225.       [ 10, -5, 2, -1, -2, 1, 0, 0, 0, 0, 0 ] ], fusions := [ rec(
  1226.           name := "A5.2xS3",
  1227.           map := [ 1, 3, 4, 6, 7, 9, 10, 12, 14, 17, 20 ] ) ] ) |
  1228.  
  1229. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1230. \Section{CharTableDirectProduct}\index{Cartesian product}
  1231. \index{direct product}\index{Kronecker product}\index{tensor product}
  1232.  
  1233. 'CharTableDirectProduct( <tbl1>, <tbl2> )'
  1234.  
  1235. returns the character table of the direct product of the groups given by
  1236. the character tables <tbl1> and <tbl2>.
  1237.  
  1238. The matrix of irreducibles is the Kronecker product (see
  1239. "KroneckerProduct") of '<tbl1>.irreducibles' with '<tbl2>.irreducibles'.
  1240.  
  1241. |    gap> c2:= CharTable( "Cyclic", 2 );; s2:= CharTable( "Symmetric", 2 );;
  1242.     gap> SortCharactersCharTable( s2 );;
  1243.     gap> v4:= CharTableDirectProduct( c2, s2 );
  1244.     rec( order := 4, name := "C2xS2", centralizers := 
  1245.     [ 4, 4, 4, 4 ], classparam := [ [ [ 1, 0 ], [ 1, [ 1, 1 ] ] ], 
  1246.       [ [ 1, 0 ], [ 1, [ 2 ] ] ], [ [ 1, 1 ], [ 1, [ 1, 1 ] ] ], 
  1247.       [ [ 1, 1 ], [ 1, [ 2 ] ] ] ], orders := [ 1, 2, 2, 2 ], powermap := 
  1248.     [ , [ 1, 1, 1, 1 ] ], irreducibles := 
  1249.     [ [ 1, 1, 1, 1 ], [ 1, -1, 1, -1 ], [ 1, 1, -1, -1 ], 
  1250.       [ 1, -1, -1, 1 ] ], irredinfo := [ rec(
  1251.           charparam := [ [ 1, 0 ], [ 1, [ 1, 1 ] ] ] ), rec(
  1252.           charparam := [ [ 1, 0 ], [ 1, [ 1, 1 ] ] ] ), rec(
  1253.           charparam := [ [ 1, 1 ], [ 1, [ 1, 1 ] ] ] ), rec(
  1254.           charparam := [ [ 1, 1 ], [ 1, [ 1, 1 ] ] ] ) ], charparam := 
  1255.     [  ], fusionsource := [ "C2", "S2" ], fusions := [ rec(
  1256.           name := "C2",
  1257.           map := [ 1, 1, 2, 2 ],
  1258.           type := "factor" ), rec(
  1259.           name := "S2",
  1260.           map := [ 1, 2, 1, 2 ],
  1261.           type := "factor" ) ], classes := 
  1262.     [ 1, 1, 1, 1 ], operations := CharTableOps )
  1263.     gap> c2.fusions;
  1264.     [ rec(
  1265.           map := [ 1, 3 ],
  1266.           type := "normal",
  1267.           name := "C2xS2" ) ]|
  1268.  
  1269. *Note*\:\ The result will contain those $p$-th powermaps for primes $p$
  1270. where both <tbl1> and <tbl2> contain the $p$-th powermap.
  1271. Additionally, if one of the tables contains it, and $p$ does not divide
  1272. the order of the other table, and the $p$-th powermap is uniquely
  1273. determined (see "Powermap"), it will be computed; then the table of the
  1274. direct product will contain the $p$-th powermap, too.
  1275.  
  1276. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1277. \Section{CharTableWreathSymmetric}\index{wreath product!character table}
  1278.  
  1279. 'CharTableWreathSymmetric( <tbl>, <n> )'
  1280.  
  1281. returns  the character table of the  wreath product of an arbitrary group
  1282. $G$ with  the  full symmetric group $S_n$, where  <tbl>  is the character
  1283. table of $G$.
  1284.  
  1285. |    gap> c3:= CharTable("Cyclic", 3);;
  1286.     gap> CharTableWreathSymmetric(c3, 2);
  1287.     rec( order := 18, name := "C3wrS2", centralizers := 
  1288.     [ 18, 9, 9, 18, 9, 18, 6, 6, 6 ], classes := 
  1289.     [ 1, 2, 2, 1, 2, 1, 3, 3, 3 ], orders := [ 1, 3, 3, 3, 3, 3, 2, 6, 6 
  1290.      ], irredinfo := [ rec(
  1291.           charparam := [ [ 1, 1 ], [  ], [  ] ] ), rec(
  1292.           charparam := [ [ 1 ], [ 1 ], [  ] ] ), rec(
  1293.           charparam := [ [ 1 ], [  ], [ 1 ] ] ), rec(
  1294.           charparam := [ [  ], [ 1, 1 ], [  ] ] ), rec(
  1295.           charparam := [ [  ], [ 1 ], [ 1 ] ] ), rec(
  1296.           charparam := [ [  ], [  ], [ 1, 1 ] ] ), rec(
  1297.           charparam := [ [ 2 ], [  ], [  ] ] ), rec(
  1298.           charparam := [ [  ], [ 2 ], [  ] ] ), rec(
  1299.           charparam := [ [  ], [  ], [ 2 ] ] ) ], classparam :=
  1300.     [ [ [ 1, 1 ], [  ], [  ] ], [ [ 1 ], [ 1 ], [  ] ], 
  1301.       [ [ 1 ], [  ], [ 1 ] ], [ [  ], [ 1, 1 ], [  ] ], 
  1302.       [ [  ], [ 1 ], [ 1 ] ], [ [  ], [  ], [ 1, 1 ] ], 
  1303.       [ [ 2 ], [  ], [  ] ], [ [  ], [ 2 ], [  ] ], [ [  ], [  ], [ 2 ] ] 
  1304.      ], powermap := [ , [ 1, 3, 2, 6, 5, 4, 1, 4, 6 ], 
  1305.       [ 1, 1, 1, 1, 1, 1, 7, 7, 7 ] ], irreducibles := 
  1306.     [ [ 1, 1, 1, 1, 1, 1, -1, -1, -1 ], 
  1307.       [ 2, -E(3)^2, -E(3), 2*E(3), -1, 2*E(3)^2, 0, 0, 0 ], 
  1308.       [ 2, -E(3), -E(3)^2, 2*E(3)^2, -1, 2*E(3), 0, 0, 0 ], 
  1309.       [ 1, E(3), E(3)^2, E(3)^2, 1, E(3), -1, -E(3), -E(3)^2 ], 
  1310.       [ 2, -1, -1, 2, -1, 2, 0, 0, 0 ], 
  1311.       [ 1, E(3)^2, E(3), E(3), 1, E(3)^2, -1, -E(3)^2, -E(3) ], 
  1312.       [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 
  1313.       [ 1, E(3), E(3)^2, E(3)^2, 1, E(3), 1, E(3), E(3)^2 ], 
  1314.       [ 1, E(3)^2, E(3), E(3), 1, E(3)^2, 1, E(3)^2, E(3) ] 
  1315.      ], operations := CharTableOps )|
  1316.  
  1317. \medskip
  1318.  
  1319. |    gap> DisplayCharTable(last);
  1320.     C3wrS2
  1321.  
  1322.        2  1   .   .   1  .   1  1   1   1
  1323.        3  2   2   2   2  2   2  1   1   1
  1324.  
  1325.          1a  3a  3b  3c 3d  3e 2a  6a  6b
  1326.       2P 1a  3b  3a  3e 3d  3c 1a  3c  3e
  1327.       3P 1a  1a  1a  1a 1a  1a 2a  2a  2a
  1328.  
  1329.     X.1   1   1   1   1  1   1 -1  -1  -1
  1330.     X.2   2   A  /A   B -1  /B  .   .   .
  1331.     X.3   2  /A   A  /B -1   B  .   .   .
  1332.     X.4   1 -/A  -A  -A  1 -/A -1  /A   A
  1333.     X.5   2  -1  -1   2 -1   2  .   .   .
  1334.     X.6   1  -A -/A -/A  1  -A -1   A  /A
  1335.     X.7   1   1   1   1  1   1  1   1   1
  1336.     X.8   1 -/A  -A  -A  1 -/A  1 -/A  -A
  1337.     X.9   1  -A -/A -/A  1  -A  1  -A -/A
  1338.  
  1339.     A = -E(3)^2
  1340.       = (1+ER(-3))/2 = 1+b3
  1341.     B = 2*E(3)
  1342.       = -1+ER(-3) = 2b3|
  1343.  
  1344. \medskip
  1345.  
  1346. The record  field 'classtext'  contains  the sequences of partitions that
  1347. parametrize the classes as well as the characters of the wreath product.
  1348. Note  that  this  parametrization  prevents  the principal character from
  1349. being the first one in the list 'irreducibles'.
  1350.  
  1351. \medskip
  1352.  
  1353. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1354. \Section{CharTableRegular}\index{p-regular table}\index{regular classes}
  1355.  
  1356. 'CharTableRegular( <tbl>, <prime> )'
  1357.  
  1358. returns the character table consisting of the <prime>-regular classes of
  1359. the character table <tbl>.
  1360.  
  1361. |    gap> a5:= CharTable( "Alternating", 5 );;
  1362.     gap> CharTableRegular( a5, 2 );
  1363.     rec( name := "Regular(A5,2)", prime := 2, order := 60, orders := 
  1364.     [ 1, 3, 5, 5 ], centralizers := [ 60, 3, 5, 5 ], powermap := 
  1365.     [ , [ 1, 2, 4, 3 ], [ 1, 1, 4, 3 ],, [ 1, 2, 1, 1 ] ], fusions := 
  1366.     [ rec(
  1367.           map := [ 1, 3, 4, 5 ],
  1368.           type := "choice",
  1369.           name := "A5" ) ], ordinary := rec( name := "A5", order := 
  1370.     60, centralizers := [ 60, 4, 3, 5, 5 ], orders := [ 1, 2, 3, 5, 5 
  1371.      ], powermap := [ , [ 1, 1, 3, 5, 4 ], [ 1, 2, 1, 5, 4 ],, 
  1372.       [ 1, 2, 3, 1, 1 ] ], irreducibles := 
  1373.     [ [ 1, 1, 1, 1, 1 ], [ 4, 0, 1, -1, -1 ], [ 5, 1, -1, 0, 0 ], 
  1374.       [ 3, -1, 0, -E(5)-E(5)^4, -E(5)^2-E(5)^3 ], 
  1375.       [ 3, -1, 0, -E(5)^2-E(5)^3, -E(5)-E(5)^4 ] ], classparam := 
  1376.     [ [ 1, [ 1, 1, 1, 1, 1 ] ], [ 1, [ 2, 2, 1 ] ], [ 1, [ 3, 1, 1 ] ], 
  1377.       [ 1, [ [ 5 ], "+" ] ], [ 1, [ [ 5 ], "-" ] ] ], irredinfo := [ rec(
  1378.           charparam := [ 1, [ 1, 1, 1, 1, 1 ] ] ), rec(
  1379.           charparam := [ 1, [ 2, 1, 1, 1 ] ] ), rec(
  1380.           charparam := [ 1, [ 2, 2, 1 ] ] ), rec(
  1381.           charparam := [ 1, [ [ 3, 1, 1 ], "+" ] ] ), rec(
  1382.           charparam := [ 1, [ [ 3, 1, 1 ], "-" ] ] ) 
  1383.      ], text := "computed using generic character table for alternating gr\
  1384.     oups", classes := [ 1, 15, 20, 12, 12 
  1385.      ], operations := CharTableOps, fusionsource := [ "Regular(A5,2)" 
  1386.      ] ), operations := CharTableOps, classes := [ 1, 20, 12, 12 ] )
  1387.     gap> a5.fusionsource;
  1388.     [ "Regular(A5,2)" ]|
  1389.  
  1390. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1391. \Section{CharTableIsoclinic}\index{isoclinic table}
  1392.  
  1393. 'CharTableIsoclinic( <tbl> )'\\
  1394. 'CharTableIsoclinic( <tbl>, <classes\_of\_normal\_subgroup> )'
  1395.  
  1396. If <tbl> is a character table of a group with structure $2.G.2$ with a
  1397. unique central subgroup of order 2 and a unique subgroup of index 2,
  1398. 'CharTableIsoclinic( <tbl> )' returns the table of the isoclinic group
  1399. (see~\cite[Chapter 6, Section 7]{CCN85});
  1400. if the subgroup of index 2 is not unique, it must be specified by
  1401. enumeration of its classes in <classes\_of\_normal\_subgroup>.
  1402.  
  1403. |    gap> d8:= CharTable( "Dihedral", 8 );;
  1404.     gap> CharTableIsoclinic( d8, [ 1, 2, 3 ] );
  1405.     rec( name := "Isoclinic(D8)", order := 8, centralizers := 
  1406.     [ 8, 4, 8, 4, 4 ], orders := [ 1, 4, 2, 4, 4 ], fusions := 
  1407.     [  ], fusionsource := [  ], powermap := [ , [ 1, 3, 1, 3, 3 ] 
  1408.      ], irreducibles := [ [ 1, 1, 1, 1, 1 ], [ 1, 1, 1, -1, -1 ], 
  1409.       [ 1, -1, 1, 1, -1 ], [ 1, -1, 1, -1, 1 ], [ 2, 0, -2, 0, 0 ] 
  1410.      ], classes := [ 1, 2, 1, 2, 2 ], operations := CharTableOps )|
  1411.  
  1412. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1413. \Section{CharTableSplitClasses}\index{split classes}
  1414.  
  1415. 'CharTableSplitClasses( <tbl>, <fusionmap> )'\\
  1416. 'CharTableSplitClasses( <tbl>, <fusionmap>, <exponent> )'
  1417.  
  1418. returns a character table where the classes of the character table <tbl>
  1419. are split according to the fusion map <fusionmap>.
  1420.  
  1421. The two forms correspond to the two different situations to split
  1422. classes\:
  1423.  
  1424. 'CharTableSplitClasses( <tbl>, <fusionmap> )'
  1425.  
  1426. If one constructs a normal subgroup (see "CharTableNormalSubgroup"),
  1427. the order remains unchanged, powermaps, classlengths and centralizer
  1428. orders are changed with respect to the fusion, representative orders and
  1429. irreducibles are simply split.
  1430. The ``factor fusion\'\'\ <fusionmap> to <tbl> is stored on the result.
  1431.  
  1432. |    # see example in "CharTableNormalSubgroup"
  1433.     gap> split:= CharTableSplitClasses(sub,[1,2,3,4,5,6,7,8,8,9,10,11]);
  1434.     rec( name := "Split(Rest(A5.2xS3,[ 1, 3, 4, 6, 7, 9, 10, 12, 14, 17, 2\
  1435.     0 ]),[ 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11 ])", order := 
  1436.     360, centralizers := [ 360, 180, 24, 12, 18, 9, 15, 15, 15, 12, 4, 6 
  1437.      ], classes := [ 1, 2, 15, 30, 20, 40, 24, 24, 24, 30, 90, 60 
  1438.      ], orders := [ 1, 3, 2, 6, 3, 3, 5, 15, 15, 2, 4, 6 ], powermap := 
  1439.     [ , [ 1, 2, 1, 2, 5, 6, 7, [ 8, 9 ], [ 8, 9 ], 1, 3, 5 ], 
  1440.       [ 1, 1, 3, 3, 1, 1, 7, 7, 7, 10, 11, 10 ],, 
  1441.       [ 1, 2, 3, 4, 5, 6, 1, 2, 2, 10, 11, 12 ] ], irreducibles := 
  1442.     [ [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 
  1443.       [ 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1 ], 
  1444.       [ 2, -1, 2, -1, 2, -1, 2, -1, -1, 0, 0, 0 ], 
  1445.       [ 6, 6, -2, -2, 0, 0, 1, 1, 1, 0, 0, 0 ], 
  1446.       [ 4, 4, 0, 0, 1, 1, -1, -1, -1, 2, 0, -1 ], 
  1447.       [ 4, 4, 0, 0, 1, 1, -1, -1, -1, -2, 0, 1 ], 
  1448.       [ 8, -4, 0, 0, 2, -1, -2, 1, 1, 0, 0, 0 ], 
  1449.       [ 5, 5, 1, 1, -1, -1, 0, 0, 0, 1, -1, 1 ], 
  1450.       [ 5, 5, 1, 1, -1, -1, 0, 0, 0, -1, 1, -1 ], 
  1451.       [ 10, -5, 2, -1, -2, 1, 0, 0, 0, 0, 0, 0 ] ], fusions := [ rec(
  1452.           name := "Rest(A5.2xS3,[ 1, 3, 4, 6, 7, 9, 10, 12, 14, 17, 20 ])",
  1453.           map := [ 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 10, 11 ] ) 
  1454.      ], operations := CharTableOps )
  1455.     gap> # the table of $(3\times A_5)\!\:\! 2$ (incomplete)|
  1456.  
  1457. | |
  1458.  
  1459. 'CharTableSplitClasses( <tbl>, <fusionmap>, <exponent> )'
  1460.  
  1461. To construct a downward extension is somewhat more complicated, since the
  1462. new order, representative orders, centralizer orders and classlengths are
  1463. not known at the moment when the classes are split.
  1464. So the order remains unchanged, centralizer orders will just be split,
  1465. classlengths are divided by the number of image classes, and the
  1466. representative orders become parametrized with respect to the exponent
  1467. <exponent> of the normal subgroup.
  1468. Power maps and irreducibles are computed from <tbl> and <fusionmap>,
  1469. and the factor fusion <fusionmap> to <tbl> is stored on the result.
  1470.  
  1471. |    gap> a5:= CharTable( "Alternating", 5 );;
  1472.     gap> CharTableSplitClasses( a5, [ 1, 1, 2, 3, 3, 4, 4, 5, 5 ], 2 );
  1473.     rec( name := "Split(A5,[ 1, 1, 2, 3, 3, 4, 4, 5, 5 ])", order := 
  1474.     60, centralizers := [ 60, 60, 4, 3, 3, 5, 5, 5, 5 ], classes := 
  1475.     [ 1/2, 1/2, 15, 10, 10, 6, 6, 6, 6 ], orders := 
  1476.     [ 1, 2, [ 2, 4 ], [ 3, 6 ], [ 3, 6 ], [ 5, 10 ], [ 5, 10 ], 
  1477.       [ 5, 10 ], [ 5, 10 ] ], powermap := 
  1478.     [ , [ 1, 1, [ 1, 2 ], [ 4, 5 ], [ 4, 5 ], [ 8, 9 ], [ 8, 9 ], 
  1479.           [ 6, 7 ], [ 6, 7 ] ], 
  1480.       [ 1, 2, 3, [ 1, 2 ], [ 1, 2 ], [ 8, 9 ], [ 8, 9 ], [ 6, 7 ], 
  1481.           [ 6, 7 ] ],, 
  1482.       [ 1, 2, 3, [ 4, 5 ], [ 4, 5 ], [ 1, 2 ], [ 1, 2 ], [ 1, 2 ], 
  1483.           [ 1, 2 ] ] ], irreducibles := [ [ 1, 1, 1, 1, 1, 1, 1, 1, 1 ], 
  1484.       [ 4, 4, 0, 1, 1, -1, -1, -1, -1 ], [ 5, 5, 1, -1, -1, 0, 0, 0, 0 ], 
  1485.       [ 3, 3, -1, 0, 0, -E(5)-E(5)^4, -E(5)-E(5)^4, -E(5)^2-E(5)^3, 
  1486.           -E(5)^2-E(5)^3 ], 
  1487.       [ 3, 3, -1, 0, 0, -E(5)^2-E(5)^3, -E(5)^2-E(5)^3, -E(5)-E(5)^4, 
  1488.           -E(5)-E(5)^4 ] ], fusions := [ rec(
  1489.           name := "A5",
  1490.           map := [ 1, 1, 2, 3, 3, 4, 4, 5, 5 ] ) 
  1491.      ], operations := CharTableOps )|
  1492.  
  1493. *Note* that powermaps (and in the second case also the representative
  1494. orders) may become parametrized maps
  1495. (see Chapter "Maps and Parametrized Maps").
  1496.  
  1497. The inverse process of splitting is the fusion of classes, see
  1498. "CharTableCollapsedClasses".
  1499.  
  1500. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1501. \Section{CharTableCollapsedClasses}\index{fusion of classes}
  1502.  
  1503. 'CharTableCollapsedClasses( <tbl>, <fusionmap> )'
  1504.  
  1505. returns a character table where all classes of the character table <tbl>
  1506. with equal images under the map <fusionmap> are collapsed;
  1507. the fields 'orders', 'classes', and the characters in 'irreducibles' are
  1508. the images under <fusionmap>, the powermaps are obtained on conjugation
  1509. (see "TransferDiagram") with <fusionmap>, 'order' remains unchanged,
  1510. and 'centralizers' arise from 'classes' and 'order'.
  1511.  
  1512. The fusion to the returned table is stored on <tbl>.
  1513.  
  1514. |    gap> c3:= CharTable( "Cyclic", 3 );;
  1515.     gap> t:= CharTableSplitClasses( c3, [ 1, 2, 2, 3, 3 ] );
  1516.     rec( name := "Split(C3,[ 1, 2, 2, 3, 3 ])", order := 
  1517.     3, centralizers := [ 3, 6, 6, 6, 6 ], classes := 
  1518.     [ 1, 1/2, 1/2, 1/2, 1/2 ], orders := [ 1, 3, 3, 3, 3 ], powermap := 
  1519.     [ ,, [ 1, 1, 1, 1, 1 ] ], irreducibles := 
  1520.     [ [ 1, 1, 1, 1, 1 ], [ 1, E(3), E(3), E(3)^2, E(3)^2 ], 
  1521.       [ 1, E(3)^2, E(3)^2, E(3), E(3) ] ], fusions := [ rec(
  1522.           name := "C3",
  1523.           map := [ 1, 2, 2, 3, 3 ] ) ], operations := CharTableOps )
  1524.     gap> CharTableCollapsedClasses( t, [ 1, 2, 2, 3, 3 ] );
  1525.     rec( name := "Collapsed(Split(C3,[ 1, 2, 2, 3, 3 ]),[ 1, 2, 2, 3, 3 ])\
  1526.     ", order := 3, centralizers := [ 3, 3, 3 ], orders := 
  1527.     [ 1, 3, 3 ], powermap := [ ,, [ 1, 1, 1 ] ], fusionsource := 
  1528.     [ "Split(C3,[ 1, 2, 2, 3, 3 ])" ], irreducibles := 
  1529.     [ [ 1, 1, 1 ], [ 1, E(3), E(3)^2 ], [ 1, E(3)^2, E(3) ] ], classes := 
  1530.     [ 1, 1, 1 ], operations := CharTableOps )|
  1531.  
  1532. The inverse process of fusion is the splitting of classes, see
  1533. "CharTableSplitClasses".
  1534.  
  1535. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1536. \Section{CharDegAgGroup}
  1537.  
  1538. 'CharDegAgGroup( <G> [, <q> ] )'
  1539.  
  1540. 'CharDegAgGroup'  computes  the  degrees of irreducible   characters
  1541. of  the finite polycyclic group  <G> over the algebraic closed field of
  1542. characteristic <q>.  The default value for <q> is zero.
  1543. The degrees are returned as a list of pairs, the first entry  denoting a
  1544. degree,  and  the  second  denoting  its multiplicity.
  1545.  
  1546. |    gap> g:= SolvableGroup( 24, 15 );
  1547.     S4
  1548.     gap> CharDegAgGroup( g );
  1549.     [ [ 1, 2 ], [ 2, 1 ], [ 3, 2 ] ]    # two linear characters, one of
  1550.                                         # degree 2, two of degree 3
  1551.     gap> CharDegAgGroup( g, 3 );
  1552.     [ [ 1, 2 ], [ 3, 2 ] ]|
  1553.  
  1554. The  algorithm  bases on~\cite{Con90b}. It works for all solvable groups.
  1555.  
  1556. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1557. \Section{CharTableSSGroup}
  1558.  
  1559. 'CharTableSSGroup( <G> )'
  1560.  
  1561. 'CharTableSSGroup' returns  the  character  table  of  the  supersolvable
  1562. ag-group  <G>  and   stores   it   in  '<G>.charTable'.  If  <G>  is  not
  1563. supersolvable  not all irreducible  characters migth be calculated  and a
  1564. warning will  be  printed  out. The algorithm bases  on \cite{Con90a} and
  1565. \cite{Con90b}.
  1566.  
  1567. All the characters calculated are monomial, so they are the  induced of a
  1568. linear  character of  some  subgroup  of <G>.  For  every  character  the
  1569. subgroup  it is induced from and the  kernel the linear character has are
  1570. written    down     in    '<t>.irredinfo[i].inducedFrom.subgroup'     and
  1571. '<t>.irredinfo[i].inducedFrom.kernel'.
  1572.  
  1573. |    gap> CharTableSSGroup( SolvableGroup( 8 , 5 ) );
  1574.     rec( order := 8, classes := [ 1, 1, 2, 2, 2 ], powermap := 
  1575.     [ , [ 1, 1, 2, 2, 2 ] 
  1576.      ], operations := CharTableOps, group := Q8, irreducibles := 
  1577.     [ [ 1, 1, 1, 1, 1 ], [ 1, 1, 1, -1, -1 ], [ 1, 1, -1, 1, -1 ], 
  1578.       [ 1, 1, -1, -1, 1 ], [ 2, -2, 0, 0, 0 ] ], orders := 
  1579.     [ 1, 2, 4, 4, 4 ], irredinfo := [ rec(
  1580.           inducedFrom := rec(
  1581.               subgroup := Q8,
  1582.               kernel := Q8 ) ), rec(
  1583.           inducedFrom := rec(
  1584.               subgroup := Q8,
  1585.               kernel := Subgroup( Q8, [ b, c ] ) ) ), rec(
  1586.           inducedFrom := rec(
  1587.               subgroup := Q8,
  1588.               kernel := Subgroup( Q8, [ a, c ] ) ) ), rec(
  1589.           inducedFrom := rec(
  1590.               subgroup := Q8,
  1591.               kernel := Subgroup( Q8, [ a*b, c ] ) ) ), rec(
  1592.           inducedFrom := rec(
  1593.               subgroup := Subgroup( Q8, [ b, c ] ),
  1594.               kernel := Subgroup( Q8, [  ] ) ) ) ], centralizers := 
  1595.     [ 8, 8, 4, 4, 4 ], name := "Q8" )|
  1596.  
  1597. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1598. \Section{MatRepresentationsPGroup}
  1599. \index{Matrix Representations of Finite Polycyclic Groups}
  1600. \index{Monomial Representations of Finite Polycyclic Groups}%
  1601.  
  1602. 'MatRepresentationsPGroup( <G> )'\\
  1603. 'MatRepresentationsPGroup( <G> [, <int> ] )'
  1604.  
  1605. 'MatRepresentationsPGroup( <G> )' returns a list of homomorphisms from
  1606. the finite polycyclic group <G> to irreducible complex matrix groups.
  1607. These matrix groups form a system of representatives of the complex
  1608. irreducible representations of <G>.
  1609.  
  1610. 'MatRepresentationsPGroup( <G>, <int> )' returns only the <int>-th
  1611. representation.
  1612.  
  1613. Let <G> be a finite polycyclic group with an abelian  normal subgroup <N>
  1614. such   that    the   factorgroup    $<G>   /   <N>$   is   supersolvable.
  1615. 'MatRepresentationsPGroup' uses the algorithm  described in \cite{Bau91}.
  1616. Note  that for  such  groups all  such representations are equivalent  to
  1617. monomial  ones,  and  in  fact  'MatRepresentationsPGroup'  only  returns
  1618. monomial representations.
  1619.  
  1620. If <G> has not the property stated above, a system of representatives of
  1621. irreducible representations and characters only for the factor group
  1622. $<G> / <M>$ can be computed using this algorithm, where <M> is the
  1623. derived subgroup of the supersolvable residuum of <G>.  In this case
  1624. first a warning is printed.  'MatRepresentationsPGroup' returns
  1625. the irreducible representations of <G> with kernel containing <M> then.
  1626.  
  1627. |    gap> g:= SolvableGroup( 6, 2 );
  1628.     S3
  1629.     gap> MatRepresentationsPGroup( g );
  1630.     [ GroupHomomorphismByImages( S3, Group( [ [ 1 ] ] ), [ a, b ],
  1631.         [ [ [ 1 ] ], [ [ 1 ] ] ] ), GroupHomomorphismByImages( S3, Group(
  1632.         [ [ -1 ] ] ), [ a, b ], [ [ [ -1 ] ], [ [ 1 ] ] ] ),
  1633.       GroupHomomorphismByImages( S3, Group( [ [ 0, 1 ], [ 1, 0 ] ],
  1634.         [ [ E(3), 0 ], [ 0, E(3)^2 ] ] ), [ a, b ],
  1635.         [ [ [ 0, 1 ], [ 1, 0 ] ], [ [ E(3), 0 ], [ 0, E(3)^2 ] ] ] ) ]|
  1636.  
  1637. 'CharTablePGroup' can be used to compute the character table of a group
  1638. with the above properties (see "CharTablePGroup").
  1639.  
  1640. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1641. \Section{CharTablePGroup}
  1642. \index{Characters of Finite Polycyclic Groups}
  1643.  
  1644. 'CharTablePGroup( <G> )'
  1645.  
  1646. 'CharTablePGroup' returns the character table of the finite polycyclic
  1647. group <G>, and stores it in '<G>.charTable'.  Do not change the order of
  1648. '<G>.conjugacyClasses' after having called 'CharTablePGroup'.
  1649.  
  1650. Let <G> be a finite polycyclic group with an abelian normal subgroup <N>
  1651. such that the factorgroup $<G> / <N>$ is supersolvable.
  1652. 'CharTablePGroup' uses the algorithm described in \cite{Bau91}.
  1653.  
  1654. If <G> has not the property stated above, a system of representatives of
  1655. irreducible representations and characters only for the factor group $<G>
  1656. / <M>$ can be computed using this algorithm, where <M> is the derived
  1657. subgroup of the supersolvable residuum of <G>.  In this case first a
  1658. warning is printed.  'CharTablePGroup' returns an incomplete table
  1659. containing exactly those irreducibles with kernel containing <M>.
  1660.  
  1661. |    gap> CharTablePGroup( SolvableGroup( 8, 4 ) );
  1662.     rec( order := 8, centralizers := [ 8, 8, 4, 4, 4 ], classes :=
  1663.     [ 1, 1, 2, 2, 2 ], orders := [ 1, 2, 2, 2, 4 ], irreducibles :=
  1664.     [ [ 1, 1, 1, 1, 1 ], [ 1, 1, -1, 1, -1 ], [ 1, 1, 1, -1, -1 ],
  1665.       [ 1, 1, -1, -1, 1 ], [ 2, -2, 0, 0, 0 ]
  1666.      ], operations := CharTableOps, powermap := [ , [ 1, 1, 1, 1, 2 ]
  1667.      ], name := "D8", group := D8 )|
  1668.  
  1669. 'MatRepresentationsPGroup' can be used to compute representatives of
  1670. the complex irreducible representations (see "MatRepresentationsPGroup").
  1671.  
  1672. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1673. \Section{InitClassesCharTable}\index{initialize classlengths}
  1674.  
  1675. 'InitClassesCharTable( <tbl> )'
  1676.  
  1677. returns the list of conjugacy class lengths of the character table <tbl>,
  1678. and assigns it to the field '<tbl>.classes'; the classlengths are
  1679. computed from the centralizer orders of <tbl>.
  1680.  
  1681. 'InitClassesCharTable' is called automatically for tables that are read
  1682. from the library (see "CharTable") or constructed as generic character
  1683. tables (see "Generic Character Tables").
  1684.  
  1685. |    gap> t:= rec( centralizers:= [ 2, 2 ], name:= "C2" );;
  1686.     gap> InitClassesCharTable( t ); t;
  1687.     [ 1, 1 ]
  1688.     rec(
  1689.       centralizers := [ 2, 2 ],
  1690.       name := "C2",
  1691.       classes := [ 1, 1 ] )|
  1692.  
  1693. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1694. \Section{InverseClassesCharTable}
  1695.  
  1696. 'InverseClassesCharTable( <tbl> )'
  1697.  
  1698. returns the list mapping each class of the character table <tbl> to its
  1699. inverse class. This list can be regarded as (-1)-st powermap; it is
  1700. computed using '<tbl>.irreducibles'.
  1701.  
  1702.  
  1703. |    gap> InverseClassesCharTable( CharTable( "L3(2)" ) );
  1704.     [ 1, 2, 3, 4, 6, 5 ]|
  1705.  
  1706. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1707. \Section{ClassNamesCharTable} \index{class names}
  1708.  
  1709. 'ClassNamesCharTable( <tbl> )'
  1710.  
  1711. 'ClassNamesCharTable'  computes  names  for the classes of  the character
  1712. table <tbl> as strings consisting of the order of an element of the class
  1713. and and least one distinguishing letter.
  1714.  
  1715. The list of these names at the same time is returned by this
  1716. function and stored on the table <tbl> as record field 'classnames'.
  1717.   
  1718. Moreover for each class a record field with its name is constructed,
  1719. containing the position of this name in the list 'classnames' as its
  1720. value.
  1721.  
  1722. |    gap> c3:= CharTable( "Cyclic", 3 );;
  1723.     gap> ClassNamesCharTable( c3 );
  1724.     [ "1a", "3a", "3b" ]
  1725.     gap> c3;
  1726.     rec( name := "C3", order := 3, centralizers := [ 3, 3, 3 ], orders := 
  1727.     [ 1, 3, 3 ], powermap := [ ,, [ 1, 1, 1 ] ], irreducibles := 
  1728.     [ [ 1, 1, 1 ], [ 1, E(3), E(3)^2 ], [ 1, E(3)^2, E(3) ] 
  1729.      ], classparam := [ [ 1, 0 ], [ 1, 1 ], [ 1, 2 ] ], irredinfo := 
  1730.     [ rec(
  1731.           charparam := [ 1, 0 ] ), rec(
  1732.           charparam := [ 1, 1 ] ), rec(
  1733.           charparam := [ 1, 2 ] ) 
  1734.      ], text := "computed using generic character table for cyclic groups",
  1735.     classes := [ 1, 1, 1 ], operations := CharTableOps, classnames := 
  1736.     [ "1a", "3a", "3b" ], 1a := 1, 3a := 2, 3b := 3 )|
  1737.  
  1738. If the record field 'classnames' of <tbl> is unbound,
  1739. 'ClassNamesCharTable' is automatically called by  'DisplayCharTable' (see
  1740. "DisplayCharTable").
  1741.  
  1742. Note that once the class names are computed the resulting record fields
  1743. are stored on <tbl>. They are not deleted by another call of
  1744. 'ClassNamesCharTable'.
  1745.  
  1746. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1747. \Section{ClassMultCoeffCharTable}\index{class multiplication coefficient}
  1748. \index{structure constant}
  1749.  
  1750. 'ClassMultCoeffCharTable( <tbl>, <c1>, <c2>, <c3> )' 
  1751.  
  1752. returns the class  multiplication coefficient of the  classes  <c1>, <c2>
  1753. and <c3> of the group $G$ with character table <tbl>.
  1754.  
  1755. |    gap> t:= CharTable( "L3(2)" );;
  1756.     gap> ClassMultCoeffCharTable( t, 2, 2, 4 );
  1757.     4|
  1758.  
  1759. The class  multiplication coefficient  $c_{1,2,3}$ of  the classes  <c1>,
  1760. <c2> and <c3> equals the number of pairs $(x,y)$ of elements $x, y \in G$
  1761. such  that  $x$ lies  in class <c1>, $y$ lies  in  class  <c2>  and their
  1762. product $xy$ is a fixed element of class <c3>.
  1763.  
  1764. Also  in  the  center of  the group  algebra  these  numbers are found as
  1765. coefficients of the decomposition of the product  of two class sums $K_i$
  1766. and $K_j$ into class sums, \[ K_i K_j = \sum_k c_{ijk} K_k. \]
  1767.  
  1768. Given the character table of a finite group $G$, whose classes  are $C_1,
  1769. \dots, C_r$ with representatives $g_i \in C_i$,  the class multiplication
  1770. coefficients $c_{ijk}$ can be computed by the following formula.
  1771.  
  1772. \[c_{ijk} = \frac{\|C_i\|\|C_j\|}{\|G\|}
  1773.              \sum_{\chi \in \mbox{\footnotesize Irr}(G)}
  1774.              \frac{\chi(g_i) \chi(g_j) \overline{\chi(g_k)}}{\chi(1)} \]
  1775.  
  1776. On the other hand the knowledge of the class multiplication  coefficients
  1777. enables the computation of the character table.
  1778. The algorithms for that are not yet implemented in {\GAP}.
  1779. % (see "DixonSchneider").
  1780.  
  1781. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1782. \Section{MatClassMultCoeffsCharTable}\index{structure constant}
  1783. \index{class multiplication coefficient}
  1784.  
  1785. 'MatClassMultCoeffsCharTable( <tbl>, <class> )' 
  1786.  
  1787. returns the matrix $<C_i> = [ a_{ijk}]_{j,k}$ of structure constants
  1788. (see "ClassMultCoeffCharTable").
  1789.  
  1790. |    gap> L3_2:= CharTable( "L3(2)" );;
  1791.     gap> MatClassMultCoeffsCharTable( t, 2 );
  1792.     [ [ 0, 1, 0, 0, 0, 0 ], [ 21, 4, 3, 4, 0, 0 ], [ 0, 8, 6, 8, 7, 7 ], 
  1793.       [ 0, 8, 6, 1, 7, 7 ], [ 0, 0, 3, 4, 0, 7 ], [ 0, 0, 3, 4, 7, 0 ] ]|
  1794.  
  1795. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1796. \Section{ClassStructureCharTable}\index{class multiplication coefficient}
  1797. \index{structure constant}
  1798.  
  1799. 'ClassStructureCharTable( <tbl>, <classes> )' 
  1800.  
  1801. returns the so--called class structure of the classes in the list
  1802. <classes>, for the character table <tbl> of the group $G$.
  1803. The length of <classes> must be at least 2.
  1804.  
  1805. |    gap> t:= CharTable( "M12" );;
  1806.     gap> ClassStructureCharTable( t, [2,6,9,13] );
  1807.     916185600
  1808.     gap> ClassStructureCharTable( t, [2,9,13] ); # equals the group order
  1809.     95040|
  1810.  
  1811. Let $C_1, \dots, C_n$ denote the conjugacy classes of $G$ that are
  1812. indexed by <classes>.  The class structure $n(C_1, C_2, \ldots, C_n)$
  1813. equals the number of tuples $(g_1, g_2, \ldots, g_n)$ of elements
  1814. $g_i\in C_i$ with $g_1 g_2 \cdots g_n = 1$.  Note the difference to the
  1815. definition of the class multiplication coefficients in
  1816. "ClassMultCoeffCharTable" 'ClassMultCoeffCharTable'.
  1817.  
  1818. $n(C_1, C_2, \ldots, C_n)$ is computed using the formula
  1819. \[ n(C_1, C_2, \ldots, C_n) = \frac{\|C_1\|\|C_2\|\cdots\|C_n\|}{\|G\|}
  1820.              \sum_{\chi \in \mbox{\footnotesize Irr}(G)}
  1821.              \frac{\chi(g_1)\chi(g_2)\cdots\chi(g_n)}{\chi(1)^{n-2}} . \]
  1822.  
  1823. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1824. \Section{RealClassesCharTable}\index{classes!real}
  1825.  
  1826. 'RealClassesCharTable( <tbl> )'
  1827.  
  1828. returns a list of the real classes of the group $G$ with character table
  1829. <tbl>.
  1830.  
  1831. |    gap> RealClassesCharTable(L3_2);
  1832.     [ 1, 2, 3, 4 ]|
  1833.  
  1834. An element $x \in G$ is called *real*, if it is conjugate with its
  1835. inverse. And as $x^{-1} = x^{o(x)-1}$, this fact is tested by looking
  1836. at the powermap of <tbl>.
  1837.  
  1838. Real elements take only real character values.
  1839.  
  1840.  
  1841. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1842. \Section{ClassOrbitCharTable}\index{classes!of cyclic subgroup}
  1843.  
  1844. 'ClassOrbitCharTable( <tbl>, <class> )'
  1845.  
  1846. returns a list of classes containing elements of
  1847. the cyclic subgroup generated by an element $x$ of class <class>.
  1848.  
  1849. |    gap> ClassOrbitCharTable(L3_2, 5);
  1850.     [ 5, 6 ]|
  1851.  
  1852. Being all powers of $x$ this data is recovered from the powermap
  1853. of <tbl>.
  1854.  
  1855. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1856. \Section{ClassRootsCharTable}\index{classes!roots of}
  1857.  
  1858. 'ClassRootsCharTable( <tbl> )'
  1859.  
  1860. returns a list of the classes of all nontrivial $p$--th roots of the
  1861. classes of <tbl> where for each class, $p$ runs over the prime divisors
  1862. of the representative order.
  1863.  
  1864. |    gap> ClassRootsCharTable(L3_2);
  1865.     [ [ 2, 3, 5, 6 ], [ 4 ], [  ], [  ], [  ], [  ] ]|
  1866.  
  1867. This information is found by looking at the powermap of <tbl>, too.
  1868.  
  1869. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1870. \Section{NrPolyhedralSubgroups}\index{subgroups!polyhedral}
  1871.  
  1872. 'NrPolyhedralSubgroups( <tbl>, <c1>, <c2>, <c3> )'
  1873.  
  1874. returns the  number  and isomorphism type  of polyhedral subgroups of the
  1875. group with character table <tbl> which are generated by an element $g$ of
  1876. class <c1> and an element  $h$ of class <c2> with  the  property that the
  1877. product $gh$ lies in class <c3>.
  1878.  
  1879. |    gap> NrPolyhedralSubgroups(L3_2, 2, 2, 4);
  1880.     rec( 
  1881.       number := 21,
  1882.       type := "D8" ) |
  1883.  
  1884. According to~\cite[p.~233]{NPP84} the  number of polyhedral  subgroups of
  1885. isomorphism type $V_4$, $D_{2n}$, $A_4$, $S_4$ and  $A_5$  can be derived
  1886. from the class multiplication coefficient (see "ClassMultCoeffCharTable")
  1887. and    the   number   of    Galois   conjugates   of   a    class    (see
  1888. "ClassOrbitCharTable").
  1889.  
  1890. Note that the classes <c1>,  <c2> and <c3> in the parameter list  must be
  1891. ordered according to the order of the elements in these classes.
  1892.  
  1893. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  1894. \Section{DisplayCharTable} \index{character table!display}
  1895.  
  1896. 'DisplayCharTable( <tbl> )' \\
  1897. 'DisplayCharTable( <tbl>, <arec> )'
  1898.  
  1899. 'DisplayCharTable' prepares the data contained in the character table
  1900. <tbl> for a pretty columnwise output. 
  1901.  
  1902. In the first form 'DisplayCharTable' prints all irreducible characters
  1903. of the table <tbl>, together with the orders of the centralizers in
  1904. factorized form and the available powermaps.
  1905.  
  1906. Thus it can be used  to echo character tables in interactive use, being
  1907. the value of the record field 'Print' of a record field 'operations'
  1908. of <tbl> (see "Character Table Records",
  1909. "Operations Records for Character Tables").
  1910.  
  1911. Each displayed character is given a name 'X.<n>'.
  1912.  
  1913. The number of columns printed at one time depends on the actual
  1914. linelength, which is restored by the function 'SizeScreen' (see
  1915. "SizeScreen").
  1916.  
  1917. The first lines of the output describe the order of the centralizer
  1918. of an element of the class factorized into its prime divisor.
  1919.  
  1920. The next line gives the name of the class. If the record field
  1921. 'classnames' of the table <tbl> is not bound, 'DisplayCharTable'
  1922. calls the function 'ClassNamesCharTable' to determine the class names
  1923. and to store them on the table <tbl> (see "ClassNamesCharTable").
  1924.  
  1925. Preceded by a name 'P<n>' the next lines show the <n>th powermaps
  1926. of <tbl> in terms of the former shown class names.
  1927.  
  1928. Every  ambiguous  or  unknown  (see "Unknown")  value  of  the  table  is
  1929. displayed as a question mark '?'.
  1930.  
  1931. Irrational character values are not printed explicitly because the 
  1932. lengths of their printed representation might disturb the view.
  1933. Instead of that every irrational value is indicated by a name, which
  1934. is a string of a least one capital letter. 
  1935.  
  1936. Once a name for an irrational number is found, it is used all over the
  1937. printed table. Moreover the complex conjugate and the star of an
  1938. irrationality are represented by that very name preceded by a '/'
  1939. resp. a '\*'.
  1940.  
  1941. The printed  character  table  is  then followed  by  a  legend,  a  list
  1942. identifying  the  occurred  symbols with their actual  irrational  value.
  1943. Occasionally this identity is supplemented by a quadratic  representation
  1944. of the irrationality together with the corresponding \ATLAS--notation.
  1945.  
  1946. |    gap> a5:= CharTable("A5");;
  1947.     gap> DisplayCharTable(a5);
  1948.     A5
  1949.  
  1950.        2  2  2  .   .   .
  1951.        3  1  .  1   .   .
  1952.        5  1  .  .   1   1
  1953.  
  1954.          1a 2a 3a  5a  5b
  1955.       2P 1a 1a 3a  5b  5a
  1956.       3P 1a 2a 1a  5b  5a
  1957.       5P 1a 2a 3a  1a  1a
  1958.  
  1959.     X.1   1  1  1   1   1
  1960.     X.2   3 -1  .   A  *A
  1961.     X.3   3 -1  .  *A   A
  1962.     X.4   4  .  1  -1  -1
  1963.     X.5   5  1 -1   .   .
  1964.  
  1965.     A = -E(5)-E(5)^4
  1966.       = (1-ER(5))/2 = -b5|
  1967.  
  1968. In the second form 'DisplayCharTable' takes an argument record <arec> as
  1969. an additional argument. This record can be used to change the default
  1970. style for displaying a character as shown above. Its relevant fields
  1971. are
  1972.  
  1973. 'chars': \\ an integer or a list of integers to select a sublist of the
  1974. irreducible characters of <tbl>, or a list of characters of <tbl>
  1975. (in this case the letter '\"X\"' is replaced by '\"Y\"'),
  1976.  
  1977. 'classes': \\ an integer or a list of integers to select a sublist of the
  1978. classes of <tbl>,
  1979.  
  1980. 'centralizers': \\ suppresses the printing of the orders of the
  1981. centralizers if 'false',
  1982.  
  1983. 'powermap': \\ an integer or a list of integers to select a subset of the
  1984. available powermaps, or 'false' to suppress the powermaps,
  1985.  
  1986. 'letter': \\ a single capital letter (e.~g.\ '\"P\"' for permutation
  1987. characters) to replace '\"X\"',
  1988.  
  1989. 'indicator': \\ 'true' enables the printing of the second Schur
  1990. indicator, a list of integers enables the printing of the corresponding
  1991. indicators.
  1992.  
  1993. |    gap> arec:= rec( chars:= 4, classes:= [a5.3a..a5.5a],
  1994.     > centralizers:= false, indicator:= true, powermap:= [2] );;
  1995.     gap> Indicator( a5, 2 );;
  1996.     gap> DisplayCharTable( a5, arec );
  1997.     A5
  1998.    
  1999.             3a 5a
  2000.          2P 3a 5b
  2001.          2
  2002.     X.4  +   1 -1|
  2003.  
  2004. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2005. \Section{SortCharactersCharTable}\index{character tables!sort}
  2006. \index{characters!sort}\index{tables!sort}
  2007.  
  2008. 'SortCharactersCharTable( <tbl> )'\\
  2009. 'SortCharactersCharTable( <tbl>, <permutation> )'\\
  2010. 'SortCharactersCharTable( <tbl>, <chars> )'\\
  2011. 'SortCharactersCharTable( <tbl>, <chars>, <permutation> )'\\
  2012. 'SortCharactersCharTable( <tbl>, <chars>, \"norm\" )'\\
  2013. 'SortCharactersCharTable( <tbl>, <chars>, \"degree\" )'
  2014.  
  2015. If no list <chars> of characters of the character table <tbl> is
  2016. entered, 'SortCharactersCharTable' sorts '<tbl>.irreducibles'; then
  2017. additionally the list '<tbl>.irredinfo' is permuted by the same
  2018. permutation. Otherwise 'SortCharactersCharTable' sorts the list <chars>.
  2019.  
  2020. There are four possibilities to sort characters\:\ 
  2021. Besides the application of an explicitly given permutation (see
  2022. "Permuted"), they can be sorted according to ascending norms (parameter
  2023. '\"norm\"'), to ascending degree (parameter '\"degree\"') or both (no
  2024. third parameter), i.e., characters with same norm are sorted according to
  2025. ascending degree, and characters with smaller norm precede those with
  2026. bigger norm.
  2027.  
  2028. If the trivial character is contained in the sorted list, it will be
  2029. sorted to the first position.
  2030. Rational characters always will precede other ones with same norm resp.\ 
  2031. same degree afterwards.
  2032.  
  2033. 'SortCharactersCharTable' returns the permutation that was applied to
  2034. <chars>.
  2035.  
  2036. |    gap> t:= CharTable( "Symmetric", 5 );
  2037.     rec( name := "S5", order := 120, centralizers := 
  2038.     [ 120, 12, 8, 6, 6, 4, 5 ], orders := [ 1, 2, 2, 3, 6, 4, 5 
  2039.      ], powermap := [ , [ 1, 1, 1, 4, 4, 3, 7 ], [ 1, 2, 3, 1, 2, 6, 7 ],
  2040.       , [ 1, 2, 3, 4, 5, 6, 1 ] ], irreducibles := 
  2041.     [ [ 1, -1, 1, 1, -1, -1, 1 ], [ 4, -2, 0, 1, 1, 0, -1 ], 
  2042.       [ 5, -1, 1, -1, -1, 1, 0 ], [ 6, 0, -2, 0, 0, 0, 1 ], 
  2043.       [ 5, 1, 1, -1, 1, -1, 0 ], [ 4, 2, 0, 1, -1, 0, -1 ], 
  2044.       [ 1, 1, 1, 1, 1, 1, 1 ] ], classparam := 
  2045.     [ [ 1, [ 1, 1, 1, 1, 1 ] ], [ 1, [ 2, 1, 1, 1 ] ], [ 1, [ 2, 2, 1 ] ],
  2046.       [ 1, [ 3, 1, 1 ] ], [ 1, [ 3, 2 ] ], [ 1, [ 4, 1 ] ], [ 1, [ 5 ] ] 
  2047.      ], irredinfo := [ rec(
  2048.           charparam := [ 1, [ 1, 1, 1, 1, 1 ] ] ), rec(
  2049.           charparam := [ 1, [ 2, 1, 1, 1 ] ] ), rec(
  2050.           charparam := [ 1, [ 2, 2, 1 ] ] ), rec(
  2051.           charparam := [ 1, [ 3, 1, 1 ] ] ), rec(
  2052.           charparam := [ 1, [ 3, 2 ] ] ), rec(
  2053.           charparam := [ 1, [ 4, 1 ] ] ), rec(
  2054.           charparam := [ 1, [ 5 ] ] ) 
  2055.      ], text := "computed using generic character table for symmetric grou\
  2056.     ps", classes := [ 1, 10, 15, 20, 20, 30, 24 
  2057.      ], operations := CharTableOps )
  2058.     gap> SortCharactersCharTable( t, t.irreducibles, "norm" );
  2059.     (1,2,3,4,5,6,7)      # sort the trivial character to the first position
  2060.     gap> SortCharactersCharTable( t );
  2061.     (4,5,7)
  2062.     gap> t.irreducibles;
  2063.     [ [ 1, 1, 1, 1, 1, 1, 1 ], [ 1, -1, 1, 1, -1, -1, 1 ], 
  2064.       [ 4, -2, 0, 1, 1, 0, -1 ], [ 4, 2, 0, 1, -1, 0, -1 ], 
  2065.       [ 5, -1, 1, -1, -1, 1, 0 ], [ 5, 1, 1, -1, 1, -1, 0 ], 
  2066.       [ 6, 0, -2, 0, 0, 0, 1 ] ]|
  2067.  
  2068. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2069. \Section{SortClassesCharTable}\index{character tables!sort}
  2070. \index{tables!sort}
  2071.  
  2072. 'SortClassesCharTable( <tbl> )'\\
  2073. 'SortClassesCharTable( <tbl>, \"centralizers\" )'\\
  2074. 'SortClassesCharTable( <tbl>, \"representatives\" )'\\
  2075. 'SortClassesCharTable( <tbl>, <permutation> )'\\
  2076. 'SortClassesCharTable( <chars>, <permutation> )'
  2077.  
  2078. The last form simply permutes the classes of all elements of <chars>
  2079. with <permutation>. All other forms take a character table <tbl> as
  2080. parameter, and 'SortClassesCharTable' permutes the classes of <tbl>\:
  2081.  
  2082. 'SortClassesCharTable( <tbl>, \"centralizers\" )':\\
  2083.     sorts the classes according to descending centralizer orders,
  2084.  
  2085. 'SortClassesCharTable( <tbl>, \"representatives\" )':\\
  2086.     sorts the classes according to ascending representative orders,
  2087.  
  2088. 'SortClassesCharTable( <tbl> )':\\
  2089.     sorts the classes according to ascending representative orders,
  2090.     and classes with equal representative orders according to descending
  2091.     centralizer orders,
  2092.  
  2093. 'SortClassesCharTable( <tbl>, <permutation> )':\\
  2094.     sorts the classes by application of <permutation>
  2095.  
  2096. After having calculated the permutation, 'SortClassesCharTable' will
  2097. adjust the following fields of <tbl>\:
  2098.  
  2099. by application of the permutation\:\ 'orders', 'centralizers', 'classes',
  2100.    'print', all entries of 'irreducibles', 'classtext', 'classparam',
  2101.    'classnames', all fusion maps, all entries of the 'chars' lists in the
  2102.    records of 'projectives'
  2103.  
  2104. by conjugation with the permutation\:\ all powermaps,
  2105. 'automorphisms',
  2106.  
  2107. by multiplication with the permutation\:\ 'permutation',
  2108.  
  2109. and the fields corresponding to '<tbl>.classnames'
  2110. (see "ClassNamesCharTable").
  2111.  
  2112. The applied permutation is returned by 'SortClassesCharTable'.
  2113.  
  2114. *Note* that many programs expect the class '1A' to be the first one
  2115. (see "Conventions for Character Tables").
  2116.  
  2117. |    gap> t:= CharTable( "Symmetric", 5 );
  2118.     rec( name := "S5", order := 120, centralizers := 
  2119.     [ 120, 12, 8, 6, 6, 4, 5 ], orders := [ 1, 2, 2, 3, 6, 4, 5 
  2120.      ], powermap := [ , [ 1, 1, 1, 4, 4, 3, 7 ], [ 1, 2, 3, 1, 2, 6, 7 ],
  2121.       , [ 1, 2, 3, 4, 5, 6, 1 ] ], irreducibles := 
  2122.     [ [ 1, -1, 1, 1, -1, -1, 1 ], [ 4, -2, 0, 1, 1, 0, -1 ], 
  2123.       [ 5, -1, 1, -1, -1, 1, 0 ], [ 6, 0, -2, 0, 0, 0, 1 ], 
  2124.       [ 5, 1, 1, -1, 1, -1, 0 ], [ 4, 2, 0, 1, -1, 0, -1 ], 
  2125.       [ 1, 1, 1, 1, 1, 1, 1 ] ], classparam := 
  2126.     [ [ 1, [ 1, 1, 1, 1, 1 ] ], [ 1, [ 2, 1, 1, 1 ] ], [ 1, [ 2, 2, 1 ] ],
  2127.       [ 1, [ 3, 1, 1 ] ], [ 1, [ 3, 2 ] ], [ 1, [ 4, 1 ] ], [ 1, [ 5 ] ] 
  2128.      ], irredinfo := [ rec(
  2129.           charparam := [ 1, [ 1, 1, 1, 1, 1 ] ] ), rec(
  2130.           charparam := [ 1, [ 2, 1, 1, 1 ] ] ), rec(
  2131.           charparam := [ 1, [ 2, 2, 1 ] ] ), rec(
  2132.           charparam := [ 1, [ 3, 1, 1 ] ] ), rec(
  2133.           charparam := [ 1, [ 3, 2 ] ] ), rec(
  2134.           charparam := [ 1, [ 4, 1 ] ] ), rec(
  2135.           charparam := [ 1, [ 5 ] ] ) 
  2136.      ], text := "computed using generic character table for symmetric grou\
  2137.     ps", classes := [ 1, 10, 15, 20, 20, 30, 24 
  2138.      ], operations := CharTableOps )
  2139.     gap> SortClassesCharTable( t, "centralizers" );
  2140.     (6,7)
  2141.     gap> SortClassesCharTable( t, "representatives" );
  2142.     (5,7)
  2143.     gap> t.centralizers; t.orders;
  2144.     [ 120, 12, 8, 6, 4, 5, 6 ]
  2145.     [ 1, 2, 2, 3, 4, 5, 6 ]|
  2146.  
  2147. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2148. \Section{SortCharTable}\index{character tables!sort}\index{tables!sort}
  2149.  
  2150. 'SortCharTable( <tbl>, <kernel> )'\\
  2151. 'SortCharTable( <tbl>, <normalseries> )'\\
  2152. 'SortCharTable( <tbl>, <facttbl>, <kernel> )'
  2153.  
  2154. sorts classes and 'irreducibles' of the character table <tbl>, and
  2155. returns a record with components 'columns' and 'rows', which are the
  2156. permutations applied to classes and characters.
  2157.  
  2158. The first form sorts the classes at positions contained in the list
  2159. <kernel> to the beginning, and sorts all characters in
  2160. '<tbl>.irreducibles' such that the first characters are those that
  2161. contain <kernel> in their kernel.
  2162.  
  2163. The second form does the same successively for all kernels $k_i$ in
  2164. the list $'normalseries' = [ k_1, k_2, \ldots, k_n ]$ where
  2165. $k_i$ must be a sublist of $k_{i+1}$ for $1 \leq i \leq n-1$.
  2166.  
  2167. The third form computes the table <F> of the factor group of <tbl>
  2168. modulo the normal subgroup formed by the classes whose positions are
  2169. contained in the list <kernel>;
  2170. <F> must be permutation equivalent to the table <facttbl> (in the
  2171. sense of "TransformingPermutationsCharTables"), else 'false' is
  2172. returned.  The classes of <tbl> are sorted such that the preimages
  2173. of a class of <F> are consecutive, and that the succession of
  2174. preimages is that of <facttbl>.  '<tbl>.irreducibles' is sorted as
  2175. by 'SortCharTable( <tbl>, <kernel> )'.
  2176. (*Note* that the transformation is only unique up to table automorphisms
  2177. of <F>, and this need not be unique up to table automorphisms of <tbl>.)
  2178.  
  2179. All rearrangements of classes and characters are stable, i.e., the
  2180. relative positions of classes and characters that are not distinguished
  2181. by any relevant property is not changed.
  2182.  
  2183. 'SortCharTable' uses "SortClassesCharTable" 'SortClassesCharTable' and
  2184. "SortCharactersCharTable" 'SortCharactersCharTable'.
  2185.  
  2186. |    gap> t:= CharTable("Symmetric",4);;
  2187.     gap> Set( List( t.irreducibles, KernelChar ) );
  2188.     [ [ 1 ], [ 1, 2, 3, 4, 5 ], [ 1, 3 ], [ 1, 3, 4 ] ]
  2189.     gap> SortCharTable( t, Permuted( last, (2,4,3) ) );
  2190.     rec(
  2191.       columns := (2,4,3),
  2192.       rows := (1,2,4,5) )
  2193.     gap> DisplayCharTable( t );
  2194.     S4
  2195.     
  2196.        2  3  3  .  2  2
  2197.        3  1  .  1  .  .
  2198.     
  2199.          1a 2a 3a 2b 4a
  2200.       2P 1a 1a 3a 1a 2a
  2201.       3P 1a 2a 1a 2b 4a
  2202.     
  2203.     X.1   1  1  1  1  1
  2204.     X.2   1  1  1 -1 -1
  2205.     X.3   2  2 -1  .  .
  2206.     X.4   3 -1  . -1  1
  2207.     X.5   3 -1  .  1 -1|
  2208.  
  2209. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2210. \Section{MatAutomorphisms}\index{automorphism group!of a matrix}
  2211.  
  2212. 'MatAutomorphisms( <mat>, <maps>, <subgroup> )'
  2213.  
  2214. returns the permutation group record representing the matrix
  2215. automorphisms of the matrix <mat> that respect all lists in the list
  2216. <maps>, i.e. representing the group of those permutations of columns of
  2217. <mat> which acts on the set of rows of <mat> and additionally fixes all
  2218. lists in <maps>.
  2219.  
  2220. <subgroup> is a list of permutation generators of a subgroup of this
  2221. group. E.g. generators of the Galois automorphisms of a matrix of
  2222. ordinary characters may be entered here.
  2223.  
  2224. |    gap> t:= CharTable( "Dihedral", 8 );
  2225.     rec( name := "D8", order := 8, centralizers := [ 8, 4, 8, 4, 4 
  2226.      ], orders := [ 1, 4, 2, 2, 2 ], powermap := [ , [ 1, 3, 1, 1, 1 ] 
  2227.      ], irreducibles := [ [ 1, 1, 1, 1, 1 ], [ 1, 1, 1, -1, -1 ], 
  2228.       [ 1, -1, 1, 1, -1 ], [ 1, -1, 1, -1, 1 ], [ 2, 0, -2, 0, 0 ] 
  2229.      ], classparam := [ [ 1, 0 ], [ 1, 1 ], [ 1, 2 ], [ 2, 0 ], [ 2, 1 ] 
  2230.      ], irredinfo := [ rec(
  2231.           charparam := [ 1, 0 ] ), rec(
  2232.           charparam := [ 1, 1 ] ), rec(
  2233.           charparam := [ 1, 2 ] ), rec(
  2234.           charparam := [ 1, 3 ] ), rec(
  2235.           charparam := [ 2, 1 ] ) 
  2236.      ], text := "computed using generic character table for dihedral group\
  2237.     s", classes := [ 1, 2, 1, 2, 2 ], operations := CharTableOps )
  2238.     gap> MatAutomorphisms( t.irreducibles, [], Group( () ) );
  2239.     Group( (4,5), (2,4) )
  2240.     gap> MatAutomorphisms( t.irreducibles, [ t.orders ], Group( () ) );
  2241.     Group( (4,5) )|
  2242.  
  2243. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2244. \Section{TableAutomorphisms}
  2245. \index{automorphism group!of a character table}
  2246.  
  2247. 'TableAutomorphisms( <tbl>, <chars> )'\\
  2248. 'TableAutomorphisms( <tbl>, <chars>, \"closed\" )'
  2249.  
  2250. returns a permutation group record for the group of those matrix
  2251. automorphisms of <chars> (see "MatAutomorphisms") which are
  2252. admissible by (i.e. which fix) the fields 'orders' and all uniquely
  2253. determined (i.e.\ not parametrized) maps in 'powermap' of
  2254. the character table <tbl>; the action on 'orders' is the natural
  2255. permutation, that on the powermaps is conjugation.
  2256.  
  2257. If <chars> is closed under galois conjugacy --this is always satisfied
  2258. for ordinary character tables-- the parameter \"closed\"\ may be entered.
  2259. In that case the subgroup of Galois automorphisms is computed by
  2260. "GaloisMat" 'GaloisMat'.
  2261.  
  2262. |    gap> t:= CharTable( "Dihedral", 8 );; # as in "MatAutomorphisms"
  2263.     gap> TableAutomorphisms( t, t.irreducibles );
  2264.     Group( (4,5) )|
  2265.  
  2266. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2267. \Section{TransformingPermutations}
  2268.  
  2269. 'TransformingPermutations( <mat1>, <mat2> )'
  2270.  
  2271. tries to construct a permutation $\pi$ that transforms the set of rows of
  2272. the matrix <mat1> to the set of rows of the matrix <mat2> by permutation
  2273. of columns.
  2274. If such a permutation exists, a record with fields 'columns', 'rows'
  2275. and 'group' is returned, otherwise 'false'\:\ 
  2276. If $'TransformingPermutations( <mat1>, <mat2> ) = <r>' \not= 'false'$
  2277. then
  2278.  
  2279. 'Permuted( List(<mat1>,x->Permuted(x,<r>.columns)),<r>.rows ) = <mat2>',
  2280.  
  2281. and '<r>.group' is the group of matrix automorphisms of <mat2>;
  2282. this group stabilizes the transformation, i.e. for $g$ in that group and
  2283. $\pi$ the value of the 'columns' field, also $\pi g$ would be a valid
  2284. permutation of columns.
  2285.  
  2286. |    gap> mat1:= CharTable( "Alternating", 5 ).irreducibles;
  2287.     [ [ 1, 1, 1, 1, 1 ], [ 4, 0, 1, -1, -1 ], [ 5, 1, -1, 0, 0 ], 
  2288.       [ 3, -1, 0, -E(5)-E(5)^4, -E(5)^2-E(5)^3 ], 
  2289.       [ 3, -1, 0, -E(5)^2-E(5)^3, -E(5)-E(5)^4 ] ]
  2290.     gap> mat2:= CharTable( "A5" ).irreducibles;
  2291.     [ [ 1, 1, 1, 1, 1 ], [ 3, -1, 0, -E(5)-E(5)^4, -E(5)^2-E(5)^3 ], 
  2292.       [ 3, -1, 0, -E(5)^2-E(5)^3, -E(5)-E(5)^4 ], [ 4, 0, 1, -1, -1 ], 
  2293.       [ 5, 1, -1, 0, 0 ] ]
  2294.     gap> TransformingPermutations( mat1, mat2 );
  2295.     rec(
  2296.       columns := (),
  2297.       rows := (2,4)(3,5),
  2298.       group := Group( (4,5) ) )|
  2299.  
  2300. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2301. \Section{TransformingPermutationsCharTables}
  2302.  
  2303. 'TransformingPermutationsCharTables( <tbl1>, <tbl2> )'
  2304.  
  2305. tries to construct a permutation $\pi$ that transforms the set of rows of
  2306. '<tbl1>.irreducibles' to the set of rows of '<tbl2>.irreducibles' by
  2307. permutation of columns
  2308. (see "TransformingPermutations") which also transforms the powermaps and
  2309. the 'orders' field.
  2310. If such a permutation exists, a record with fields 'columns' (a valid
  2311. permutation of columns), 'rows' (the permutation of '<tbl>.irreducibles'
  2312. corresponding to that permutation) and 'group' (the permutation group
  2313. record of table automorphisms of <tbl2>, see "TableAutomorphisms") is
  2314. returned, otherwise 'false'.
  2315.  
  2316. |    gap> t1:= CharTable("Dihedral",8);;t2:= CharTable("Quaternionic",8);;
  2317.     gap> TransformingPermutations( t1.irreducibles, t2.irreducibles );
  2318.     rec(
  2319.       columns := (),
  2320.       rows := (),
  2321.       group := Group( (4,5), (2,4) ) )
  2322.     gap> TransformingPermutationsCharTables( t1, t2 );
  2323.     false
  2324.     gap> t1:= CharTable( "Dihedral", 6 );; t2:= CharTable("Symmetric",3);;
  2325.     gap> TransformingPermutationsCharTables( t1, t2 );
  2326.     rec(
  2327.       columns := (2,3),
  2328.       rows := (1,3,2),
  2329.       group := Group( () ) )|
  2330.  
  2331. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2332. \Section{GetFusionMap}\index{fusion map!get}\index{subgroup fusions}
  2333.  
  2334. 'GetFusionMap( <source>, <destination> )'\\
  2335. 'GetFusionMap( <source>, <destination>, <specification> )'
  2336.  
  2337. For character tables <source> and <destination>,
  2338. 'GetFusionMap( <source>, <destination> )' returns the 'map' field of the
  2339. fusion stored on the character table <source> that has the 'name' field
  2340. '<destination>.name';
  2341.  
  2342. 'GetFusionMap( <source>, <destination>, <specification> )' gets that
  2343. fusion that additionally has the 'specification' field <specification>.
  2344.  
  2345. Both versions adjust the ordering of classes of <destination> using
  2346. '<destination>.permutation' (see "SortClassesCharTable", "Conventions for
  2347. Character Tables").
  2348. That is the reason why <destination> cannot be simply the name of the
  2349. destination table.
  2350.  
  2351. If both <source> and <destination> are Brauer tables, 'GetFusionMap'
  2352. returns the fusion corresponding to that between the ordinary tables;
  2353. for that, this fusion must be stored on '<source>.ordinary'.
  2354.  
  2355. If no appropriate fusion is found, 'false' is returned.
  2356.  
  2357. |    gap> s:= CharTable( "L2(11)" );;
  2358.     gap> t:= CharTable( "J1" );;
  2359.     gap> SortClassesCharTable( t, ( 3, 4, 5, 6 ) );;
  2360.     gap> t.permutation;
  2361.     (3,4,5,6)
  2362.     gap> GetFusionMap( s, t );
  2363.     [ 1, 2, 4, 6, 5, 3, 10, 10 ]
  2364.     gap> s.fusions[5];
  2365.     rec(
  2366.       name := "J1",
  2367.       map := [ 1, 2, 3, 5, 4, 6, 10, 10 ],
  2368.       text :=
  2369.        "fusion is unique up to table automorphisms,\nthe representative is\
  2370.      equal to the fusion map on the CAS table" )|
  2371.  
  2372. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2373. \Section{StoreFusion}\index{fusion!store}\index{subgroup fusions}
  2374.  
  2375. 'StoreFusion( <source>, <destination>, <fusion> )'\\
  2376. 'StoreFusion( <source>, <destination>, <fusionmap> )'
  2377.  
  2378. For character tables <source> and <destination>, <fusion> must be a
  2379. record containing at least the field 'map' which is regarded as a fusion
  2380. from <source> to <destination>.
  2381. <fusion> is stored on <source> if no ambiguity arises, i.e.\ if there is
  2382. not yet a fusion into <destination> stored on <source> or if any fusion
  2383. into destination stored on <source> has a 'specification' field different
  2384. from that of <fusion>.
  2385. The 'map' field of <fusion> is adjusted by '<destination>.permutation'.
  2386. (Thus the map will remain correct even if the classes of a concerned
  2387. table are sorted, see "SortClassesCharTable" and "Conventions for
  2388. Character Tables"; the
  2389. correct fusion can be got using "GetFusionMap", so be careful!).
  2390. Additionally, '<source>.name' is added to '<destination>.fusionsource'.
  2391.  
  2392. The second form works like the first, with
  2393. '<fusion> = rec( map\:= <fusionmap> )'.
  2394.  
  2395. |    gap> s:= CharTable( "A6.2_1" );; t:= CharTable( "A7.2" );;
  2396.     gap> fus:= RepresentativesFusions( s, SubgroupFusions( s, t ), t );
  2397.     [ [ 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13 ] ]
  2398.     gap> s.fusions; t.fusionsource;
  2399.     [  ]
  2400.     [ "2.A7.2", "3.A7.2", "6.A7.2", "A7" ]
  2401.     gap> StoreFusion( s, t, fus[1] );
  2402.     gap> s.fusions; t.fusionsource;
  2403.     [ rec(
  2404.           name := "A7.2",
  2405.           map := [ 1, 2, 3, 4, 5, 6, 9, 10, 11, 12, 13 ] ) ]
  2406.     [ "2.A7.2", "3.A7.2", "6.A7.2", "A6.2_1", "A7" ]|
  2407.  
  2408. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2409. \Section{FusionConjugacyClasses}
  2410.  
  2411. 'FusionConjugacyClasses( <subgroup>, <group>       )'\\
  2412. 'FusionConjugacyClasses( <group>   , <factorgroup> )'
  2413.  
  2414. 'FusionConjugacyClasses' returns a list denoting the fusion of
  2415. conjugacy classes from
  2416. the  first  group  to the  second one.   If both  groups  have components
  2417. 'charTable' this list is written to the character tables, too.
  2418.  
  2419. |    gap> g := SolvableGroup( 24, 14 );
  2420.     Sl(2,3)
  2421.     gap> FusionConjugacyClasses( g, g / Subgroup( g, [ g.4 ] ) );
  2422.     [ 1, 1, 2, 3, 3, 4, 4 ]
  2423.     gap> FusionConjugacyClasses( Subgroup( g, [ g.2, g.3, g.4 ] ), g );
  2424.     [ 1, 2, 3, 3, 3 ]|
  2425.  
  2426. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2427. \Section{MAKElb11}\index{MOC!interface to}
  2428.  
  2429. 'MAKElb11( <listofns> )'
  2430.  
  2431. prints field information for fields with conductor $Q_n$ where <n> is in
  2432. the list <listofns>;
  2433.  
  2434. 'MAKElb11( [ 3 .. 189 ] )' will print something very similar to
  2435. Richard Parker\'s file 'lb11'.
  2436.  
  2437. |    gap> MAKElb11( [ 3, 4 ] );
  2438.        3   2   0   1   0
  2439.        4   2   0   1   0|
  2440.  
  2441. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2442. \Section{ScanMOC}\index{MOC!interface to}
  2443.  
  2444. 'ScanMOC( <list> )'
  2445.  
  2446. returns a record containing the information encoded in the list <list>,
  2447. the components of the result are the labels in <list>.  If <list> is in
  2448. MOC2 format (10000--format) the names of components are 30000--numbers,
  2449. if it is in MOC3 format the names of components have yABC--format.
  2450.  
  2451. |    gap> ScanMOC( List( "y100y105ay110t28t22z" ) );
  2452.     rec(
  2453.       y105 := [ 0 ],
  2454.       y110 := [ 28, 22 ] )|
  2455.  
  2456. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2457. \Section{MOCChars}\index{MOC!interface to}
  2458.  
  2459. 'MOCChars( <tbl>, <gapchars> )'
  2460.  
  2461. returns translations of {\GAP} format characters <gapchars> to MOC
  2462. format.  <tbl> must be a {\GAP} format table or a MOC format table.
  2463.  
  2464. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2465. \Section{GAPChars}\index{MOC!interface to}
  2466.  
  2467. 'GAPChars( <tbl>, <mocchars> )'
  2468.  
  2469. returns translations of MOC format characters <mocchars> to {\GAP}
  2470. format.  <tbl> must be a {\GAP} format table or a MOC format table.
  2471.  
  2472. <mocchars> may also be a list of integers, e.g., a component containing
  2473. characters in a record produced by "ScanMOC".
  2474.  
  2475. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2476. \Section{MOCTable}\index{MOC!interface to}
  2477.  
  2478. 'MOCTable( <gaptbl> )'\\
  2479. 'MOCTable( <gaptbl>, <basicset> )'
  2480.  
  2481. return the MOC format table record of the {\GAP} table <gaptbl>, and
  2482. stores it in the component 'MOCtbl' of <gaptbl>.
  2483.  
  2484. The first form can be used for ordinary ($G.0$) tables only, for modular
  2485. ($G.p$) tables one has to specify a basic set <basicset> of ordinary
  2486. irreducibles which must be the list of positions of these characters in
  2487. the 'irreducibles' component of the corresponding ordinary table (which
  2488. is stored in <gaptbl>.ordinary).
  2489.  
  2490. The result contains the information of <gaptbl> in a format similar to
  2491. the MOC 3 format, the table itself can e.g. easily be printed out or be
  2492. used to print out characters using "PrintToMOC".
  2493.  
  2494. The components of the result are
  2495. 'name'        : the string 'MOCTable(<name>)' where <name> is the name
  2496.                 of <gaptbl>,
  2497.  
  2498. 'isMOCformat' : has value 'true',
  2499.  
  2500. 'GAPtbl'      : the record <gaptbl>,
  2501.  
  2502. 'operations'  : equal to 'MOCTableOps', containing just an appropriate
  2503.                 'Print' function,
  2504.  
  2505. 'prime'       : the characteristic of the field (label 30105 in MOC),
  2506.  
  2507. 'centralizers': centralizer orders for cyclic subgroups (label 30130)
  2508.  
  2509. 'orders'      : element orders for cyclic subgroups (label 30140)
  2510.  
  2511. 'fields'      : at position 'i' the number field generated by the
  2512.                 character values of the 'i'--th cyclic subgroup;
  2513.                 the 'base' component of each field is a Parker base,
  2514.                 (the length of 'fields' is equal to the value of label
  2515.                 30110 in MOC).
  2516.  
  2517. 'cycsubgps'   : 'cycsubgps[i] = j' means that class 'i' of
  2518.                 the {\GAP} table belongs to the 'j'--th cyclic subgroup
  2519.                 of the {\GAP} table,
  2520.  
  2521. 'repcycsub'   : 'repcycsub[j] = i' means that class 'i' of
  2522.                 the {\GAP} table is the representative of
  2523.                 the 'j'--th cyclic subgroup of the {\GAP} table.
  2524.                 *Note* that the representatives of {\GAP} table and
  2525.                 MOC table need not agree!
  2526.  
  2527. 'galconjinfo' : a list $[ r_1,c_1,r_2,c_2,\ldots,r_n,c_n ]$
  2528.                 which means that the $i$--th class of the GAP table is
  2529.                 the $c_i$--th conjugate of the representative of
  2530.                 the $r_i$--th cyclic subgroup on the MOC table.
  2531.                 (This is used to translate back to GAP format,
  2532.                 stored under label 30160)
  2533.  
  2534. '30170'       : (power maps) for each cyclic subgroup (except
  2535.                 the trivial one) and each prime divisor of
  2536.                 the representative order store four values, the number
  2537.                 of the subgroup, the power, the number of the cyclic
  2538.                 subgroup containing the image, and the power to which
  2539.                 the representative must be raised to give the image
  2540.                 class.  (This is used only to construct the '30230'
  2541.                 power map/embedding information.)
  2542.                 In 'result.30170' only a list of lists (one for each
  2543.                 cyclic subgroup) of all these values is stored,
  2544.                 it will not be used by {\GAP}.
  2545.  
  2546. 'tensinfo'    : tensor product information, used to compute the
  2547.                 coefficients of the Parker base for tensor products
  2548.                 of characters (label 30210 in MOC).
  2549.                 For a field with vector space base $(v_1,v_2,\ldots,v_n)$
  2550.                 the tensor product information of a cyclic subgroup
  2551.                 in MOC (as computed by 'fct') is either 1 (for rational
  2552.                 classes) or a sequence
  2553.                 \[ n x_{1,1} y_{1,1} z_{1,1} x_{1,2} y_{1,2} z_{1,2}
  2554.                    \ldots x_{1,m_1} y_{1,m_1} z_{1,m_1} 0 x_{2,1} \ldots
  2555.                    z_{2,m_2} 0 \ldots x_{n,m_n} y_{n,m_n} z_{n,m_n} 0 \]
  2556.                 which means that the coefficient of $v_k$ in the product
  2557.                 \[ ( \sum_{i=1}^{n} a_i v_i ) ( \sum_{j=1}^{n} b_j v_j ) \]
  2558.                 is equal to
  2559.                 \[ \sum_{i=1}^{m_k} x_{k,i} a_{y_{k,i}} b_{z_{k,i}}\ . \]
  2560.                 On a MOC table in {\GAP} the 'tensinfo' component is
  2561.                 a list of lists, each containing exactly the sequence
  2562.  
  2563. 'invmap'      : inverse map to compute complex conjugate characters,
  2564.                 label 30220 in MOC.
  2565.  
  2566. 'powerinfo'   : field embeddings for $p$--th symmetrizations, $p$ prime
  2567.                 in '[ 2 .. 19 ]'; note that the necessary power maps
  2568.                 must be stored on <gaptbl> to compute this component.
  2569.                 (label 30230 in MOC)
  2570.  
  2571. '30900'       : basic set of restricted ordinary irreducibles in the
  2572.                 case of nonzero characteristic, all ordinary irreducibles
  2573.                 else.
  2574.  
  2575. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2576. \Section{PrintToMOC}\index{MOC!interface to}
  2577.  
  2578. 'PrintToMOC( <moctbl> )'\\
  2579. 'PrintToMOC( <moctbl>, <chars> )'
  2580.  
  2581. The first form prints the MOC3 format of the character table <moctbl>
  2582. which must be an character table in MOC format (as produced by
  2583. "MOCTable").  The second form prints a table in MOC3 format that
  2584. contains the MOC format characters <chars> (as produced by "MOCChars")
  2585. under label 'y900'.
  2586.  
  2587. |    gap> t:= CharTable( "A5mod3" );;
  2588.     gap> moct:= MOCTable( t, [ 1, 2, 3, 4 ] );;
  2589.     gap> PrintTo( "a5mod3", PrintToMOC( moct ), "\n" ); |
  2590.  
  2591. produces a file 'a5mod3' whose first characters are
  2592.  
  2593. |    y100y105dy110edy130t60efy140bcfy150bbfcabbey160bbcbdbdcy170ccbbefbb|
  2594.  
  2595. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2596. \Section{PrintToCAS}\index{CAS tables,CAS format,CAS}
  2597.  
  2598. 'PrintToCAS( <filename>, <tbl> )'\\
  2599. 'PrintToCAS( <tbl>, <filename> )'
  2600.  
  2601. produces a file with name <filename> which contains a {\CAS} library table
  2602. of the {\GAP} character table <tbl>; this file can be read into {\CAS}
  2603. using the 'get'-command (see~\cite{NPP84}).
  2604.  
  2605. The line length in the file is at most the current value 'SizeScreen()[1]'
  2606. (see "SizeScreen").
  2607.  
  2608. Only the fields 'name', 'text', 'order', 'centralizers', 'orders',
  2609. 'print', 'powermap', 'classtext' (for partitions only), 'fusions',
  2610. 'irredinfo', 'characters', 'irreducibles' of <tbl> are considered.
  2611.  
  2612. If '<tbl>.characters' is bound, this list is taken as 'characters' entry
  2613. of the {\CAS} table, otherwise '<tbl>.irreducibles' (if exists) will form
  2614. the list 'characters' of the {\CAS} table.
  2615.  
  2616. |    gap> PrintToCAS( "c2", CharTable( "Cyclic", 2 ) );|
  2617.  
  2618. produces a file with name 'c2' containing the following data\:
  2619.  
  2620. |    'C2'
  2621.     00/00/00. 00.00.00.
  2622.     (2,2,0,2,-1,0)
  2623.     text:
  2624.     (&computed using generic character table for cyclic groups&),
  2625.     order=2,
  2626.     centralizers:(2,2),
  2627.     reps:(1,2),
  2628.     powermap:2(1,1),
  2629.     characters:
  2630.     (1,1)
  2631.     (1,-1);
  2632.     /// converted from GAP|
  2633.  
  2634.  
  2635. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  2636. %%
  2637. %E  Emacs . . . . . . . . . . . . . . . . . . . . . local Emacs variables
  2638. %%
  2639. %%  Local Variables:
  2640. %%  mode:               outline
  2641. %%  outline-regexp:     "\\\\Chapter\\|\\\\Section"
  2642. %%  fill-column:        73
  2643. %%  eval:               (hide-body)
  2644. %%  End:
  2645. %%
  2646.