Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  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

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

[ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge