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


Quelle  ctblcons.g   Sprache: unbekannt

 
# This file was created from xpl/ctblcons.xpl, do not edit!
#############################################################################
##
#W  ctblcons.g      examples of character table constructions   Thomas Breuer
##

RepresentativesCharacterTables:= function( list )
   local reps, i, found, r;

   reps:= [];
   for i in [ 1 .. Length( list ) ] do
     if ForAll( reps, r -> ( IsCharacterTable( r ) and
            TransformingPermutationsCharacterTables( list[i], r ) = fail )
          or ( IsRecord( r ) and TransformingPermutationsCharacterTables(
                                   list[i].table, r.table ) = fail ) ) then
       Add( reps, list[i] );
     fi;
   od;
   return reps;
   end;;


ConstructOrdinaryMGATable:= function( tblMG, tblG, tblGA, name, lib )
     local acts, poss, trans;

     acts:= PossibleActionsForTypeMGA( tblMG, tblG, tblGA );
     poss:= Concatenation( List( acts, pi ->
                PossibleCharacterTablesOfTypeMGA( tblMG, tblG, tblGA, pi,
                    name ) ) );
     poss:= RepresentativesCharacterTables( poss );
     if Length( poss ) = 1 then
       # Compare the computed table with the library table.
       if not IsCharacterTable( lib ) then
         List( poss, x -> AutomorphismsOfTable( x.table ) );
         Print( "#I  no library table for ", name, "\n" );
       else
         trans:= TransformingPermutationsCharacterTables( poss[1].table,
                     lib );
         if not IsRecord( trans ) then
           Print( "#E  computed table and library table for ", name,
                  " differ\n" );
         fi;
         # Compare the computed fusion with the stored one.
         if OnTuples( poss[1].MGfusMGA, trans.columns )
                <> GetFusionMap( tblMG, lib ) then
           Print( "#E  computed and stored fusion for ", name,
                  " differ\n" );
         fi;
       fi;
     elif Length( poss ) = 0 then
       Print( "#E  no solution for ", name, "\n" );
     else
       Print( "#E  ", Length( poss ), " possibilities for ", name, "\n" );
     fi;
     return poss;
   end;;


ConstructModularMGATables:= function( tblMG, tblGA, ordtblMGA )
   local name, poss, p, modtblMG, modtblGA, modtblMGA, modlib, trans;

   name:= Identifier( ordtblMGA );
   poss:= [];
   for p in Set( Factors( Size( ordtblMGA ) ) ) do
     modtblMG := tblMG mod p;
     modtblGA := tblGA mod p;
     if ForAll( [ modtblMG, modtblGA ], IsCharacterTable ) then
       modtblMGA:= BrauerTableOfTypeMGA( modtblMG, modtblGA, ordtblMGA );
       Add( poss, modtblMGA );
       modlib:= ordtblMGA mod p;
       if IsCharacterTable( modlib ) then
         trans:= TransformingPermutationsCharacterTables( modtblMGA.table,
                     modlib );
         if not IsRecord( trans ) then
           Print( "#E  computed table and library table for ", name,
                  " mod ", p, " differ\n" );
         fi;
       else
         AutomorphismsOfTable( modtblMGA.table );
         Print( "#I  no library table for ", name, " mod ", p, "\n" );
       fi;
     else
       Print( "#I  not all input tables for ", name, " mod ", p,
              " available\n" );
     fi;
   od;

   return poss;
   end;;


FindExtraordinaryCase:= function( tblMGA )
   local result, der, nsg, tblMGAclasses, orders, tblMG,
         tblMGfustblMGA, tblMGclasses, pos, M, Mimg, tblMGAfustblGA, tblGA,
         outer, inv, filt, other, primes, p;
   result:= [];
   der:= ClassPositionsOfDerivedSubgroup( tblMGA );
   nsg:= ClassPositionsOfNormalSubgroups( tblMGA );
   tblMGAclasses:= SizesConjugacyClasses( tblMGA );
   orders:= OrdersClassRepresentatives( tblMGA );
   if Length( der ) < NrConjugacyClasses( tblMGA ) then
     # Look for tables of normal subgroups of the form $M.G$.
     for tblMG in Filtered( List( NamesOfFusionSources( tblMGA ),
                                  CharacterTable ), x -> x <> fail ) do
       tblMGfustblMGA:= GetFusionMap( tblMG, tblMGA );
       tblMGclasses:= SizesConjugacyClasses( tblMG );
       pos:= Position( nsg, Set( tblMGfustblMGA ) );
       if pos <> fail and
          Size( tblMG ) = Sum( tblMGAclasses{ nsg[ pos ] } ) then
         # Look for normal subgroups of the form $M$.
         for M in Difference( ClassPositionsOfNormalSubgroups( tblMG ),
                      [ [ 1 ], [ 1 .. NrConjugacyClasses( tblMG ) ] ] ) do
           Mimg:= Set( tblMGfustblMGA{ M } );
           if Sum( tblMGAclasses{ Mimg } ) = Sum( tblMGclasses{ M } ) then
             tblMGAfustblGA:= First( ComputedClassFusions( tblMGA ),
                 r -> ClassPositionsOfKernel( r.map ) = Mimg );
             if tblMGAfustblGA <> fail then
               tblGA:= CharacterTable( tblMGAfustblGA.name );
               tblMGAfustblGA:= tblMGAfustblGA.map;
               outer:= Difference( [ 1 .. NrConjugacyClasses( tblGA ) ],
                   CompositionMaps( tblMGAfustblGA, tblMGfustblMGA ) );
               inv:= InverseMap( tblMGAfustblGA ){ outer };
               filt:= Flat( Filtered( inv, IsList ) );
               if not IsEmpty( filt ) then
                 other:= Filtered( inv, IsInt );
                 primes:= Filtered( Set( Factors( Size( tblMGA ) ) ),
                    p -> ForAll( orders{ filt }, x -> x mod p = 0 )
                         and ForAny( orders{ other }, x -> x mod p <> 0 ) );
                 for p in primes do
                   Add( result, [ Identifier( tblMG ),
                                  Identifier( tblMGA ),
                                  Identifier( tblGA ), p ] );
                 od;
               fi;
             fi;
           fi;
         od;
       fi;
     od;
   fi;
   return result;
end;;


ProcessGS3Example:= function( t, tC, tK, identifier, pi )
   local tF, lib, trans, p, tmodp, tCmodp, tKmodp, modtF;

   tF:= CharacterTableOfTypeGS3( t, tC, tK, pi,
            Concatenation( identifier, "new" ) );
   lib:= CharacterTable( identifier );
   if lib <> fail then
     trans:= TransformingPermutationsCharacterTables( tF.table, lib );
     if not IsRecord( trans ) then
       Print( "#E  computed table and library table for `", identifier,
              "' differ\n" );
     fi;
   else
     Print( "#I  no library table for `", identifier, "'\n" );
   fi;
   StoreFusion( tC, tF.tblCfustblKC, tF.table );
   StoreFusion( tK, tF.tblKfustblKC, tF.table );
   for p in Set( Factors( Size( t ) ) ) do
     tmodp := t  mod p;
     tCmodp:= tC mod p;
     tKmodp:= tK mod p;
     if IsCharacterTable( tmodp ) and
        IsCharacterTable( tCmodp ) and
        IsCharacterTable( tKmodp ) then
       modtF:= CharacterTableOfTypeGS3( tmodp, tCmodp, tKmodp,
                   tF.table,
                   Concatenation(  identifier, "mod", String( p ) ) );
       if   Length( Irr( modtF.table ) ) <>
            Length( Irr( modtF.table )[1] ) then
         Print( "#E  nonsquare result table for `",
                identifier, " mod ", p, "'\n" );
       elif lib <> fail and IsCharacterTable( lib mod p ) then
         trans:= TransformingPermutationsCharacterTables( modtF.table,
                                                          lib mod p );
         if not IsRecord( trans ) then
           Print( "#E  computed table and library table for `",
                  identifier, " mod ", p, "' differ\n" );
         fi;
       else
         Print( "#I  no library table for `", identifier, " mod ",
                p, "'\n" );
       fi;
     else
       Print( "#I  not all inputs available for `", identifier,
              " mod ", p, "'\n" );
     fi;
   od;
end;;


ConstructOrdinaryGV4Table:= function( tblG, tblsG2, name, lib )
     local acts, nam, poss, reps, i, trans;

     # Compute the possible actions for the ordinary tables.
     acts:= PossibleActionsForTypeGV4( tblG, tblsG2 );
     # Compute the possible ordinary tables for the given actions.
     nam:= Concatenation( "new", name );
     poss:= Concatenation( List( acts, triple -> 
         PossibleCharacterTablesOfTypeGV4( tblG, tblsG2, triple, nam ) ) );
     # Test the possibilities for permutation equivalence.
     reps:= RepresentativesCharacterTables( poss );
     if 1 < Length( reps ) then
       Print( "#I  ", name, ": ", Length( reps ),
              " equivalence classes\n" );
     elif Length( reps ) = 0 then
       Print( "#E  ", name, ": no solution\n" );
     else
       # Compare the computed table with the library table.
       if not IsCharacterTable( lib ) then
         Print( "#I  no library table for ", name, "\n" );
         PrintToLib( name, poss[1].table );
         for i in [ 1 .. 3 ] do
           Print( LibraryFusion( tblsG2[i],
                      rec( name:= name, map:= poss[1].G2fusGV4[i] ) ) );
         od;
       else
         trans:= TransformingPermutationsCharacterTables( poss[1].table,
                     lib );
         if not IsRecord( trans ) then
           Print( "#E  computed table and library table for ", name,
                  " differ\n" );
         fi;
         # Compare the computed fusions with the stored ones.
         if List( poss[1].G2fusGV4, x -> OnTuples( x, trans.columns ) )
                <> List( tblsG2, x -> GetFusionMap( x, lib ) ) then
           Print( "#E  computed and stored fusions for ", name,
                  " differ\n" );
         fi;
       fi;
     fi;
     return poss;
   end;;


ConstructModularGV4Tables:= function( tblG, tblsG2, ordposs,
                                         ordlibtblGV4 )
     local name, modposs, primes, checkordinary, i, record, p, tmodp,
           t2modp, poss, modlib, trans, reps;

     if not IsCharacterTable( ordlibtblGV4 ) then
       Print( "#I  no ordinary library table ...\n" );
       return [];
     fi;
     name:= Identifier( ordlibtblGV4 );
     modposs:= [];
     primes:= Set( Factors( Size( tblG ) ) );
     ordposs:= ShallowCopy( ordposs );
     checkordinary:= false;
     for i in [ 1 .. Length( ordposs ) ] do
       modposs[i]:= [];
       record:= ordposs[i];
       for p in primes do
         tmodp := tblG  mod p;
         t2modp:= List( tblsG2, t2 -> t2 mod p );
         if IsCharacterTable( tmodp ) and
            ForAll( t2modp, IsCharacterTable ) then
           poss:= PossibleCharacterTablesOfTypeGV4( tmodp, t2modp,
                      record.table, record.G2fusGV4 );
           poss:= RepresentativesCharacterTables( poss );
           if   Length( poss ) = 0 then
             Print( "#I  excluded cand. ", i, " (out of ",
                    Length( ordposs ), ") for ", name, " by ", p,
                    "-mod. table\n" );
             Unbind( ordposs[i] );
             Unbind( modposs[i] );
             checkordinary:= true;
             break;
           elif Length( poss ) = 1 then
             # Compare the computed table with the library table.
             modlib:= ordlibtblGV4 mod p;
             if IsCharacterTable( modlib ) then
               trans:= TransformingPermutationsCharacterTables(
                           poss[1].table, modlib );
               if not IsRecord( trans ) then
                 Print( "#E  computed table and library table for ",
                        name, " mod ", p, " differ\n" );
               fi;
             else
               Print( "#I  no library table for ",
                      name, " mod ", p, "\n" );
               PrintToLib( name, poss[1].table );
             fi;
           else
             Print( "#I  ", name, " mod ", p, ": ", Length( poss ),
                    " equivalence classes\n" );
           fi;
           Add( modposs[i], poss );
         else
           Print( "#I  not all input tables for ", name, " mod ", p,
                  " available\n" );
           primes:= Difference( primes, [ p ] );
         fi;
       od;
     od;
     if checkordinary then
       # Test whether the ordinary table is admissible.
       ordposs:= Compacted( ordposs );
       modposs:= Compacted( modposs );
       reps:= RepresentativesCharacterTables( ordposs );
       if 1 < Length( reps ) then
         Print( "#I  ", name, ": ", Length( reps ),
                " equivalence classes (ord. table)\n" );
       elif Length( reps ) = 0 then
         Print( "#E  ", name, ": no solution (ord. table)\n" );
       else
         # Compare the computed table with the library table.
         trans:= TransformingPermutationsCharacterTables(
                     ordposs[1].table, ordlibtblGV4 );
         if not IsRecord( trans ) then
           Print( "#E  computed table and library table for ", name,
                  " differ\n" );
         fi;
         # Compare the computed fusions with the stored ones.
         if List( ordposs[1].G2fusGV4, x -> OnTuples( x, trans.columns ) )
              <> List( tblsG2, x -> GetFusionMap( x, ordlibtblGV4 ) ) then
           Print( "#E  computed and stored fusions for ", name,
                  " differ\n" );
         fi;
       fi;
     fi;
     return rec( ordinary:= ordposs, modular:= modposs );
   end;;


ConstructOrdinaryV4GTable:= function( tblG, tbl2G, name, lib )
     local ord3, nam, poss, reps, trans;

     # Compute the possible actions for the ordinary tables.
     ord3:= Set( List( Filtered( AutomorphismsOfTable( tblG ),
                                 x -> Order( x ) = 3 ),
                       SmallestGeneratorPerm ) );
     if 1 < Length( ord3 ) then
       Print( "#I  ", name,
              ": the action of the automorphism is not unique" );
     fi;
     # Compute the possible ordinary tables for the given actions.
     nam:= Concatenation( "new", name );
     poss:= Concatenation( List( ord3, pi ->
            PossibleCharacterTablesOfTypeV4G( tblG, tbl2G, pi, nam ) ) );
     # Test the possibilities for permutation equivalence.
     reps:= RepresentativesCharacterTables( poss );
     if 1 < Length( reps ) then
       Print( "#I  ", name, ": ", Length( reps ),
              " equivalence classes\n" );
     elif Length( reps ) = 0 then
       Print( "#E  ", name, ": no solution\n" );
     else
       # Compare the computed table with the library table.
       if not IsCharacterTable( lib ) then
         Print( "#I  no library table for ", name, "\n" );
         PrintToLib( name, poss[1].table );
       else
         trans:= TransformingPermutationsCharacterTables( reps[1], lib );
         if not IsRecord( trans ) then
           Print( "#E  computed table and library table for ", name,
                  " differ\n" );
         fi;
       fi;
     fi;
     return poss;
   end;;


ConstructModularV4GTables:= function( tblG, tbl2G, ordposs,
                                         ordlibtblV4G )
     local name, modposs, primes, checkordinary, i, p, tmodp, 2tmodp, aut,
           poss, modlib, trans, reps;

     if not IsCharacterTable( ordlibtblV4G ) then
       Print( "#I  no ordinary library table ...\n" );
       return [];
     fi;
     name:= Identifier( ordlibtblV4G );
     modposs:= [];
     primes:= Set( Factors( Size( tblG ) ) );
     ordposs:= ShallowCopy( ordposs );
     checkordinary:= false;
     for i in [ 1 .. Length( ordposs ) ] do
       modposs[i]:= [];
       for p in primes do
         tmodp := tblG  mod p;
         2tmodp:= tbl2G mod p;
         if IsCharacterTable( tmodp ) and IsCharacterTable( 2tmodp ) then
           aut:= ConstructionInfoCharacterTable( ordposs[i] )[3];
           poss:= BrauerTableOfTypeV4G( ordposs[i], 2tmodp, aut );
           if CTblLib.Test.TensorDecomposition( poss, false ) = false then
             Print( "#I  excluded cand. ", i, " (out of ",
                    Length( ordposs ), ") for ", name, " by ", p,
                    "-mod. table\n" );
             Unbind( ordposs[i] );
             Unbind( modposs[i] );
             checkordinary:= true;
             break;
           fi;
           Add( modposs[i], poss );
         else
           Print( "#I  not all input tables for ", name, " mod ", p,
                  " available\n" );
           primes:= Difference( primes, [ p ] );
         fi;
       od;
       if IsBound( modposs[i] ) then
         # Compare the computed Brauer tables with the library tables.
         for poss in modposs[i] do
           p:= UnderlyingCharacteristic( poss );
           modlib:= ordlibtblV4G mod p;
           if IsCharacterTable( modlib ) then
             trans:= TransformingPermutationsCharacterTables(
                         poss, modlib );
             if not IsRecord( trans ) then
               Print( "#E  computed table and library table for ",
                      name, " mod ", p, " differ\n" );
             fi;
           else
             Print( "#I  no library table for ",
                    name, " mod ", p, "\n" );
             PrintToLib( name, poss );
           fi;
         od;
       fi;
     od;
     if checkordinary then
       # Test whether the ordinary table is admissible.
       ordposs:= Compacted( ordposs );
       modposs:= Compacted( modposs );
       reps:= RepresentativesCharacterTables( ordposs );
       if 1 < Length( reps ) then
         Print( "#I  ", name, ": ", Length( reps ),
                " equivalence classes (ord. table)\n" );
       elif Length( reps ) = 0 then
         Print( "#E  ", name, ": no solution (ord. table)\n" );
       else
         # Compare the computed table with the library table.
         trans:= TransformingPermutationsCharacterTables( reps[1],
                     ordlibtblV4G );
         if not IsRecord( trans ) then
           Print( "#E  computed table and library table for ", name,
                  " differ\n" );
         fi;
       fi;
     fi;
     # Test the uniqueness of the Brauer tables.
     for poss in TransposedMat( modposs ) do
       reps:= RepresentativesCharacterTables( poss );
       if Length( reps ) <> 1 then
         Print( "#I  ", name, ": ", Length( reps ), " candidates for the ",
                UnderlyingCharacteristic( reps[1] ), "-modular table\n" );
       fi;
     od;
     return rec( ordinary:= ordposs, modular:= modposs );
   end;;


#############################################################################
##
#E


[ Dauer der Verarbeitung: 0.32 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