Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/GAP/pkg/ctbllib/tst/   (Algebra von RWTH Aachen Version 4.15.1©)  Datei vom 3.11.2019 mit Größe 320 kB image not shown  

SSL mferctbl.gap   Sprache: unbekannt

 
#############################################################################
##
#W  mferctbl.gap    character tables of mult.-free endom. rings Thomas Breuer
#W                                                            Juergen Mueller
##
#Y  Copyright (C)  2002,  Lehrstuhl D fuer Mathematik,  RWTH Aachen,  Germany
##
##  This file contains the following {\GAP} objects.
##
##  `MULTFREEINFO'
##      is the global variable that encodes the character tables of the
##      endomorphism rings of the faithful multiplicity-free permutation
##      modules of the sporadic simple groups and their cyclic and
##      bicyclic extensions.
##
##  `MultFreeEndoRingCharacterTables'
##      is a function that can be used for computing more detailed data
##      about the endomorphism rings from the compact information
##      stored in `MULTFREEINFO'.
##

#############################################################################
##
##  Print the banner if wanted.
##
if not ( GAPInfo.CommandLineOptions.q or GAPInfo.CommandLineOptions.b ) then
  Print(
"---------------------------------------------------------------------------\n",
"Loading the database of character tables of endomorphism rings of\n",
"multiplicity-free permutation modules of the sporadic simple groups and\n",
"their cyclic and bicyclic extensions, compiled by T. Breuer and J. Mueller.\n",
"---------------------------------------------------------------------------\n"
  );
fi;

#############################################################################
##
#V  MULTFREEINFO
##
##  `MULTFREEINFO' is an immutable record.
##  Its components are the `Identifier' values of the {\GAP} character
##  tables of the sporadic simple groups and their automorphism groups.
##  The value of the component corresponding to the group $G$, say,
##  is a list containing in the first position a string denoting the name of
##  $G$ in {\LaTeX} format, and in each of the remaining positions a triple
##  `[ <const>, <subgroup>, <ctbl> ]'
##  where <const> is a list of positive integers, <subgroup> is a string
##  that denotes the name of a subgroup $H$ of $G$, in {\LaTeX} format,
##  and <ctbl> is either the matrix of irreducible characters of the
##  endomorphism ring of the permutation module $(1_H)^G$ or `fail'
##  (indicating that the character table is not yet known).
##  The sum of irreducible characters of $G$ at the positions in <const>
##  is a multiplicity-free permutation character of $G$ that is induced from
##  the trivial character of $H$.
##
##  The ordering of the entries corresponds to the ordering in~\cite{BL96},
##  for the scope of the latter paper.
##
if IsBound( MULTFREEINFO ) then
  # Perhaps the file 'multfree.tst' has been processed in this session.
  # We will need an extended version of the data used in these tests.
  MakeReadWriteGlobal( "MULTFREEINFO" );
  UnbindGlobal( "MULTFREEINFO" );
fi;
BindGlobal( "MULTFREEINFO", rec() );

#############################################################################
##
#F  CollapsedAdjacencyMatricesFromCharacterTable( <mat> )
##
##  Let $X$ be the character table of an endomorphism algebra.
##  The collapsed adjacency matrix of the orbital graph that corresponds to
##  the $j$-th column of $X$ is given by $X^{-1} \cdot D_j \cdot X$, where
##  $D_j$ is the diagonal matrix whose diagonal is the $j$-th column of $X$.
##
BindGlobal( "CollapsedAdjacencyMatricesFromCharacterTable", function( mat )
    local tr,itr;

    if mat=fail then ## only for 2.B
        return fail;
    fi;
    tr:=TransposedMat(mat);
    itr:=Inverse(tr);
    return List([1..Length(mat)],
                j->tr*List([1..Length(mat)],i->mat[i][j]*itr[i]));
end );

#############################################################################
##
#F  MultFreeEndoRingCharacterTables( <name> )
##
##  For a string <name> that is the name of a sporadic simple group,
##  or a cyclic or bicyclic extension of a sporadic simple group,
##  `MultFreeEndoRingCharacterTables' returns a list of records that describe
##  the character tables of the endomorphism rings of the faithful
##  multiplicity-free permutation modules of this group,
##  in a format that is similar to the classification shown in~\cite{BL96}.
##
##  If <name> is the string `\"all\"' then `MultFreeEndoRingCharacterTables'
##  returns the list of records for all sporadic simple groups and their
##  cyclic or bicyclic extensions.
##
##  Each entry in the result list has the following components.
##  \beginitems
##  group &
##     {\LaTeX} format of <name>,
##
##  name &
##     <name>,
##
##  character &
##     the permutation character,
##
##  rank &
##     the rank of the character,
##
##  subgroup &
##     a string that is a name (in {\LaTeX} format) of the subgroup
##     from whose trivial character the permutation character is induced,
##
##  ctbl &
##     the matrix of irreducible characters of the endomorphism ring,
##     where the rows are labelled by the irreducible constituents of the
##     permutation character and the columns are labelled by the orbits of
##     the subgroup on its right cosets, which are ordered according to
##     their lengths.
##
##  mats &
##     the collapsed adjacency matrices, and
##
##  ATLAS &
##     a string that describes (in {\LaTeX} format) the constituents of the
##     permutation character, relative to the perfect group involved;
##     the format is described in the section~"ref:PermCharInfoRelative"
##     in the {\GAP} Reference Manual.
##  \enditems
##
##  In the one case where the character table is not (yet) known,
##  the components `ctbl' and `mats' have the value `fail'.
##
DeclareGlobalFunction( "MultFreeEndoRingCharacterTables" );

InstallGlobalFunction( MultFreeEndoRingCharacterTables, function( name )
    local alternat,  # list of alternative names
          result,    # the result list
          tbl,       # character table with `Identifier' value `name'
          group,     # value of the `group' component of each result entry
          len,       # length of the list stored for `name'
          chars,     # list of the permutation characters for `name'
          dername,   # name of derived subgroup
          tblsimp,   # character table of the derived subgroup of `tbl'
          info,      # list of `ATLAS' values
          i,         # loop over the permutation characters
          entry,     # one entry in the record for `name'
          pos;       # position in `alternative'

    alternat:= [ [ "Fi24'" ], [ "F3+" ] ];

    result:= [];
    if IsBound( MULTFREEINFO.( name ) ) then
      if 9 < Length( name ) and name{ [ 1 .. 9 ] } = "Isoclinic" then
        tbl:= CharacterTableIsoclinic(
                  CharacterTable( name{ [ 11 .. Length( name )-1 ] } ) );
      else
        tbl:= CharacterTable( name );
      fi;
      group:= MULTFREEINFO.( name )[1];
      len:= Length( MULTFREEINFO.( name ) );
      chars:= List( MULTFREEINFO.( name ){ [ 2 .. len ] },
                    x -> Sum( Irr( tbl ){ x[1] } ) );
      if Number( name, c -> c = '.' ) = 2 then
        if 9 < Length( name ) and name{ [ 1 .. 9 ] } = "Isoclinic" then
          dername:= name{ [ 11 .. Length( name )-1 ] };
        else
          dername:= name;
        fi;
        i:= Position( dername, '.' );
        dername:= dername{ [ 1 .. Position( dername, '.', i )-1 ] };
        tblsimp:= CharacterTable( dername );
        if 9 < Length( name ) and name{ [ 1 .. 9 ] } = "Isoclinic" then
          StoreFusion( tblsimp, GetFusionMap( tblsimp,
              CharacterTable( name{ [ 11 .. Length( name )-1 ] } ) ), tbl );
        fi;
        info:= PermCharInfoRelative( tblsimp, tbl, chars ).ATLAS;
      elif '.' in name then
        dername:= name{ [ 1 .. Position( name, '.' )-1 ] };
        if Int( dername ) = fail then
          tblsimp:= CharacterTable( dername );
          info:= PermCharInfoRelative( tblsimp, tbl, chars ).ATLAS;
        else
          info:= PermCharInfo( tbl, chars ).ATLAS;
        fi;
      else
        info:= PermCharInfo( tbl, chars ).ATLAS;
      fi;
      for i in [ 2 .. len ] do
        entry:= MULTFREEINFO.( name )[i];
        Add( result, rec( group     := group,
                          name      := name,
                          character := chars[ i-1 ],
                          charnmbs  := entry[1],
                          rank      := Length( entry[1] ),
                          subgroup  := entry[2],
                          ATLAS     := info[ i-1 ],
                          ctbl      := entry[3],
                          mats      :=
                CollapsedAdjacencyMatricesFromCharacterTable( entry[3] ) ) );
      od;
    elif name = "all" then
      for name in RecNames( MULTFREEINFO ) do
        Append( result, MultFreeEndoRingCharacterTables( name ) );
      od;
    else
      pos:= Position( alternat[1], name );
      if pos = fail then
        Error( "<name> must be the name of a ",
               "(cyclic or bicyclic extension of a)\n",
               "sporadic simple group, or the string \"all\"" );
      else
        return MultFreeEndoRingCharacterTables( alternat[2][ pos ] );
      fi;
    fi;
    return result;
end );

#############################################################################
##
#F  LinearCombinationString( <F>, <vectors>, <strings>, <multstring>, <val> )
##
BindGlobal( "LinearCombinationString",
    function( F, vectors, strings, multstring, val )
    local V, B, coeff, str, i;

    V:= VectorSpace( F, vectors );
    B:= Basis( V, vectors );
    coeff:= Coefficients( B, val );
    if coeff = fail then
      return fail;
    elif IsZero( coeff ) then
      return String( val );
    fi;

    str:= "";
    for i in [ 1 .. Length( coeff ) ] do
      if coeff[i] > 0 then
        if str <> "" then
          Append( str, "+" );
        fi;
        if coeff[i] = 1 and strings[i] = "" then
          Append( str, "1" );
        elif coeff[i] <> 1 then
          Append( str, String( coeff[i] ) );
          if strings[i] <> "" then
            Append( str, multstring );
          fi;
        fi;
        Append( str, strings[i] );
      elif coeff[i] < 0 then
        if coeff[i] = -1 then
          Append( str, "-" );
        else
          Append( str, String( coeff[i] ) );
          if strings[i] <> "" then
            Append( str, multstring );
          fi;
        fi;
        Append( str, strings[i] );
      fi;
    od;
    return str;
end );

#############################################################################
##
#F  Cubic( <irrat> )
##
##  The database contains nonquadratic irrationalities,
##  which are either cubic or quartic.
##  The function `Cubic' deals with these few cases.
##
Cubic:=function( irrat )
    local bas, str, dsp, atlas, display;

    if Conductor( irrat ) = 9 and irrat = ComplexConjugate( irrat ) then
        bas:= [ 1, EY(9), GaloisCyc( EY(9), 2 ) ];
        str:= [ "1", "y9", "y9*2" ];
        dsp:= [ "1", "EY(9)", "GaloisCyc(EY(9),2)" ];
    elif Conductor( irrat ) = 19 and irrat = ComplexConjugate( irrat ) then
        bas:= [ EC(19), GaloisCyc( EC(19), 2 ), GaloisCyc( EC(19), 4 ) ];
        str:= [ "c19", "c19*2", "c19*4" ];
        dsp:= [ "EC(19)", "GaloisCyc(EC(19),2)", "GaloisCyc(EC(19),4)" ];
    elif Conductor( irrat ) = 33 then
        bas:= [1, EV(33), GaloisCyc(EV(33),5), GaloisCyc(EV(33),7)];
        str:= [ "1", "v33", "v33*5", "v33*7" ];
        dsp:= [ "1", "EV(33)", "GaloisCyc(EV(33),5)", "GaloisCyc(EV(33),7)"];
    else
        Error( "this should not occur" );
    fi;

    atlas   := LinearCombinationString( Rationals, bas, str, "",  irrat );
    display := LinearCombinationString( Rationals, bas, dsp, "*", irrat );

    return rec( value:= irrat, ATLAS := atlas, display := display );
end;

#############################################################################
##
#F  CharacterLabels( <tbl> )
#F  CharacterLabels( <tbl2>, <tbl>] )
##
BindGlobal( "CharacterLabels", function( arg )
    local tbl, tbl2, tblfustbl2, irr, alp, degreeset, irreds, chi,
          nccl2, irr2, irreds2, irrnam2, rest, i, j, chi2, k, pos, result;

    if Length( arg ) = 1 and IsCharacterTable( arg[1] ) then
      tbl:= arg[1];
      tbl2:= false;
    elif Length( arg ) = 2 and ForAll( arg, IsCharacterTable ) then
      tbl:= arg[2];
      tbl2:= arg[1];
      tblfustbl2:= GetFusionMap( tbl, tbl2 );
      if tblfustbl2 = fail or Size( tbl2 ) <> 2 * Size( tbl ) then
        Error( "<tbl> must be of index 2 in <tbl2>, with stored fusion" );
      fi;
    else
      Error( "usage: CharacterLabels( [<tbl2>, ]<tbl> )" );
    fi;

    irr:= Irr( tbl );
    alp:= [ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k",
            "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v",
            "w", "x", "y", "z" ];
    degreeset:= Set( List( irr, DegreeOfCharacter ) );

    # `irreds[i]' contains all irreducibles of `tbl' of the `i'-th degree.
    irreds:= List( degreeset, x -> [] );
    for chi in irr do
      Add( irreds[ Position( degreeset, chi[1] ) ], chi );
    od;

    # Extend the alphabet if necessary.
    while Length( alp ) < Maximum( List( irreds, Length ) ) do
      alp:= Concatenation( alp,
                List( alp, x -> Concatenation( "(", x, "')" ) ) );
    od;

    if tbl2 <> false then

      # Construct relative names for the irreducibles of `tbl2'.
      nccl2:= NrConjugacyClasses( tbl2 );
      irr2:= Irr( tbl2 );
      irreds2:= [];
      irrnam2:= [];
      rest:= List( irr2, x -> x{ tblfustbl2 } );
      for i in [ 1 .. Length( irreds ) ] do

        for j in [ 1 .. Length( irreds[i] ) ] do

          chi2:= irr2{ Filtered( [ 1 .. nccl2 ],
                       k -> rest[k] = irreds[i][j] ) };
          if Length( chi2 ) = 2 then

            # The `j'-th character of the `i'-th degree of `tbl' extends.
            Append( irreds2, chi2 );
            Add( irrnam2, Concatenation( String( chi2[1][1] ), alp[j], "^+" ) );
            Add( irrnam2, Concatenation( String( chi2[1][1] ), alp[j], "^-" ) );

          else

            # The `j'-th character of the `i'-th degree of `tbl' fuses
            # with another character of `tbl', of the same degree.
            for k in [ 1 .. nccl2 ] do
              if     rest[k][1] = 2 * degreeset[i]
                 and ScalarProduct( tbl, rest[k], irreds[i][j] ) <> 0 then
                pos:= Position( irreds2, irr2[k] );
                if pos = fail then
                  Add( irreds2, irr2[k] );
                  Add( irrnam2, Concatenation( String( degreeset[i] ), alp[j] ) );
                else
                  Append( irrnam2[ pos ], alp[j] );
                fi;
              fi;
            od;

          fi;

        od;

      od;

      result:= List( irr2, chi -> irrnam2[ Position( irreds2, chi ) ] );

    else
      result:= List( irr, chi -> Concatenation( String( chi[1] ),
        alp[ Position( irreds[ Position( degreeset, chi[1] ) ], chi ) ] ) );
    fi;

    return result;
end );

#############################################################################
##
#V  DisplayStringLabelledMatrixDefaults
##
BindGlobal( "DisplayStringLabelledMatrixDefaults", rec(
    format    := "GAP",
    rowlabels := [],
    rowalign  := [ "t" ],
    rowsep    := [ , "-" ],
    collabels := [],
    colalign  := [ "l" ],
    colsep    := [ , "|" ],
    legend    := "",
    header    := ""
    ) );

#############################################################################
##
#F  DisplayStringLabelledMatrix( <matrix>, <inforec> )
##
##  <inforec> must be a record;
##  the following components are supported
##  \beginitems
##  `header'
##      (default nothing)
##
##  `rowlabels'
##      list of row labels (default nothing)
##
##  `rowalign'
##      list of vertical alignments ("top", "bottom", "center";
##      default top alignment)
##      the first is for the column labels!
##
##  `rowsep'
##      list of strings that separate rows
##      the first is for the row above the column labels,
##      the second is for the row below the column labels!
##      default separate column labels from the other lines by a line
##
##  `collabels'
##      list of column labels (default nothing)
##
##  `colalign'
##      list of horizontal alignments ("left", "right", "center";
##      default left alignment of label, right alignment of the rest)
##      the first is for the row labels!
##
##  `colsep'
##      list of strings that separate columns
##      the first is for the column before the row labels,
##      the second is for the column after the row labels!
##      default separate row labels from the other columns with a pipe
##
##  `legend'
##
##  `format'
##      one of `\"GAP\"', `\"HTML\"', or `\"LaTeX\"' (default `\"GAP\"').
##  \enditems
##
##  improved version, better than the one in `mferctbl'!
##
BindGlobal( "DisplayStringLabelledMatrix", function( matrix, inforec )
    local header, rowlabels, collabels, legend, format,       # options
          inforec2, name,
          ncols, colwidth, row, i, len, fmat, max, fcollabels,
          openmat, openrow, align1, opencol, closecol, closerow, closemat,
          str, j;

    # Get the parameters.
    inforec2:= ShallowCopy( DisplayStringLabelledMatrixDefaults );
    for name in RecNames( inforec ) do
      inforec2.( name ):= inforec.( name );
    od;
    inforec:= inforec2;

    if inforec.format = "GAP" then

      # Compute the column widths (used in GAP format only).
      ncols:= Length( matrix[1] );
      if IsEmpty( inforec.collabels ) then
        colwidth:= ListWithIdenticalEntries( ncols, 0 );
      else
        colwidth:= List( inforec.collabels, Length );
#T may be non-dense list
      fi;
      for row in matrix do
        for i in [ 1 .. ncols ] do
          len:= Length( row[i] );
          if colwidth[i] < len then
            colwidth[i]:= len;
          fi;
        od;
      od;
      matrix:= List( matrix,
                 row -> List( [ 1 .. ncols ],
                            i -> String( row[i], colwidth[i] ) ) );
#T alignment!

      # Inspect the row labels.
      if not IsEmpty( inforec.rowlabels ) then
        max:= Maximum( List( inforec.rowlabels, Length ) ) + 1;
        inforec.rowlabels:= List( inforec.rowlabels, x -> String( x, -max ) );
#T label alignment!
      else
        max:= 0;
      fi;

      # Set the parameters.
      if IsBound( inforec.colsep[1] ) then
        Append( fcollabels, inforec.colsep[1] );
      fi;
      fcollabels:= String( "", max );
      if IsBound( inforec.colsep[2] ) then
        Append( fcollabels, inforec.colsep[2] );
      fi;
      for i in [ 1 .. ncols ] do
        Append( fcollabels, " " );
        if IsBound( inforec.collabels[i] ) then
          Append( fcollabels,
                  String( inforec.collabels[i], colwidth[i] ) );
        else
          Append( fcollabels,
                  String( "", colwidth[i] ) );
        fi;
        if IsBound( inforec.colsep[ i+2 ] ) then
          Append( fcollabels, inforec.colsep[ i+2 ] );
          Append( fcollabels, " " );
        fi;
      od;
      Append( fcollabels, "\n" );
      openmat:= Concatenation( ListWithIdenticalEntries( max + Sum( colwidth ) + Length( colwidth ) + 1, '-' ), "\n" );
      openrow:= ShallowCopy( inforec.rowlabels );
      for i in [ 1 .. Length( matrix ) + 2 ] do
        if not IsBound( openrow[i] ) then
          openrow[i]:= "";
        fi;
        if IsBound( inforec.colsep[1] ) then
          openrow[i]:= Concatenation( inforec.colsep[1], openrow[i] );
        fi;
        if IsBound( inforec.colsep[2] ) then
          openrow[i]:= Concatenation( openrow[i], inforec.colsep[2] );
        fi;
      od;
      opencol  := List( matrix[1], x -> " " );
      closecol := [];
      for i in [ 1 .. ncols ] do
        if IsBound( inforec.colsep[ i+2 ] ) then
          closecol[i]:= inforec.colsep[ i+2 ];
        else
          closecol[i]:= "";
        fi;
      od;
      closerow := List( matrix, x -> "\n" );
      closemat := "";

    elif inforec.format = "HTML" then

      # Translate alignment values from LaTeX to HTML.
      inforec.colalign:= ShallowCopy( inforec.colalign );
      for i in [ 1 .. Length( inforec.colalign ) ] do
        if IsBound( inforec.colalign[i] ) then
          if   inforec.colalign[i] = "l" then
            inforec.colalign[i]:= "left";
          elif inforec.colalign[i] = "r" then
            inforec.colalign[i]:= "right";
          elif inforec.colalign[i] = "c" then
            inforec.colalign[i]:= "center";
          fi;
        fi;
      od;

      inforec.rowalign:= ShallowCopy( inforec.rowalign );
      for i in [ 1 .. Length( inforec.rowalign ) ] do
        if IsBound( inforec.rowalign[i] ) then
          if   inforec.rowalign[i] = "l" then
            inforec.rowalign[i]:= "left";
          elif inforec.rowalign[i] = "r" then
            inforec.rowalign[i]:= "right";
          elif inforec.rowalign[i] = "c" then
            inforec.rowalign[i]:= "center";
          fi;
        fi;
      od;

      # Set the parameters.
      ncols:= Length( matrix[1] );
      fcollabels:= "\n<table align=\"center\"";
      if not IsEmpty( inforec.colsep ) then
        Append( fcollabels, " border=2" );
      fi;
      if not IsEmpty( inforec.collabels ) then
        Append( fcollabels, ">\n<tr>\n" );
        if not IsEmpty( inforec.rowlabels ) then
          Append( fcollabels, "<td>\n</td>\n" );
        fi;
        for i in [ 1 .. ncols ] do
          Append( fcollabels, "<td align=\"" );
          if IsBound( inforec.colalign[ i+1 ] ) then
            Append( fcollabels, inforec.colalign[ i+1 ] );
          else
            Append( fcollabels, "right" );
          fi;
          Append( fcollabels, "\">" );
          if IsBound( inforec.collabels[i] ) then
            Append( fcollabels, inforec.collabels[i] );
          fi;
          Append( fcollabels, "</td>\n" );
        od;
        Append( fcollabels, "</tr>\n" );
      fi;

      openmat:= "";

      if IsEmpty( inforec.rowlabels ) then
        openrow:= List( matrix, x -> "<tr>\n" );
      else
        if IsBound( inforec.colalign[1] ) then
          align1:= inforec.colalign[1];
        else
          align1:= "right";
        fi;
        openrow:= List( inforec.rowlabels,
                        x -> Concatenation( "<tr>\n<td align=\"", align1, "\">", x, "</td>\n" ) );
        for i in [ 1 .. Length( matrix ) ] do
          if not IsBound( openrow[i] ) then
            openrow[i]:= Concatenation( "<tr>\n<td align=\"", align1, "\"></td>\n" );
          fi;
        od;
      fi;

      opencol:= [];
      for i in [ 1 .. ncols ] do
        if IsBound( inforec.colalign[ i+1 ] ) then
          opencol[i]:= Concatenation( "<td align=\"", inforec.colalign[ i+1 ], "\">\n" );
        else
          opencol[i]:= "<td align=\"right\">\n";
        fi;
      od;
      closecol:= List( matrix[1], x -> "</td>\n" );
      closerow:= List( matrix, x -> "</tr>\n" );
      closemat:= "</table>\n";

    elif inforec.format = "LaTeX" then

      # Set the parameters.
      ncols:= Length( matrix[1] );
      fcollabels:= "\\begin{tabular}{";
      if IsBound( inforec.colsep[1] ) then
        Append( fcollabels, inforec.colsep[1] );
      fi;
      if IsBound( inforec.colalign[1] ) then
        Append( fcollabels, inforec.colalign[1] );
      elif not IsEmpty( inforec.rowlabels ) then
        Append( fcollabels, "l" );
      fi;
      for i in [ 1 .. ncols ] do
        if IsBound( inforec.colsep[ i+1 ] ) then
          Append( fcollabels, inforec.colsep[ i+1 ] );
        fi;
        if IsBound( inforec.colalign[ i+1 ] ) then
          Append( fcollabels, inforec.colalign[ i+1 ] );
        else
          Append( fcollabels, "r" );
        fi;
      od;
      if IsBound( inforec.colsep[ ncols+2 ] ) then
        Append( fcollabels, inforec.colsep[ ncols+2 ] );
      fi;
      Append( fcollabels, "}" );
      if IsBound( inforec.rowsep[1] ) then
        if inforec.rowsep[1] = "=" then
          Append( fcollabels, " \\hline\\hline" );
        else
          Append( fcollabels, " \\hline" );
        fi;
      fi;
      Append( fcollabels, "\n" );
      if not IsEmpty( inforec.collabels ) then
        for i in [ 1 .. ncols ] do
          if 1 < i or not IsEmpty( inforec.rowlabels ) then
            Append( fcollabels, " & " );
          fi;
          if IsBound( inforec.collabels[i] ) then
            Append( fcollabels, inforec.collabels[i] );
          fi;
          Append( fcollabels, "\n" );
        od;
        Append( fcollabels, " \\rule[-7pt]{0pt}{20pt} \\\\" );
        if IsBound( inforec.rowsep[2] ) then
          if inforec.rowsep[2] = "=" then
            Append( fcollabels, " \\hline\\hline" );
          else
            Append( fcollabels, " \\hline" );
          fi;
        fi;
        Append( fcollabels, "\n" );
      fi;

      openmat:= "";

      openrow:= ShallowCopy( inforec.rowlabels );
      for i in [ 1 .. Length( matrix ) ] do
        if not IsBound( openrow[i] ) then
            openrow[i]:= "";
        else
            openrow[i]:= Concatenation( "$", openrow[i], "$" );
        fi;
      od;

      closerow:= [];
      for i in [ 1 .. Length( matrix ) ] do
        if IsBound( inforec.rowsep[ i+2 ] ) then
          if inforec.rowsep[ i+2 ] = "=" then
            closerow[i]:= " \\\\ \\hline\\hline\n";
          else
            closerow[i]:= " \\\\ \\hline\n";
          fi;
        else
          closerow[i]:= " \\\\\n";
        fi;
      od;

      opencol:= List( matrix[1], x -> " & " );
      if IsEmpty( inforec.rowlabels ) then
        opencol[1]:= "";
      fi;
      closecol:= List( matrix[1], x -> "" );

      closemat:= "\\rule[-7pt]{0pt}{5pt}\\end{tabular}\n";

    else
      Error( "<inforec>.format must be one of `\"GAP\"', `\"HTML\"', `\"LaTeX\"'" );
    fi;

    # Put the string for the matrix together.
    str:= ShallowCopy( inforec.header );
    Append( str, fcollabels );
    Append( str, openmat );
    for i in [ 1 .. Length( matrix ) ] do
      row:= matrix[i];
      Append( str, openrow[i] );
      for j in [ 1 .. ncols ] do
        Append( str, opencol[j] );
        Append( str, row[j] );
        Append( str, closecol[j] );
      od;
      Append( str, closerow[i] );
    od;
    Append( str, closemat );
    Append( str, inforec.legend );

    # Return the string.
    return str;
end );

#############################################################################
##
#F  DisplayMultFreeEndoRingCharacterTable( <record> )
##
BindGlobal( "DisplayMultFreeEndoRingCharacterTable", function( record )
    local   name,  subname,  pos,  header,  mat,  triples,  legend,
            row,  mrow,  entry,  l,  triple,  tbl,  simpname,  tbl2,
            charlabels,  rowlabels,  collabels,  str;

    name:=record.group;
    if name[1] = '$' then
      name:= name{ [ 2 .. Length( name ) - 1 ] };
    fi;
    subname:= record.subgroup;
    if subname[1] = '$' then
      subname:= subname{ [ 2 .. Length( subname ) - 1 ] };
    fi;
    pos:= PositionSublist( subname, "\\leq" );
    if pos <> fail then
      subname:= Concatenation( subname{ [ 1 .. pos-1 ] }, "< ",
                               subname{ [ pos+5 .. Length( subname ) ] } );
    fi;
    pos:= PositionSublist( subname, "\\rightarrow" );
    if pos <> fail then
      subname:= Concatenation( subname{ [ 1 .. pos-1 ] }, "---> ",
                               subname{ [ pos+12 .. Length( subname ) ] } );
    fi;

    header:= Concatenation( "G = ", name, ", H = ", subname, "\n\n" );

    if IsMatrix( record.ctbl ) then

      mat:= [];
      triples:= [];
      legend:= "";
      for row in record.ctbl do
        mrow:= [];
        for entry in row do
          l:= Quadratic( entry );
          if IsRecord( l ) then
            Add( mrow, l.ATLAS );
          else
            l:= Cubic( entry );
            if not IsRecord( l ) then
              Error( "entry <l> not expected" );
            fi;
            Add( mrow, l.ATLAS );
          fi;
          if not IsInt( entry ) then
            AddSet( triples, [ l.ATLAS, l.display ] );
          fi;
        od;
        Add( mat, mrow );
      od;
      for triple in triples do
        Append( legend, "\n" );
        Append( legend, triple[1] );
        Append( legend, " = " );
        Append( legend, triple[2] );
      od;
#T better legend: only smallest multiple of several
#T (example: see first table of M12.2, multiples of r3 and r5)

      tbl:= CharacterTable( record.name );
      if '.' in record.name then
          simpname:= record.name{ [ 1 .. Position( record.name, '.' )-1 ] };
          if Int(simpname)=fail then
              tbl2:= tbl;
              tbl:= CharacterTable( simpname );
              charlabels:= CharacterLabels( tbl2, tbl );
          else
              charlabels:= CharacterLabels( tbl );
          fi;
      else
        charlabels:= CharacterLabels( tbl );
      fi;
      rowlabels:= charlabels{ record.charnmbs };
      collabels:= List( [ 1 .. record.rank ],
                        i -> Concatenation( "O_", String( i ) ) );
      str:= DisplayStringLabelledMatrix( mat,
                rec( header    := header,
                     rowlabels := rowlabels,
                     collabels := collabels,
                     legend    := legend,
                     format    := "GAP"      ) );
    else
      str:= Concatenation( header, "(character table not yet known)" );
    fi;
    Print( str, "\n" );
end );

#############################################################################
##
#F  MultFreeFromTOM( <name> )
##
##  For a string <name> that is a valid name for a table of marks in the
##  {\GAP} library of tables of marks, `MultFreeFromTOM' returns
##  the list of pairs $[ \pi, G ]$ where $\pi$ is a multiplicity free
##  permutation character of the group for <name>,
##  and $G$ is the corresponding permutation group,
##  as computed from the table of marks of this group.
##
##  If there is no table of marks for <name> or if the class fusion of the
##  character table for <name> into the table of marks is not unique then
##  `fail' is returned.
##
BindGlobal( "MultFreeFromTOM", function( name )
    local tom,      # the table of marks
          G,        # the underlying group
          t,        # the character table
          fus,      # fusion map from 't' to 'tom'
          perms,    # list of perm. characters
          multfree, # list of mult. free characters and perm. groups
          i,        # loop over `perms'
          H,        # point stabilizer
          tr,       # right transversal of `H' in `G'
          P;        # permutation action of `G' on the cosets of `H'

    tom:= TableOfMarks( name );
    if tom <> fail then

      G:= UnderlyingGroup( tom );
      t:= CharacterTable( name );
      fus:= FusionCharTableTom( t, tom );

      if ForAll( fus, IsInt ) then
        perms:= PermCharsTom( fus, tom );
        multfree:= [];
        for i in [ 1 .. Length( perms ) ] do
          if ForAll( Irr( t ),
                     chi -> ScalarProduct( t, chi, perms[i] ) <= 1 ) then
            H:= RepresentativeTom( tom, i );
            tr:= RightTransversal( G, H );
            P:= Action( G, tr, OnRight );
            Add( multfree, [ Character( t, perms[i] ), P ] );
          fi;
        od;
      else
        Print( "#E  fusion is not unique!\n" );
        multfree:= fail;
      fi;

    else
      multfree:= fail;
    fi;

    return multfree;
end );

#############################################################################
##
#F  OrbitAndTransversal( <gens>, <pt> )
##
##  Let <gens> be a list of permutations, and <pt> be a positive integer.
##  `OrbitAndTransversal' returns a record that describes the orbit of <pt>
##  under the group generated by <gens>, as follows.
##  The component `orb' is the orbit itself,
##  the component `from' is the list of predecessors,
##  the component `use' is the list of positions of generators used
##
OrbitAndTransversal := function( gens, pt )
    local orb,   # the orbit of `pt'
          sort,  # a sorted copy of `orb', for faster lookup
          from,  # list of points
          use,
          i,
          j,
          img;

    # Initialize the lists.
    orb  := [ pt ];
    sort := [ pt ];
    from := [ fail ];
    use  := [ fail ];

    # Compute the orbit.
    for i in orb do
      for j in [ 1 .. Length( gens ) ] do
        img:= i^gens[j];
        if not img in sort then
          Add( orb, img );
          AddSet( sort, img );
          Add( from, i );
          Add( use, j );
        fi;
      od;
    od;

    # Return the result.
    return rec( orb  := orb,
                from := from,
                use  := use,
                gens := gens );
    end;

#############################################################################
##
#F  RepresentativeFromTransversal( <orbitinfo>, <gens>, <pt> )
##
##  Let <orbitinfo> be a record returned by `OrbitAndTransversal', and <pt>
##  be a point in the orbit `<orbitinfo>.orb'.
##  `RepresentativeFromTransversal' returns an element in the group generated
##  by `<orbitinfo>.gens' that maps `<orbitinfo>.orb[1]' to <pt>.
##
RepresentativeFromTransversal := function( record, gens, pt2 )
    local orb, from, use, rep, pos;

    orb  := record.orb;
    from := record.from;
    use  := record.use;
    rep  := ();

    while pt2 <> orb[1] do
      pos:= Position( orb, pt2 );
      rep:= gens[ use[ pos ] ] * rep;
      pt2:= from[ pos ];
    od;

    return rep;
    end;

#############################################################################
##
#F  CollapsedAdjacencyMatricesInfo( <G>[, <order>][, <S>] )
##
##  Let <G> be a transitive permutations group,
##  $\omega$ the smallest point moved by <G>,
##  and $S$ the stabilizer of $\omega$ in <G>.
##  `CollapsedAdjacencyMatricesInfo' returns a record describing the
##  collapsed adjacency matrices of the permutation module.
##  The components are
##  `mats'
##      the collapsed adjacency matrices,
##
##  `points'
##      a list of representatives of the orbits of $S$ on the set of the
##      points moved by <G>,
##
##  `representatives' :
##      a list of elements in <G> such that the $i$-th entry maps $\omega$
##      to the $i$-th entry in the `points' list,
##
##  The order of <G> can be given as the optional argument <order>,
##  and the group $S$ can be given as the optional argument <S>.
##
CollapsedAdjacencyMatricesInfo := function( arg )
    local G,size,stab,points,gens,orbs,record,reps,mats,r,i,j,k,img;

    # Get and check the arguments.
    if   Length( arg ) = 1 and IsPermGroup( arg[1] ) then
      G    := arg[1];
      size := Size( G );
    elif Length( arg ) = 2 and IsPermGroup( arg[1] )
                           and IsPosInt( arg[2] ) then
      G    := arg[1];
      size := arg[2];
    elif Length( arg ) = 2 and IsPermGroup( arg[1] )
                           and IsPermGroup( arg[2] ) then
      G    := arg[1];
      size := Size( G );
      stab := arg[2];
    elif Length( arg ) = 3 and IsPermGroup( arg[1] )
                           and IsPosInt( arg[2] )
                           and IsPermGroup( arg[3] ) then
      G    := arg[1];
      size := arg[2];
      stab := arg[3];
    fi;
    points:= MovedPoints( G );
    if not IsBound( stab ) then
      stab:= Stabilizer( G, points[1] );
    fi;

    # Compute the orbits of the point stabilizer, and sort them.
    gens:= GeneratorsOfGroup( G );
    orbs:= List( Orbits( stab, points ), Set );
    SortParallel( List( orbs, Length ), orbs );

    # Compute representatives ...
    record:= OrbitAndTransversal( gens, orbs[1][1] );
    reps:= List( orbs,
                 x -> RepresentativeFromTransversal( record, gens, x[1] ) );

    # Compute the collapsed adjacency matrices.
    mats:= [];
    r:= Length( orbs );
    for i in [ 1 .. r ] do
      mats[i]:= [];
      for j in [ 1 .. r ] do
        mats[i][j]:= [];
      od;
      for k in [1 .. r] do
        img:= OnTuples( orbs[i], reps[k] );
        for j in [ 1 .. r ] do
          mats[i][j][k]:= Number( Intersection( orbs[j], img ) );
        od;
      od;
    od;

    # Return the result.
    return rec( mats            := mats,
                points          := List( orbs, x -> x[1] ),
                representatives := reps );
    end;


#############################################################################
##
##  The following component can be used for running over the groups in the
##  original order.
##  Note that from GAP 4.5 on, `RecNames' does not return the list of
##  component names in the same order as the assignments of the components.
##
MULTFREEINFO.allnames:= [ "M11", "M12", "J1", "M22", "J2", "M23", "HS", "J3",
    "M24", "McL", "He", "Ru", "Suz", "ON", "Co3", "Co2", "Fi22", "HN", "Ly",
    "Th", "Fi23", "Co1", "J4", "F3+", "B", "M", "M12.2", "M22.2", "J2.2",
    "HS.2", "J3.2", "McL.2", "He.2", "Suz.2", "ON.2", "Fi22.2", "HN.2",
    "F3+.2", "2.M12", "2.M22", "3.M22", "4.M22", "6.M22", "12.M22", "2.J2",
    "2.HS", "3.J3", "3.McL", "2.Ru", "2.Suz", "3.Suz", "6.Suz", "3.ON",
    "2.Fi22", "3.Fi22", "6.Fi22", "2.Co1", "3.F3+", "2.B", "2.M12.2",
    "Isoclinic(2.M12.2)", "2.M22.2", "Isoclinic(2.M22.2)", "3.M22.2",
    "4.M22.2", "Isoclinic(4.M22.2)", "6.M22.2", "Isoclinic(6.M22.2)",
    "12.M22.2", "Isoclinic(12.M22.2)", "2.J2.2", "Isoclinic(2.J2.2)",
    "2.HS.2", "Isoclinic(2.HS.2)", "3.J3.2", "3.McL.2", "2.Suz.2",
    "Isoclinic(2.Suz.2)", "3.Suz.2", "6.Suz.2", "Isoclinic(6.Suz.2)",
    "3.ON.2", "2.Fi22.2", "Isoclinic(2.Fi22.2)", "3.Fi22.2", "6.Fi22.2",
    "Isoclinic(6.Fi22.2)", "3.F3+.2" ];


MULTFREEINFO.("M11"):= ["$M_{11}$",
##
[[1,2],"$A_6.2_3$",
 [[1,10],
  [1,-1]]],
##
[[1,2,5],"$A_6 \\leq A_6.2_3$",
 [[1,1,20],
  [1,1,-2],
  [1,-1,0]]],
##
[[1,5],"$L_2(11)$",
 [[1,11],
  [1,-1]]],
##
[[1,5,6,7,9,10],"$11:5 \\leq L_2(11)$",
 [[1,11,11,11,55,55],
  [1,-1,-1,11,-5,-5],
  [1,(-5-3*ER(-11))/2,(-5+3*ER(-11))/2,-1,-5,10],
  [1,(-5+3*ER(-11))/2,(-5-3*ER(-11))/2,-1,-5,10],
  [1,3,3,-1,-5,-1],
  [1,-1,-1,-1,7,-5]]],
##
[[1,2,8],"$3^2:Q_8.2$",
 [[1,18,36],
  [1,7,-8],
  [1,-2,1]]],
##
[[1,2,8,10],"$3^2:8 \\leq 3^2:Q_8.2$",
 [[1,1,36,72],
  [1,1,14,-16],
  [1,1,-4,2],
  [1,-1,0,0]]],
##
[[1,2,5,8],"$A_5.2$",
 [[1,15,20,30],
  [1,-7,-2,8],
  [1,-3,8,-6],
  [1,2,-2,-1]]]];

MULTFREEINFO.("M12"):= ["$M_{12}$",
##
[[1,2],"$M_{11}$",
 [[1,11],
  [1,-1]]],
##
[[1,3],"$M_{11}$",
 [[1,11],
  [1,-1]]],
##
[[1,2,3,8,11],"$L_2(11) \\leq M_{11}$",
 [[1,11,11,55,66],
  [1,-1,11,-5,-6],
  [1,11,-1,-5,-6],
  [1,-1,-1,7,-6],
  [1,-1,-1,-5,6]]],
##
[[1,2,7],"$A_6.2^2$",
 [[1,20,45],
  [1,8,-9],
  [1,-2,1]]],
##
[[1,2,3,7,8],"$A_6.2_1 \\leq A_6.2^2$",
 [[1,1,40,45,45],
  [1,-1,0,15,-15],
  [1,1,16,-9,-9],
  [1,1,-4,1,1],
  [1,-1,0,-3,3]]],
##
[[1,2,7,11],"$A_6.2_2 \\leq A_6.2^2$",
 [[1,1,40,90],
  [1,1,16,-18],
  [1,1,-4,2],
  [1,-1,0,0]]],
##
[[1,3,7],"$A_6.2^2$",
 [[1,20,45],
  [1,8,-9],
  [1,-2,1]]],
##
[[1,2,3,7,8],"$A_6.2_1 \\leq A_6.2^2$",
 [[1,1,40,45,45],
  [1,1,16,-9,-9],
  [1,-1,0,15,-15],
  [1,1,-4,1,1],
  [1,-1,0,-3,3]]],
##
[[1,3,7,11],"$A_6.2_2 \\leq A_6.2^2$",
 [[1,1,40,90],
  [1,1,16,-18],
  [1,1,-4,2],
  [1,-1,0,0]]],
##
[[1,4,5,6,11],"$L_2(11)$",
 [[1,11,11,55,66],
  [1,(-5-3*ER(-11))/2,(-5+3*ER(-11))/2,10,-6],
  [1,(-5+3*ER(-11))/2,(-5-3*ER(-11))/2,10,-6],
  [1,3,3,-1,-6],
  [1,-1,-1,-5,6]]],
##
[[1,2,7,8,12],"$3^2.2.S_4$",
 [[1,12,27,72,108],
  [1,-4,15,-24,12],
  [1,1,5,6,-13],
  [1,5,-3,-6,3],
  [1,-3,-3,2,3]]],
##
[[1,2,6,7,8,10,12,13],"$3^2:2.A_4 \\leq 3^2.2.S_4$",
 [[1,1,24,27,27,72,72,216],
  [1,1,-8,15,15,-24,-24,24],
  [1,-1,0,3,-3,16,-16,0],
  [1,1,2,5,5,6,6,-26],
  [1,1,10,-3,-3,-6,-6,6],
  [1,-1,0,-9,9,0,0,0],
  [1,1,-6,-3,-3,2,2,6],
  [1,-1,0,3,-3,-6,6,0]]],
##
[[1,3,7,8,12],"$3^2.2.S_4$",
 [[1,12,27,72,108],
  [1,-4,15,-24,12],
  [1,1,5,6,-13],
  [1,5,-3,-6,3],
  [1,-3,-3,2,3]]],
##
[[1,3,6,7,8,9,12,13],"$3^2:2.A_4 \\leq 3^2.2.S_4$",
 [[1,1,24,27,27,72,72,216],
  [1,1,-8,15,15,-24,-24,24],
  [1,-1,0,3,-3,16,-16,0],
  [1,1,2,5,5,6,6,-26],
  [1,1,10,-3,-3,-6,-6,6],
  [1,-1,0,-9,9,0,0,0],
  [1,1,-6,-3,-3,2,2,6],
  [1,-1,0,3,-3,-6,6,0]]]];

MULTFREEINFO.("J1"):= ["$J_1$",
##
[[1,2,3,4,6],"$L_2(11)$",
 [[1,11,12,110,132],
  [1,(-7-ER(5))/2,(-3+3*ER(5))/2,(5+7*ER(5))/2,(3-9*ER(5))/2],
  [1,(-7+ER(5))/2,(-3-3*ER(5))/2,(5-7*ER(5))/2,(3+9*ER(5))/2],
  [1,4,-2,5,-8],
  [1,1,4,-10,4]]],
##
[[1,2,3,4,7,8,9,10,11,12,15],"$2^3.7.3$",
 [[1,8,28,56,56,56,168,168,168,168,168],
  [1,-2-ER(5),1+3*ER(5),1+4*ER(5),-11-ER(5),(23-7*ER(5))/2,6*ER(5),
   (-33+3*ER(5))/2,(27+9*ER(5))/2,-6-6*ER(5),(15-15*ER(5))/2],
  [1,-2+ER(5),1-3*ER(5),1-4*ER(5),-11+ER(5),(23+7*ER(5))/2,-6*ER(5),
   (-33-3*ER(5))/2,(27-9*ER(5))/2,-6+6*ER(5),(15+15*ER(5))/2],
  [1,2,11,-4,4,-2,-24,-6,12,18,-12],
  [1,-2-ER(5),-7,1+4*ER(5),-4+4*ER(5),-4-ER(5),3,3-9*ER(5),3-3*ER(5),
   18+3*ER(5),-12+3*ER(5)],
  [1,-2+ER(5),-7,1-4*ER(5),-4-4*ER(5),-4+ER(5),3,3+9*ER(5),3+3*ER(5),
   18-3*ER(5),-12-3*ER(5)],
  [1,-EC(19)-2*GaloisCyc(EC(19),2)-2*GaloisCyc(EC(19),4),
   2*GaloisCyc(EC(19),4),4*EC(19)-GaloisCyc(EC(19),2),
   -EC(19)+2*GaloisCyc(EC(19),2)-2*GaloisCyc(EC(19),4),
   7*EC(19)+7*GaloisCyc(EC(19),2)+6*GaloisCyc(EC(19),4),
   -6*EC(19)-2*GaloisCyc(EC(19),2)-GaloisCyc(EC(19),4),
   3*EC(19)+GaloisCyc(EC(19),2)+2*GaloisCyc(EC(19),4),
   -EC(19)+2*GaloisCyc(EC(19),2)-5*GaloisCyc(EC(19),4),
   5*EC(19)+4*GaloisCyc(EC(19),2)+8*GaloisCyc(EC(19),4),
   -9*EC(19)-10*GaloisCyc(EC(19),2)-7*GaloisCyc(EC(19),4)],
  [1,-2*EC(19)-2*GaloisCyc(EC(19),2)-GaloisCyc(EC(19),4),
   2*GaloisCyc(EC(19),2),-EC(19)+4*GaloisCyc(EC(19),4),
   2*EC(19)-2*GaloisCyc(EC(19),2)-GaloisCyc(EC(19),4),
   7*EC(19)+6*GaloisCyc(EC(19),2)+7*GaloisCyc(EC(19),4),
   -2*EC(19)-GaloisCyc(EC(19),2)-6*GaloisCyc(EC(19),4),
   EC(19)+2*GaloisCyc(EC(19),2)+3*GaloisCyc(EC(19),4),
   2*EC(19)-5*GaloisCyc(EC(19),2)-GaloisCyc(EC(19),4),
   4*EC(19)+8*GaloisCyc(EC(19),2)+5*GaloisCyc(EC(19),4),
   -10*EC(19)-7*GaloisCyc(EC(19),2)-9*GaloisCyc(EC(19),4)],
  [1,-2*EC(19)-GaloisCyc(EC(19),2)-2*GaloisCyc(EC(19),4),2*EC(19),
   4*GaloisCyc(EC(19),2)-GaloisCyc(EC(19),4),
   -2*EC(19)-GaloisCyc(EC(19),2)+2*GaloisCyc(EC(19),4),
   6*EC(19)+7*GaloisCyc(EC(19),2)+7*GaloisCyc(EC(19),4),
   -EC(19)-6*GaloisCyc(EC(19),2)-2*GaloisCyc(EC(19),4),
   2*EC(19)+3*GaloisCyc(EC(19),2)+GaloisCyc(EC(19),4),
   -5*EC(19)-GaloisCyc(EC(19),2)+2*GaloisCyc(EC(19),4),
   8*EC(19)+5*GaloisCyc(EC(19),2)+4*GaloisCyc(EC(19),4),
   -7*EC(19)-9*GaloisCyc(EC(19),2)-10*GaloisCyc(EC(19),4)],
  [1,3,1,1,4,9,15,-4,-14,-1,-15],
  [1,-3,1,1,4,3,-9,14,-8,-7,3]]]];

MULTFREEINFO.("M22"):= ["$M_{22}$",
##
[[1,2],"$L_3(4)$",
 [[1,21],
  [1,-1]]],
##
[[1,2,5],"$2^4:A_6$",
 [[1,16,60],
  [1,-6,5],
  [1,2,-3]]],
##
[[1,2,5,7,9],"$2^4:A_5 \\leq 2^4:A_6$",
 [[1,5,96,120,240],
  [1,5,-36,10,20],
  [1,5,12,-6,-12],
  [1,-1,0,12,-12],
  [1,-1,0,-8,8]]],
##
[[1,2,7],"$A_7$",
 [[1,70,105],
  [1,-18,17],
  [1,2,-3]]],
##
[[1,2,7],"$A_7$",
 [[1,70,105],
  [1,-18,17],
  [1,2,-3]]],
##
[[1,2,5,7],"$2^4:S_5$",
 [[1,30,40,160],
  [1,-3,18,-16],
  [1,9,-2,-8],
  [1,-3,-2,4]]],
##
[[1,2,5,6,7],"$2^3:L_3(2)$",
 [[1,7,42,112,168],
  [1,-4,9,24,-30],
  [1,4,9,-8,-6],
  [1,-3,2,-8,8],
  [1,1,-6,4,0]]],
##
[[1,2,5,7,12],"$A_6.2_3$",
 [[1,30,45,180,360],
  [1,8,-21,48,-36],
  [1,16,3,-16,-4],
  [1,-2,9,8,-16],
  [1,-2,-3,-4,8]]],
##
[[1,2,5,7,8,9],"$L_2(11)$",
 [[1,55,55,66,165,330],
  [1,15,-25,-6,45,-30],
  [1,13,13,-18,-3,-6],
  [1,-5,7,6,9,-18],
  [1,-7,-3,-6,1,14],
  [1,5,-3,6,-11,2]]]];

MULTFREEINFO.("J2"):= ["$J_2$",
##
[[1,6,7],"$U_3(3)$",
 [[1,36,63],
  [1,6,-7],
  [1,-4,3]]],
##
[[1,7,10,11],"$3.A_6.2_2$",
 [[1,36,108,135],
  [1,-4,-12,15],
  [1,8,-4,-5],
  [1,-4,8,-5]]],
##
[[1,2,3,6,10,12],"$2^{1+4}_{-}:A_5$",
 [[1,10,32,32,80,160],
  [1,-5,2-6*ER(5),2+6*ER(5),20,-20],
  [1,-5,2+6*ER(5),2-6*ER(5),20,-20],
  [1,5,-8,-8,10,0],
  [1,3,4,4,-4,-8],
  [1,-2,-1,-1,-4,7]]],
##
[[1,6,7,10,12,13],"$2^{2+4}.(3 \\times S_3)$",
 [[1,12,32,96,192,192],
  [1,7,-8,16,-28,12],
  [1,-3,12,6,-18,2],
  [1,5,4,-2,10,-18],
  [1,0,-1,-12,0,12],
  [1,-3,-4,6,6,-6]]],
##
[[1,7,10,11,12,13,18],"$A_4 \\times A_5$",
 [[1,15,20,24,180,240,360],
  [1,5,10,-6,0,20,-30],
  [1,1,6,10,-16,-12,10],
  [1,-5,0,4,20,0,-20],
  [1,6,-4,0,9,-12,0],
  [1,-3,2,-6,0,-12,18],
  [1,-1,-4,0,-12,16,0]]]];

MULTFREEINFO.("M23"):= ["$M_{23}$",
##
[[1,2],"$M_{22}$",
 [[1,22],
  [1,-1]]],
##
[[1,2,5],"$L_3(4).2_2$",
 [[1,112,140],
  [1,-26,25],
  [1,2,-3]]],
##
[[1,2,5],"$2^4:A_7$",
 [[1,112,140],
  [1,-26,25],
  [1,2,-3]]],
##
[[1,2,5,9],"$A_8$",
 [[1,15,210,280],
  [1,-8,49,-42],
  [1,4,1,-6],
  [1,-3,-6,8]]],
##
[[1,2,5,16],"$M_{11}$",
 [[1,165,330,792],
  [1,-65,100,-36],
  [1,19,16,-36],
  [1,-3,-6,8]]]];

MULTFREEINFO.("HS"):= ["$HS$",
##
[[1,2,3],"$M_{22}$",
 [[1,22,77],
  [1,-8,7],
  [1,2,-3]]],
##
[[1,7],"$U_3(5).2$",
 [[1,175],
  [1,-1]]],
##
[[1,2,5,7],"$U_3(5) \\leq U_3(5).2$",
 [[1,1,175,175],
  [1,-1,35,-35],
  [1,-1,-5,5],
  [1,1,-1,-1]]],
##
[[1,7],"$U_3(5).2$",
 [[1,175],
  [1,-1]]],
##
[[1,2,6,7],"$U_3(5) \\leq U_3(5).2$",
 [[1,1,175,175],
  [1,-1,35,-35],
  [1,-1,-5,5],
  [1,1,-1,-1]]],
##
[[1,2,3,7,13],"$L_3(4).2_1$",
 [[1,42,105,280,672],
  [1,12,-45,80,-48],
  [1,22,5,-20,-8],
  [1,-2,17,16,-32],
  [1,-2,-3,-4,8]]],
##
[[1,3,4,7,9],"$A_8.2$",
 [[1,28,105,336,630],
  [1,-12,25,16,-30],
  [1,8,15,-24,0],
  [1,6,-5,28,-30],
  [1,-2,-5,-4,10]]],
##
[[1,2,3,4,5,6,7,9,10],"$A_8 \\leq A_8.2$",
 [[1,1,28,28,105,105,336,336,1260],
  [1,-1,0,0,-35,35,-112,112,0],
  [1,1,-12,-12,25,25,16,16,-60],
  [1,1,8,8,15,15,-24,-24,0],
  [1,-1,-10,10,15,-15,-12,12,0],
  [1,-1,10,-10,15,-15,-12,12,0],
  [1,1,6,6,-5,-5,28,28,-60],
  [1,1,-2,-2,-5,-5,-4,-4,20],
  [1,-1,0,0,-5,5,8,-8,0]]],
##
[[1,2,3,4,7,9,10,13,18],"$4^3:L_3(2)$",
 [[1,28,64,112,336,448,896,896,1344],
  [1,-7,-36,42,-84,168,-224,56,84],
  [1,13,14,32,6,28,16,-164,54],
  [1,13,4,22,36,-32,-64,56,-36],
  [1,-5,20,2,6,52,16,16,-108],
  [1,3,4,2,-34,-12,16,16,4],
  [1,-7,-6,12,6,-12,16,-4,-6],
  [1,5,-10,-8,6,12,16,-4,-18],
  [1,-2,4,-8,6,-2,-19,-4,24]]],
##
[[1,2,3,5,7,10,13,16,22],"$M_{11}$",
 [[1,55,132,165,495,660,792,1320,1980],
  [1,5,52,-85,195,-140,72,-280,180],
  [1,-20,37,40,45,85,-138,-80,30],
  [1,-19,-12,-21,27,84,72,-24,-108],
  [1,7,4,37,63,-44,24,40,-132],
  [1,-4,13,-16,-3,-11,-18,56,-18],
  [1,12,-11,-8,13,21,-26,0,-2],
  [1,6,13,4,-23,9,22,-24,-8],
  [1,-4,-7,4,-3,-11,2,-4,22]]],
##
[[1,2,3,6,7,10,13,16,22],"$M_{11}$",
 [[1,55,132,165,495,660,792,1320,1980],
  [1,5,52,-85,195,-140,72,-280,180],
  [1,-20,37,40,45,85,-138,-80,30],
  [1,-19,-12,-21,27,84,72,-24,-108],
  [1,7,4,37,63,-44,24,40,-132],
  [1,-4,13,-16,-3,-11,-18,56,-18],
  [1,12,-11,-8,13,21,-26,0,-2],
  [1,6,13,4,-23,9,22,-24,-8],
  [1,-4,-7,4,-3,-11,2,-4,22]]],
##
[[1,3,4,7,9,13,16,17,18],"$4.2^4:S_5$",
 [[1,30,80,128,480,640,960,1536,1920],
  [1,15,20,-32,60,80,0,96,-240],
  [1,15,20,8,60,-20,0,-144,60],
  [1,-3,14,40,-48,68,36,-48,-60],
  [1,5,-10,8,0,20,-60,16,20],
  [1,7,4,0,-28,-32,16,32,0],
  [1,-5,10,-12,-10,10,-20,-4,30],
  [1,-5,0,8,20,-20,0,16,-20],
  [1,0,-10,-7,0,10,30,-24,0]]]];

MULTFREEINFO.("J3"):= ["$J_3$",
##
[[1,4,5,6,10,11,12,13],"$L_2(16).2$",
 [[1,85,120,510,680,1360,1360,2040],
  [1,13,12,-30,-40,28-36*ER(5),28+36*ER(5),-12],
  [1,13,12,-30,-40,28+36*ER(5),28-36*ER(5),-12],
  [1,-17,-18,0,0,68,68,-102],
  [1,13,-6,6,32,-8,-8,-30],
  [1,-4-ER(17),-6+2*ER(17),-11-5*ER(17),-2+6*ER(17),-8,-8,38-2*ER(17)],
  [1,-4+ER(17),-6-2*ER(17),-11+5*ER(17),-2-6*ER(17),-8,-8,38+2*ER(17)],
  [1,-5,12,24,-4,-8,-8,-12]]]];

MULTFREEINFO.("M24"):= ["$M_{24}$",
##
[[1,2],"$M_{23}$",
 [[1,23],
  [1,-1]]],
##
[[1,2,7],"$M_{22}.2$",
 [[1,44,231],
  [1,20,-21],
  [1,-2,1]]],
##
[[1,2,7,9],"$2^4:A_8$",
 [[1,30,280,448],
  [1,-15,70,-56],
  [1,7,4,-12],
  [1,-3,-6,8]]],
##
[[1,7,14],"$M_{12}.2$",
 [[1,495,792],
  [1,35,-36],
  [1,-9,8]]],
##
[[1,2,7,14,17],"$M_{12} \\leq M_{12}.2$",
 [[1,1,495,495,1584],
  [1,-1,-165,165,0],
  [1,1,35,35,-72],
  [1,1,-9,-9,16],
  [1,-1,3,-3,0]]],
##
[[1,7,9,14],"$2^6:3.S_6$",
 [[1,90,240,1440],
  [1,21,10,-32],
  [1,-9,20,-12],
  [1,-1,-12,12]]],
##
[[1,7,9,14,18],"$2^6:3.A_6 \\leq 2^6:3.S_6$",
 [[1,1,180,480,2880],
  [1,1,42,20,-64],
  [1,1,-18,40,-24],
  [1,1,-2,-24,24],
  [1,-1,0,0,0]]],
##
[[1,2,7,9,17],"$L_3(4).3.2_2$",
 [[1,63,210,630,1120],
  [1,39,-30,150,-160],
  [1,17,3,-37,16],
  [1,-3,23,3,-24],
  [1,-3,-9,3,8]]],
##
[[1,2,7,8,9,17,18],"$L_3(4).3 \\leq L_3(4).3.2_2$",
 [[1,1,63,63,420,1260,2240],
  [1,1,39,39,-60,300,-320],
  [1,1,17,17,6,-74,32],
  [1,-1,-21,21,0,0,0],
  [1,1,-3,-3,46,6,-48],
  [1,1,-3,-3,-18,6,16],
  [1,-1,3,-3,0,0,0]]],
##
[[1,7,9,14,19],"$2^6:(L_3(2) \\times S_3)$",
 [[1,42,56,1008,2688],
  [1,19,10,42,-72],
  [1,9,-10,-48,48],
  [1,-3,10,-24,16],
  [1,-3,-4,18,-12]]],
##
[[1,7,8,9,14,17,19,20],
"$2^6:(L_3(2) \\times 3) \\leq 2^6:(L_3(2) \\times S_3)$",
 [[1,1,56,56,84,2016,2688,2688],
  [1,1,10,10,38,84,-72,-72],
  [1,-1,-14,14,0,0,-168,168],
  [1,1,-10,-10,18,-96,48,48],
  [1,1,10,10,-6,-48,16,16],
  [1,-1,10,-10,0,0,-24,24],
  [1,1,-4,-4,-6,36,-12,-12],
  [1,-1,-4,4,0,0,32,-32]]],
##
[[1,7,9,14,17,18,19,20,23,24,26],
"$2^6:(7:3 \\times S_3) \\leq 2^6:(L_3(2) \\times S_3)$",
 [[1,7,168,168,224,224,2688,2688,8064,8064,8064],
  [1,7,76,76,40,40,-72,-72,-216,-216,336],
  [1,7,36,36,-40,-40,48,48,144,144,-384],
  [1,7,-12,-12,40,40,16,16,48,48,-192],
  [1,-1,12,-12,-8,8,0,0,-288,288,0],
  [1,-1,-24,24,-32,32,0,0,0,0,0],
  [1,7,-12,-12,-16,-16,-12,-12,-36,-36,144],
  [1,-1,12,-12,-8,8,112,-112,48,-48,0],
  [1,-1,12,-12,-8,8,-48,48,48,-48,0],
  [1,-1,-4,4,8,-8,60,60,-60,-60,0],
  [1,-1,-4,4,8,-8,-32,-32,32,32,0]]]];

MULTFREEINFO.("McL"):= ["$McL$",
##
[[1,2,4],"$U_4(3)$",
 [[1,112,162],
  [1,-28,27],
  [1,2,-3]]],
##
[[1,2,4,9],"$M_{22}$",
 [[1,330,462,1232],
  [1,-120,147,-28],
  [1,30,27,-58],
  [1,-3,-6,8]]],
##
[[1,2,4,9],"$M_{22}$",
 [[1,330,462,1232],
  [1,-120,147,-28],
  [1,30,27,-58],
  [1,-3,-6,8]]],
##
[[1,2,4,9,14],"$U_3(5)$",
 [[1,252,750,2625,3500],
  [1,-126,300,-525,350],
  [1,54,90,-15,-130],
  [1,-18,12,51,-46],
  [1,4,-10,-15,20]]],
##
[[1,4,12,14,15],"$3^{1+4}:2S_5$",
 [[1,90,1215,2430,11664],
  [1,35,225,-45,-216],
  [1,-1,-3,-69,72],
  [1,10,-25,30,-16],
  [1,-10,15,30,-36]]],
##
[[1,4,9,14,15,20],"$2.A_8$",
 [[1,210,2240,5040,6720,8064],
  [1,45,260,90,-540,144],
  [1,39,-28,72,60,-144],
  [1,-5,60,-60,60,-56],
  [1,-15,-10,90,-30,-36],
  [1,3,-28,-36,-12,72]]]];

MULTFREEINFO.("He"):= ["$He$",
##
[[1,2,3,6,9],"$S_4(4).2$",
 [[1,136,136,425,1360],
  [1,-18-14*ER(-7),-18+14*ER(-7),75,-40],
  [1,-18+14*ER(-7),-18-14*ER(-7),75,-40],
  [1,10,10,5,-26],
  [1,-4,-4,-9,16]]],
##
[[1,2,3,6,7,8,9],"$S_4(4) \\leq S_4(4).2$",
 [[1,1,272,272,425,425,2720],
  [1,1,-36-28*ER(-7),-36+28*ER(-7),75,75,-80],
  [1,1,-36+28*ER(-7),-36-28*ER(-7),75,75,-80],
  [1,1,20,20,5,5,-52],
  [1,-1,0,0,-5*ER(17),5*ER(17),0],
  [1,-1,0,0,5*ER(17),-5*ER(17),0],
  [1,1,-8,-8,-9,-9,32]]],
##
[[1,2,3,6,9,12,14],"$2^2.L_3(4).S_3$",
 [[1,105,720,840,840,1344,4480],
  [1,35,-120,-70-70*ER(-7),-70+70*ER(-7),224,0],
  [1,35,-120,-70+70*ER(-7),-70-70*ER(-7),224,0],
  [1,21,6,42,42,0,-112],
  [1,7,48,-28,-28,0,0],
  [1,-14,6,7,7,35,-42],
  [1,0,-15,0,0,-21,35]]],
##
[[1,2,3,6,7,8,9,12,14,15],"$2^2.L_3(4).3 \\leq 2^2.L_3(4).S_3$",
 [[1,1,105,105,1344,1344,1440,1680,1680,8960],
  [1,1,35,35,224,224,-240,-140-140*ER(-7),-140+140*ER(-7),0],
  [1,1,35,35,224,224,-240,-140+140*ER(-7),-140-140*ER(-7),0],
  [1,1,21,21,0,0,12,84,84,-224],
  [1,-1,-5*ER(17),5*ER(17),-64,64,0,0,0,0],
  [1,-1,5*ER(17),-5*ER(17),-64,64,0,0,0,0],
  [1,1,7,7,0,0,96,-56,-56,0],
  [1,1,-14,-14,35,35,12,14,14,-84],
  [1,1,0,0,-21,-21,-30,0,0,70],
  [1,-1,0,0,21,-21,0,0,0,0]]]];

MULTFREEINFO.("Ru"):= ["$Ru$",
##
[[1,5,6],"${^2F_4(2)^{\\prime}}.2$",
 [[1,1755,2304],
  [1,-65,64],
  [1,15,-16]]],
##
[[1,4,5,6,7],"${^2F_4(2)^{\\prime}} \\leq {^2F_4(2)^{\\prime}}.2$",
 [[1,1,2304,2304,3510],
  [1,-1,144,-144,0],
  [1,1,64,64,-130],
  [1,1,-16,-16,30],
  [1,-1,-16,16,0]]],
##
[[1,6,8,14,15,16,21,23,25,32],"$(2^2 \\times Sz(8)):3$",
 [[1,455,3640,5824,29120,29120,58240,87360,87360,116480],
  [1,-9,392,-208,816,352,-224,-1728,1056,-448],
  [1,39,-104,64,192,256,-512,192,384,-512],
  [1,-9,72,192,256,-288,-64,192,-224,-128],
  [1,23-2*ER(6),16-14*ER(6),-92+24*ER(6),68+28*ER(6),
  -64+76*ER(6),208+148*ER(6),216-84*ER(6),-192-72*ER(6),-184-104*ER(6)],
  [1,23+2*ER(6),16+14*ER(6),-92-24*ER(6),68-28*ER(6),
  -64-76*ER(6),208-148*ER(6),216+84*ER(6),-192+72*ER(6),-184+104*ER(6)],
  [1,-25,-40,-16,-80,-160,160,0,480,-320],
  [1,23,40,64,-256,32,64,-192,96,128],
  [1,-1,-64,-16,112,-64,-32,-288,-96,448],
  [1,-22,20,-16,-56,167,-116,153,-159,28]]]];

MULTFREEINFO.("Suz"):= ["$Suz$",
##
[[1,4,5],"$G_2(4)$",
 [[1,416,1365],
  [1,20,-21],
  [1,-16,15]]],
##
[[1,3,4,9,15],"$3.U_4(3):2$",
 [[1,280,486,8505,13608],
  [1,80,-54,405,-432],
  [1,-28,90,189,-252],
  [1,20,18,-75,36],
  [1,-8,-10,9,8]]],
##
[[1,2,3,4,9,10,11,15],"$3.U_4(3) \\leq 3.U_4(3):2$",
 [[1,1,486,486,560,8505,8505,27216],
  [1,-1,162,-162,0,-945,945,0],
  [1,1,-54,-54,160,405,405,-864],
  [1,1,90,90,-56,189,189,-504],
  [1,1,18,18,40,-75,-75,72],
  [1,-1,18,-18,0,63,-63,0],
  [1,-1,-18,18,0,-45,45,0],
  [1,1,-10,-10,-16,9,9,16]]],
##
[[1,2,3,9,11,12],"$U_5(2)$",
 [[1,891,1980,2816,6336,20736],
  [1,243,-180,512,-576,0],
  [1,-99,330,176,-264,-144],
  [1,33,30,8,96,-168],
  [1,-27,-30,32,24,0],
  [1,9,6,-40,-48,72]]],
##
[[1,2,4,6,9,12,16,17,27],"$2^{1+6}_-.U_4(2)$",
 [[1,54,360,1728,5120,9216,17280,46080,55296],
  [1,-27,90,432,800,-1152,-2160,-1440,3456],
  [1,21,30,276,-160,768,120,-1440,384],
  [1,3,-60,132,200,48,-60,360,-624],
  [1,15,48,12,128,-144,276,-96,-240],
  [1,-9,24,-36,80,144,-108,48,-144],
  [1,-11,10,48,-80,-64,80,80,-64],
  [1,9,6,0,-64,0,-144,192,0],
  [1,0,-12,-18,8,-9,36,-96,90]]],
##
[[1,3,4,5,9,11,12,15,17,27,28,30,33],"$2^{4+6}:3A_6$",
 [[1,60,480,1536,1920,6144,6144,20480,23040,23040,46080,92160,184320],
  [1,-15,30,336,120,1104,-96,-1120,-2160,-360,2880,-5040,4320],
  [1,27,84,216,336,-192,864,1472,72,864,-1440,-2880,576],
  [1,15,-60,-156,300,96,1104,-1120,-180,-720,720,1440,-1440],
  [1,21,90,-24,48,216,-96,-112,-360,576,-96,744,-1008],
  [1,-15,30,-96,120,96,-96,320,0,-360,0,0,0],
  [1,-3,18,24,-96,264,96,-16,360,-144,-288,-72,-144],
  [1,7,-36,116,76,48,-96,112,172,-96,240,240,-784],
  [1,15,36,-12,12,-96,-48,-160,252,-144,144,-288,288],
  [1,6,0,6,-42,-24,24,128,-180,-144,9,144,72],
  [1,-9,12,36,12,-48,0,-112,-36,0,-144,144,144],
  [1,-5,0,-16,-20,-24,24,40,40,120,240,-120,-280],
  [1,3,-24,-24,12,24,-24,-40,0,72,-144,-72,216]]]];

MULTFREEINFO.("ON"):= ["$ON$",
##
[[1,2,7,8,11],"$L_3(7).2$",
 [[1,5586,6384,52136,58653],
  [1,196,-106,161,-252],
  [1,-21,111,161,-252],
  [1,42,48,-280,189],
  [1,-56,-64,56,63]]],
##
[[1,2,7,8,10,11,18],"$L_3(7) \\leq L_3(7).2$",
 [[1,1,11172,12768,52136,52136,117306],
  [1,1,392,-212,161,161,-504],
  [1,1,-42,222,161,161,-504],
  [1,1,84,96,-280,-280,378],
  [1,-1,0,0,-343,343,0],
  [1,1,-112,-128,56,56,126],
  [1,-1,0,0,152,-152,0]]],
##
[[1,2,7,9,11],"$L_3(7).2$",
 [[1,5586,6384,52136,58653],
  [1,196,-106,161,-252],
  [1,-21,111,161,-252],
  [1,42,48,-280,189],
  [1,-56,-64,56,63]]],
##
[[1,2,7,9,10,11,18],"$L_3(7) \\leq L_3(7).2$",
 [[1,1,11172,12768,52136,52136,117306],
  [1,1,392,-212,161,161,-504],
  [1,1,-42,222,161,161,-504],
  [1,1,84,96,-280,-280,378],
  [1,-1,0,0,-343,343,0],
  [1,1,-112,-128,56,56,126],
  [1,-1,0,0,152,-152,0]]]];

MULTFREEINFO.("Co3"):= ["$Co_3$",
##
[[1,5],"$McL.2$",
 [[1,275],
  [1,-1]]],
##
[[1,2,4,5],"$McL \\leq McL.2$",
 [[1,1,275,275],
  [1,-1,55,-55],
  [1,-1,-5,5],
  [1,1,-1,-1]]],
##
[[1,2,5,9,15],"$HS$",
 [[1,352,1100,4125,5600],
  [1,-176,440,-825,560],
  [1,76,134,-15,-196],
  [1,-26,20,75,-70],
  [1,4,-10,-15,20]]],
##
[[1,2,4,5,9,13,15,24],"$M_{23}$",
 [[1,253,506,1771,7590,8855,14168,15456],
  [1,55,-286,847,-330,-2695,3080,-672],
  [1,-85,-86,147,870,105,-280,-672],
  [1,1,146,343,-330,455,56,-672],
  [1,10,-61,97,-105,80,-250,228],
  [1,-22,31,21,15,-120,-82,156],
  [1,28,11,1,75,-40,-52,-24],
  [1,-4,-5,-15,-21,24,44,-24]]],
##
[[1,5,13,15,20,31],"$3^5:(2 \\times M_{11})$",
 [[1,495,2673,32076,40095,53460],
  [1,35,741,2268,-1305,-1740],
  [1,-55,123,-324,495,-240],
  [1,35,93,-324,-225,420],
  [1,35,-15,0,207,-228],
  [1,-9,-15,44,-57,36]]],
##
[[1,2,4,5,9,13,15,20,22,24,28,31],"$3^5:M_{11} \\leq 3^5:(2 \\times M_{11})$",
 [[1,1,495,495,2673,2673,32076,32076,40095,40095,53460,53460],
  [1,-1,165,-165,1485,-1485,10692,-10692,4455,-4455,5940,-5940],
  [1,-1,-135,135,345,-345,-108,108,2655,-2655,-3660,3660],
  [1,1,35,35,741,741,2268,2268,-1305,-1305,-1740,-1740],
  [1,-1,15,-15,315,-315,-108,108,-945,945,-360,360],
  [1,1,-55,-55,123,123,-324,-324,495,495,-240,-240],
  [1,1,35,35,93,93,-324,-324,-225,-225,420,420],
  [1,1,35,35,-15,-15,0,0,207,207,-228,-228],
  [1,-1,33,-33,9,-9,-108,108,135,-135,36,-36],
  [1,-1,-27,27,21,-21,-108,108,63,-63,228,-228],
  [1,-1,-3,3,-27,27,108,-108,-81,81,-108,108],
  [1,1,-9,-9,-15,-15,44,44,-57,-57,36,36]]],
##
[[1,5,14,15,20,27,29],"$2.S_6(2)$",
 [[1,630,1920,8960,30240,48384,80640],
  [1,147,-288,1232,1260,2016,-4368],
  [1,-45,120,-40,540,-216,-360],
  [1,75,0,80,180,-576,240],
  [1,3,72,116,-252,72,-12],
  [1,15,0,-100,0,144,-60],
  [1,-18,-33,32,0,-54,72]]]];

MULTFREEINFO.("Co2"):= ["$Co_2$",
##
[[1,4,6],"$U_6(2).2$",
 [[1,891,1408],
  [1,63,-64],
  [1,-9,8]]],
##
[[1,2,4,6,7],"$U_6(2) \\leq U_6(2).2$",
 [[1,1,891,891,2816],
  [1,-1,297,-297,0],
  [1,1,63,63,-128],
  [1,1,-9,-9,16],
  [1,-1,-3,3,0]]],
##
[[1,4,5,6,8,15,17,28,36,39,44],"$U_5(2).2 \\leq U_6(2).2$",
 [[1,176,495,5346,8448,8910,14256,142560,253440,427680,684288],
  [1,176,495,378,-384,630,1008,10080,-11520,30240,-31104],
  [1,-16,15,1026,-768,270,-1296,4320,7680,-4320,-6912],
  [1,176,495,-54,48,-90,-144,-1440,1440,-4320,3888],
  [1,-16,15,378,384,-810,432,4320,-3840,-4320,3456],
  [1,8,-9,378,288,126,504,-1008,576,0,-864],
  [1,8,-9,-54,-288,414,360,576,-576,-1296,864],
  [1,-16,15,-54,-48,-90,144,0,480,0,-432],
  [1,-16,15,26,32,70,-96,-80,-320,80,288],
  [1,8,-9,-54,96,30,-24,192,192,-144,-288],
  [1,8,-9,26,-64,-50,-24,-128,-128,176,192]]],
##
[[1,2,3,4,5,6,7,8,15,16,17,19,21,28,35,36,39,42,44,48],
"$U_5(2) \\leq U_6(2).2$",
 [[1,1,176,176,495,495,5346,5346,8910,8910,14256,14256,16896,142560,
   142560,253440,253440,427680,427680,1368576],
  [1,-1,176,-176,495,-495,1782,-1782,-2970,2970,4752,-4752,0,-47520,47520,
   0,0,142560,-142560,0],
  [1,-1,-16,16,15,-15,1782,-1782,1350,-1350,-432,432,0,-12960,12960,
   -30720,30720,-12960,12960,0],
  [1,1,176,176,495,495,378,378,630,630,1008,1008,-768,10080,10080,
   -11520,-11520,30240,30240,-62208],
  [1,1,-16,-16,15,15,1026,1026,270,270,-1296,-1296,-1536,4320,4320,
   7680,7680,-4320,-4320,-13824],
  [1,1,176,176,495,495,-54,-54,-90,-90,-144,-144,96,-1440,-1440,1440,1440,
   -4320,-4320,7776],
  [1,-1,176,-176,495,-495,-18,18,30,-30,-48,48,0,480,-480,0,0,-1440,1440,0],
  [1,1,-16,-16,15,15,378,378,-810,-810,432,432,768,4320,4320,-3840,-3840,
   -4320,-4320,6912],
  [1,1,8,8,-9,-9,378,378,126,126,504,504,576,-1008,-1008,576,576,0,0,-1728],
  [1,-1,-16,16,15,-15,270,-270,-162,162,-432,432,0,-864,864,1536,-1536,
   -864,864,0],
  [1,1,8,8,-9,-9,-54,-54,414,414,360,360,-576,576,576,-576,-576,
   -1296,-1296,1728],
  [1,-1,-16,16,15,-15,-18,18,350,-350,368,-368,0,-960,960,1280,-1280,
   -960,960,0],
  [1,-1,8,-8,-9,9,270,-270,54,-54,216,-216,0,864,-864,0,0,432,-432,0],
  [1,1,-16,-16,15,15,-54,-54,-90,-90,144,144,-96,0,0,480,480,0,0,-864],
  [1,-1,8,-8,-9,9,-18,18,-138,138,120,-120,0,-192,192,0,0,-432,432,0],
  [1,1,-16,-16,15,15,26,26,70,70,-96,-96,64,-80,-80,-320,-320,80,80,576],
  [1,1,8,8,-9,-9,-54,-54,30,30,-24,-24,192,192,192,192,192,-144,-144,-576],
  [1,-1,-16,16,15,-15,-18,18,-18,18,0,0,0,144,-144,-192,192,144,-144,0],
  [1,1,8,8,-9,-9,26,26,-50,-50,-24,-24,-128,-128,-128,-128,-128,176,176,384],
  [1,-1,8,-8,-9,9,-18,18,54,-54,-72,72,0,0,0,0,0,144,-144,0]]],
##
[[1,4,6,14,17],"$2^{10}:M_{22}:2$",
 [[1,462,2464,21120,22528],
  [1,-21,532,-960,448],
  [1,87,64,120,-272],
  [1,-21,28,120,-128],
  [1,3,-20,-48,64]]],
##
[[1,2,4,6,7,14,17,20],"$2^{10}:M_{22} \\leq 2^{10}:M_{22}:2$",
 [[1,1,924,2464,2464,22528,22528,42240],
  [1,-1,0,1232,-1232,-5632,5632,0],
  [1,1,-42,532,532,448,448,-1920],
  [1,1,174,64,64,-272,-272,240],
  [1,-1,0,182,-182,368,-368,0],
  [1,1,-42,28,28,-128,-128,240],
  [1,1,6,-20,-20,64,64,-96],
  [1,-1,0,-10,10,-16,16,0]]],
##
[[1,2,4,7,14,18],"$McL$",
 [[1,275,2025,7128,15400,22275],
  [1,-165,945,-2376,3080,-1485],
  [1,91,369,504,-56,-909],
  [1,-45,105,24,-280,195],
  [1,19,9,-72,-56,99],
  [1,-5,-15,24,40,-45]]],
##
[[1,4,6,15,17],"$2^{1+8}:S_6(2)$",
 [[1,1008,1260,14336,40320],
  [1,-234,225,1088,-1080],
  [1,108,135,-64,-180],
  [1,18,-27,80,-72],
  [1,-18,9,-64,72]]],
##
[[1,4,6,14,17,27,33],"$HS.2$",
 [[1,3850,4125,44352,61600,132000,231000],
  [1,-14,1365,-2016,7504,-6000,-840],
  [1,490,285,-2016,-560,2640,-840],
  [1,-86,285,576,-416,480,-840],
  [1,178,21,288,-176,-624,312],
  [1,10,-35,64,160,160,-360],
  [1,-30,5,-96,-80,-80,280]]],
##
[[1,2,4,6,7,14,17,18,20,27,33,38],"$HS \\leq HS.2$",
 [[1,1,3850,3850,4125,4125,61600,61600,88704,231000,231000,264000],
  [1,-1,770,-770,2475,-2475,24640,-24640,0,46200,-46200,0],
  [1,1,-14,-14,1365,1365,7504,7504,-4032,-840,-840,-12000],
  [1,1,490,490,285,285,-560,-560,-4032,-840,-840,5280],
  [1,-1,-70,70,675,-675,1120,-1120,0,-4200,4200,0],
  [1,1,-86,-86,285,285,-416,-416,1152,-840,-840,960],
  [1,1,178,178,21,21,-176,-176,576,312,312,-1248],
  [1,-1,-190,190,75,-75,-320,320,0,600,-600,0],
  [1,-1,122,-122,99,-99,-416,416,0,408,-408,0],
  [1,1,10,10,-35,-35,160,160,128,-360,-360,320],
  [1,1,-30,-30,5,5,-80,-80,-192,280,280,-160],
  [1,-1,2,-2,-21,21,64,-64,0,-72,72,0]]]];

MULTFREEINFO.("Fi22"):= ["$Fi_{22}$",
##
[[1,3,7],"$2.U_6(2)$",
 [[1,693,2816],
  [1,63,-64],
  [1,-9,8]]],
##
[[1,3,9],"$O_7(3)$",
 [[1,3159,10920],
  [1,279,-280],
  [1,-9,8]]],
##
[[1,3,9],"$O_7(3)$",
 [[1,3159,10920],
  [1,279,-280],
  [1,-9,8]]],
##
[[1,7,9,13],"$O_8^+(2):S_3$",
 [[1,1575,22400,37800],
  [1,171,-64,-108],
  [1,-9,224,-216],
  [1,-9,-64,72]]],
##
[[1,4,7,8,9,13,15],"$O_8^+(2):3 \\leq O_8^+(2):S_3$",
 [[1,1,1575,1575,22400,22400,75600],
  [1,-1,225,-225,800,-800,0],
  [1,1,171,171,-64,-64,-216],
  [1,-1,-63,63,224,-224,0],
  [1,1,-9,-9,224,224,-432],
  [1,1,-9,-9,-64,-64,144],
  [1,-1,9,-9,-64,64,0]]],
##
[[1,3,7,9,13,14,17],"$O_8^+(2):2 \\leq O_8^+(2):S_3$",
 [[1,2,1575,3150,22400,44800,113400],
  [1,-1,315,-315,2240,-2240,0],
  [1,2,171,342,-64,-128,-324],
  [1,2,-9,-18,224,448,-648],
  [1,2,-9,-18,-64,-128,216],
  [1,-1,-45,45,80,-80,0],
  [1,-1,27,-27,-64,64,0]]],
##
[[1,2,3,5,7,10,11,17],"$2^{10}:M_{22}$",
 [[1,154,1024,3696,4928,11264,42240,78848],
  [1,-77,-320,924,1232,-1408,-5280,4928],
  [1,49,-176,546,-532,1184,-960,-112],
  [1,-35,160,294,-364,-400,120,224],
  [1,37,88,186,248,32,120,-712],
  [1,13,-32,6,-28,-112,120,32],
  [1,-17,-20,24,32,32,120,-172],
  [1,1,16,-30,-4,32,-96,80]]],
##
[[1,3,5,7,9,10,13,17,25,28],"$2^6:S_6(2)$",
 [[1,135,1260,2304,8640,10080,45360,143360,241920,241920],
  [1,-15,210,624,-960,1680,1260,8960,-1680,-10080],
  [1,-27,126,-288,216,1008,-2268,-1792,6048,-3024],
  [1,57,246,120,840,96,1368,-1408,120,-1440],
  [1,3,-60,192,192,312,-576,-256,-960,1152],
  [1,21,30,-96,-168,240,180,-256,-672,720],
  [1,27,36,0,0,-144,-432,512,0,0],
  [1,-15,66,48,-96,-48,-36,-256,48,288],
  [1,-9,0,-36,72,0,0,224,-252,0],
  [1,3,-24,12,-24,-12,72,-112,228,-144]]],
##
[[1,4,5,9,10,26,31,32,39,45,53],"${^2F_4(2)^{\\prime}}$",
 [[1,1755,11700,14976,83200,83200,140400,187200,374400,449280,2246400],
  [1,-405,900,-576,-3200,-3200,-10800,14400,-14400,17280,0],
  [1,-189,1980,-576,5440,5440,4320,-7200,-14400,13824,-8640],
  [1,171,612,-864,832,832,1008,3456,3744,-576,-9216],
  [1,99,540,576,-320,-320,-1440,-1440,2880,2304,-2880],
  [1,75,-60,192,-128,-128,624,384,-576,384,-768],
  [1,27,36,-144,-608,256,0,-288,-144,0,864],
  [1,27,36,-144,256,-608,0,-288,-144,0,864],
  [1,-21,132,96,64,64,-48,192,-288,-960,768],
  [1,27,-108,0,256,256,-432,0,0,0,0],
  [1,-45,-36,0,-32,-32,144,0,288,288,-576]]]];

MULTFREEINFO.("HN"):= ["$HN$",
##
[[1,2,3,4,5,8,10,11,12,18,20,23],"$A_{12}$",
 [[1,462,2520,2520,10395,16632,30800,69300,166320,166320,311850,362880],
  [1,-198,360*ER(5),-360*ER(5),2475,792,4400,-9900,-7920*ER(5),7920*ER(5),
   -14850,17280],
  [1,-198,-360*ER(5),360*ER(5),2475,792,4400,-9900,7920*ER(5),-7920*ER(5),
   -14850,17280],
  [1,132,-540,-540,1485,-1188,1100,4950,-5940,-5940,0,6480],
  [1,12,120,120,495,1332,-2200,300,-1080,-1080,-900,2880],
  [1,82,240,240,515,-88,400,900,640,640,-1650,-1920],
  [1,62,-120,-120,155,632,400,-300,80,80,1050,-1920],
  [1,-48,60*ER(5),-60*ER(5),225,-108,-100,-150,180*ER(5),-180*ER(5),900,-720],
  [1,-48,-60*ER(5),60*ER(5),225,-108,-100,-150,-180*ER(5),180*ER(5),900,-720],
  [1,12,30,30,-45,-18,50,-150,-270,-270,450,180],
  [1,-18,0,0,-45,72,80,180,0,0,-270,0],
  [1,12,-20,-20,5,-68,-100,-50,180,180,-200,80]]],
[[1,2,3,4,5,8,9,10,11,12,18,20,23,24,32,39,40,41,47],"$A_{11} \\leq A_{12}$",
 [[1,11,2772,2772,16632,20790,30240,30240,83160,99792,103950,362880,369600,
   831600,1247400,1995840,1995840,2494800,3991680],
  [1,11,-1188,-1188,792,4950,-4320*ER(5),4320*ER(5),3960,4752,24750,17280,
   52800,-118800,-59400,95040*ER(5),-95040*ER(5),-118800,190080],
  [1,11,-1188,-1188,792,4950,4320*ER(5),-4320*ER(5),3960,4752,24750,17280,
   52800,-118800,-59400,-95040*ER(5),95040*ER(5),-118800,190080],
  [1,11,792,792,-1188,2970,-6480,-6480,-5940,-7128,14850,6480,13200,59400,0,
--> --------------------

--> maximum size reached

--> --------------------

[ Verzeichnis aufwärts0.59unsichere Verbindung  Übersetzung europäischer Sprachen durch Browser  ]