Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/ctbllib/tst/   (GAP Algebra Version 4.15.1©)  Datei vom 22.4.2025 mit Größe 48 kB image not shown  

Quelle  ctblm.tst   Sprache: unbekannt

 
Spracherkennung für: .tst vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

# This file was created from xpl/ctblm.xpl, do not edit!
#############################################################################
##
#W  ctblm.tst                 GAP applications              Thomas Breuer
##
##  In order to run the tests, one starts GAP from the `tst` subdirectory
##  of the `pkg/ctbllib` directory, and calls `Test( "ctblm.tst" );`.
##
gap> START_TEST( "ctblm.tst" );

##
gap> LoadPackage( "ctbllib", false );
true
gap> LoadPackage( "atlasrep", false );
true

##
gap> CTblLib.IsMagmaAvailable();
true

##
gap> SizeScreen( [ 72 ] );;

##
gap> table2B:= CharacterTable( "2.B" );;
gap> cand:= Filtered( Irr( table2B ), x -> x[1] <= 196883 );;
gap> List( cand, x -> x[1] );
143719625596256 ]
gap> inv:= Positions( OrdersClassRepresentatives( table2B ), 2 );
23457 ]
gap> PrintArray( List( cand, x -> x{ Concatenation( [ 1 ], inv ) } ) );
[ [       1,       1,       1,       1,       1,       1 ],
  [    4371,    4371,    -493,     275,     275,      19 ],
  [   96255,   96255,    4863,    2047,    2047,     255 ],
  [   96256,  -96256,       0,    2048,   -2048,       0 ] ]

##
gap> Sum( cand ){ inv };
437143714371275275 ]

##
gap> table3Fi24prime:= CharacterTable( "3.Fi24'" );;
gap> cand:= Filtered( Irr( table3Fi24prime ), x -> x[1] <= 196883 );;
gap> inv:= Positions( OrdersClassRepresentatives( table3Fi24prime ), 2 );
47 ]
gap> mat:= List( cand, x -> x{ Concatenation([1], inv)});;
gap> PrintArray( mat );
[ [      1,      1,      1 ],
  [   8671,    351,    -33 ],
  [  57477,   1157,    133 ],
  [    783,     79,     15 ],
  [    783,     79,     15 ],
  [  64584,   1352,     72 ],
  [  64584,   1352,     72 ] ]

##
gap> List( cand, x -> x[2] );
1867157477783*E(3), 783*E(3)^264584*E(3), 64584*E(3)^2 ]

##
gap> Float( 196883 / 4371 );
45.043
gap> List( mat, v -> Float( v[1] / v[2] ) );
1., 24.703749.67769.911399.9113947.769247.7692 ]
gap> Float( ( 196883 - 2 * 64584 ) / ( 4371 - 2 * 1352 ) );
40.6209
gap> Float( ( 196883 - 57477 ) / ( 4371 - 1157 ) );
43.3746
gap> Float( ( 196883 - 2*57477 ) / ( 4371 - 2*1157 ) );
39.8294
gap> Float( ( 196883 - 3*57477 ) / ( 4371 - 3*1157 ) );
27.1689

##
gap> mat[3] + mat[6] + mat[7];
1866453861277 ]

##
gap> Sum( mat );
1968834371275 ]

##
gap> table3Fi24:= CharacterTable( "3.Fi24" );;
gap> cand:= Filtered( Irr( table3Fi24 ), x -> x[1] <= 196883 );;
gap> inv:= Positions( OrdersClassRepresentatives( table3Fi24 ), 2 );
35172173 ]
gap> mat:= List( cand, x -> x{ Concatenation([1], inv)});;
gap> PrintArray( mat );
[ [       1,       1,       1,       1,       1 ],
  [       1,       1,       1,      -1,      -1 ],
  [    8671,     351,     -33,    1495,     -41 ],
  [    8671,     351,     -33,   -1495,      41 ],
  [   57477,    1157,     133,    5865,     233 ],
  [   57477,    1157,     133,   -5865,    -233 ],
  [    1566,     158,      30,       0,       0 ],
  [  129168,    2704,     144,       0,       0 ] ]

##
gap> Sum( mat{ [ 14578 ] } );
19688343712754371275 ]

##
gap> pi1:= TrivialCharacter( table2B );;

##
gap> tableB:= CharacterTable( "B" );;   
gap> tableUbar:= CharacterTable( "2.2E6(2)" );;
gap> fus:= PossibleClassFusions( tableUbar, tableB );;
gap> pi:= Set( fus,
>              map -> InducedClassFunctionsByFusionMap( tableUbar, tableB,
>                         [ TrivialCharacter( tableUbar ) ], map )[1] );;
gap> Length( pi );
1
gap> pi2:= Inflated( tableB, table2B, pi )[1];;
gap> mult:= List( Irr( table2B ),
>                 chi -> ScalarProduct( table2B, chi, pi2 ) );;
gap> Maximum( mult );
1
gap> Positions( mult, 1 );
12357131517 ]

##
gap> tableUbar:= CharacterTable( "BN2B" );
CharacterTable( "2^(1+22).Co2" )
gap> fus:= PossibleClassFusions( tableUbar, tableB );;
gap> pi:= Set( fus,
>              map -> InducedClassFunctionsByFusionMap( tableUbar, tableB,
>                         [ TrivialCharacter( tableUbar ) ], map )[1] );;
gap> Length( pi );
1
gap> pi3:= Inflated( tableB, table2B, pi )[1];;
gap> mult:= List( Irr( table2B ),
>                 chi -> ScalarProduct( table2B, chi, pi3 ) );;
gap> Maximum( mult );
1
gap> Positions( mult, 1 );
1358131528303740 ]

##
gap> tableU:= CharacterTable( "Fi23" );;
gap> fus:= PossibleClassFusions( tableU, table2B );;
gap> pi:= Set( fus,
>              map -> InducedClassFunctionsByFusionMap( tableU, table2B,
>                         [ TrivialCharacter( tableU ) ], map )[1] );;
gap> Length( pi );
1
gap> pi4:= pi[1];;
gap> mult:= List( Irr( table2B ),
>                 chi -> ScalarProduct( table2B, chi, pi4 ) );;
gap> Maximum( mult );
1
gap> Positions( mult, 1 );
12357891213151723273032404154
  6368778183185186187188189194195196203
  208220 ]

##
gap> tableU:= CharacterTable( "Th" );;
gap> fus:= PossibleClassFusions( tableU, table2B );;
gap> pi:= Set( fus,
>              map -> InducedClassFunctionsByFusionMap( tableU, table2B,
>                         [ TrivialCharacter( tableU ) ], map )[1] );;
gap> Length( pi );
1
gap> pi5:= pi[1];;
gap> mult:= List( Irr( table2B ),
>                 chi -> ScalarProduct( table2B, chi, pi5 ) );;
gap> Maximum( mult );
2
gap> Positions( mult, 1 );
13781213161927283438415768707778
  8589113114116129133142143145155156185187
  188193195196201208216219225232233235236
  237242 ]
gap> Positions( mult, 2 );
62 ]

##
gap> mcl:= CharacterTable( "McL" );;
gap> co2:= CharacterTable( "Co2" );;
gap> fus:= PossibleClassFusions( mcl, co2 );;       
gap> Length( fus );
4
gap> ind:= Set( fus, map -> InducedClassFunctionsByFusionMap( mcl, co2,     
>                               [ TrivialCharacter( mcl ) ], map )[1] );;
gap> Length( ind );
1
gap> bm2:= CharacterTable( "BM2" );
CharacterTable( "2^(1+22).Co2" )
gap> infl:= Inflated( co2, bm2, ind );;
gap> ind:= Induced( bm2, tableB, infl );;
gap> infl:= Inflated( tableB, table2B, ind )[1];;

##
gap> centre:= ClassPositionsOfCentre( table2B );
12 ]
gap> pi:= PermChars( table2B, rec( torso:= [ 2 * infl[1], 0 ],
>                             normalsubgroup:= centre,
>                             nonfaithful:= infl ) );;
gap> Length( pi );
1
gap> pi6:= pi[1];;
gap> List( Irr( table2B ), chi -> ScalarProduct( table2B, chi, pi6 ) );
1121202320014120320200
  2200231504320032064011
  0000301005052002004102
  0424430242403032501031
  0112531145110300321121
  1403231301302213300200
  0030333103040100200200
  2110000121110111111021
  1330001111232002243524
  0000520001100000070017
  7000164500300000411383
  22501 ]

##
gap> tableU:= CharacterTable( "2.F4(2)" );;
gap> fus:= PossibleClassFusions( tableU, table2B );;
gap> pi:= Set( fus, map -> InducedClassFunctionsByFusionMap( tableU, table2B,
>             [ TrivialCharacter( tableU ) ], map )[1] );;
gap> Length( pi );
2
gap> pi:= Filtered( pi, x -> ClassPositionsOfKernel( x ) = [ 1 ] );;
gap> Length( pi );
1
gap> pi7:= pi[1];;
gap> List( Irr( table2B ), chi -> ScalarProduct( table2B, chi, pi7 ) );
1120202210024130210000
  2100221402120032044000
  0010001002133003014003
  0603200141426140401120
  0321320045310300112002
  0203330410411111211230
  0220553015140101100310
  2310200210100100010012
  1440003111222001233312
  0011420003200000040015
  5011224400311100411573
  25501 ]

##
gap> tableU:= CharacterTable( "HN" );;
gap> fus:= PossibleClassFusions( tableU, table2B );;
gap> pi:= Set( fus, map -> InducedClassFunctionsByFusionMap( tableU, table2B,
>             [ TrivialCharacter( tableU ) ], map )[1] );;
gap> Length( pi );
1
gap> pi8:= pi[1];;
gap> List( Irr( table2B ), chi -> ScalarProduct( table2B, chi, pi8 ) );
1121203421144211331300
  53006456174700382611255
  00213470073950064213604
  41211169731113122051061113174
  107197781014181951012237126246
  41716891711122382418262129101831
  102421172735131429191271826153434
  35201436143982924154013938241735
  3226262422173139293030194437372830
  312942404056563030425047224640
  0461010128120024161000212100
  00000280014344021010224044448
  83614141688462828589072709210456
  90 ]

##
gap> tableU:= CharacterTable( "2.Fi22" );;
gap> fus:= PossibleClassFusions( tableU, table2B );;
gap> pi:= Set( fus, map -> InducedClassFunctionsByFusionMap( tableU, table2B,
>             [ TrivialCharacter( tableU ) ], map )[1] );;
gap> Length( pi );
2
gap> pi:= Filtered( pi, x -> ClassPositionsOfKernel( x ) = [ 1 ] );;
gap> Length( pi );
1
gap> pi9:= pi[1];;
gap> List( Irr( table2B ), chi -> ScalarProduct( table2B, chi, pi9 ) );
1231415551158441760500
  1070010661331410110051121419
  6650003671100172209001281
  231118723182718127222921346227
  22183331910341212151728343472026
  4015253409634251821302118431245
  3949385118326319424133486427295238
  2919404731696965423568277320534638
  7529247250417268585254504464755869
  6549857575636865639087831181187471
  901091092369800710181622122300
  262819005161800000052112659
  7611181839778077222266272733202087
  6060103175148152187215140201 ]

##
gap> constit:= [ pi1, pi2, pi3, pi4, pi5, pi6, pi7, pi8, pi9 ];;
gap> pi:= Sum( constit );;

##
gap> sizeM:= pi[1] * Size( table2B );
808017424794512875886459904961710757005754368000000000
gap> StringPP( sizeM );
"2^46*3^20*5^9*7^6*11^2*13^3*17*19*23*29*31*41*47*59*71"
gap> sizeM = Size( CharacterTable( "M" ) );
true

##
gap> head:= rec( Size:= sizeM,
>                SizesCentralizers:= [ sizeM ],
>                OrdersClassRepresentatives:= [ 1 ],
>                fusions:= [],
>              );;

##
gap> ExtendTableHeadByRootClasses:= function( head, s, pos )
>    local fus, orders, p, cents, oldnumber, i, ord;

>    # Initialize the fusion information.
>    fus:= rec( subtable:= s, map:= [ 1 ] );
>    Add( head.fusions, fus );

>    # Compute the positions of root classes of 'pos'.
>    orders:= OrdersClassRepresentatives( s );
>    p:= orders[ pos ];
>    cents:= SizesCentralizers( s );
>    oldnumber:= Length( head.OrdersClassRepresentatives );

>    # Run over the classes of 's'
>    # are already contained in head
>    for i in [ 1 .. NrConjugacyClasses( s ) ] do
>      ord:= orders[i];
>      if ord mod p = 0 and
>         Minimum( PrimeDivisors( ord ) ) = p and
>         PowerMap( s, ord / p, i ) = pos then
>        # Class 'i' is a root class of 'pos' and is new in 'head'.
>        Add( head.SizesCentralizers, cents[i] );
>        Add( head.OrdersClassRepresentatives, orders[i] );
>        fus.map[i]:= Length( head.SizesCentralizers );
>      fi;
>    od;

>    Print( "#I  after ", Identifier( s ), ": found ",
>           Length( head.OrdersClassRepresentatives ) - oldnumber,
>           " classes, now have ",
>           Length( head.OrdersClassRepresentatives ), "\n" );
>    end;;

##
gap> ExtendTableHeadByCentralizerOrder:= function( head, s, cent, poss )
>    local ord, fus, i;

>    if IsCharacterTable( s ) then
>      ord:= Set( OrdersClassRepresentatives( s ){ poss } );
>      if Length( ord ) <> 1 then
>        Error( "classes cannot fuse" );
>      fi;
>      ord:= ord[1];
>    elif IsInt( s ) then
>      ord:= s;
>    fi;
>    Add( head.SizesCentralizers, cent );
>    Add( head.OrdersClassRepresentatives, ord );

>    Print( "#I  after order ", ord, " element" );
>    if IsCharacterTable( s ) then
>      # extend the stored fusion from s
>      fus:= First( head.fusions,
>                   r -> Identifier( r.subtable ) = Identifier( s ) );
>      for i in poss do
>        fus.map[i]:= Length( head.SizesCentralizers );
>      od;
>      Print( " from ", Identifier( s ) );
>    fi;
>    Print( ": have ",
>           Length( head.OrdersClassRepresentatives ), " classes\n" );
>    end;;

##
gap> ExtendTableHeadByPermCharValue:= function( head, s, pi_rest_to_s, poss )
>    local pival, cent;

>    pival:= Set( pi_rest_to_s{ poss } );
>    if Length( pival ) <> 1 then
>      Error( "classes cannot fuse" );
>    fi;

>    cent:= pival[1] * Size( s ) / Sum( SizesConjugacyClasses( s ){ poss } );
>    ExtendTableHeadByCentralizerOrder( head, s, cent, poss );
>    end;;

##
gap> s:= CharacterTable( "2.B" );;
gap> ClassPositionsOfCentre( s );
12 ]
gap> ExtendTableHeadByRootClasses( head, s, 2 );
#I  after 2.B: found 42 classes, now have 43
gap> s:= CharacterTable( "MN2B" );;
gap> ClassPositionsOfCentre( s );
12 ]
gap> ExtendTableHeadByRootClasses( head, s, 2 );
#I  after 2^1+24.Co1: found 91 classes, now have 134

##
gap> s:= CharacterTable( "3.Fi24" );;
gap> ClassPositionsOfPCore( s, 3 );
12 ]
gap> ExtendTableHeadByRootClasses( head, s, 2 );
#I  after 3.F3+.2: found 12 classes, now have 146
gap> s:= CharacterTableDirectProduct( CharacterTable( "Th" ),
>                                     CharacterTable( "Symmetric", 3 ) );;
gap> ClassPositionsOfPCore( s, 3 );
13 ]
gap> ExtendTableHeadByRootClasses( head, s, 3 );
#I  after ThxSym(3): found 7 classes, now have 153

##
gap> exts:= CharacterTable( "3^(1+12):6.Suz.2" );;
gap> kernels:= Positions( SizesConjugacyClasses( exts ), 2 );
2181920 ]
gap> order3_13:= Filtered( ClassPositionsOfNormalSubgroups( exts ),
>        l -> Sum( SizesConjugacyClasses( exts ){ l } ) = 3^13 );
[ [ 1 .. 4 ] ]
gap> kernels:= Difference( kernels, order3_13[1] );
181920 ]

##
gap> facts:= List( kernels, i -> exts / [ 1, i ] );
[ CharacterTable( "3^(1+12):6.Suz.2/[ 118 ]" ), 
  CharacterTable( "3^(1+12):6.Suz.2/[ 119 ]" ), 
  CharacterTable( "3^(1+12):6.Suz.2/[ 120 ]" ) ]
gap> f:= CharacterTable( "2.Suz.2" );;
gap> facts:= Filtered( facts,
>        x -> Length( PossibleClassFusions( f, x ) ) = 0 );
[ CharacterTable( "3^(1+12):6.Suz.2/[ 119 ]" ), 
  CharacterTable( "3^(1+12):6.Suz.2/[ 120 ]" ) ]

##
gap> kernels:= List( facts,
>        f -> Positions( SizesConjugacyClasses( f ), 2 ) );
[ [ 2 ], [ 2 ] ]
gap> head2:= StructuralCopy( head );;
gap> ExtendTableHeadByRootClasses( head, facts[1], 2 );
#I  after 3^(1+12):6.Suz.2/[ 119 ]: found 12 classes, now have 165
gap> ExtendTableHeadByRootClasses( head2, facts[2], 2 );
#I  after 3^(1+12):6.Suz.2/[ 120 ]: found 12 classes, now have 165

##
gap> nams:= RecNames( head );
[ "Size", "OrdersClassRepresentatives", "SizesCentralizers", 
  "fusions" ]
gap> ForAll( Difference( nams, [ "fusions" ] ),
>            nam -> head.( nam ) = head2.( nam ) );
true
gap> Length( head.fusions );
5
gap> ForAll( [ 1 .. 4 ], i -> head.fusions[i] = head2.fusions[i] );
true
gap> head.fusions[5].map = head2.fusions[5].map;
true

##
gap> s:= CharacterTable( "2.B" );;
gap> pos:= Positions( OrdersClassRepresentatives( s ), 5 );
2325 ]
gap> pi{ pos };
15390007875 ]

##
gap> cents:= List( pos,
>      i -> pi[i] * Size( s ) / SizesConjugacyClasses( s )[i] );
136515456000000094500000000 ]
gap> cents = [ 5 * Size( CharacterTable( "HN" ) ),
>              5^7 * Size( CharacterTable( "2.J2" ) ) ];
true

##
gap> s:= CharacterTable( "MN5A" );
CharacterTable( "(D10xHN).2" )
gap> ClassPositionsOfPCore( s, 5 );
145 ]
gap> ExtendTableHeadByRootClasses( head, s, 45 );
#I  after (D10xHN).2: found 5 classes, now have 170

##
gap> s:= CharacterTable( "MN5B" );
CharacterTable( "5^(1+6):2.J2.4" )
gap> 5core:= ClassPositionsOfPCore( s, 5 );
1 .. 4 ]
gap> SizesConjugacyClasses( s ){ 5core };
143780040320 ]
gap> ExtendTableHeadByRootClasses( head, s, 2 );
#I  after 5^(1+6):2.J2.4: found 3 classes, now have 173

##
gap> s:= CharacterTable( "2.B" );;
gap> pos:= Positions( OrdersClassRepresentatives( s ), 11 );
71 ]

##
gap> ExtendTableHeadByPermCharValue( head, s, pi, pos );
#I  after order 11 element from 2.B: have 174 classes

##
gap> s:= CharacterTable( "2.B" );;
gap> pos:= Positions( OrdersClassRepresentatives( s ), 17 );
118 ]
gap> ExtendTableHeadByPermCharValue( head, s, pi, pos );
#I  after order 17 element from 2.B: have 175 classes
gap> pos:= Positions( OrdersClassRepresentatives( s ), 19 );
128 ]
gap> ExtendTableHeadByPermCharValue( head, s, pi, pos );
#I  after order 19 element from 2.B: have 176 classes

##
gap> s:= CharacterTable( "2.B" );
CharacterTable( "2.B" )
gap> ord:= OrdersClassRepresentatives( s );;
gap> classes:= SizesConjugacyClasses( s );;
gap> p:= 23;;
gap> pos:= Positions( ord, p );
147149 ]
gap> n:= (p-1)/2 * Size( s ) * pi[ pos[1] ] / classes[ pos[1] ];
6072
gap> Collected( Factors( n ) );
[ [ 23 ], [ 31 ], [ 111 ], [ 231 ] ]

##
gap> u:= CharacterTable( "MN2B" );
CharacterTable( "2^1+24.Co1" )
gap> upos:= Positions( OrdersClassRepresentatives( u ), p );
289294 ]
gap> SizesCentralizers( u ){ upos } / 2^3;
2323 ]

##
gap> ExtendTableHeadByPermCharValue( head, s, pi, pos{ [1] } );
#I  after order 23 element from 2.B: have 177 classes
gap> ExtendTableHeadByPermCharValue( head, s, pi, pos{ [2] } );
#I  after order 23 element from 2.B: have 178 classes

##
gap> p:= 31;;
gap> pos:= Positions( OrdersClassRepresentatives( s ), p );
190192 ]
gap> n:= (p-1)/2 * Size( s ) * pi[ pos[1] ] / classes[ pos[1] ];
2790
gap> Collected( Factors( n ) );
[ [ 21 ], [ 32 ], [ 51 ], [ 311 ] ]
gap> SizesCentralizers( s ){ pos };
6262 ]
gap> ExtendTableHeadByPermCharValue( head, s, pi, pos{ [1] } );
#I  after order 31 element from 2.B: have 179 classes
gap> ExtendTableHeadByPermCharValue( head, s, pi, pos{ [2] } );
#I  after order 31 element from 2.B: have 180 classes

##
gap> p:= 47;;
gap> pos:= Positions( OrdersClassRepresentatives( s ), p );
228230 ]
gap> n:= (p-1)/2 * Size( s ) * pi[ pos[1] ] / classes[ pos[1] ];
2162
gap> Collected( Factors( n ) );
[ [ 21 ], [ 231 ], [ 471 ] ]
gap> SizesCentralizers( s ){ pos };
9494 ]
gap> ExtendTableHeadByPermCharValue( head, s, pi, pos{ [1] } );
#I  after order 47 element from 2.B: have 181 classes
gap> ExtendTableHeadByPermCharValue( head, s, pi, pos{ [2] } );
#I  after order 47 element from 2.B: have 182 classes

##
gap> p:= 13;;
gap> pos:= Positions( OrdersClassRepresentatives( s ), p );
97 ]
gap> c:= Size( s ) * pi[ pos[1] ] / classes[ pos[1] ];
73008
gap> Factors( c );
22223331313 ]
gap> ExtendTableHeadByPermCharValue( head, s, pi, pos );
#I  after order 13 element from 2.B: have 183 classes

##
gap> c2b:= CharacterTable( "MN2B" );;
gap> pos:= Positions( OrdersClassRepresentatives( c2b ), 13 );
220 ]
gap> ExtendTableHeadByCentralizerOrder( head, c2b, 13^3 * 24, pos );
#I  after order 13 element from 2^1+24.Co1: have 184 classes

##
gap> u:= CharacterTable( "3.Fi24" );;
gap> pos:= Positions( OrdersClassRepresentatives( u ), 29 );
142 ]
gap> SizesCentralizers( u ){ pos };
87 ]

##
gap> poss:= PositionsProperty( head.SizesCentralizers,
>                              x -> x mod 29 = 0 );
1135144145 ]
gap> head.OrdersClassRepresentatives{ poss };
138787 ]
gap> head.SizesCentralizers{ poss };
808017424794512875886459904961710757005754368000000000
  37656171275719851638784008787 ]

##
gap> candprimes:= Difference( PrimeDivisors( head.Size ),
>                     [ 2351113171923293147 ] );
7415971 ]

##
gap> parts:= Filtered( Collected( Factors( head.Size ) ),
>                      x -> x[1] in candprimes );
[ [ 76 ], [ 411 ], [ 591 ], [ 711 ] ]
gap> poss:= List( parts, l -> List( [ 0 .. l[2] ], i -> l[1]^i ) );;
gap> cart:= Cartesian( poss );;
gap> possord:= 3 * 29 * List( cart, Product );;

##
gap> good:= Filtered( possord,
>                     x -> ( head.Size / ( 28 * x ) ) mod 29 = 1 );
875133 ]
gap> List( good, Factors );
[ [ 329 ], [ 32959 ] ]

##
gap> Filtered( DivisorsInt( 5133 ), x -> x mod 59 = 1 );
1 ]

##
gap> ExtendTableHeadByCentralizerOrder( head, u, 3 * 29, pos );
#I  after order 29 element from 3.F3+.2: have 185 classes

##
gap> t:= CharacterTable( "O8-(3)" );
CharacterTable( "O8-(3)" )
gap> Length( Positions( OrdersClassRepresentatives( t ), 41 ) );
10

##
gap> possord:= 2^2 * 41 * DivisorsInt( 2 * 5 * 7^6 * 59 * 71 );;
gap> good:= Filtered( possord,
>                     x -> ( head.Size / x ) mod 41 = 1 );
1640163016 ]
gap> List( good, Factors );
[ [ 222541 ], [ 22274171 ] ]

##
gap> Filtered( DivisorsInt( good[2] ), x -> x mod 71 = 1 );
1 ]

##
gap> ExtendTableHeadByCentralizerOrder( head, 4141, fail );
#I  after order 41 element: have 186 classes

##
gap> possord:= 59 * DivisorsInt( 58*7^6*71 );;
gap> good:= Filtered( possord,
>                     x -> ( head.Size / x ) mod 59 = 1 );
1711 ]
gap> List( good, Factors );
[ [ 2959 ] ]

##
gap> ExtendTableHeadByCentralizerOrder( head, 5959, fail );
#I  after order 59 element: have 187 classes
gap> ExtendTableHeadByCentralizerOrder( head, 5959, fail );
#I  after order 59 element: have 188 classes

##
gap> possord:= 71 * DivisorsInt( 70*7^5 );;
gap> good:= Filtered( possord,
>                     x -> ( head.Size / x ) mod 71 = 1 );
2485 ]
gap> List( good, Factors );
[ [ 5771 ] ]

##
gap> ExtendTableHeadByCentralizerOrder( head, 7171, fail );
#I  after order 71 element: have 189 classes
gap> ExtendTableHeadByCentralizerOrder( head, 7171, fail );
#I  after order 71 element: have 190 classes

##
gap> s:= CharacterTable( "2.B" );;
gap> pos:= Positions( OrdersClassRepresentatives( s ), 7 );
41 ]
gap> ExtendTableHeadByPermCharValue( head, s, pi, pos );
#I  after order 7 element from 2.B: have 191 classes
gap> Last( head.SizesCentralizers ) = 7 * Size( CharacterTable( "He" ) );
true

##
gap> ExtendTableHeadByCentralizerOrder( head, 119119, fail );
#I  after order 119 element: have 192 classes
gap> ExtendTableHeadByCentralizerOrder( head, 119119, fail );
#I  after order 119 element: have 193 classes

##
gap> u:= CharacterTable( "3.Fi24" );;
gap> cand:= Filtered( Irr( u ), x -> x[1] <= 196883 );;
gap> rest:= Sum( cand{ [ 14578 ] } );;
gap> pos:= Positions( OrdersClassRepresentatives( u ), 7 );
4143 ]
gap> rest{ pos };
501 ]

##
gap> ExtendTableHeadByCentralizerOrder( head, u, 7^5 * Factorial(7), [ 43 ] );
#I  after order 7 element from 3.F3+.2: have 194 classes

##
gap> Sum( head.SizesCentralizers, x -> head.Size / x ) = head.Size;
true

##
gap> m:= ConvertToCharacterTableNC( rec(
>      UnderlyingCharacteristic:= 0,
>      Size:= head.Size,
>      SizesCentralizers:= head.SizesCentralizers,
>      OrdersClassRepresentatives:= head.OrdersClassRepresentatives,
>    ) );;

##
gap> safe_fusions:= Filtered( head.fusions,
>        r -> not IsIdenticalObj( r.subtable, facts[1] ) );;
gap> Length( safe_fusions );
6

##
gap> for r in safe_fusions do
>      fus:= InitFusion( r.subtable, m );
>      for i in [ 1 .. Length( r.map ) ] do
>        if IsBound( r.map[i] ) then
>          if IsInt( fus[i] ) then
>            if fus[i] <> r.map[i] then
>              Error( "fusion problem" );
>            fi;
>          elif IsInt( r.map[i] ) then
>            if not r.map[i] in fus[i] then
>              Error( "fusion problem" );
>            fi;
>          else
>            if not IsSubset( fus[i], r.map[i] ) then
>              Error( "fusion problem" );
>            fi;
>          fi;
>          fus[i]:= r.map[i];
>        fi;
>      od;
>      r.fus:= fus;
>    od;

##
gap> maxorder:= Maximum( head.OrdersClassRepresentatives );
119
gap> powermaps:= [];;
gap> primes:= Filtered( [ 1 .. maxorder ], IsPrimeInt );;
gap> for p in primes do
>      powermaps[p]:= InitPowerMap( m, p );
>      for r in safe_fusions do
>        subpowermap:= PowerMap( r.subtable, p );
>        if TransferDiagram( subpowermap, r.fus, powermaps[p] ) = fail then
>          Error( "inconsistency" );
>        fi;
>      od;
>    od;

##
gap> found:= true;;
gap> res:= "dummy";;  # avoid a syntax warning
gap> while found do
>      Print( "#I  start a round\n" );
>      found:= false;
>      for p in primes do
>        for r in safe_fusions do
>          subpowermap:= PowerMap( r.subtable, p );
>          res:= TransferDiagram( subpowermap, r.fus, powermaps[p] );
>          if res = fail then
>            Error( "inconsistency" );
>          elif ForAny( RecNames( res ), nam -> res.( nam ) <> [] ) then
>            found:= true;
>          fi;
>        od;
>      od;
>    od;
#I  start a round
#I  start a round
#I  start a round
#I  start a round

##
gap> pos:= PositionsProperty( powermaps[5], IsList );
157158163164187188189190192193 ]
gap> head.OrdersClassRepresentatives{ pos };
1515393959597171119119 ]

##
gap> u:= CharacterTable( "(7:3xHe):2" );;
gap> ConstructionInfoCharacterTable( u );
[ "ConstructIndexTwoSubdirectProduct", "7:3", "7:6", "He", "He.2", 
  [ 117118119120121122123124125126127128129
      130131132133134135207208209210211212
      213214215216217218219220221222223224
      225297298299300301302303304305306307
      308309310311312313314315 ], (), () ]
gap> pos:= Positions( OrdersClassRepresentatives( u ), 119 );
5253 ]
gap> f:= Field( Rationals, List( Irr( u ), x -> x[pos[1]] ) );;
gap> Sqrt(-119) in f;
true

##
gap> for l in [ 5971119 ] do
>      val:= Sqrt( -l );
>      poss:= Positions( head.OrdersClassRepresentatives, l );
>      for p in primes do
>        if Gcd( l, p ) = 1 then
>          if GaloisCyc( val, p ) = val then
>            powermaps[p]{ poss }:= poss;
>          else
>            powermaps[p]{ poss }:= Reversed( poss );
>          fi;
>        fi;
>      od;
>    od;

##
gap> PositionsProperty( powermaps[17], IsList );
163164 ]
gap> head.OrdersClassRepresentatives{ [ 163164 ] };
3939 ]
gap> List( Filtered( head.fusions,
>                    r -> IsSubset( r.map, [ 163164 ] ) ),
>          r -> r.subtable );
[ CharacterTable( "3^(1+12):6.Suz.2/[ 119 ]" ) ]

##
gap> 78pos:= Positions( head.OrdersClassRepresentatives, 78 );
37132133 ]
gap> head.fusions[1].subtable;
CharacterTable( "2.B" )
gap> Intersection( 78pos, head.fusions[1].map );
37 ]
gap> s:= head.fusions[2].subtable;
CharacterTable( "2^1+24.Co1" )
gap> Intersection( 78pos, head.fusions[2].map );
132133 ]
gap> Positions( head.fusions[2].map, 132 );
342 ]
gap> Positions( head.fusions[2].map, 133 );
344 ]
gap> PowerMap( s, 7 )[342];
344

##
gap> poss:= Filtered( head.fusions, r -> IsSubset( r.map, [ 163164 ] ) );;
gap> List( poss, r -> r.subtable );
[ CharacterTable( "3^(1+12):6.Suz.2/[ 119 ]" ) ]
gap> Position( poss[1].map, 163 );
173
gap> Position( poss[1].map, 164 );
174
gap> List( facts, s -> Positions( OrdersClassRepresentatives( s ), 39 ) );
[ [ 173174 ], [ 173174 ] ]
gap> List( facts, s -> PowerMap( s, 7 )[173] );
174174 ]

##
gap> fields:= List( facts,
>                   s -> Field( Rationals, List( Irr( s ),
>                                                x -> x[173] ) ) );;
gap> Length( Set( fields ) );
1
gap> Sqrt(-39) in fields[1];
true

##
gap> val:= Sqrt( -39 );;
gap> poss:= [ 163164 ];;
gap> for p in primes do
>      if Gcd( 39, p ) = 1 then
>        if GaloisCyc( val, p ) = val then
>          powermaps[p]{ poss }:= poss;
>        else
>          powermaps[p]{ poss }:= Reversed( poss );
>        fi;
>      fi;
>    od;
gap> List( powermaps, Indeterminateness );
[ , 20481536,, 4,, 2,,,, 2,, 9,,,, 1,, 1,,,, 1,,,,,, 1,, 1,,,,,, 1,,
  ,, 1,, 1,,,, 1,,,,,, 1,,,,,, 1,, 1,,,,,, 1,,,, 1,, 1,,,,,, 1,,,, 1,,
  ,,,, 1,,,,,,,, 1,,,, 1,, 1,,,, 1,, 1,,,, 1 ]

##
gap> r:= First( head.fusions, r -> IsIdenticalObj( r.subtable, facts[1] ) );;
gap> fus:= InitFusion( r.subtable, m );;
gap> for i in [ 1 .. Length( r.map ) ] do
>      if IsBound( r.map[i] ) then
>        if IsInt( fus[i] ) then
>          if fus[i] <> r.map[i] then
>            Error( "fusion problem" );
>          fi;
>        elif IsInt( r.map[i] ) then
>          if not r.map[i] in fus[i] then
>            Error( "fusion problem" );
>          fi;
>        else
>          if not IsSubset( fus[i], r.map[i] ) then
>            Error( "fusion problem" );
>          fi;
>        fi;
>        fus[i]:= r.map[i];
>      fi;
>    od;
gap> r.fus:= fus;;

##
gap> r2:= First( head2.fusions, r -> IsIdenticalObj( r.subtable, facts[2] ) );;
gap> fus2:= InitFusion( r2.subtable, m );;
gap> for i in [ 1 .. Length( r2.map ) ] do 
>      if IsBound( r2.map[i] ) then
>        if IsInt( fus2[i] ) then
>          if fus2[i] <> r2.map[i] then
>            Error( "fusion problem" );
>          fi;
>        elif IsInt( r2.map[i] ) then
>          if not r2.map[i] in fus2[i] then
>            Error( "fusion problem" );
>          fi;
>        else
>          if not IsSubset( fus2[i], r2.map[i] ) then
>            Error( "fusion problem" );
>          fi;
>        fi;
>        fus2[i]:= r2.map[i];
>      fi;
>    od;
gap> r2.fus:= fus2;;

##
gap> powermaps2:= StructuralCopy( powermaps );;
gap> s:= r.subtable;
CharacterTable( "3^(1+12):6.Suz.2/[ 119 ]" )
gap> for p in primes do
>      if TransferDiagram( PowerMap( s, p ), fus, powermaps[p] ) = fail then
>        Error( "inconsistency" );
>      fi;
>    od;
gap> s2:= r2.subtable;
CharacterTable( "3^(1+12):6.Suz.2/[ 120 ]" )
gap> for p in primes do
>      if TransferDiagram( PowerMap( s2, p ), fus2, powermaps2[p] ) = fail then
>        Error( "inconsistency" );
>      fi;
>    od;
gap> powermaps = powermaps2;
true
gap> List( powermaps, Indeterminateness );
[ , 3264,, 1,, 1,,,, 1,, 1,,,, 1,, 1,,,, 1,,,,,, 1,, 1,,,,,, 1,,,, 
  1,, 1,,,, 1,,,,,, 1,,,,,, 1,, 1,,,,,, 1,,,, 1,, 1,,,,,, 1,,,, 1,,,,,
  , 1,,,,,,,, 1,,,, 1,, 1,,,, 1,, 1,,,, 1 ]

##
gap> powermaps[2]{ [ 132133 ] };
[ [ 163164 ], [ 163164 ] ]
gap> pos78:= List( facts,
>                  s -> Positions( OrdersClassRepresentatives( s ), 78 ) );
[ [ 235236 ], [ 235236 ] ]
gap> fus{ [ 235236 ] };
[ [ 132133 ], [ 132133 ] ]
gap> fus2{ [ 235236 ] };
[ [ 132133 ], [ 132133 ] ]

##
gap> fus[235]:= 132;;
gap> fus2[235]:= 132;;
gap> TransferDiagram( PowerMap( s, 2 ), fus, powermaps[2] ) <> fail;
true
gap> TransferDiagram( PowerMap( s2, 2 ), fus2, powermaps2[2] ) <> fail;
true
gap> powermaps = powermaps2;
true
gap> List( powermaps{ [ 23 ] }, Indeterminateness );
864 ]

##
gap> powermaps[3]{ [ 163164 ] };
[ [ 183184 ], [ 183184 ] ]
gap> TransferDiagram( powermaps[2], powermaps[3], powermaps[2] ) <> fail;
true
gap> List( powermaps{ [ 23 ] }, Indeterminateness );
816 ]

##
gap> poss:= Filtered( head.fusions,
>                     r -> 93 in OrdersClassRepresentatives( r.subtable ) );;
gap> List( poss, r -> r.subtable );
[ CharacterTable( "ThxSym(3)" ) ]
gap> pos93:= Positions( head.OrdersClassRepresentatives, 93 );
152153 ]
gap> powermaps[3]{ pos93 };
[ [ 179180 ], [ 179180 ] ]
gap> powermaps[3][152]:= 179;;
gap> TransferDiagram( PowerMap( poss[1].subtable, 3 ), poss[1].fus,
>                     powermaps[3] ) <> fail;
true
gap> List( powermaps{ [ 23 ] }, Indeterminateness );
84 ]

##
gap> poss:= Filtered( head.fusions, 
>                     r -> 69 in OrdersClassRepresentatives( r.subtable ) );;
gap> List( poss, r -> r.subtable );
[ CharacterTable( "3.F3+.2" ) ]
gap> pos69:= Positions( head.OrdersClassRepresentatives, 69 );
142143 ]
gap> powermaps[3]{ pos69 };
[ [ 177178 ], [ 177178 ] ]
gap> powermaps[3]{ [ 142143 ] }:= [ 177178 ];;
gap> TransferDiagram( PowerMap( poss[1].subtable, 3 ), poss[1].fus,
>                     powermaps[3] ) <> fail;
true
gap> List( powermaps{ [ 23 ] }, Indeterminateness );
81 ]

##
gap> pos46:= Positions( head.OrdersClassRepresentatives, 46 );
2627118120 ]
gap> powermaps[2]{ pos46 };
177178, [ 177178 ], [ 177178 ] ]
gap> powermaps[23]{ pos46 };
224444 ]

##
gap> powermaps[2]{ [ 118120 ] }:= [ 177178 ];;
gap> Indeterminateness ( powermaps[2] );
2

##
gap> powermaps[2][78];
155156 ]
gap> head.OrdersClassRepresentatives[78];
18
gap> head.SizesCentralizers[78];
3888

##
gap> Filtered( [ 1 .. Length( head.OrdersClassRepresentatives ) ],
>              i -> head.OrdersClassRepresentatives[i] = 18 and
>                   head.SizesCentralizers[i] = 3888 );
7879 ]
gap> powermaps[3]{ [ 7879 ] };
5252 ]
gap> powermaps[2][52];
154
gap> First( head.fusions, r -> 154 in r.map ).subtable;
CharacterTable( "3^(1+12):6.Suz.2/[ 119 ]" )
gap> s:= facts[1];
CharacterTable( "3^(1+12):6.Suz.2/[ 119 ]" )
gap> pos18:= Filtered( [ 1 .. NrConjugacyClasses( s ) ],
>                i -> OrdersClassRepresentatives( s )[i] = 18 and
>                     SizesCentralizers( s )[i] = 3888 );
6783 ]
gap> PowerMap( s, 2 ){ pos18 };
2424 ]
gap> s:= facts[2];
CharacterTable( "3^(1+12):6.Suz.2/[ 120 ]" )
gap> pos18:= Filtered( [ 1 .. NrConjugacyClasses( s ) ],
>                i -> OrdersClassRepresentatives( s )[i] = 18 and
>                     SizesCentralizers( s )[i] = 3888 );
6783 ]
gap> PowerMap( s, 2 ){ pos18 };
2424 ]

##
gap> powermaps[2][78]:= powermaps[2][79];;
gap> for r in safe_fusions do
>      if not TestConsistencyMaps( ComputedPowerMaps( r.subtable ), r.fus,
>                                  powermaps ) then
>        Error( "inconsistent!" );
>      fi;
>    od;
gap> r:= First( head.fusions, r -> IsIdenticalObj( r.subtable, facts[1] ) );;
gap> TestConsistencyMaps( ComputedPowerMaps( r.subtable ), r.fus,
>                         powermaps );
true
gap> r2:= First( head2.fusions, r -> IsIdenticalObj( r.subtable, facts[2] ) );;
gap> TestConsistencyMaps( ComputedPowerMaps( r2.subtable ), r2.fus,
>                         powermaps );
true
gap> SetComputedPowerMaps( m, powermaps );

##
gap> r:= head.fusions[1];;
gap> s:= r.subtable;
CharacterTable( "2.B" )
gap> cand:= Filtered( Irr( s ), x -> x[1] <= 196883 );;
gap> List( cand, x -> x[1] );
143719625596256 ]
gap> rest:= Sum( cand );;
gap> rest[1];
196883

##
gap> chi:= [];;
gap> map:= r.fus;;
gap> for i in [ 1 .. Length( map ) ] do
>      if IsInt( map[i] ) then
>        chi[ map[i] ]:= rest[i];
>      fi;
>    od;
gap> Number( chi );
111

##
gap> r:= head.fusions[3];;
gap> s:= r.subtable;
CharacterTable( "3.F3+.2" )
gap> cand:= Filtered( Irr( s ), x -> x[1] <= 196883 );;
gap> rest:= Sum( cand{ [ 14578 ] } );;
gap> rest[1];
196883
gap> map:= r.fus;;
gap> for i in [ 1 .. Length( map ) ] do
>      if IsInt( map[i] ) then
>        if IsBound( chi[ map[i] ] ) and chi[ map[i] ] <> rest[i] then
>          Error( "inconsistency!" );
>        fi;
>        chi[ map[i] ]:= rest[i];
>      fi;
>    od;
gap> Number( chi );
140

##
gap> r:= head.fusions[2];;
gap> s:= r.subtable;
CharacterTable( "2^1+24.Co1" )
gap> cand:= Filtered( Irr( s ), x -> x[1] <= chi[1] );;
gap> map:= r.fus;;
gap> knownpos:= Filtered( [ 1 .. Length( map ) ],
>                      i -> IsInt( map[i] ) and IsBound( chi[ map[i] ] ) );;
gap> rest:= List( knownpos, i -> chi[ map[i] ] );;
gap> mat:= List( cand, x -> x{ knownpos } );;
gap> Length( mat );
13
gap> RankMat( mat );
13
gap> sol:= SolutionMat( mat, rest );
0010000000011 ]
gap> rest:= sol * cand;;
gap> for i in [ 1 .. Length( map ) ] do
>      if IsInt( map[i] ) then chi[ map[i] ]:= rest[i]; fi;
>    od;
gap> Number( chi );
181

##
gap> missing:= Filtered( [ 1..194 ], i -> not IsBound( chi[i] ) );
151152153160169170186187188189190192193 ]
gap> head.OrdersClassRepresentatives{ missing };
5793932795954159597171119119 ]
gap> head.SizesCentralizers{ missing };
57939324395954159597171119119 ]

##
gap> for i in missing do
>      ord:= head.OrdersClassRepresentatives[i];
>      divs:= PrimeDivisors( ord );
>      if ForAll( divs, p -> IsBound( chi[ powermaps[p][i] ] ) ) then
>        congr:= List( divs, p -> chi[ powermaps[p][i] ] mod p );
>        res:= ChineseRem( divs, congr );
>        modulus:= Lcm( divs );
>        c:= head.SizesCentralizers[i];
>        Print( "#I  |g| = ", head.OrdersClassRepresentatives[i],
>               ", |C_M(g)| = ", c,
>               ": value ", res, " modulo ", modulus, "\n" );
>        if ( res + 2 * modulus )^2 >= c and ( res - 2 * modulus )^2 >= c then
>          cand:= Filtered( res + [ -1 .. 1 ] * modulus, a -> a^2 < c );
>          if Length( cand ) = 1 then
>            chi[i]:= cand[1];
>          fi;
>        fi;
>      fi;
>    od;
#I  |g| = 57, |C_M(g)| = 57: value 56 modulo 57
#I  |g| = 93, |C_M(g)| = 93: value 92 modulo 93
#I  |g| = 93, |C_M(g)| = 93: value 92 modulo 93
#I  |g| = 27, |C_M(g)| = 243: value 2 modulo 3
#I  |g| = 95, |C_M(g)| = 95: value 0 modulo 95
#I  |g| = 95, |C_M(g)| = 95: value 0 modulo 95
#I  |g| = 41, |C_M(g)| = 41: value 1 modulo 41
#I  |g| = 59, |C_M(g)| = 59: value 0 modulo 59
#I  |g| = 59, |C_M(g)| = 59: value 0 modulo 59
#I  |g| = 71, |C_M(g)| = 71: value 0 modulo 71
#I  |g| = 71, |C_M(g)| = 71: value 0 modulo 71
#I  |g| = 119, |C_M(g)| = 119: value 118 modulo 119
#I  |g| = 119, |C_M(g)| = 119: value 118 modulo 119
gap> missing:= Filtered( [ 1..194 ], i -> not IsBound( chi[i] ) );
160 ]

##
gap> diff:= Difference( [ 1 .. NrConjugacyClasses( m ) ], missing );;
gap> classes:= SizesConjugacyClasses( m );;
gap> sum:= Sum( diff, i -> classes[i] * chi[i] );
-6650349175263480459970863415322722279882752000000000
gap> chi[ missing[1] ]:= - sum / classes[ missing[1] ];
2

##
gap> r:= First( head.fusions, r -> IsIdenticalObj( r.subtable, facts[1] ) );;
gap> map:= r.fus;;
gap> knownpos:= Filtered( [ 1 .. Length( map ) ], i -> IsInt( map[i] ) );;
gap> rest:= List( knownpos, i -> chi[ map[i] ] );;
gap> cand:= Filtered( Irr( r.subtable ), x -> x[1] <= chi[1] );;
gap> mat:= List( cand, x -> x{ knownpos } );;
gap> Length( mat );
95
gap> RankMat( mat );
88
gap> SolutionMat( mat, rest );
fail

##
gap> r2:= First( head2.fusions, r -> IsIdenticalObj( r.subtable, facts[2] ) );;
gap> map:= r2.fus;;
gap> knownpos:= Filtered( [ 1 .. Length( map ) ], i -> IsInt( map[i] ) );;
gap> rest:= List( knownpos, i -> chi[ map[i] ] );;
gap> cand:= Filtered( Irr( r2.subtable ), x -> x[1] <= chi[1] );;
gap> mat:= List( cand, x -> x{ knownpos } );;
gap> Length( mat );
95
gap> RankMat( mat );
88
gap> SolutionMat( mat, rest );
0001000000000000000000
  0000000000000000000000
  0000000000000000000000
  0000000000000000000000
  0001110 ]
gap> Add( safe_fusions, r2 );

##
gap> TransformingPermutationsCharacterTables( r2.subtable,
>        CharacterTable( "MN3B" ) ) <> fail;
true

##
gap> invs:= TransposedMat( [
>      OrdersClassRepresentatives( m ),
>      SizesCentralizers( m ),
>      chi,
>      CompositionMaps( chi, PowerMap( m, 2 ) ) ] );;
gap> invs_set:= Set( invs );;
gap> Length( invs_set );
172
gap> atlas_m:= CharacterTable( "M" );;
gap> invs_atlas:= TransposedMat( [
>      OrdersClassRepresentatives( atlas_m ),
>      SizesCentralizers( atlas_m ),
>      Irr( atlas_m )[2],
>      CompositionMaps( Irr( atlas_m )[2], PowerMap( atlas_m, 2 ) ) ] );;
gap> invs_atlas_set:= Set( invs_atlas );;
gap> invs_atlas_set = invs_set;
true

##
gap> pi1:= SortingPerm( invs );;
gap> pi2:= SortingPerm( invs_atlas );;
gap> pi:= pi2 / pi1 * (32,33)(179,180);;
gap> oracle:= List( Irr( atlas_m ), x -> Permuted( x, pi ) );;

##
gap> SetAutomorphismsOfTable( m, Group( () ) );

##
gap> r:= safe_fusions[1];;
gap> s:= r.subtable;
CharacterTable( "2.B" )
gap> pos:= [ 217218222223 ];;
gap> r.fus{ pos };
[ [ 110111 ], [ 110111 ], [ 8889 ], [ 8889 ] ]
gap> OrdersClassRepresentatives( s ){ pos };
40404444 ]

##
gap> r.fus[ PowerMap( s, 20 )[217] ];
44
gap> r2:= safe_fusions[2];;
gap> s2:= r2.subtable;
CharacterTable( "2^1+24.Co1" )
gap> Position( r2.map, 110 );
273
gap> ForAll( Irr( s2 ), x -> IsInt( x[273] ) );
false

##
gap> (217,218) in AutomorphismsOfTable( s );
true
gap> r.fus{ [ 217218 ] }:= [ 110111 ];;

##
gap> r.fus[ PowerMap( s, 22 )[ 222 ] ];
44
gap> Position( r2.map, 88 );
178
gap> ForAll( Irr( s2 ), x -> IsInt( x[178] ) );
false

##
gap> (143,144)(222,223)(244,245) in AutomorphismsOfTable( s );
true
gap> r.fus{ [ 143144244245 ] };
15153434 ]
gap> r.fus{ [ 222223 ] }:= [ 8889 ];;

##
gap> knownirr:= [ TrivialCharacter( m ), chi ];;
gap> poss:= PossibleClassFusions( s, m,
>               rec( chars:= knownirr, fusionmap:= r.fus ) );;
gap> List( poss, Indeterminateness );
1 ]

##
gap> induced:= InducedClassFunctionsByFusionMap( s, m, Irr( s ), poss[1] );;

##
gap> poss:= PossibleClassFusions( s2, m,
>               rec( chars:= Concatenation( knownirr, induced ),
>                    fusionmap:= r2.fus ) );;
gap> List( poss, Indeterminateness );
1111 ]
gap> Length( RepresentativesFusions( AutomorphismsOfTable( s2 ), poss,
>                Group( () ) ) );
1
gap> Append( induced,
>        InducedClassFunctionsByFusionMap( s2, m, Irr( s2 ), poss[1] ) );

##
gap> r:= safe_fusions[7];;
gap> s:= r.subtable;
CharacterTable( "3^(1+12):6.Suz.2/[ 120 ]" )
gap> pos:= Positions( OrdersClassRepresentatives( s ), 56 );
250251 ]
gap> r.fus{ pos };
[ [ 125126 ], [ 125126 ] ]
gap> r.fus[ PowerMap( s, 28 )[ 250 ] ];
44
gap> Position( r2.map, 125 );
319
gap> ForAll( Irr( s2 ), x -> IsInt( x[319] ) );
false
gap> (250251) in AutomorphismsOfTable( s );
true
gap> r.fus{ [ 250251 ] }:= [ 125126 ];;

##
gap> poss:= PossibleClassFusions( s, m,
>               rec( chars:= Concatenation( knownirr, induced ),
>                    fusionmap:= r.fus ) );;
gap> List( poss, Indeterminateness );
11 ]
gap> Length( RepresentativesFusions( AutomorphismsOfTable( s ), poss,
>                Group( () ) ) );
1
gap> Append( induced,
>        InducedClassFunctionsByFusionMap( s, m, Irr( s ), poss[1] ) );

##
gap> r:= safe_fusions[3];;
gap> s:= r.subtable;
CharacterTable( "3.F3+.2" )
gap> poss:= PossibleClassFusions( s, m,
>               rec( chars:= Concatenation( knownirr, induced ),
>                    fusionmap:= r.fus ) );;
gap> List( poss, Indeterminateness );
1 ]
gap> Append( induced,
>        InducedClassFunctionsByFusionMap( s, m, Irr( s ), poss[1] ) );

##
gap> Append( induced,
>      InducedCyclic( m, [ 2 .. NrConjugacyClasses( m ) ], "all" ) );

##
gap> red:= Reduced( m, knownirr, induced );;
gap> Length( red.irreducibles );
0
gap> lll:= LLL( m, red.remainders );;
gap> Length( lll.irreducibles );
4

##
gap> knownirr:= Union( knownirr, lll.irreducibles );;
gap> red:= Reduced( m, knownirr, induced );;
gap> Length( red.irreducibles );
0
gap> lll:= LLL( m, red.remainders );;
gap> Length( lll.irreducibles );
0

##
gap> mat:= MatScalarProducts( m, oracle, lll.remainders );;
gap> norm:= NormalFormIntMat( mat, 4 );;
gap> rowtrans:= norm.rowtrans;;
gap> normal:= norm.normal{ [ 1 .. norm.rank ] };;
gap> one:= IdentityMat( NrConjugacyClasses( m ) );;
gap> for i in [ 2 .. Length( one ) ] do
>      extmat:= Concatenation( normal, [ one[i] ] );
>      extlen:= Length( extmat );
>      extnorm:= NormalFormIntMat( extmat, 4 );
>      if extnorm.rank = Length( extnorm.normal ) or
>         extnorm.rowtrans[ extlen ][ extlen ] <> 1 then
>        coeffs:= fail;
>      else
>        coeffs:= - extnorm.rowtrans[ extlen ]{ [ 1 .. extnorm.rank ] }
>                   * rowtrans{ [ 1 .. extnorm.rank ] };
>      fi;
>      if coeffs <> fail and ForAll( coeffs, IsInt ) then
>        # The vector lies in the lattice.
>        chi:= coeffs * lll.remainders;
>        if not chi in knownirr then
>          Add( knownirr, chi );
>        fi;
>      fi;
>    od;
gap> Length( knownirr );
66
gap> Set( knownirr, chi -> ScalarProduct( m, chi, chi ) );
1 ]

##
gap> red:= Reduced( m, knownirr, lll.remainders );;
gap> Length( red.irreducibles );
0
gap> sym:= Symmetrizations( m, knownirr, 2 );;
gap> sym:= Reduced( m, knownirr, sym );;
gap> Length( sym.irreducibles );
0
gap> lll:= LLL( m, Concatenation( red.remainders, sym.remainders ) );;
gap> Length( lll.irreducibles );
0

##
gap> mat:= MatScalarProducts( m, oracle, lll.remainders );;
gap> norm:= NormalFormIntMat( mat, 4 );;
gap> rowtrans:= norm.rowtrans;;
gap> normal:= norm.normal{ [ 1 .. norm.rank ] };;
gap> one:= IdentityMat( NrConjugacyClasses( m ) );;
gap> for i in [ 2 .. Length( one ) ] do
>      extmat:= Concatenation( normal, [ one[i] ] );
>      extlen:= Length( extmat );
>      extnorm:= NormalFormIntMat( extmat, 4 );
>      if extnorm.rank = Length( extnorm.normal ) or
>         extnorm.rowtrans[ extlen ][ extlen ] <> 1 then
>        coeffs:= fail;
>      else
>        coeffs:= - extnorm.rowtrans[ extlen ]{ [ 1 .. extnorm.rank ] }
>                   * rowtrans{ [ 1 .. extnorm.rank ] };
>      fi;
>      if coeffs <> fail and ForAll( coeffs, IsInt ) then
>        Add( knownirr, coeffs * lll.remainders );
>      fi;
>    od;
gap> Length( knownirr );
194

##
gap> SetIrr( m, List( knownirr, x -> ClassFunction( m, x ) ) );
gap> ResetFilterObj( m, HasAutomorphismsOfTable );
gap> TransformingPermutationsCharacterTables( m, atlas_m ) <> fail;
true

##
gap> info:= OneAtlasGeneratingSetInfo( "3^(1+12):6.Suz.2", Dimension, 38 );;
gap> gens:= AtlasGenerators( info ).generators;;
gap> Length( gens );
4
gap> ForAll( gens,
>            m -> ForAll( [ 25 .. 38 ],
>                         i -> ForAll( [ 1 .. 24 ],
>                                      j -> IsZero( m[i,j] ) and
>                                           IsZero( m[i,j] ) ) ) );
true

##
gap> mats:= List( gens, x -> x{ [ 25 .. 38 ] }{ [ 25 .. 38 ] } );;
gap> List( mats, ConvertToMatrixRep );;
gap> Comm( mats[3], mats[3]^mats[2] ) = Inverse( mats[4] );
true
gap> mats:= mats{ [ 1 .. 3 ] };;

##
gap> G:= GroupWithGenerators( mats );;
gap> orbs:= ShallowCopy( OrbitsDomain( G, GF(3)^14 ) );;
gap> Length( orbs );
6
gap> SortBy( orbs, Length );
gap> List( orbs, Length );
12196560139776015943231594323 ]
gap> v:= [ 00000000000002 ] * Z(3)^0;;
gap> orb_large:= First( orbs, x -> v in x );;
gap> Length( orb_large );
1594323
gap> Length( orb_large ) = 3^13;
true
gap> orb_large:= SortedList( orb_large );;
gap> homHtoHmodX:= ActionHomomorphism( G, orb_large );;
gap> represHmodX:= Image( homHtoHmodX );;
gap> Size( represHmodX );
2859230155080499200
gap> Size( represHmodX ) = Size( CharacterTable( "2.Suz.2" ) ) * 3^13;
true

##
gap> gensHmodX:= List( mats, m -> m^homHtoHmodX );;
gap> n:= NormalClosure( represHmodX,
>                       Subgroup( represHmodX, [ gensHmodX[3] ] ) );;
gap> Size( n ) = 3^13;
true
gap> IsAbelian( n );
false

##
gap> slp:= AtlasProgram( "Suz.2", "check" );;
gap> prog:= StraightLineProgramFromStraightLineDecision( slp.program );;
gap> res:= ResultOfStraightLineProgram( prog, gensHmodX );;
gap> List( res, Order );
2121 ]
gap> ForAll( gensHmodX{ [ 12 ] }, x -> ForAll( res, y -> x*y = y*x ) );
true
gap> Order( gensHmodX[2] );
3

##
gap> 3suz2:= OneAtlasGeneratingSet( "3.Suz.2", NrMovedPoints, 5346 );;
gap> 3suz2:= 3suz2.generators;;
gap> omega:= [ 1 .. LargestMovedPoint( 3suz2 ) ];;
gap> shifted:= omega + LargestMovedPoint( gensHmodX );;
gap> pi:= MappingPermListList( omega, shifted );;
gap> shiftedgens:= List( 3suz2, x -> x^pi );;
gap> Append( shiftedgens, [ () ] );
gap> gensH:= List( [ 1 .. 3 ], i -> gensHmodX[i] * shiftedgens[i] );;
gap> NrMovedPoints( gensH );
1599669

##
gap> Order( gensH[2] );
3
gap> Order( Product( gensH{ [ 12122 ] } ) );
7

##
gap> H:= GroupWithGenerators( gensH );;
gap> if CTblLib.IsMagmaAvailable() then
>      mgmt:= CharacterTableComputedByMagma( H, "H_Magma" );
>    else
>      mgmt:= CharacterTable( "3^(1+12):6.Suz.2" );
>    fi;

##
gap> IsRecord( TransformingPermutationsCharacterTables( mgmt,
>        CharacterTable( "3^(1+12):6.Suz.2" ) ) );
true

##
gap> g:= AtlasGroup( "5^(1+6):2.J2.4" );;
gap> if CTblLib.IsMagmaAvailable() then
>      mgmt:= CharacterTableComputedByMagma( g, "MN5B_Magma" );
>    else
>      mgmt:= CharacterTable( "5^(1+6):2.J2.4" );
>    fi;
gap> IsRecord( TransformingPermutationsCharacterTables( mgmt,
>        CharacterTable( "5^(1+6):2.J2.4" ) ) );
true

##
gap> STOP_TEST( "ctblm.tst" );

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


[Dauer der Verarbeitung: 0.28 Sekunden, vorverarbeitet 2026-06-04]