Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 91213ddcfbe7f54821d42c2d9e091326 > files > 469

gap-system-packages-4.4.12-5mdv2010.0.i586.rpm

  
  2 The User Interface of the AtlasRep Package
  
  The  user  interface  is  the  part  of the GAP interface that allows one to
  display information about the current contents of the database and to access
  individual  data  (perhaps  from  a  remote  server, see Section 1.7-1). The
  corresponding  functions  are described in this chapter. See Section 2.6 for
  some small examples how to use the functions of the interface.
  
  Extensions  of  the AtlasRep package are regarded as another part of the GAP
  interface,  they  are described in Chapter 3. Finally, the low level part of
  the interface are described in Chapter 5.
  
  As  stated  in  Section 1.2,  the  user interface is preliminary. It will be
  extended  when  the  GAP  version  of  the ATLAS of Group Representations is
  connected  to  other GAP databases such as the libraries of character tables
  and tables of marks.
  
  For  some  of the examples in this chapter, the GAP packages CTblLib [Bre04]
  and TomLib are needed.
  
  ---------------------------  Example  ----------------------------
    gap> LoadPackage( "ctbllib" );
    true
    gap> LoadPackage( "tomlib" );
    true
  ------------------------------------------------------------------
  
  
  2.1 Accessing vs. Constructing Representations
  
  Note  that  accessing the data means in particular that it is not the aim of
  this  package  to construct representations from known ones. For example, if
  at  least  one  permutation  representation  for  a group G is stored but no
  matrix   representation   in   a   positive   characteristic  p,  say,  then
  OneAtlasGeneratingSetInfo  (2.5-4)  returns  fail  when  it  is  asked for a
  description of an available set of matrix generators for G in characteristic
  p,  although  such a representation can be obtained by reduction modulo p of
  an integral matrix representation, which in turn can be constructed from any
  permutation representation.
  
  
  2.2 Group Names Used in the AtlasRep Package
  
  The AtlasRep package refers to data of the ATLAS of Group Representations by
  the  name  of  the group in question plus additional information. Thus it is
  essential  to  know  this name, which is called the GAP name of the group in
  the following.
  
  For  an  almost  simple  group,  the  GAP  name  is  equal to the Identifier
  (Reference: Identifier!for character tables) value of the character table of
  this  group  in  the  GAP  library  (see Access  to Library Character Tables
  (CTblLib:  Access  to  Library Character Tables)); this name is usually very
  similar  to  the  name  used  in  the  ATLAS of Finite Groups [CCNPW85]. For
  example,   "M22"   is   the   GAP  name  of  the  Mathieu  group  M_22,  and
  "12_1.U4(3).2_1" is the GAP name of 12_1.U_4(3).2_1.
  
  Internally,  for example as part of filenames (see Section 5.6), the package
  uses  names  that  may  differ  from  the  GAP names; these names are called
  ATLAS-file  names.  For  example,  A5, TE62, and F24 are possible values for
  groupname.  Of these, only A5 is also a GAP name, but the other two are not;
  the corresponding GAP names are 2E6(2) and Fi24', respectively.
  
  
  2.3 Standard Generators Used in the AtlasRep Package
  
  For   the  general  definition  of  standard  generators  of  a  group,  see
  Section 'Reference:  Standard  Generators  of  Groups'; details can be found
  in [Wil96].
  
  Several  different  standard  generators  may  be  defined  for a group, the
  definitions can be found at
  
  http://brauer.maths.qmul.ac.uk/Atlas
  
  When  one specifies the standardization, the i-th set of standard generators
  is  denoted  by  the  number i. Note that when more than one set of standard
  generators  is  defined  for  a group, one must be careful to use compatible
  standardization.  For  example,  the  straight  line programs, straight line
  decisions  and  black  box  programs  in  the  database  refer to a specific
  standardization  of  their  inputs.  That  is,  a  straight line program for
  computing  generators of a certain subgroup of a group G is defined only for
  a  specific  set  of  standard  generators of G, and applying the program to
  matrix or permutation generators of G but w.r.t. a different standardization
  may  yield  unpredictable  results.  Therefore  the  results returned by the
  functions   described   in   this  chapter  contain  information  about  the
  standardizations they refer to.
  
  
  2.4 Class Names Used in the AtlasRep Package
  
  For  each  straight  line program (see AtlasProgram (2.5-3)) that is used to
  compute  lists  of  class  representatives,  it is essential to describe the
  classes  in  which these elements lie. Therefore, in these cases the records
  returned  by  the  function AtlasProgram (2.5-3) contain a component outputs
  with value a list of class names.
  
  Currently we define these class names only for simple groups and automorphic
  extensions  and  central extensions of simple groups, see Section 2.4-1. The
  function  AtlasClassNames  (2.4-2)  can be used to compute the list of class
  names from the character table in the GAP Library.
  
  
  2.4-1 Definition of ATLAS Class Names
  
  For  the definition of class names of an almost simple group, we assume that
  the  ordinary  character tables of all nontrivial normal subgroups are shown
  in the ATLAS of Finite Groups [CCNPW85].
  
  Each  class name is a string consisting of the element order of the class in
  question  followed  by  a  combination  of  capital letters, digits, and the
  characters  ' and - (starting with a capital letter). For example, 1A, 12A1,
  and  3B'  denote  the  class  that contains the identity element, a class of
  element order 12, and a class of element order 3, respectively.
  
  (1)   For  the  table  of  a  simple  group, the class names are the same as
        returned  by  the  two argument version of the GAP function ClassNames
        (Reference:  ClassNames),  cf. [CCNPW85,  Chapter  7,  Section 5]: The
        classes  are  arranged  w.r.t. increasing  element  order and for each
        element  order  w.r.t. decreasing  centralizer  order,  the  conjugacy
        classes  that  contain  elements of order n are named nA, nB, nC, ...;
        the  alphabet  used  here  is potentially infinite, and reads A, B, C,
        ..., Z, A1, B1, ..., A2, B2, ....
  
        For  example,  the classes of the alternating group A_5 have the names
        1A, 2A, 3A, 5A, and 5B.
  
  (2)   Next we consider the case of an upward extension G.A of a simple group
        G by a cyclic group of order A. The ATLAS defines class names for each
        element  g of G.A only w.r.t. the group G.a, say, that is generated by
        G  and  g; namely, there is a power of g (with the exponent coprime to
        the order of g) for which the class has a name of the same form as the
        class  names  for  simple  groups,  and  the  name  of  the class of g
        w.r.t. G.a  is  then  obtained  from this name by appending a suitable
        number  of  dashes '.  So  dashed  class  names refer exactly to those
        classes that are not printed in the ATLAS.
  
        For  example, those classes of the symmetric group S_5 that do not lie
        in  A_5  have the names 2B, 4A, and 6A. The outer classes of the group
        L_2(8).3  have  the  names  3B,  6A,  9D, and 3B', 6A', 9D'. The outer
        elements  of  order  5  in  the group Sz(32).5 lie in the classes with
        names 5B, 5B', 5B'', and 5B'''.
  
        In the group G.A, the class of g may fuse with other classes. The name
        of  the  class  of g in G.A is obtained from the names of the involved
        classes of G.a by concatenating their names after removing the element
        order part from all of them except the first one.
  
        For  example,  the  elements  of  order  9  in the group L_2(27).6 are
        contained  in the subgroup L_2(27).3 but not in L_2(27). In L_2(27).3,
        they  lie  in  the  classes  9A, 9A', 9B, and 9B'; in L_2(27).6, these
        classes fuse to 9AB and 9A'B'.
  
  (3)   Now  we  define  class  names  for  general upward extensions G.A of a
        simple  group  G.  Each  element  g  of such a group lies in an upward
        extension  G.a  by  a cyclic group, and the class names w.r.t. G.a are
        already  defined.  The  name  of  the class of g in G.A is obtained by
        concatenating  the  names  of  the  classes in the orbit of G.A on the
        classes  of  cyclic  upward  extensions of G, after ordering the names
        lexicographically and removing the element order part from all of them
        except  the  first one. An exception is the situation where dashed and
        non-dashed  class  names  appear in an orbit; in this case, the dashed
        names are omitted.
  
        For  example,  the  classes  21A and 21B of the group U_3(5).3 fuse in
        U_3(5).S_3  to the class 21AB, and the class 2B of U_3(5).2 fuses with
        the  involution  classes  2B',  2B''  in  the  groups  U_3(5).2^'  and
        U_3(5).2^{''} to the class 2B of U_3(5).S_3.
  
        It  may  happen  that  some names in the outputs component of a record
        returned by AtlasProgram (2.5-3) do not uniquely determine the classes
        of   the  corresponding  elements.  For  example,  the  (algebraically
        conjugate)  classes  39A  and  39B  of  the  group  Co_1 have not been
        distinguished  yet. In such cases, the names used contain a minus sign
        -,  and  mean  "one  of the classes in the range described by the name
        before  and  the name after the minus sign"; the element order part of
        the  name  does not appear after the minus sign. So the name 39A-B for
        the  group  Co_1 means 39A or 39B, and the name 20A-B''' for the group
        Sz(32).5  means  one  of the classes of element order 20 in this group
        (these classes lie outside the simple group Sz).
  
  (4)   For  a  central downward extension m.G of a simple group G by a cyclic
        group  of order m, let pi denote the natural epimorphism from m.G onto
        G.  Each  class  name of m.G has the form nX_0, nX_1 etc., where nX is
        the  class  name  of the image under pi, and the indices 0, 1 etc. are
        chosen  according  to  the  position of the class in the lifting order
        rows  for  G,  see [CCNPW85,  Chapter 7, Section 7, and the example in
        Section 8]).
  
        For example, if m = 6 then 1A_1 and 1A_5 denote the classes containing
        the generators of the kernel of pi, that is, central elements of order
        6.
  
  2.4-2 AtlasClassNames
  
  > AtlasClassNames( tbl ) ___________________________________________function
  Returns:  a list of class names.
  
  Let  tbl  be  the ordinary character table of a group G that is simple or an
  automorphic or a central extension of a simple group and such that tbl is an
  ATLAS  table from the GAP Character Table Library, according to its InfoText
  (Reference:  InfoText) value. Then AtlasClassNames returns the list of class
  names for G, as defined in Section 2.4-1. The ordering of class names is the
  same as the ordering of the columns of tbl.
  
  (The  function may work also for character tables that are not ATLAS tables,
  but then clearly the class names returned are somewhat arbitrary.)
  
  ---------------------------  Example  ----------------------------
    gap> AtlasClassNames( CharacterTable( "L3(4).3" ) );
    [ "1A", "2A", "3A", "4ABC", "5A", "5B", "7A", "7B", "3B", "3B'", "3C", "3C'", 
      "6B", "6B'", "15A", "15A'", "15B", "15B'", "21A", "21A'", "21B", "21B'" ]
    gap> AtlasClassNames( CharacterTable( "U3(5).2" ) );
    [ "1A", "2A", "3A", "4A", "5A", "5B", "5CD", "6A", "7AB", "8AB", "10A", "2B", 
      "4B", "6D", "8C", "10B", "12B", "20A", "20B" ]
    gap> AtlasClassNames( CharacterTable( "L2(27).6" ) );
    [ "1A", "2A", "3AB", "7ABC", "13ABC", "13DEF", "14ABC", "2B", "4A", "26ABC", 
      "26DEF", "28ABC", "28DEF", "3C", "3C'", "6A", "6A'", "9AB", "9A'B'", "6B", 
      "6B'", "12A", "12A'" ]
    gap> AtlasClassNames( CharacterTable( "L3(4).3.2_2" ) );
    [ "1A", "2A", "3A", "4ABC", "5AB", "7A", "7B", "3B", "3C", "6B", "15A", 
      "15B", "21A", "21B", "2C", "4E", "6E", "8D", "14A", "14B" ]
    gap> AtlasClassNames( CharacterTable( "3.A6" ) );
    [ "1A_0", "1A_1", "1A_2", "2A_0", "2A_1", "2A_2", "3A_0", "3B_0", "4A_0", 
      "4A_1", "4A_2", "5A_0", "5A_1", "5A_2", "5B_0", "5B_1", "5B_2" ]
  ------------------------------------------------------------------
  
  
  2.5 Accessing Data of the AtlasRep Package
  
  (Note  that  the  output of the examples in this section refers to a perhaps
  outdated  table of contents; the current version of the database may contain
  more information than is shown here.)
  
  2.5-1 DisplayAtlasInfo
  
  > DisplayAtlasInfo(  ) _____________________________________________function
  > DisplayAtlasInfo( listofnames ) __________________________________function
  > DisplayAtlasInfo( gapname[, std][, ...] ) ________________________function
  
  This  function lists the information available via the AtlasRep package, for
  the  given input. Depending on whether remote access to data is enabled (see
  Section  1.7-1), all the data provided by the ATLAS of Group Representations
  or only those in the local installation are considered.
  
  (An   interactive   alternative   to   DisplayAtlasInfo   is   the  function
  BrowseAtlasInfo   (Browse:   BrowseAtlasInfo),  see  [BL08];  this  function
  provides also the functionality of AtlasGenerators (2.5-2).)
  
  Called   without   arguments,   DisplayAtlasInfo  prints  an  overview  what
  information the ATLAS of Group Representations provides. One line is printed
  for each group G, with the following columns.
  
  group
        the GAP name of G (see Section 2.2),
  
  #
        the number of representations stored for G,
  
  maxes
        the  available  straight  line  programs  for  computing generators of
        maximal subgroups of G,
  
  cl
        a  +  sign  if  at  least one program for computing representatives of
        conjugacy classes of elements of G is stored, and a - sign otherwise,
  
  cyc
        a  +  sign  if  at  least one program for computing representatives of
        classes  of  maximally  cyclic  subgroups of G is stored, and a - sign
        otherwise,
  
  out
        descriptions  of  outer  automorphisms  of  G  for  which at least one
        program is stored,
  
  check
        a  +  sign if at least one program is available for checking whether a
        set  of  generators  is  a  set  of  standard generators, and a - sign
        otherwise,
  
  pres
        a  +  sign  if  at  least  one  program  is  available  that encodes a
        presentation, and a - sign otherwise,
  
  find
        a  +  sign  if  at least one program is available for finding standard
        generators, and a - sign otherwise,
  
  Called  with  a  list  listofnames of strings that are GAP names for a group
  from  the  ATLAS  of  Group  Representations,  DisplayAtlasInfo  prints  the
  overview described above but restricted to the groups in this list.
  
  Called  with  a string gapname that is a GAP name for a group from the ATLAS
  of  Group  Representations,  DisplayAtlasInfo  prints  an  overview  of  the
  information  that  is available for this group. One line is printed for each
  representation, showing the number of this representation (which can be used
  in  calls  of AtlasGenerators (2.5-2)), and a string of one of the following
  forms; in both cases, id is a (possibly empty) string.
  
  G <= Sym(nid)
        denotes  a  permutation  representation  of degree n, for example G <=
        Sym(40a)  and G <= Sym(40b) denote two (nonequivalent) representations
        of degree 40.
  
  G <= GL(nid,descr)
        denotes a matrix representation of dimension n over a coefficient ring
        described  by  descr, which can be a prime power, Z (denoting the ring
        of  integers),  a  description  of  an  algebraic  extension  field, C
        (denoting  an  unspecified  algebraic extension field), or Z/mZ for an
        integer  m  (denoting  the  ring of residues mod m); for example, G <=
        GL(2a,4)  and G <= GL(2b,4) denote two (nonequivalent) representations
        of dimension 2 over the field with four elements.
  
  After the representations, the programs available for gapname are listed.
  
  If  the first argument is a string gapname, the following optional arguments
  can be used to restrict the overview.
  
  std
        must  be  a  positive integer or a list of positive integers; if it is
        given then only those representations are considered that refer to the
        std-th  set  of  standard  generators  or  the  i-th  set  of standard
        generators, for i in std (see Section 2.3),
  
  IsPermGroup and true
        restrict to permutation representations,
  
  NrMovedPoints and n
        for  a positive integer, a list of positive integers, or a property n,
        restrict  to  permutation  representations of degree equal to n, or in
        the list n, or satisfying the function n,
  
  NrMovedPoints and the string "minimal"
        restrict to faithful permutation representations of minimal degree (if
        this information is available),
  
  IsMatrixGroup and true
        restrict to matrix representations,
  
  Characteristic and p
        for  a  prime  integer,  a  list  of  prime integers, or a property p,
        restrict to matrix representations over fields of characteristic equal
        to  p, or in the list p, or satisfying the function p (representations
        over  residue  class  rings  that  are  not fields can be addressed by
        entering fail as the value of p),
  
  Dimension and n
        for  a positive integer, a list of positive integers, or a property n,
        restrict  to matrix representations of dimension equal to n, or in the
        list n, or satisfying the function n,
  
  Characteristic, p, Dimension,
        and the string "minimal"
        for  a  prime  integer  p, restrict to faithful matrix representations
        over  fields  of characteristic p that have minimal dimension (if this
        information is available),
  
  Ring and R
        for  a  ring  or a property R, restrict to matrix representations over
        this  ring  or  satisfying this function (note that the representation
        might be defined over a proper subring of R), and
  
  Ring, R, Dimension,
        and the string "minimal"
        for  a  ring  R, restrict to faithful matrix representations over this
        ring that have minimal dimension (if this information is available),
  
  IsStraightLineProgram
        restricts  to  straight  line  programs,  straight line decisions (see
        Section 4.1), and black box programs (see Section 4.2).
  
  If  "minimality"  information  is  requested and no available representation
  matches this condition then either no minimal representation is available or
  the     information     about     the    minimality    is    missing.    See
  MinimalRepresentationInfo   (4.3-1)  for  checking  whether  the  minimality
  information  is  available for the group in question. Note that in the cases
  where  the string "minimal" occurs as an argument, MinimalRepresentationInfo
  (4.3-1)  is  called with third argument "lookup"; this is because the stored
  information  was  computed  just  for  the  groups  in  the  ATLAS  of Group
  Representations,  so  trying  to  compute  non-stored minimality information
  (using other available databases) will hardly be successful.
  
  The representations are ordered as follows. Permutation representations come
  first   (ordered   according   to   their   degrees),   followed  by  matrix
  representations  over  finite  fields  (ordered first according to the field
  size and second according to the dimension), matrix representations over the
  integers,  and  then  matrix representations over algebraic extension fields
  (both  kinds  ordered  according to the dimension), the last representations
  are matrix representations over residue class rings (ordered first according
  to the modulus and second according to the dimension).
  
  The  maximal  subgroups are ordered according to decreasing group order. For
  an extension G.p of a simple group G by an outer automorphism of prime order
  p,  this  means  that  G  is  the  first  maximal subgroup and then come the
  extensions  of  the  maximal  subgroups  of G and the novelties; so the n-th
  maximal  subgroup  of  G and the n-th maximal subgroup of G.p are in general
  not related. (This coincides with the numbering used for the Maxes (CTblLib:
  Maxes) attribute for character tables.)
  
  ---------------------------  Example  ----------------------------
    gap> DisplayAtlasInfo( [ "M11", "A5" ] );
    group     #  maxes  cl  cyc  out  find  check  pres
    ---------------------------------------------------
    M11      42      5   +    +          +      +     +
    A5       18      3   -    -          -      +     +
  ------------------------------------------------------------------
  
  The  above  output means that the ATLAS of Group Representations contains 42
  representations  of  the  Mathieu  group  M_11,  straight  line programs for
  computing  generators  of  representatives  of  all  five classes of maximal
  subgroups,  for  computing  representatives  of  the  conjugacy  classes  of
  elements  and  of  generators  of  maximally  cyclic  subgroups, contains no
  straight  line  program for applying outer automorphisms (well, in fact M_11
  admits  no  nontrivial  outer  automorphism),  and  contains a straight line
  decision  that checks generators for being standard generators. Analogously,
  18 representations of the alternating group A_5 are available, straight line
  programs for computing generators of representatives of all three classes of
  maximal   subgroups,   and   no   straight   line   programs  for  computing
  representatives  of  the  conjugacy  classes  of  elements, of generators of
  maximally  cyclic  subgroups,  and  no  for  computing  images  under  outer
  automorphisms;  a straight line decision for checking the standardization of
  generators is contained.
  
  ---------------------------  Example  ----------------------------
    gap> DisplayAtlasInfo( "A5", IsPermGroup, true );
    Representations for G = A5:    (all refer to std. generators 1)
    ---------------------------
    1: G <= Sym(5)
    2: G <= Sym(6)
    3: G <= Sym(10)
    gap> DisplayAtlasInfo( "A5", NrMovedPoints, [ 4 .. 9 ] );
    Representations for G = A5:    (all refer to std. generators 1)
    ---------------------------
    1: G <= Sym(5)
    2: G <= Sym(6)
  ------------------------------------------------------------------
  
  The  first  three  representations  stored  for  A_5 are (in fact primitive)
  permutation representations.
  
  ---------------------------  Example  ----------------------------
    gap> DisplayAtlasInfo( "A5", Dimension, [ 1 .. 3 ] );
    Representations for G = A5:    (all refer to std. generators 1)
    ---------------------------
     8: G <= GL(2a,4)
     9: G <= GL(2b,4)
    10: G <= GL(3,5)
    12: G <= GL(3a,9)
    13: G <= GL(3b,9)
    17: G <= GL(3a,Field([Sqrt(5)]))
    18: G <= GL(3b,Field([Sqrt(5)]))
    gap> DisplayAtlasInfo( "A5", Characteristic, 0 );
    Representations for G = A5:    (all refer to std. generators 1)
    ---------------------------
    14: G <= GL(4,Z)
    15: G <= GL(5,Z)
    16: G <= GL(6,Z)
    17: G <= GL(3a,Field([Sqrt(5)]))
    18: G <= GL(3b,Field([Sqrt(5)]))
  ------------------------------------------------------------------
  
  The  representations  with number between 4 and 13 are (in fact irreducible)
  matrix  representations over various finite fields, those with numbers 14 to
  16  are  integral  matrix  representations,  and  the  last  two  are matrix
  representations over the field generated by sqrt{5} over the rational number
  field.
  
  ---------------------------  Example  ----------------------------
    gap> DisplayAtlasInfo( "A5", NrMovedPoints, IsPrimeInt );
    Representations for G = A5:    (all refer to std. generators 1)
    ---------------------------
    1: G <= Sym(5)
    gap> DisplayAtlasInfo( "A5", Characteristic, IsOddInt ); 
    Representations for G = A5:    (all refer to std. generators 1)
    ---------------------------
     6: G <= GL(4,3)
     7: G <= GL(6,3)
    10: G <= GL(3,5)
    11: G <= GL(5,5)
    12: G <= GL(3a,9)
    13: G <= GL(3b,9)
    gap> DisplayAtlasInfo( "A5", Dimension, IsPrimeInt );     
    Representations for G = A5:    (all refer to std. generators 1)
    ---------------------------
     8: G <= GL(2a,4)
     9: G <= GL(2b,4)
    10: G <= GL(3,5)
    11: G <= GL(5,5)
    12: G <= GL(3a,9)
    13: G <= GL(3b,9)
    15: G <= GL(5,Z)
    17: G <= GL(3a,Field([Sqrt(5)]))
    18: G <= GL(3b,Field([Sqrt(5)]))
    gap> DisplayAtlasInfo( "A5", Ring, IsFinite and IsPrimeField );
    Representations for G = A5:    (all refer to std. generators 1)
    ---------------------------
     4: G <= GL(4a,2)
     5: G <= GL(4b,2)
     6: G <= GL(4,3)
     7: G <= GL(6,3)
    10: G <= GL(3,5)
    11: G <= GL(5,5)
  ------------------------------------------------------------------
  
  The above examples show how the output can be restricted using a property (a
  unary function that returns either true or false) that follows NrMovedPoints
  (Reference:   NrMovedPoints),  Characteristic  (Reference:  Characteristic),
  Dimension  (Reference: Dimension), or Ring (Reference: Ring) in the argument
  list of DisplayAtlasInfo.
  
  ---------------------------  Example  ----------------------------
    gap> DisplayAtlasInfo( "A5", IsStraightLineProgram, true );
    Programs for G = A5:    (all refer to std. generators 1)
    --------------------
    available maxes of G:  [ 1 .. 3 ] (all)
    standard generators checker available
    presentation available
  ------------------------------------------------------------------
  
  Straight   line   programs   are   available  for  computing  generators  of
  representatives  of  the  three  classes  of maximal subgroups of A_5, and a
  straight  line  decision  for  checking whether given generators are in fact
  standard  generators  ia  available  as  well  as a presentation in terms of
  standard generators, see AtlasProgram (2.5-3).
  
  2.5-2 AtlasGenerators
  
  > AtlasGenerators( gapname, repnr[, maxnr] ) _______________________function
  > AtlasGenerators( identifier ) ____________________________________function
  Returns:  a record containing generators for a representation, or fail.
  
  In  the  first  form,  gapname  must  be  a  string denoting a GAP name (see
  Section 2.2) of a group, and repnr a positive integer. If the ATLAS of Group
  Representations  contains  at least repnr representations for the group with
  GAP  name  gapname then AtlasGenerators, when called with gapname and repnr,
  returns   an   immutable  record  describing  the  repnr-th  representation;
  otherwise  fail  is returned. If a third argument maxnr, a positive integer,
  is given then an immutable record describing the restriction of the repnr-th
  representation to the maxnr-th maximal subgroup is returned.
  
  The result record has the following components.
  
  groupname
        the GAP name of the group (see Section 2.2),
  
  generators
        a list of generators for the group,
  
  standardization
        the positive integer denoting the underlying standard generators,
  
  size (only if known)
        the order of the group,
  
  identifier
        a  GAP  object  (a list of filenames plus additional information) that
        uniquely  determines  the  representation;  the  value  can be used as
        identifier argument of AtlasGenerators.
  
  repnr
        the  number of the representation in the current session, equal to the
        argument repnr if this is given.
  
  Additionally,  there are describing components dependent on the data type of
  the  representation:  For  permutation  representations, these are p for the
  number of moved points and id for the distinguishing string as described for
  DisplayAtlasInfo  (2.5-1); for matrix representations, these are dim for the
  dimension  of  the  matrices,  ring (if known) for the ring generated by the
  matrix entries, and id for the distinguishing string.
  
  It  should  be  noted  that  the  number repnr refers to the number shown by
  DisplayAtlasInfo  (2.5-1)  in  the current session; it may be that after the
  addition of new representations, repnr refers to another representation.
  
  The  alternative form of AtlasGenerators, with only argument identifier, can
  be  used  to  fetch  the  result  record  with  identifier  value  equal  to
  identifier. The purpose of this variant is to access the same representation
  also in different GAP sessions.
  
  ---------------------------  Example  ----------------------------
    gap> gens1:= AtlasGenerators( "A5", 1 );
    rec( generators := [ (1,2)(3,4), (1,3,5) ], groupname := "A5",
      standardization := 1, repnr := 1, 
      identifier := [ "A5", [ "A5G1-p5B0.m1", "A5G1-p5B0.m2" ], 1, 5 ], p := 5, 
      id := "", size := 60 )
    gap> gens8:= AtlasGenerators( "A5", 8 );
    rec( 
      generators := [ [ [ Z(2)^0, 0*Z(2) ], [ Z(2^2), Z(2)^0 ] ], [ [ 0*Z(2), Z(2
                     )^0 ], [ Z(2)^0, Z(2)^0 ] ] ], groupname := "A5",
      standardization := 1, repnr := 8, 
      identifier := [ "A5", [ "A5G1-f4r2aB0.m1", "A5G1-f4r2aB0.m2" ], 1, 4 ], 
      dim := 2, id := "a", ring := GF(2^2), size := 60 )
    gap> gens17:= AtlasGenerators( "A5", 17 );
    rec( 
      generators := [ [ [ -1, 0, 0 ], [ 0, -1, 0 ], [ -E(5)-E(5)^4, -E(5)-E(5)^4, 
                  1 ] ], [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ], 
      groupname := "A5", standardization := 1, repnr := 17, 
      identifier := [ "A5", "A5G1-Ar3aB0.g", 1, 3 ], dim := 3, id := "a", 
      ring := NF(5,[ 1, 4 ]), size := 60 )
  ------------------------------------------------------------------
  
  Each of the above pairs of elements generates a group isomorphic to A_5.
  
  ---------------------------  Example  ----------------------------
    gap> gens1max2:= AtlasGenerators( "A5", 1, 2 );
    rec( generators := [ (1,2)(3,4), (2,3)(4,5) ], standardization := 1, 
      repnr := 1, identifier := [ "A5", [ "A5G1-p5B0.m1", "A5G1-p5B0.m2" ], 1, 5, 
          2 ], p := 5, id := "", size := 10 )
    gap> id:= gens1max2.identifier;;
    gap> gens1max2 = AtlasGenerators( id );
    true
    gap> max2:= Group( gens1max2.generators );;
    gap> Size( max2 );
    10
    gap> IdGroup( max2 ) = IdGroup( DihedralGroup( 10 ) );
    true
  ------------------------------------------------------------------
  
  The  elements stored in gens1max2.generators describe the restriction of the
  first  representation  of  A_5  to  a  group  in the second class of maximal
  subgroups   of   A_5   according   to  the  list  in  the  ATLAS  of  Finite
  Groups [CCNPW85]; this subgroup is isomorphic to the dihedral group D_10.
  
  2.5-3 AtlasProgram
  
  > AtlasProgram( gapname[, std], ... ) ______________________________function
  > AtlasProgram( identifier ) _______________________________________function
  Returns:  a record containing a program, or fail.
  
  In the first form, gapname must be a string denoting a GAP name (see Section
   2.2)  of  a  group G, say. If the ATLAS of Group Representations contains a
  straight  line  program (see Section 'Reference: Straight Line Programs') or
  straight   line  decision  (see  Section 4.1)  or  black  box  program  (see
  Section 4.2)  as  described  by  the  remaining  arguments  (see below) then
  AtlasProgram  returns an immutable record containing this program. Otherwise
  fail is returned.
  
  If   the   optional   argument  std  is  given,  only  those  straight  line
  programs/decisions  are  considered that take generators from the std-th set
  of standard generators of G as input, see Section 2.3.
  
  The result record has the following components.
  
  program
        the required straight line program/decision, or black box program,
  
  standardization
        the positive integer denoting the underlying standard generators of G,
  
  identifier
        a  GAP  object  (a list of filenames plus additional information) that
        uniquely  determines  the program; the value can be used as identifier
        argument of AtlasProgram (see below).
  
  In the first form, the last arguments must be as follows.
  
  (the string "maxes" and) a positive integer maxnr
  
        the  required  program  computes  generators  of  the maxnr-th maximal
        subgroup of the group with GAP name gapname.
  
        In  this  case,  the  result record of AtlasProgram also may contain a
        component  size,  whose  value is the order of the maximal subgroup in
        question.
  
  one of the strings "classes" or "cyclic"
        the  required program computes representatives of conjugacy classes of
        elements   or   representatives  of  generators  of  maximally  cyclic
        subgroups of G, respectively.
  
        See [BSWW01]  and [SWW00] for the background concerning these straight
        line  programs. In these cases, the result record of AtlasProgram also
        contains  a component outputs, whose value is a list of class names of
        the outputs, as described in Section 2.4.
  
  the strings "automorphism" and autname
        the  required program computes images of standard generators under the
        outer automorphism of G that is given by this string.
  
  the string "check"
        the  required  result is a straight line decision that takes a list of
        generators  for  G  and  returns true if these generators are standard
        generators w.r.t. the standardization std, and false otherwise.
  
  the string "presentation"
        the  required  result is a straight line decision that takes a list of
        group  elements  and  returns  true  if  these  elements  are standard
        generators of G w.r.t. the standardization std, and false otherwise.
  
  the string "find"
        the  required result is a black box program that takes G and returns a
        list of standard generators of G, w.r.t. the standardization std.
  
  the string "restandardize" and an integer std2
        the  required result is a straight line program that computes standard
        generators of G w.r.t. the std2-th set of standard generators of G; in
        this case, the argument std must be given.
  
  the strings "other" and descr
        the required program is described by descr.
  
  The second form of AtlasProgram, with only argument the list identifier, can
  be  used  to  fetch  the  result  record  with  identifier  value  equal  to
  identifier.
  
  ---------------------------  Example  ----------------------------
    gap> prog:= AtlasProgram( "A5", 2 );
    rec( program := <straight line program>, standardization := 1, 
      identifier := [ "A5", "A5G1-max2W1", 1 ], size := 10, groupname := "A5" )
    gap> StringOfResultOfStraightLineProgram( prog.program, [ "a", "b" ] );
    "[ a, bbab ]"
    gap> gens1:= AtlasGenerators( "A5", 1 );
    rec( generators := [ (1,2)(3,4), (1,3,5) ], groupname := "A5",
      standardization := 1, repnr := 1, 
      identifier := [ "A5", [ "A5G1-p5B0.m1", "A5G1-p5B0.m2" ], 1, 5 ], p := 5, 
      id := "", size := 60 )
    gap> maxgens:= ResultOfStraightLineProgram( prog.program, gens1.generators );
    [ (1,2)(3,4), (2,3)(4,5) ]
    gap> maxgens = gens1max2.generators;
    true
  ------------------------------------------------------------------
  
  The  above  example  shows  that  for  restricting  representations given by
  standard  generators  to  a  maximal  subgroup of A_5, we can also fetch and
  apply the appropriate straight line program. Such a program (see 'Reference:
  Straight  Line  Programs')  takes  standard  generators of a group --in this
  example  A_5--  as  its  input, and returns a list of elements in this group
  --in  this  example generators of the D_10 subgroup we had met above-- which
  are  computed  essentially  by  evaluating  structured words in terms of the
  standard generators.
  
  ---------------------------  Example  ----------------------------
    gap> prog:= AtlasProgram( "J1", "cyclic" );
    rec( program := <straight line program>, standardization := 1, 
      identifier := [ "J1", "J1G1-cycW1", 1 ],
      outputs := [ "6A", "7A", "10B", "11A", "15B", "19A" ], groupname := "J1" )
    gap> gens:= GeneratorsOfGroup( FreeGroup( "x", "y" ) );;
    gap> ResultOfStraightLineProgram( prog.program, gens );
    [ x*y*x*y^2*x*y*x*y^2*x*y*x*y*x*y^2*x*y^2, x*y, x*y*x*y^2*x*y*x*y*x*y^2*x*y^2,
      x*y*x*y*x*y^2*x*y^2*x*y*x*y^2*x*y*x*y*x*y^2*x*y^2*x*y*x*y^2*x*y*x*y*x*y^
        2*x*y^2, x*y*x*y*x*y^2*x*y^2, x*y*x*y^2 ]
  ------------------------------------------------------------------
  
  The  above  example  shows  how  to fetch and use straight line programs for
  computing  generators  of representatives of maximally cyclic subgroups of a
  given group.
  
  2.5-4 OneAtlasGeneratingSetInfo
  
  > OneAtlasGeneratingSetInfo( [gapname, ][std, ][...] ) _____________function
  Returns:  a   record   describing   a   representation  that  satisfies  the
            conditions, or fail.
  
  Let gapname be a string denoting a GAP name (see Section  2.2) of a group G,
  say.   If   the  ATLAS  of  Group  Representations  contains  at  least  one
  representation     for    G    with    the    required    properties    then
  OneAtlasGeneratingSetInfo  returns  a record r whose components are the same
  as those of the records returned by AtlasGenerators (2.5-2), except that the
  component  generators is not contained; the component identifier of r can be
  used  as input for AtlasGenerators (2.5-2) in order to fetch the generators.
  If  no representation satisfying the given conditions ia available then fail
  is returned.
  
  If the argument std is given then it must be a positive integer or a list of
  positive integers, denoting the sets of standard generators w.r.t. which the
  representation shall be given (see Section 2.3).
  
  The  argument  gapname  can  be  missing  (then  all  available  groups  are
  considered), or a list of group names can be given instead.
  
  Further  restrictions  can be entered as arguments, with the same meaning as
  described     for     DisplayAtlasInfo     (2.5-1).     The     result    of
  OneAtlasGeneratingSetInfo  describes  the  first  generating  set for G that
  matches the restrictions, in the ordering shown by DisplayAtlasInfo (2.5-1).
  
  Note  that  even  in the case that the user parameter "remote" has the value
  true  (see  Section 1.7-1),  OneAtlasGeneratingSetInfo  does  not attempt to
  transfer remote data files, just the table of contents is evaluated. So this
  function  (as  well  as  AllAtlasGeneratingSetInfos  (2.5-5)) can be used to
  check  for  the  availability of certain representations, and afterwards one
  can call AtlasGenerators (2.5-2) for those representations one wants to work
  with.
  
  In  the  following  example,  we try to access information about permutation
  representations for the alternating group A_5.
  
  ---------------------------  Example  ----------------------------
    gap> info:= OneAtlasGeneratingSetInfo( "A5" );
    rec( groupname := "A5", standardization := 1, repnr := 1, 
      identifier := [ "A5", [ "A5G1-p5B0.m1", "A5G1-p5B0.m2" ], 1, 5 ], p := 5, 
      id := "", size := 60 )
    gap> gens:= AtlasGenerators( info.identifier );
    rec( generators := [ (1,2)(3,4), (1,3,5) ], groupname := "A5",
      standardization := 1, repnr := 1, 
      identifier := [ "A5", [ "A5G1-p5B0.m1", "A5G1-p5B0.m2" ], 1, 5 ], p := 5, 
      id := "", size := 60 )
    gap> info = OneAtlasGeneratingSetInfo( "A5", IsPermGroup, true );
    true
    gap> info = OneAtlasGeneratingSetInfo( "A5", NrMovedPoints, "minimal" );
    true
    gap> info = OneAtlasGeneratingSetInfo( "A5", NrMovedPoints, [ 1 .. 10 ] );
    true
    gap> OneAtlasGeneratingSetInfo( "A5", NrMovedPoints, 20 );
    fail
  ------------------------------------------------------------------
  
  Note  that  a  permutation  representation of degree 20 could be obtained by
  taking  twice  the primitive representation on 10 points; however, the ATLAS
  of Group Representations does not store this imprimitive representation (cf.
  Section 2.1).
  
  We  continue this example a little. Next we access matrix representations of
  A_5.
  
  ---------------------------  Example  ----------------------------
    gap> info:= OneAtlasGeneratingSetInfo( "A5", IsMatrixGroup, true );
    rec( groupname := "A5", standardization := 1, repnr := 4, 
      identifier := [ "A5", [ "A5G1-f2r4aB0.m1", "A5G1-f2r4aB0.m2" ], 1, 2 ], 
      dim := 4, id := "a", ring := GF(2), size := 60 )
    gap> gens:= AtlasGenerators( info.identifier );
    rec( 
      generators := [ <an immutable 4x4 matrix over GF2>, <an immutable 4x4 matrix\
     over GF2> ], groupname := "A5", standardization := 1, repnr := 4, 
      identifier := [ "A5", [ "A5G1-f2r4aB0.m1", "A5G1-f2r4aB0.m2" ], 1, 2 ], 
      dim := 4, id := "a", ring := GF(2), size := 60 )
    gap> info = OneAtlasGeneratingSetInfo( "A5", Dimension, 4 );
    true
    gap> info = OneAtlasGeneratingSetInfo( "A5", Characteristic, 2 );
    true
    gap> info = OneAtlasGeneratingSetInfo( "A5", Ring, GF(2) );
    true
    gap> OneAtlasGeneratingSetInfo( "A5", Characteristic, [2,5], Dimension, 2 );
    rec( groupname := "A5", standardization := 1, repnr := 8, 
      identifier := [ "A5", [ "A5G1-f4r2aB0.m1", "A5G1-f4r2aB0.m2" ], 1, 4 ], 
      dim := 2, id := "a", ring := GF(2^2), size := 60 )
    gap> OneAtlasGeneratingSetInfo( "A5", Characteristic, [2,5], Dimension, 1 );
    fail
    gap> info:= OneAtlasGeneratingSetInfo( "A5", Characteristic, 0, Dimension, 4 );
    rec( groupname := "A5", standardization := 1, repnr := 14, 
      identifier := [ "A5", "A5G1-Zr4B0.g", 1, 4 ], dim := 4, id := "", 
      ring := Integers, size := 60 )
    gap> gens:= AtlasGenerators( info.identifier );
    rec( 
      generators := [ [ [ 1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ -1, -1, 
                  -1, -1 ] ], 
          [ [ 0, 1, 0, 0 ], [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 1, 0, 0, 0 ] ] ], 
      groupname := "A5", standardization := 1, repnr := 14, 
      identifier := [ "A5", "A5G1-Zr4B0.g", 1, 4 ], dim := 4, id := "", 
      ring := Integers, size := 60 )
    gap> info = OneAtlasGeneratingSetInfo( "A5", Ring, Integers );
    true
    gap> info = OneAtlasGeneratingSetInfo( "A5", Ring, CF(37) );
    true
    gap> OneAtlasGeneratingSetInfo( "A5", Ring, Integers mod 77 );
    fail
    gap> info:= OneAtlasGeneratingSetInfo( "A5", Ring, CF(5), Dimension, 3 );
    rec( groupname := "A5", standardization := 1, repnr := 17, 
      identifier := [ "A5", "A5G1-Ar3aB0.g", 1, 3 ], dim := 3, id := "a", 
      ring := NF(5,[ 1, 4 ]), size := 60 )
    gap> gens:= AtlasGenerators( info.identifier );
    rec( 
      generators := [ [ [ -1, 0, 0 ], [ 0, -1, 0 ], [ -E(5)-E(5)^4, -E(5)-E(5)^4, 
                  1 ] ], [ [ 0, 1, 0 ], [ 0, 0, 1 ], [ 1, 0, 0 ] ] ], 
      groupname := "A5", standardization := 1, repnr := 17, 
      identifier := [ "A5", "A5G1-Ar3aB0.g", 1, 3 ], dim := 3, id := "a", 
      ring := NF(5,[ 1, 4 ]), size := 60 )
    gap> OneAtlasGeneratingSetInfo( "A5", Ring, GF(17) );
    fail
  ------------------------------------------------------------------
  
  2.5-5 AllAtlasGeneratingSetInfos
  
  > AllAtlasGeneratingSetInfos( [gapname, ][std, ][...] ) ____________function
  Returns:  the  list  of  all records describing representations that satisfy
            the conditions.
  
  AllAtlasGeneratingSetInfos  is similar to OneAtlasGeneratingSetInfo (2.5-4).
  The  difference  is  that  the  list of all records describing the available
  representations  with  the  given properties is returned instead of just one
  such  component.  In  particular  an  empty  list  is  returned  if  no such
  representation is available.
  
  ---------------------------  Example  ----------------------------
    gap> AllAtlasGeneratingSetInfos( "A5", IsPermGroup, true );
    [ rec( groupname := "A5", standardization := 1, repnr := 1, 
          identifier := [ "A5", [ "A5G1-p5B0.m1", "A5G1-p5B0.m2" ], 1, 5 ], 
          p := 5, id := "", size := 60 ),
      rec( groupname := "A5", standardization := 1, repnr := 2, 
          identifier := [ "A5", [ "A5G1-p6B0.m1", "A5G1-p6B0.m2" ], 1, 6 ], 
          p := 6, id := "", size := 60 ),
      rec( groupname := "A5", standardization := 1, repnr := 3, 
          identifier := [ "A5", [ "A5G1-p10B0.m1", "A5G1-p10B0.m2" ], 1, 10 ], 
          p := 10, id := "", size := 60 ) ]
  ------------------------------------------------------------------
  
  Note  that  a matrix representation in any characteristic can be obtained by
  reducing  a permutation representation or an integral matrix representation;
  however,   the  ATLAS  of  Group  Representations  does  not  store  such  a
  representation (cf. Section 2.1).
  
  2.5-6 AtlasGroup
  
  > AtlasGroup( [gapname, ][std, ][...] ) ____________________________function
  Returns:  a group that satisfies the conditions, or fail.
  
  AtlasGroup  takes  the  same arguments as OneAtlasGeneratingSetInfo (2.5-4),
  and  returns  the  group generated by the generators component of the record
  that  is returned by OneAtlasGeneratingSetInfo (2.5-4) with these arguments;
  if  OneAtlasGeneratingSetInfo  (2.5-4)  returns  fail  then  also AtlasGroup
  returns fail.
  
  Alternatively,  a record as returned by OneAtlasGeneratingSetInfo (2.5-4) or
  AllAtlasGeneratingSetInfos (2.5-5) can be given as the only argument.
  
  ---------------------------  Example  ----------------------------
    gap> g:= AtlasGroup( "A5" );
    Group([ (1,2)(3,4), (1,3,5) ])
  ------------------------------------------------------------------
  
  2.5-7 AtlasSubgroup
  
  > AtlasSubgroup( gapname[, std][, ...], maxnr ) ____________________function
  Returns:  a group that satisfies the conditions, or fail.
  
  The  arguments of AtlasSubgroup, except the last argument maxn, are the same
  as  for AtlasGroup (2.5-6). If the ATLAS of Group Representations provides a
  straight line program for restricting representations of the group with name
  gapname  (given  w.r.t.  the  std-th  standard  generators)  to the maxnr-th
  maximal  subgroup  and  if  a representation with the required properties is
  available,  in  the  sense  that  calling  AtlasGroup  (2.5-6) with the same
  arguments  except  maxnr  yields  a  group,  then  AtlasSubgroup returns the
  restriction  of this representation to the maxnr-th maximal subgroup. In all
  other cases, fail is returned.
  
  Note  that the conditions refer to the group and not to the subgroup. It may
  happen  that  in  the  restriction  of  a  permutation  representation  to a
  subgroup,  fewer  points  are  moved,  or  that  the restriction of a matrix
  representation  turns  out  to  be  defined  over a smaller ring. Here is an
  example.
  
  ---------------------------  Example  ----------------------------
    gap> g:= AtlasSubgroup( "A5", NrMovedPoints, 5, 1 );
    Group([ (1,5)(2,3), (1,3,5) ])
    gap> NrMovedPoints( g );
    4
  ------------------------------------------------------------------
  
  
  2.6 Examples of Using the AtlasRep Package
  
  
  2.6-1 Example: Class Representatives
  
  First  we show the computation of class representatives of the Mathieu group
  M_11,  in  a 2-modular matrix representation. We start with the ordinary and
  Brauer character tables of this group.
  
  ---------------------------  Example  ----------------------------
    gap> tbl:= CharacterTable( "M11" );;
    gap> modtbl:= tbl mod 2;;
    gap> CharacterDegrees( modtbl );
    [ [ 1, 1 ], [ 10, 1 ], [ 16, 2 ], [ 44, 1 ] ]
  ------------------------------------------------------------------
  
  The  output of CharacterDegrees (Reference: CharacterDegrees) means that the
  2-modular irreducibles of M_11 have degrees 1, 10, 16, 16, and 44.
  
  Using  DisplayAtlasInfo  (2.5-1), we find out that matrix generators for the
  irreducible 10-dimensional representation are available in the database.
  
  ---------------------------  Example  ----------------------------
    gap> DisplayAtlasInfo( "M11", Characteristic, 2 );
    Representations for G = M11:    (all refer to std. generators 1)
    ----------------------------
     6: G <= GL(10,2)
     7: G <= GL(32,2)
     8: G <= GL(44,2)
    16: G <= GL(16a,4)
    17: G <= GL(16b,4)
  ------------------------------------------------------------------
  
  So  we  decide to work with this representation. We fetch the generators and
  compute the list of class representatives of M_11 in the representation. The
  ordering of class representatives is the same as that in the character table
  of the ATLAS of Finite Groups ([CCNPW85]), which coincides with the ordering
  of columns in the GAP table we have fetched above.
  
  ---------------------------  Example  ----------------------------
    gap> info:= OneAtlasGeneratingSetInfo( "M11", Characteristic, 2,
    >                                             Dimension, 10 );;
    gap> gens:= AtlasGenerators( info.identifier );;
    gap> ccls:= AtlasProgram( "M11", gens.standardization, "classes" );
    rec( program := <straight line program>, standardization := 1,
      identifier := [ "M11", "M11G1-cclsW1", 1 ],
      outputs := [ "1A", "2A", "3A", "4A", "5A", "6A", "8A", "8B", "11A", "11B" ],
      groupname := "M11" )
    gap> reps:= ResultOfStraightLineProgram( ccls.program, gens.generators );;
  ------------------------------------------------------------------
  
  If  we  would  need  only  a few class representatives, we could use the GAP
  library  function  RestrictOutputsOfSLP (Reference: RestrictOutputsOfSLP) to
  create a straight line program that computes only specified outputs. Here is
  an example where only the class representatives of order eight are computed.
  
  ---------------------------  Example  ----------------------------
    gap> ord8prg:= RestrictOutputsOfSLP( ccls.program,
    >                   Filtered( [ 1 .. 10 ], i -> ccls.outputs[i][1] = '8' ) );
    <straight line program>
    gap> ord8reps:= ResultOfStraightLineProgram( ord8prg, gens.generators );;
    gap> List( ord8reps, m -> Position( reps, m ) );
    [ 7, 8 ]
  ------------------------------------------------------------------
  
  Let us check that the class representatives have the right orders.
  
  ---------------------------  Example  ----------------------------
    gap> List( reps, Order ) = OrdersClassRepresentatives( tbl );
    true
  ------------------------------------------------------------------
  
  From  the  class representatives, we can compute the Brauer character we had
  started  with.  This  Brauer  character  is  defined  on  all classes of the
  2-modular  table. So we first pick only those representatives, using the GAP
  function  GetFusionMap  (Reference:  GetFusionMap);  in  this  situation, it
  returns the class fusion from the Brauer table into the ordinary table.
  
  ---------------------------  Example  ----------------------------
    gap> fus:= GetFusionMap( modtbl, tbl );
    [ 1, 3, 5, 9, 10 ]
    gap> modreps:= reps{ fus };;
  ------------------------------------------------------------------
  
  Then   we   call   the   GAP   function   BrauerCharacterValue   (Reference:
  BrauerCharacterValue),  which  computes  the Brauer character value from the
  matrix given.
  
  ---------------------------  Example  ----------------------------
    gap> char:= List( modreps, BrauerCharacterValue );
    [ 10, 1, 0, -1, -1 ]
    gap> Position( Irr( modtbl ), char );
    2
  ------------------------------------------------------------------
  
  
  2.6-2 Example: Permutation and Matrix Representations
  
  The  second  example  shows  the computation of a permutation representation
  from a matrix representation. We work with the 10-dimensional representation
  used  above,  and  consider the action on the 2^10 vectors of the underlying
  row space.
  
  ---------------------------  Example  ----------------------------
    gap> grp:= Group( gens.generators );;
    gap> v:= GF(2)^10;;
    gap> orbs:= Orbits( grp, AsList( v ) );;
    gap> List( orbs, Length );
    [ 1, 396, 55, 330, 66, 165, 11 ]
  ------------------------------------------------------------------
  
  We  see  that  there  are  six  nontrivial  orbits,  and  we can compute the
  permutation  actions  on  these  orbits  directly  using  Action (Reference:
  Action).  However,  for larger examples, one cannot write down all orbits on
  the  row space, so one has to use another strategy if one is interested in a
  particular orbit.
  
  Let  us  assume  that we are interested in the orbit of length 11. The point
  stabilizer  is  the  first maximal subgroup of M_11, thus the restriction of
  the representation to this subgroup has a nontrivial fixed point space. This
  restriction can be computed using the AtlasRep package.
  
  ---------------------------  Example  ----------------------------
    gap> gens:= AtlasGenerators( "M11", 6, 1 );;
  ------------------------------------------------------------------
  
  Now computing the fixed point space is standard linear algebra.
  
  ---------------------------  Example  ----------------------------
    gap> id:= IdentityMat( 10, GF(2) );;
    gap> sub1:= Subspace( v, NullspaceMat( gens.generators[1] - id ) );;
    gap> sub2:= Subspace( v, NullspaceMat( gens.generators[2] - id ) );;
    gap> fix:= Intersection( sub1, sub2 );
    <vector space of dimension 1 over GF(2)>
  ------------------------------------------------------------------
  
  The final step is of course the computation of the permutation action on the
  orbit.
  
  ---------------------------  Example  ----------------------------
    gap> orb:= Orbit( grp, Basis( fix )[1] );;
    gap> act:= Action( grp, orb );;  Print( act, "\n" );
    Group( [ ( 1, 2)( 4, 6)( 5, 8)( 7,10), ( 1, 3, 5, 9)( 2, 4, 7,11) ] )
  ------------------------------------------------------------------
  
  Note  that  this  group  is  not equal to the group obtained by fetching the
  permutation  representation  from  the  database. This is due to a different
  numbering of the points, so the groups are permutation isomorphic.
  
  ---------------------------  Example  ----------------------------
    gap> permgrp:= Group( AtlasGenerators( "M11", 1 ).generators );;
    gap> Print( permgrp, "\n" );
    Group( [ ( 2,10)( 4,11)( 5, 7)( 8, 9), ( 1, 4, 3, 8)( 2, 5, 6, 9) ] )
    gap> permgrp = act;
    false
    gap> IsConjugate( SymmetricGroup(11), permgrp, act );
    true
  ------------------------------------------------------------------
  
  
  2.6-3 Example: Outer Automorphisms
  
  The  straight  line  programs  for  applying outer automorphisms to standard
  generators  can  of course be used to define the automorphisms themselves as
  GAP mappings.
  
  ---------------------------  Example  ----------------------------
    gap> DisplayAtlasInfo( "G2(3)", IsStraightLineProgram );
    Programs for G = G2(3):    (all refer to std. generators 1)
    -----------------------
    available maxes of G:  [ 1 .. 10 ] (all)
    class repres. of G available
    repres. of cyclic subgroups of G available
    available automorphisms:  [ "2" ]
    standard generators checker available
    presentation available
    gap> prog:= AtlasProgram( "G2(3)", "automorphism", "2" ).program;;
    gap> info:= OneAtlasGeneratingSetInfo( "G2(3)", Dimension, 7 );;
    gap> gens:= AtlasGenerators( info ).generators;;
    gap> imgs:= ResultOfStraightLineProgram( prog, gens );;
  ------------------------------------------------------------------
  
  If we are not suspicious whether the script really describes an automorphism
  then  we  should tell this to GAP, in order to avoid the expensive checks of
  the    properties    of    being   a   homomorphism   and   bijective   (see
  Section 'Reference: Creating Group Homomorphisms'). This looks as follows.
  
  ---------------------------  Example  ----------------------------
    gap> g:= Group( gens );;
    gap> aut:= GroupHomomorphismByImagesNC( g, g, gens, imgs );;
    gap> SetIsBijective( aut, true );
  ------------------------------------------------------------------
  
  If  we  are  suspicious whether the script describes an automorphism then we
  might have the idea to check it with GAP, as follows.
  
  ---------------------------  Example  ----------------------------
    gap> aut:= GroupHomomorphismByImages( g, g, gens, imgs );;
    gap> IsBijective( aut );
    true
  ------------------------------------------------------------------
  
  (Note  that  even for a comparatively small group such as G_2(3), this was a
  difficult task for GAP before version 4.3.)
  
  Often one can form images under an automorphism alpha, say, without creating
  the  homomorphism object. This is obvious for the standard generators of the
  group G themselves, but also for generators of a maximal subgroup M computed
  from  standard  generators of G, provided that the straight line programs in
  question  refer to the same standard generators. Note that the generators of
  M  are  given  by evaluating words in terms of standard generators of G, and
  their images under alpha can be obtained by evaluating the same words at the
  images under alpha of the standard generators of G.
  
  ---------------------------  Example  ----------------------------
    gap> max1:= AtlasProgram( "G2(3)", 1 ).program;;
    gap> mgens:= ResultOfStraightLineProgram( max1, gens );;
    gap> comp:= CompositionOfStraightLinePrograms( max1, prog );;
    gap> mimgs:= ResultOfStraightLineProgram( comp, gens );;
  ------------------------------------------------------------------
  
  The  list  mgens  is the list of generators of the first maximal subgroup of
  G_2(3),  mimgs  is  the  list  of images under the automorphism given by the
  straight  line  program  prog.  Note  that  applying the program returned by
  CompositionOfStraightLinePrograms                                (Reference:
  CompositionOfStraightLinePrograms)  means to apply first prog and then max1,
  Since   we   have  already  constructed  the  GAP  object  representing  the
  automorphism, we can check whether the results are equal.
  
  ---------------------------  Example  ----------------------------
    gap> mimgs = List( mgens, x -> x^aut );
    true
  ------------------------------------------------------------------
  
  However, it should be emphasized that using aut requires a huge machinery of
  computations  behind the scenes, whereas applying the straight line programs
  prog  and  max1 involves only elementary operations with the generators. The
  latter  is  feasible  also for larger groups, for which constructing the GAP
  automorphism might be impossible.
  
  
  2.6-4 Example: Using Semi-presentations and Black Box Programs
  
  Let  us  suppose  that  we  want to restrict a representation of the Mathieu
  group  M_12  to a non-maximal subgroup of the type L_2(11). The idea is that
  this  subgroup  can  be found as a maximal subgroup of a maximal subgroup of
  the  type  M_11,  which  is  itself  maximal  in  M_12. For that, we fetch a
  representation of M_12 and use a straight line program for restricting it to
  the first maximal subgroup, which has the type M_11.
  
  ---------------------------  Example  ----------------------------
    gap> info:= OneAtlasGeneratingSetInfo( "M12", NrMovedPoints, 12 );
    rec( groupname := "M12", standardization := 1, repnr := 1, 
      identifier := [ "M12", [ "M12G1-p12aB0.m1", "M12G1-p12aB0.m2" ], 1, 12 ], 
      p := 12, id := "a", size := 95040 )
    gap> gensM12:= AtlasGenerators( info.identifier );;
    gap> restM11:= AtlasProgram( "M12", "maxes", 1 );;
    gap> gensM11:= ResultOfStraightLineProgram( restM11.program,
    >                                           gensM12.generators );
    [ (3,9)(4,12)(5,10)(6,8), (1,4,11,5)(2,10,8,3) ]
  ------------------------------------------------------------------
  
  Now  we  cannot  simply  apply  a  straight  line  program for M_11 to these
  generators  of  M_11,  since they are not necessarily standard generators of
  M_11. We check this using a semi-presentation for M_11.
  
  ---------------------------  Example  ----------------------------
    gap> checkM11:= AtlasProgram( "M11", "check" );
    rec( program := <straight line decision>, standardization := 1, 
      identifier := [ "M11", "M11G1-check1", 1, 1 ], groupname := "M11" )
    gap> ResultOfStraightLineDecision( checkM11.program, gensM11 );
    true
  ------------------------------------------------------------------
  
  So  we are lucky that applying the appropriate program for M_11 will give us
  the required generators for L_2(11).
  
  ---------------------------  Example  ----------------------------
    gap> restL211:= AtlasProgram( "M11", "maxes", 2 );;
    gap> gensL211:= ResultOfStraightLineProgram( restL211.program, gensM11 );
    [ (3,9)(4,12)(5,10)(6,8), (1,11,9)(2,12,8)(3,6,10) ]
    gap> G:= Group( gensL211 );;  Size( G );  IsSimple( G );
    660
    true
  ------------------------------------------------------------------
  
  Usually  representations  are not given in terms of standard generators. For
  example,  let  us  take  the  M_11  type  group returned by the GAP function
  MathieuGroup (Reference: MathieuGroup).
  
  ---------------------------  Example  ----------------------------
    gap> G:= MathieuGroup( 11 );;
    gap> gens:= GeneratorsOfGroup( G );
    [ (1,2,3,4,5,6,7,8,9,10,11), (3,7,11,8)(4,10,5,6) ]
    gap> ResultOfStraightLineDecision( checkM11.program, gens );   
    false
  ------------------------------------------------------------------
  
  If  we  want to compute an L_2(11) type subgroup of this group, we can use a
  black  box  program  for  computing  standard generators, and then apply the
  straight line program for computing the restriction.
  
  ---------------------------  Example  ----------------------------
    gap> find:= AtlasProgram( "M11", "find" );
    rec( program := <black box program>, standardization := 1, 
      identifier := [ "M11", "M11G1-find1", 1, 1 ], groupname := "M11" )
    gap> stdgens:= ResultOfBBoxProgram( find.program, Group( gens ) );;
    gap> List( stdgens, Order );
    [ 2, 4 ]
    gap> ResultOfStraightLineDecision( checkM11.program, stdgens );
    true
    gap> gensL211:= ResultOfStraightLineProgram( restL211.program, stdgens );;
    gap> List( gensL211, Order );
    [ 2, 3 ]
    gap> G:= Group( gensL211 );;  Size( G );  IsSimple( G );
    660
    true
  ------------------------------------------------------------------
  
  
  2.6-5 Example: Using the GAP Library of Tables of Marks
  
  The  GAP library of tables of marks provides, for many almost simple groups,
  information  for  constructing  representatives  of all conjugacy classes of
  subgroups. If this information is compatible with the standard generators of
  the  ATLAS  of  Group  Representations  then  we  can use it to restrict any
  representation  from  the  ATLAS  to prescribed subgroups. This is useful in
  particular  for those subgroups for which the ATLAS of Group Representations
  itself does not contain a straight line program.
  
  ---------------------------  Example  ----------------------------
    gap> tom:= TableOfMarks( "A5" );
    TableOfMarks( "A5" )
    gap> info:= StandardGeneratorsInfo( tom );
    [ rec( generators := "a, b", description := "|a|=2, |b|=3, |ab|=5", 
          script := [ [ 1, 2 ], [ 2, 3 ], [ 1, 1, 2, 1, 5 ] ], ATLAS := true ) ]
  ------------------------------------------------------------------
  
  The  true value of the component ATLAS indicates that the information stored
  on  tom  refers  to  the standard generators of type 1 in the ATLAS of Group
  Representations.
  
  We  want  to  restrict  a  4-dimensional integral representation of A_5 to a
  Sylow 2 subgroup of A_5, and use RepresentativeTomByGeneratorsNC (Reference:
  RepresentativeTomByGeneratorsNC) for that.
  
  ---------------------------  Example  ----------------------------
    gap> info:= OneAtlasGeneratingSetInfo( "A5", Ring, Integers, Dimension, 4 );;
    gap> stdgens:= AtlasGenerators( info.identifier );
    rec( 
      generators := [ [ [ 1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ -1, -1, 
                  -1, -1 ] ], 
          [ [ 0, 1, 0, 0 ], [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ], [ 1, 0, 0, 0 ] ] ], 
      groupname := "A5", standardization := 1, repnr := 14, 
      identifier := [ "A5", "A5G1-Zr4B0.g", 1, 4 ], dim := 4, id := "", 
      ring := Integers, size := 60 )
    gap> orders:= OrdersTom( tom );
    [ 1, 2, 3, 4, 5, 6, 10, 12, 60 ]
    gap> pos:= Position( orders, 4 );
    4
    gap> sub:= RepresentativeTomByGeneratorsNC( tom, pos, stdgens.generators );
    <matrix group of size 4 with 2 generators>
    gap> GeneratorsOfGroup( sub );
    [ [ [ 1, 0, 0, 0 ], [ -1, -1, -1, -1 ], [ 0, 0, 0, 1 ], [ 0, 0, 1, 0 ] ], 
      [ [ 1, 0, 0, 0 ], [ 0, 0, 1, 0 ], [ 0, 1, 0, 0 ], [ -1, -1, -1, -1 ] ] ]
  ------------------------------------------------------------------