Eine aufbereitete Darstellung der Quelle

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

Benutzer

Quelle  ctblatlas.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/ctblatlas.xpl, do not edit!
#############################################################################
##
#W  ctblatlas.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( "ctblatlas.tst" );`.
##
gap> START_TEST( "ctblatlas.tst" );

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

##
gap> lib:= CharacterTable( "Th" );;
gap> parrottnames:= [
>      "1A", "z", "c2", "c3", "c1", "r1", "v", "b", "zc1", "zc2",
>      "zc3", "a", "us1", "w", "f1", "f3", "f2", "zb",
>      "r1c2", "(r1c2)^-1", "r1c3", "vc1", "l", "za",
>      "c1b", "(c1b)^-1", "zf1", "zf2", "19A", "vb", "c2a2",
>      "us1c2", "(us1c2)^-1", "wc1", "(wc1)^-1",
>      "f4", "f5", "(f5)^-1", "r1a", "zbc1", "(zbc1)^-1",
>      "31A", "31B", "r1f1", "s1f1", "(s1f1)^-1",
>      "c2l", "(c2l)^-1" ];;
gap> orders:= OrdersClassRepresentatives( lib );;
gap> centralizers:= SizesCentralizers( lib );;
gap> descr:= TransposedMat( [ parrottnames, orders, centralizers ] );;
gap> for entry in descr do
>      Print( String( entry[1], -12 ),
>             String( entry[2], 2 ), "  ",
>             StringPP( entry[3] ), "\n" );
>    od;
1A           1  2^15*3^10*5^3*7^2*13*19*31
z            2  2^15*3^4*5*7
c2           3  2^6*3^7*7*13
c3           3  2^3*3^10
c1           3  2^4*3^7*5
r1           4  2^11*3^3*7
v            4  2^9*3*5
b            5  2^3*3*5^3
zc1          6  2^4*3^3*5
zc2          6  2^6*3^3
zc3          6  2^3*3^4
a            7  2^3*3*7^2
us1          8  2^7*3
w            8  2^5*3
f1           9  2^3*3^6
f3           9  3^6
f2           9  2*3^4
zb          10  2^3*3*5
r1c2        12  2^5*3^2
(r1c2)^-1   12  2^5*3^2
r1c3        12  2^2*3^3
vc1         12  2^3*3
l           13  3*13
za          14  2^3*7
c1b         15  2*3*5
(c1b)^-1    15  2*3*5
zf1         18  2^3*3^2
zf2         18  2*3^2
19A         19  19
vb          20  2^2*5
c2a2        21  3*7
us1c2       24  2^3*3
(us1c2)^-1  24  2^3*3
wc1         24  2^3*3
(wc1)^-1    24  2^3*3
f4          27  3^3
f5          27  3^3
(f5)^-1     27  3^3
r1a         28  2^2*7
zbc1        30  2*3*5
(zbc1)^-1   30  2*3*5
31A         31  31
31B         31  31
r1f1        36  2^2*3^2
s1f1        36  2^2*3^2
(s1f1)^-1   36  2^2*3^2
c2l         39  3*13
(c2l)^-1    39  3*13

##
gap> th:= rec( UnderlyingCharacteristic:= 0,
>              OrdersClassRepresentatives:= orders,
>              SizesCentralizers:= centralizers,
>              Size:= centralizers[1] );;
gap> ConvertToCharacterTableNC( th );;

##
gap> g:= AtlasGroup( "2^5.L5(2)" );;
gap> bl:= Blocks( g, MovedPoints( g ) );;
gap> Length( bl[1] );
2
gap> acthom:= ActionHomomorphism( g, bl, OnSets );;
gap> img:= Image( acthom );;
gap> Size( g ) / Size( img );
32
gap> sm:= SmallerDegreePermutationRepresentation( img );;
gap> NrMovedPoints( Image( sm ) );
31
gap> f:= CharacterTable( Image( sm ) );;
gap> d:= CharacterTable( g );;
gap> fus:= List( ConjugacyClasses( d ),
>            c -> PositionProperty( ConjugacyClasses( f ),
>                   cc -> ( Representative( c )^acthom )^sm in cc ) );;
gap> infl:= List( Irr( f ), x -> x{ fus } );;

##
gap> indcyc:= InducedCyclic( d, [ 2 .. NrConjugacyClasses( d ) ], "all" );;
gap> nat:= NaturalCharacter( g );;
gap> red:= ReducedOrdinary( d, infl, Concatenation( indcyc, [ nat ] ) );;
gap> Length( red.irreducibles );
1
gap> faithirr:= ShallowCopy( red.irreducibles );;
gap> ten:= Set( Tensored( infl, faithirr ) );;
gap> ten:= Reduced( d, faithirr, ten );;
gap> lll:= LLL( d, Concatenation( red.remainders, ten.remainders ) );;
gap> Length( lll.irreducibles );
5
gap> Append( faithirr, lll.irreducibles );

##
gap> sym2:= Symmetrizations( d, faithirr, 2 );;
gap> sym3:= Symmetrizations( d, faithirr, 3 );;
gap> irr:= Concatenation( infl, faithirr );;
gap> sym:= Reduced( d, irr, Concatenation( sym2, sym3 ) );;
gap> lll:= LLL( d, Concatenation( lll.remainders, sym.remainders ) );;
gap> Length( lll.irreducibles );
4
gap> Append( irr, lll.irreducibles );

##
gap> gram:= MatScalarProducts( d, lll.remainders, lll.remainders );;
gap> emb:= OrthogonalEmbeddings( gram );;                           
gap> Length( emb.solutions );
3
gap> dec:= List( emb.solutions,
>                x -> Decreased( d, lll.remainders, emb.vectors{ x } ) );;
gap> dec:= Filtered( dec, x -> x <> fail );;
gap> Length( dec );
2

##
gap> sym:= List( [ 12 ],
>            i -> Symmetrizations( d, [ dec[i].irreducibles[1] ], 2 ) );;
gap> good:= Filtered( [ 12 ],
>             i -> ForAll( dec[i].irreducibles,
>                    x -> IsInt( ScalarProduct( d, sym[i][1], x ) ) ) );;
gap> Length( good );
1
gap> SetIrr( d, Concatenation( irr, dec[ good[1] ].irreducibles ) );

##
gap> nsg:= ClassPositionsOfNormalSubgroups( d );
[ [ 1 ], [ 12 ], [ 1 .. 41 ] ]
gap> SizesConjugacyClasses( d ){ nsg[2] };
131 ]
gap> OrdersClassRepresentatives( d ){ nsg[2] };
12 ]

##
gap> f:= d / nsg[2];;
gap> PossibleClassFusions( f, d );
[  ]

##
gap> n:= PCore( g, 2 );
<permutation group with 5 generators>
gap> Size( n );
32
gap> IsomorphismGroups( g / n, GL(5,2) ) = fail;
false

##
gap> libsub:= CharacterTable( "2^5.L5(2)" );;
gap> IsRecord( TransformingPermutationsCharacterTables( d, libsub ) );
true
gap> d:= libsub;;

##
gap> powinfo:= [
>     [ "zc3", 2, "c3" ],     # c3 commutes with z
>     [ "zf2", 2, "f2" ],     # f2 commutes with z
>     [ "r1c3", 2, "zc3" ],   # r1 commutes with c3
>     [ "vc1", 2, "zc1" ],    # v squares to z and commutes with c1
>     [ "wc1", 2, "vc1" ],    # w squares to v and commutes with c1
>     [ "(wc1)^-1", 2, "vc1" ],
>     [ "us1c2", 2, "r1c2" ], # us1 squares to r1
>     [ "(us1c2)^-1", 2, "(r1c2)^-1" ],
>     [ "us1", 2, "r1" ],     # (5.1)
>     [ "w", 2, "v" ],        # (5.1)
>     [ "zbc1", 2, "c1b" ],
>     [ "(zbc1)^-1", 2, "(c1b)^-1" ],
>     [ "f1", 3, "c3" ],
>     [ "f2", 3, "c3" ],
>     [ "f3", 3, "c3" ],
>     [ "vc1", 3, "v" ],      # v commutes with c1
>     [ "zf1", 3, "zc3" ],
>     [ "zf2", 3, "zc3" ],
>     [ "us1c2", 3, "us1" ],
>     [ "(us1c2)^-1", 3, "us1" ],
>     [ "wc1", 3, "w" ],
>     [ "(wc1)^-1", 3, "w" ],
>     [ "f4", 3, "f3" ],
>     [ "f5", 3, "f3" ],
>     [ "(f5)^-1", 3, "f3" ],
>     [ "r1f1", 3, "r1c3" ],
>     [ "s1f1", 3, "r1c3" ],
>     [ "(s1f1)^-1", 3, "r1c3" ],
>     ];;

##
gap> maxorder:= Maximum( OrdersClassRepresentatives( th ) );
39
gap> primes:= Filtered( [ 1 .. maxorder ], IsPrimeInt );;

##
gap> for p in primes do
>      if 36 mod p <> 0 then
>        Add( powinfo, [ "r1f1", p, "r1f1" ] );
>      fi;
>      if 27 mod p <> 0 then
>        Add( powinfo, [ "f4", p, "f4" ] );
>      fi;
>    od;

##
gap> powermaps:= [];;
gap> for p in primes do
>      powermaps[p]:= InitPowerMap( th, p );
>    od;
gap> for entry in powinfo do
>      p:= entry[2];
>      pow:= powermaps[p];
>      src:= Position( parrottnames, entry[1] );
>      trg:= Position( parrottnames, entry[3] );
>      if IsInt( pow[ src ] ) then
>        if pow[ src ] <> trg then
>          Error( "contradiction!" );
>        fi;
>      elif not trg in pow[ src ] then
>        Error( "contradiction!" );
>      else
>        pow[ src ]:= trg;
>      fi;
>    od;
gap> SetComputedPowerMaps( th, powermaps );

##
gap> setGaloisInfo:= function( powermaps, classes, orders, primes, x )
>    local ord, p;
>    ord:= orders[ classes[1] ];
>    for p in primes do
>      if ord mod p <> 0 then
>        if GaloisCyc( x, p ) = x then
>          powermaps[p]{ classes }:= classes;
>        else
>          powermaps[p]{ classes }:= classes{ [ 21 ] };
>        fi;
>      fi;
>    od;
>    end;;

##
gap> pos:= Positions( OrdersClassRepresentatives( d ), 15 );
2224 ]
gap> f:= Field( List( Irr( d ), x -> x[ pos[1] ] ) );
NF(15,[ 1248 ])
gap> Sqrt( -15 ) in f;
true
gap> pos:= Positions( orders, 15 );
2526 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -15 ) );
gap> pos:= Positions( OrdersClassRepresentatives( d ), 30 );
2325 ]
gap> f:= Field( List( Irr( d ), x -> x[ pos[1] ] ) );
NF(15,[ 1248 ])
gap> pos:= Positions( orders, 30 );
4041 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -15 ) );

##
gap> setGaloisInfo( powermaps,
>        List( [ "f5", "(f5)^-1" ], x -> Position( parrottnames, x ) ),
>        orders, primes, Sqrt( -3 ) );
gap> setGaloisInfo( powermaps, Positions( orders, 31 ), orders, primes,
>                   Sqrt( -31 ) );

##
gap> pos:= Positions( orders, 39 );
4748 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -3 ) );
gap> indcyc:= InducedCyclic( th, [ pos[1] ], "all" );;
gap> ForAll( indcyc, x -> IsInt( ScalarProduct( th, x, x ) ) );
false
gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -39 ) );
gap> indcyc:= InducedCyclic( th, [ pos[1] ], "all" );;
gap> ForAll( indcyc, x -> IsInt( ScalarProduct( th, x, x ) ) );
true

##
gap> pos:= Positions( orders, 36 );
444546 ]
gap> parrottnames{ pos };
[ "r1f1", "s1f1", "(s1f1)^-1" ]
gap> setGaloisInfo( powermaps, [ 4546 ], orders, primes, Sqrt( -3 ) );
gap> indcyc:= InducedCyclic( th, [ 45 ], "all" );;    
gap> ForAll( indcyc, x -> IsInt( ScalarProduct( th, x, x ) ) );
true
gap> setGaloisInfo( powermaps, [ 4546 ], orders, primes, Sqrt( -1 ) );
gap> indcyc:= InducedCyclic( th, [ 45 ], "all" );;
gap> ForAll( indcyc, x -> IsInt( ScalarProduct( th, x, x ) ) );
false
gap> setGaloisInfo( powermaps, [ 4546 ], orders, primes, Sqrt( -3 ) );

##
gap> List( [ "wc1", "(wc1)^-1" ], x -> Position( parrottnames, x ) );
3435 ]
gap> vals:= [ Sqrt( -3 ), Sqrt( -1 ), Sqrt( -2 ), Sqrt( -6 ) ];
[ E(3)-E(3)^2, E(4), E(8)+E(8)^3, E(24)+E(24)^11-E(24)^17-E(24)^19 ]
gap> good:= [];;
gap> for val in vals do
>      setGaloisInfo( powermaps, [ 3435 ], orders, primes, val );
>      indcyc:= InducedCyclic( th, [ 34 ], "all" );
>      if ForAll( indcyc, x -> IsInt( ScalarProduct( th, x, x ) ) ) then
>        Add( good, val );
>      fi;
>    od;
gap> good;
[ E(24)+E(24)^11-E(24)^17-E(24)^19 ]
gap> setGaloisInfo( powermaps, [ 3435 ], orders, primes, good[1] );

##
gap> parrottnames{ [ 19203233 ] };
[ "r1c2", "(r1c2)^-1", "us1c2", "(us1c2)^-1" ]
gap> fus:= InitFusion( d, th );;
gap> pos:= Positions( OrdersClassRepresentatives( d ), 12 );
121516 ]
gap> fus{ pos };
[ [ 19202122 ], [ 1920 ], [ 1920 ] ]
gap> List( pos, x -> Field( List( Irr( d ), chi -> chi[x] ) ) );
[ Rationals, CF(3), CF(3) ]
gap> Sqrt( -3 ) in CF(3);
true
gap> setGaloisInfo( powermaps, [ 1920 ], orders, primes, Sqrt( -3 ) );
gap> setGaloisInfo( powermaps, [ 3233 ], orders, primes, Sqrt( -3 ) );

##
gap> indcyc:= InducedCyclic( th, [ 2 .. NrConjugacyClasses( th ) ], "all" );;

##
gap> fus:= InitFusion( d, th );
1226, [ 67 ], [ 67 ], 13, [ 1314 ], [ 1314 ], 59
  [ 19202122 ], 310, [ 1920 ], [ 1920 ], [ 910 ], 
  [ 32333435 ], [ 32333435 ], 818, [ 2526 ], [ 4041 ], 
  [ 2526 ], [ 4041 ], 12242439311224243931, [ 4243 ], 
  [ 4243 ], [ 4243 ], [ 4243 ], [ 4243 ], [ 4243 ] ]
gap> Positions( OrdersClassRepresentatives( d ), 31 );
363738394041 ]
gap> fus[36];
4243 ]
gap> fus[36]:= 42;;
gap> TestConsistencyMaps( ComputedPowerMaps( d ), fus,
>        ComputedPowerMaps( th ) );
true
gap> possfus:= FusionsAllowedByRestrictions( d, th, Irr( d ), indcyc, fus,
>      rec( maxlen:= 10, minamb:= 1, maxamb:= 10^6, quick:= false,
>           contained:= ContainedPossibleCharacters ) );;
gap> possfus:= RepresentativesFusions( d, possfus, Group( () ) );
[ [ 12267613141359223101920103332818
      254026411224243931122424393142434242
      4343 ], 
  [ 12267713141459223101920103332818
      254026411224243931122424393142434242
      4343 ] ]

##
gap> indd:= InducedClassFunctionsByFusionMap( d, th, Irr( d ), possfus[1] );;
gap> ForAll( indd, x -> IsInt( ScalarProduct( th, x, x ) ) );
false
gap> indd:= InducedClassFunctionsByFusionMap( d, th, Irr( d ), possfus[2] );;
gap> ForAll( indd, x -> IsInt( ScalarProduct( th, x, x ) ) );
true

##
gap> irr:= [ TrivialCharacter( th ) ];;
gap> red:= ReducedOrdinary( th, irr, Concatenation( indcyc, indd ) );;
gap> lll:= LLL( th, red.remainders );;
gap> Length( lll.irreducibles );
4
gap> Append( irr, lll.irreducibles );

##
gap> sym:= Concatenation( List( [ 2345 ],
>              p -> Symmetrizations( th, irr, p ) ) );;
gap> sym:= ReducedOrdinary( th, irr, sym );;
gap> ten:= Set( Tensored( irr, irr ) );;
gap> ten:= ReducedOrdinary( th, irr, ten );;
gap> lll:= LLL( th, Concatenation( lll.remainders, sym.remainders,
>                               ten.remainders ) );;
gap> Length( lll.irreducibles );
3
gap> Append( irr, lll.irreducibles );
gap> DimensionsMat( irr );
848 ]

##
gap> indcyc:= ReducedOrdinary( th, irr, indcyc );;
gap> indd:= ReducedOrdinary( th, irr, indd );;
gap> sym:= ReducedOrdinary( th, irr, sym.remainders );;
gap> ten:= ReducedOrdinary( th, irr, ten.remainders );;
gap> lll:= LLL( th, Concatenation( indcyc.remainders, indd.remainders,
>                       sym.remainders, ten.remainders ) );;
gap> gram:= MatScalarProducts( th, lll.remainders, lll.remainders );;
gap> emb:= OrthogonalEmbeddings( gram, 40 );;
gap> Length( emb.solutions );
4

##
gap> dec:= List( emb.solutions,
>                x -> Decreased( th, lll.remainders, emb.vectors{ x } ) );;
gap> dec:= Filtered( dec, x -> x <> fail );;
gap> Length( dec );
2

##
gap> SetIrr( th, List( Concatenation( irr, dec[1].irreducibles ),
>                      x -> Character( th, x ) ) );
gap> IsRecord( TransformingPermutationsCharacterTables( th, lib ) );
true

##
gap> ResetFilterObj( th, HasIrr );
gap> SetIrr( th, List( Concatenation( irr, dec[2].irreducibles ),
>                      x -> Character( th, x ) ) );
gap> IsRecord( TransformingPermutationsCharacterTables( th, lib ) );
true

##
gap> lib:= CharacterTable( "J4" );;
gap> pos:= [ 1 .. NrConjugacyClasses( lib ) ];;
gap> orders:= OrdersClassRepresentatives( lib );;
gap> centralizers:= SizesCentralizers( lib );;
gap> descr:= TransposedMat( [ pos, orders, centralizers ] );;
gap> for entry in descr do
>      Print( String( entry[1], 2 ), "  ",
>             String( entry[2], 2 ), "  ",
>             StringPP( entry[3] ), "\n" );
>    od;
 1   1  2^21*3^3*5*7*11^3*23*29*31*37*43
 2   2  2^21*3^3*5*7*11
 3   2  2^19*3^2*5*7*11
 4   3  2^8*3^3*5*7*11
 5   4  2^15*3*5*11
 6   4  2^15*3
 7   4  2^11*3*7
 8   5  2^6*3*5*7
 9   6  2^8*3^3*5*7*11
10   6  2^8*3^2
11   6  2^8*3^2
12   7  2^3*3*5*7
13   7  2^3*3*5*7
14   8  2^8*5
15   8  2^8*3
16   8  2^9
17  10  2^6*3*5
18  10  2^4*5
19  11  2^3*3*11^3
20  11  2*11^2
21  12  2^6*3
22  12  2^6*3
23  12  2^4*3
24  14  2^2*3*7
25  14  2^2*3*7
26  14  2^3*7
27  14  2^3*7
28  15  2*3*5
29  16  2^5
30  20  2^5*5
31  20  2^5*5
32  21  2*3*7
33  21  2*3*7
34  22  2^3*3*11
35  22  2*11
36  23  23
37  24  2^4*3
38  24  2^4*3
39  28  2^2*7
40  28  2^2*7
41  29  29
42  30  2*3*5
43  31  31
44  31  31
45  31  31
46  33  2*3*11
47  33  2*3*11
48  35  5*7
49  35  5*7
50  37  37
51  37  37
52  37  37
53  40  2^3*5
54  40  2^3*5
55  42  2*3*7
56  42  2*3*7
57  43  43
58  43  43
59  43  43
60  44  2^2*11
61  66  2*3*11
62  66  2*3*11

##
gap> j4:= rec( UnderlyingCharacteristic:= 0,
>              OrdersClassRepresentatives:= orders,
>              SizesCentralizers:= centralizers,
>              Size:= centralizers[1] );;
gap> ConvertToCharacterTableNC( j4 );;

##
gap> u:= CharacterTable( "J4M1" );
CharacterTable( "mx1j4" )

##
gap> powinfo:= [
>     [  5,  2,  2 ],
>     [  6,  2,  2 ],
>     [  7,  2,  3 ],
>     [ 10,  3,  2 ],
>     [ 11,  3,  3 ],
>     [ 15,  2,  6 ],
>     [ 16,  2,  6 ],
>     [ 17,  5,  2 ],
>     [ 18,  5,  3 ],
>     [ 21,  3,  5 ],
>     [ 22,  3,  6 ],
>     [ 23,  3,  7 ],
>     [ 24,  7,  2 ],
>     [ 25,  7,  2 ],
>     [ 26,  7,  3 ],
>     [ 27,  7,  3 ],
>     [ 29,  216 ],
>     [ 3411,  2 ],
>     [ 3511,  3 ],
>     ];;

##
gap> maxorder:= Maximum( OrdersClassRepresentatives( j4 ) );
66
gap> primes:= Filtered( [ 1 .. maxorder ], IsPrimeInt );;

##
gap> pos:= Union( Positions( orders, 6 ), Positions( orders, 12 ) );
91011212223 ]
gap> for p in primes do
>      if 6 mod p <> 0 then
>        for i in pos do
>          Add( powinfo, [ i, p, i ] );
>        od;
>      fi;
>    od;

##
gap> Add( powinfo, [ 24212 ] );
gap> Add( powinfo, [ 25213 ] );
gap> Add( powinfo, [ 26212 ] );
gap> Add( powinfo, [ 27213 ] );
gap> Add( powinfo, [ 39226 ] );
gap> Add( powinfo, [ 40227 ] );
gap> Add( powinfo, [ 55232 ] );
gap> Add( powinfo, [ 56233 ] );
gap> Add( powinfo, [ 55325 ] );
gap> Add( powinfo, [ 56324 ] );
gap> Add( powinfo, [ 32313 ] );
gap> Add( powinfo, [ 33312 ] );

##
gap> powermaps:= [];;
gap> for p in primes do
>      powermaps[p]:= InitPowerMap( j4, p );
>    od;
gap> for entry in powinfo do
>      p:= entry[2];
>      pow:= powermaps[p];
>      src:= entry[1];
>      trg:= entry[3];
>      if IsInt( pow[ src ] ) then
>        if pow[ src ] <> trg then
>          Error( "contradiction!" );
>        fi;
>      elif not trg in pow[ src ] then
>        Error( "contradiction!" );
>      else
>        pow[ src ]:= trg;
>      fi;
>    od;
gap> SetComputedPowerMaps( j4, powermaps );

##
gap> x:= Sqrt( -7 );;
gap> pos:= Positions( orders, 7 );
1213 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, x );
gap> setGaloisInfo( powermaps, [ 2425 ], orders, primes, x );
gap> setGaloisInfo( powermaps, [ 2627 ], orders, primes, x );
gap> pos:= Positions( orders, 21 );
3233 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, x );
gap> pos:= Positions( orders, 28 );
3940 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, x );
gap> pos:= Positions( orders, 35 );
4849 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, x );
gap> pos:= Positions( orders, 42 );
5556 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, x );

##
gap> powermaps[5]{ [ 4849 ] }:= [ 1312 ];;

##
gap> pos:= Positions( orders, 33 );
4647 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, 1 );
gap> ind:= InducedCyclic( j4, [ 46 ], "all" );;
gap> ForAll( ind, x -> IsInt( ScalarProduct( j4, x, x ) ) );
false
gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -3 ) );
gap> ind:= InducedCyclic( j4, [ 46 ], "all" );;
gap> ForAll( ind, x -> IsInt( ScalarProduct( j4, x, x ) ) );
false
gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( -11 ) );
gap> ind:= InducedCyclic( j4, [ 46 ], "all" );;
gap> ForAll( ind, x -> IsInt( ScalarProduct( j4, x, x ) ) );
false
gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( 33 ) );
gap> ind:= InducedCyclic( j4, [ 46 ], "all" );;
gap> ForAll( ind, x -> IsInt( ScalarProduct( j4, x, x ) ) );
true

##
gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( 33 ) );
gap> pos:= Positions( orders, 66 );
6162 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( 33 ) );
gap> powermaps[2]{ pos }:= [ 4647 ];;

##
gap> pos:= Positions( orders, 20 );
3031 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, 1 );
gap> ind:= InducedCyclic( j4, [ 30 ], "all" );;
gap> ForAll( ind, x -> IsInt( ScalarProduct( j4, x, x ) ) );
false
gap> u:= CharacterTable( "J4M1" );
CharacterTable( "mx1j4" )
gap> pos:= Positions( OrdersClassRepresentatives( u ), 20 );
6061 ]
gap> flds:= List( pos, i -> Field( List( Irr( u ), x -> x[i] ) ) );
[ NF(5,[ 14 ]), NF(5,[ 14 ]) ]
gap> x:= Sqrt(5);;
gap> ForAll( flds, f -> x in f );
true
gap> setGaloisInfo( powermaps, Positions( orders, 20 ), orders, primes, x );

##
gap> pos:= Positions( orders, 40 );
5354 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( 5 ) );
gap> powermaps[2]{ pos }:= [ 3130 ];;

##
gap> x:= EC( 31 );;
gap> classes:= [ 43 .. 45 ];;
gap> vals:= List( [ 1525 ], k -> GaloisCyc( x, k ) );;
gap> for p in primes do
>   if p mod 31 <> 0 then
>     for i in [ 1 .. 3 ] do
>       powermaps[p][ classes[i] ]:=
>         classes[ Position( vals, GaloisCyc( vals[i], p ) ) ];
>     od;
>   fi;
> od;
gap> x:= EC( 37 );;
gap> classes:= [ 50 .. 52 ];;
gap> vals:= List( [ 124 ], k -> GaloisCyc( x, k ) );;
gap> for p in primes do
>   if p mod 37 <> 0 then
>     for i in [ 1 .. 3 ] do
>       powermaps[p][ classes[i] ]:=
>         classes[ Position( vals, GaloisCyc( vals[i], p ) ) ];
>     od;
>   fi;
> od;
gap> x:= EC( 43 );;
gap> classes:= [ 57 .. 59 ];;
gap> vals:= List( [ 1636 ], k -> GaloisCyc( x, k ) );;
gap> for p in primes do
>   if p mod 43 <> 0 then
>     for i in [ 1 .. 3 ] do
>       powermaps[p][ classes[i] ]:=
>         classes[ Position( vals, GaloisCyc( vals[i], p ) ) ];
>     od;
>   fi;
> od;

##
gap> pos:= PositionsProperty( powermaps[2], IsList );
212223353738 ]
gap> orders{ pos };
121212222424 ]

##
gap> powermaps[2]{ [ 3435 ] };
19, [ 1920 ] ]
gap> powermaps[2][35]:= 20;;

##
gap> powermaps[2]{ [ 212223 ] }:= [ [ 910 ], [ 910 ], 11 ];;

##
gap> powermaps[2]{ [ 3738 ] }:= [ 2222 ];;

##
gap> poss:= [];;
gap> for cand in [ [ 99 ], [ 910 ], [ 109 ] ] do
>   powermaps[2]{ [ 2122 ] }:= cand;
>   fus:= InitFusion( u, j4 );
>   TestConsistencyMaps( ComputedPowerMaps( u ), fus, powermaps );
>   indcyc:= InducedCyclic( j4, [ 2122 ], "all" );
>   possfus:= FusionsAllowedByRestrictions( u, j4, Irr( u ), indcyc, fus,
>        rec( maxlen:= 10, minamb:= 1, maxamb:= 10^6, quick:= false,
>             contained:= ContainedPossibleCharacters ) );
>   Add( poss, Length( possfus ) );
> od;
gap> poss;
000 ]
gap> powermaps[2]{ [ 2122 ] }:= [ 1010 ];;

##
gap> pos:= Positions( orders, 24 );
3738 ]
gap> setGaloisInfo( powermaps, pos, orders, primes, 1 );
gap> indcyc:= InducedCyclic( j4, pos, "all" );;
gap> ForAll( indcyc, x -> IsInt( ScalarProduct( j4, x, x ) ) );
false

##
gap> setGaloisInfo( powermaps, pos, orders, primes, Sqrt( 3 ) );

##
gap> indcyc:= InducedCyclic( j4, [ 2 .. NrConjugacyClasses( j4 ) ], "all" );;

##
gap> u:= CharacterTable( "J4M1" );
CharacterTable( "mx1j4" )
gap> fus:= InitFusion( u, j4 );
1, [ 23 ], 2, [ 23 ], [ 23 ], [ 23 ], [ 23 ], 445, [ 56 ], 
  [ 56 ], 7, [ 56 ], [ 567 ], [ 567 ], [ 567 ], [ 567 ], 
  [ 567 ], [ 567 ], [ 567 ], [ 567 ], 89, [ 91011 ], 
  [ 91011 ], [ 91011 ], [ 91011 ], [ 91011 ], [ 91011 ], 
  [ 91011 ], [ 1213 ], [ 1213 ], 1516, [ 141516 ], 
  [ 141516 ], [ 141516 ], [ 141516 ], 17, [ 1718 ], [ 1718 ], 
  [ 1718 ], [ 1920 ], [ 2122 ], [ 2122 ], [ 212223 ], 
  [ 212223 ], [ 212223 ], [ 212223 ], [ 212223 ], 
  [ 212223 ], [ 2627 ], [ 2627 ], [ 24252627 ], 
  [ 24252627 ], 282829, [ 3031 ], [ 3031 ], [ 3233 ], 
  [ 3233 ], [ 3435 ], 3636, [ 3738 ], [ 3738 ], [ 3940 ], 
  [ 3940 ], 4242 ]
gap> Print( AutomorphismsOfTable( u ), "\n" );
Group( [ (67,68), (65,66), (60,61), (57,58)(71,72), (57,58)(67,68)(71,72), 
  (57,58)(60,61)(71,72), (32,33)(53,54)(55,56)(62,63)(69,70), 
  ( 56)(15,16)(21,22)(30,31)(42,43)(49,50)(51,52) ] )
gap> fus{ [ 606167686970 ] };
[ [ 3031 ], [ 3031 ], [ 3738 ], [ 3738 ], [ 3940 ], [ 3940 ] ]
gap> fus[60]:= 30;;
gap> fus[67]:= 37;;
gap> fus[69]:= 40;;
gap> TestConsistencyMaps( ComputedPowerMaps( u ), fus,
>        ComputedPowerMaps( j4 ) );
true

##
gap> irr:= [ TrivialCharacter( j4 ) ];;
gap> indcyc:= ReducedOrdinary( j4, irr, indcyc );;
gap> possfus:= FusionsAllowedByRestrictions( u, j4, Irr( u ),
>      indcyc.remainders, fus,
>      rec( maxlen:= 10, minamb:= 1, maxamb:= 10^3, quick:= false,
>           contained:= ContainedPossibleCharacters ) );;
gap> Length( possfus );
1440
gap> reps:= RepresentativesFusions( u, possfus, Group(()) );;
gap> Length( reps );
720

##
gap> reps:= Filtered( reps,
>      map -> ForAll( InducedClassFunctionsByFusionMap( u, j4, Irr(u), map ),
>                     x -> IsPosInt( ScalarProduct( j4, x, x ) ) ) );;
gap> Length( reps );
2
gap> inds:= List( reps,
>      map -> InducedClassFunctionsByFusionMap( u, j4, Irr( u ), map ) );;
gap> ForAll( Flat( MatScalarProducts( j4, inds[1], inds[1] ) ), IsInt );
false
gap> ForAll( Flat( MatScalarProducts( j4, inds[2], inds[2] ) ), IsInt );
true

##
gap> ind:= ReducedOrdinary( j4, irr, inds[2] );;
gap> Length( ind.irreducibles );
0
gap> lll:= LLL( j4, Concatenation( indcyc.remainders, ind.remainders ) );;
gap> Length( lll.irreducibles );
29
gap> Append( irr, lll.irreducibles );

##
gap> lll.norms;
2222222222222222222222222
  2222222 ]
gap> dn:= DnLatticeIterative( j4, lll.remainders );;
gap> Length( dn.irreducibles );
28
gap> Append( irr, dn.irreducibles );

##
gap> gram:= MatScalarProducts( j4, dn.remainders, dn.remainders );;
gap> emb:= OrthogonalEmbeddings( gram, 4 );;
gap> Length( emb.solutions );
3

##
gap> dec:= List( emb.solutions,
>                x -> Decreased( j4, dn.remainders, emb.vectors{ x } ) );;
gap> dec:= Filtered( dec, x -> x <> fail );;
gap> Length( dec );
2

##
gap> possirr:= List( dec, x -> x.irreducibles );;
gap> chi:= possirr[1][1];;
gap> sym:= Symmetrizations( j4, [ chi ], 2 );;
gap> ForAll( sym, x -> IsInt( ScalarProduct( j4, x, chi ) ) );
false

##
gap> SetIrr( j4, List( Concatenation( irr, possirr[2] ),
>                      x -> Character( j4, x ) ) );
gap> IsRecord( TransformingPermutationsCharacterTables( lib, j4 ) );
true

##
gap> t:= CharacterTable( "2E6(2)" );;
gap> t2:= CharacterTable( "2E6(2).2" );;
gap> aut:= AutomorphismsOfTable( t );;
gap> Factors( Size( aut ) );
222222223 ]
gap> syl:= SylowSubgroup( aut, 3 );;
gap> IsNormal( aut, syl );
true
gap> orbs:= Orbits( syl, [ 1 .. NrConjugacyClasses( t ) ] );;
gap> orbsalpha:= List( Filtered( orbs, l -> Length( l ) <> 1 ), Set );
[ [ 111213 ], [ 161718 ], [ 394041 ], [ 434445 ], 
  [ 464748 ], [ 646566 ], [ 676869 ], [ 757677 ], 
  [ 787980 ], [ 888990 ], [ 919293 ], [ 949596 ], 
  [ 114115116 ], [ 117118119 ] ]

##
gap> tfust2:= PossibleClassFusions( t, t2 );;
gap> poss:= Set( List( tfust2, l -> Filtered( InverseMap( l ), IsList ) ) );
[ [ [ 1112 ], [ 1617 ], [ 3940 ], [ 4344 ], [ 4647 ], [ 5556 ], 
      [ 6162 ], [ 6465 ], [ 6768 ], [ 7576 ], [ 7879 ], [ 8889 ], 
      [ 9192 ], [ 9495 ], [ 99100 ], [ 103104 ], [ 109110 ], 
      [ 114115 ], [ 117118 ], [ 123124 ], [ 125126 ] ], 
  [ [ 1113 ], [ 1618 ], [ 3941 ], [ 4345 ], [ 4648 ], [ 5556 ], 
      [ 6162 ], [ 6466 ], [ 6769 ], [ 7577 ], [ 7880 ], [ 8890 ], 
      [ 9193 ], [ 9496 ], [ 99100 ], [ 103104 ], [ 109110 ], 
      [ 114116 ], [ 117119 ], [ 123124 ], [ 125126 ] ], 
  [ [ 1213 ], [ 1718 ], [ 4041 ], [ 4445 ], [ 4748 ], [ 5556 ], 
      [ 6162 ], [ 6566 ], [ 6869 ], [ 7677 ], [ 7980 ], [ 8990 ], 
      [ 9293 ], [ 9596 ], [ 99100 ], [ 103104 ], [ 109110 ], 
      [ 115116 ], [ 118119 ], [ 123124 ], [ 125126 ] ] ]
gap> orbsbeta:= poss[3];;

##
gap> orders:= OrdersClassRepresentatives( t );;
gap> mustsplit:= PositionsProperty( orders, IsOddInt );
1567233334515255568386879798103104107
  108123124125126 ]

##
gap> selfCentralizingClassesSplit:= function( t, mustsplit )
>      local centralizers, orders, i;

>      centralizers:= SizesCentralizers( t );
>      orders:= OrdersClassRepresentatives( t );
>      for i in [ 1 .. Length( centralizers ) ] do
>        if centralizers[i] = orders[i] and not i in mustsplit then
>          Print( "#I  class ", i, " splits (self-centralizing)\n" );
>          AddSet( mustsplit, i );
>        fi;
>      od;
>    end;;
gap> selfCentralizingClassesSplit( t, mustsplit );
#I  class 109 splits (self-centralizing)
#I  class 110 splits (self-centralizing)
#I  class 120 splits (self-centralizing)
#I  class 122 splits (self-centralizing)

##
gap> oddRootsOfSplittingClassesSplit:= function( t, mustsplit )
>      local powmaps, found, p, map, i;

>      powmaps:= ComputedPowerMaps( t );
>      repeat
>        found:= false;
>        for p in [ 1 .. Length( powmaps ) ] do
>          if p mod 2 = 1 and IsBound( powmaps[p] ) then
>            map:= powmaps[p];
>            for i in [ 1 .. Length( map ) ] do
>              if map[i] in mustsplit and not i in mustsplit then
>                Print( "#I  class ", i, " splits (",
>                       Ordinal( p ), " root of ", map[i], ")\n" );
>                found:= true;
>                AddSet( mustsplit, i );
>              fi;
>            od;
>          fi;
>        od;
>      until found = false;
>    end;;

##
gap> notSplittingClassesOfSubgroupDoNotSplit:= function( 2sfuss, sfust,
>                                                  mustnotsplit )
>      local new, i;

>      new:= sfust{ PositionsProperty( InverseMap( 2sfuss ), IsInt ) };
>      for i in Set( new ) do
>        if not i in mustnotsplit then
>          Print( "#I  class ", i, " does not split (as in subgroup)\n" );
>        fi;
>      od;
>      UniteSet( mustnotsplit, new );
>    end;;

##
gap> splittingClassesWithOddCentralizerIndexSplit:= function( s, t,
>        sfust, 2sfuss, mustsplit )
>      local inv, scents, tcents, i;

>      inv:= InverseMap( 2sfuss );
>      scents:= SizesCentralizers( s );
>      tcents:= SizesCentralizers( t );
>      for i in [ 1 .. Length( sfust ) ] do
>        if IsList( inv[i] ) and
>           IsOddInt( tcents[ sfust[i] ] / scents[i] ) then
>          if not sfust[i] in mustsplit then
>            Print( "#I  class ", sfust[i],
>                   " splits (odd centralizer index)\n" );
>            AddSet( mustsplit, sfust[i] );
>          fi;
>        fi;
>      od;
>      oddRootsOfSplittingClassesSplit( t, mustsplit );
>    end;;

##
gap> contributionData:= function( s, t, inv, chiprime, mustsplit )
>      local contrib, zeroonlyifnonsplit, safepart, n, tcents,
>            sclasses, i, j, val, choices, signs, cand;

>      contrib:= [];
>      zeroonlyifnonsplit:= [];
>      safepart:= 0;
>      n:= 1;
>      tcents:= SizesCentralizers( t );
>      sclasses:= SizesConjugacyClasses( s );
>      for i in [ 1 .. Length( inv ) ] do
>        if IsBound( inv[i] ) then
>          # The subgroup contains elements in the 'i'-th class.
>          if IsInt( inv[i] ) then
>            # Only one class of the subgroup fuses into the 'i'-th class.
>            j:= inv[i];
>            val:= sclasses[j] * chiprime[j];
>            val:= tcents[i] / Size(s)^2 * val * GaloisCyc( val, -1 );
>            if not IsInt( val ) then
>              if i in mustsplit then
>                # The summand is known, add it to 'safepart'.
>                safepart:= safepart + val;
>              else
>                # The class may or may not split.
>                # If it splits then 'val' is the contribution to the norm.
>                contrib[i]:= [ 0, val ];
>                zeroonlyifnonsplit[i]:= true;
>                n:= n * 2;
>              fi;
>            fi;
>          else
>            # Several classes of the subgroup fuse into the 'i'-th class.
>            choices:= List( inv[i], j -> sclasses[j] * chiprime[j] );
>            signs:= Tuples( [ 1, -1 ], Length( choices ) );
>            cand:= signs * choices;
>            cand:= tcents[i] / Size(s)^2 *
>                     Set( List( cand, x -> x * GaloisCyc( x, -1 ) ) );
>            if not ForAll( cand, IsInt ) then
>              if Length( cand ) = 1 then
>                if i in mustsplit then
>                  # We get a contribution to 'safepart'.
>                  safepart:= safepart + cand[1];
>                else
>                  UniteSet( cand, [ 0 ] );
>                  contrib[i]:= cand;
>                  zeroonlyifnonsplit[i]:= true;
>                  n:= n * Length( cand );
>                fi;
>              else
>                if not i in mustsplit then
>                  if not 0 in cand then
>                    UniteSet( cand, [ 0 ] );
>                    zeroonlyifnonsplit[i]:= true;
>                  fi;
>                fi;
>                contrib[i]:= cand;
>                n:= n * Length( cand );
>              fi;
>            fi;
>          fi;
>        fi;
>      od;

>      return rec( safepart:= safepart,
>                  contrib:= contrib,
>                  size:= n,
>                  bound:= Filtered( [ 1 .. Length( contrib ) ],
>                                    x -> IsBound( contrib[x] ) ),
>                  zeroonlyifnonsplit:= zeroonlyifnonsplit,
>                );
>    end;;

##
gap> integralContributions:= function( r )
>      local positions, len, images, number, index, direction, initial,
>            norm, solutions, i;

>      # Initialize the counter and the list of solutions.
>      positions:= r.bound;
>      len:= Length( positions );
>      images:= r.contrib{ positions };
>      number:= List( images, Length );
>      index:= ListWithIdenticalEntries( len, 1 );
>      direction:= ShallowCopy( index );  # 1 means up, -1 means down
>      initial:= List( images, l -> l[1] );
>      norm:= r.safepart + Sum( initial );
>      solutions:= [];
>      if IsInt( norm ) then
>        solutions[1]:= initial;
>      fi;

>      while true do
>        # Increase the counter. (Change only one position in each step.)
>        i:= 1;
>        while i <= len and
>              ( ( index[i] = number[i] and direction[i] = 1 ) or
>                ( index[i] = 1 and direction[i] = -1 ) ) do
>          direction[i]:= - direction[i];
>          i:= i+1;
>        od;

>        if len < i then
>          # We are done.
>          return solutions;
>        fi;

>        # Update at position 'i'.
>        norm:= norm - images[i][ index[i] ];
>        index[i]:= index[i] + direction[i];
>        norm:= norm + images[i][ index[i] ];

>        if IsInt( norm ) then
>          # We have found a solution.
>          Add( solutions,
>               List( [ 1 .. len ], i -> images[i][ index[i] ] ) );
>        fi;
>      od;
>    end;;

##
gap> evaluateContributions:= function( r, res, sfust,
>                                      mustsplit, mustnotsplit )
>      local param, i, c;

>      param:= Parametrized( res );
>      for i in [ 1 .. Length( r.bound ) ] do
>        c:= r.bound[i];
>        if param[i] = 0 then
>          # If contribution zero cannot arise as a sum of values
>          # then the class cannot split.
>          if IsBound( r.zeroonlyifnonsplit[c] ) and
>             r.zeroonlyifnonsplit[c] = true and
>             not c in mustnotsplit then
>            Print( "#I  class ", c,
>                   " does not split (contribution criterion)\n" );
>            if c in mustsplit then
>              Error( "contradiction for class ", c );
>            fi;
>            AddSet( mustnotsplit, c );
>          fi;
>        elif IsRat( param[i] ) then
>          if not c in mustsplit then
>            Print( "#I  class ", c, " splits (contribution criterion)\n" );
>            if c in mustnotsplit then
>              Error( "contradiction for class ", c );
>            fi;
>            AddSet( mustsplit, c );
>          fi;
>        elif IsList( param[i] ) and not 0 in param[i] then
>          # If no zero occurs then the class must split.
>          if not c in mustsplit then
>            Print( "#I  class ", c, " splits (contribution criterion)\n" );
>            if c in mustnotsplit then
>              Error( "contradiction for class ", c );
>            fi;
>            AddSet( mustsplit, c );
>          fi;
>        fi;
>      od;
>    end;;

##
gap> computeContributions:= function( s, t, sfust, classfuns, bound,
>                                     mustsplit, mustnotsplit )
>      local inv, i, known, candidates, r, res;

>      inv:= InverseMap( sfust );

>      repeat
>        for i in mustnotsplit do
>          # The induced character is zero at the preimage of 'i',
>          # there is no contribution to the norm.
>          Unbind( inv[i] );
>        od;
>        known:= [ ShallowCopy( mustsplit ), ShallowCopy( mustnotsplit ) ];
>        candidates:= List( classfuns,
>            chi -> contributionData( s, t, inv, chi, mustsplit ) );
>        candidates:= Filtered( candidates, r -> r.size < bound );
>        SortParallel( List( candidates, r -> r.size ), candidates );
>        for r in candidates do
>          res:= integralContributions( r );
>          if Length( res ) = 0 then
>            Error( "no solution" );
>          fi;
>          evaluateContributions( r, res, sfust, mustsplit, mustnotsplit );
>          oddRootsOfSplittingClassesSplit( t, mustsplit );
>        od;
>      until known = [ mustsplit, mustnotsplit ];
>    end;;

##
gap> s:= CharacterTable( "F4(2)" );;
gap> fus:= PossibleClassFusions( s, t );;
gap> rep:= RepresentativesFusions( s, fus, Group( () ) );;
gap> Length( rep );
3
gap> oneorbit:= orbsalpha[1];
111213 ]
gap> List( rep, map -> Intersection( map, oneorbit ) );
[ [ 11 ], [ 12 ], [ 13 ] ]

##
gap> m3:= s;;  m3fust:= rep[1];;
gap> m4:= s;;  m4fust:= rep[2];;
gap> m5:= s;;  m5fust:= rep[3];;

##
gap> 2m3:= CharacterTable( "Cyclic", 2 ) * m3;;
gap> 2m4:= CharacterTable( "2.F4(2)" );;
gap> 2m5:= 2m4;;

##
gap> splittingClassesWithOddCentralizerIndexSplit( m3, t, m3fust,
>        GetFusionMap( 2m3, m3 ), mustsplit );
#I  class 73 splits (odd centralizer index)
#I  class 85 splits (odd centralizer index)
#I  class 101 splits (odd centralizer index)
#I  class 106 splits (odd centralizer index)
gap> splittingClassesWithOddCentralizerIndexSplit( m4, t, m4fust,
>        GetFusionMap( 2m4, m4 ), mustsplit );
gap> splittingClassesWithOddCentralizerIndexSplit( m5, t, m5fust,
>        GetFusionMap( 2m5, m5 ), mustsplit );
gap> mustnotsplit:= [];;
gap> notSplittingClassesOfSubgroupDoNotSplit( GetFusionMap( 2m4, m4 ),
>        m4fust, mustnotsplit );
#I  class 9 does not split (as in subgroup)
#I  class 12 does not split (as in subgroup)
#I  class 14 does not split (as in subgroup)
#I  class 17 does not split (as in subgroup)
#I  class 20 does not split (as in subgroup)
#I  class 21 does not split (as in subgroup)
#I  class 22 does not split (as in subgroup)
#I  class 44 does not split (as in subgroup)
#I  class 47 does not split (as in subgroup)
#I  class 49 does not split (as in subgroup)
#I  class 58 does not split (as in subgroup)
#I  class 68 does not split (as in subgroup)
#I  class 72 does not split (as in subgroup)
#I  class 79 does not split (as in subgroup)
#I  class 81 does not split (as in subgroup)
#I  class 82 does not split (as in subgroup)
#I  class 92 does not split (as in subgroup)
gap> notSplittingClassesOfSubgroupDoNotSplit( GetFusionMap( 2m5, m5 ),
>        m5fust, mustnotsplit );
#I  class 13 does not split (as in subgroup)
#I  class 18 does not split (as in subgroup)
#I  class 45 does not split (as in subgroup)
#I  class 48 does not split (as in subgroup)
#I  class 69 does not split (as in subgroup)
#I  class 80 does not split (as in subgroup)
#I  class 93 does not split (as in subgroup)

##
gap> computeContributions( m3, t, m3fust, Irr( m3 ), 10^7,
>        mustsplit, mustnotsplit );
#I  class 2 splits (contribution criterion)
#I  class 24 splits (3rd root of 2)
#I  class 25 splits (3rd root of 2)
#I  class 27 splits (3rd root of 2)
#I  class 99 splits (3rd root of 27)
#I  class 100 splits (3rd root of 27)
#I  class 53 splits (5th root of 2)
#I  class 8 splits (contribution criterion)
#I  class 63 splits (3rd root of 8)
#I  class 105 splits (5th root of 8)
#I  class 15 splits (contribution criterion)
#I  class 70 splits (3rd root of 15)
#I  class 4 does not split (contribution criterion)
#I  class 16 splits (contribution criterion)
#I  class 78 splits (3rd root of 16)
#I  class 59 splits (contribution criterion)
#I  class 30 splits (contribution criterion)
#I  class 102 splits (3rd root of 30)
#I  class 3 splits (contribution criterion)
#I  class 84 splits (contribution criterion)
#I  class 26 splits (3rd root of 3)
#I  class 28 splits (3rd root of 3)
#I  class 54 splits (5th root of 3)
#I  class 121 splits (5th root of 28)
#I  class 32 splits (contribution criterion)
#I  class 11 splits (contribution criterion)
#I  class 67 splits (contribution criterion)
#I  class 75 splits (contribution criterion)
#I  class 117 splits (contribution criterion)
#I  class 64 splits (3rd root of 11)
#I  class 71 does not split (contribution criterion)
gap> proj:= Filtered( Irr( 2m4 ), x -> x[1] <> x[2] );;
gap> projmap:= ProjectionMap( GetFusionMap( 2m4, m4 ) );;
gap> proj:= List( proj, x -> x{ projmap } );;
gap> computeContributions( m4, t, m4fust, proj, 10^7,
>        mustsplit, mustnotsplit );
#I  class 118 does not split (contribution criterion)
#I  class 31 splits (contribution criterion)
#I  class 29 does not split (contribution criterion)
gap> computeContributions( m5, t, m5fust, proj, 10^7,
>        mustsplit, mustnotsplit );
#I  class 119 does not split (contribution criterion)
gap> mustsplit;
123567811151623242526272830313233
  34515253545556596364677073757883848586
  87979899100101102103104105106107108109110117
  120121122123124125126 ]
gap> mustnotsplit;
491213141718202122294445474849586869
  7172798081829293118119 ]

##
gap> invol:= Positions( orders, 2 );
234 ]
gap> Difference( invol, m3fust );
[  ]

##
gap> open:= Difference( m3fust, Union( mustsplit, mustnotsplit ) );
193536394346509194111112114 ]

##
gap> orders{ open };
48888881616242424 ]
gap> PowerMap( t, 3 ){ [ 111112114 ] };
353639 ]
gap> poss:= Filtered( Combinations( open ),
>               x -> ( not 35 in x or 111 in x ) and
>                    ( not 36 in x or 112 in x ) and
>                    ( not 39 in x or 114 in x ) );;
gap> Length( poss );
1728

##
gap> tableHead:= function( t, tosplit, invmustlift, invmaylift )
>      local tcents, orders, splcentralizers, spl, splorders, mustlift,
>            maylift, i, pow, ord;

>      tcents:= SizesCentralizers( t );
>      orders:= OrdersClassRepresentatives( t );
>      splcentralizers:= [];
>      spl:= [];
>      splorders:= [];
>      mustlift:= ShallowCopy( invmustlift );
>      maylift:= ShallowCopy( invmaylift );

>      if invmaylift <> [] or invmustlift <> [] then
>        for i in [ 2 .. NrConjugacyClasses( t ) ] do
>          if orders[i] mod 2 = 0 then
>            pow:= PowerMap( t, orders[i] / 2 )[i];
>            if pow in invmustlift then
>              Add( mustlift, i );
>            elif pow in invmaylift then
>              Add( maylift, i );
>            fi;
>          fi;
>        od;
>      fi;

>      for i in [ 1 .. NrConjugacyClasses( t ) ] do
>        ord:= orders[i];
>        if i in tosplit then
>          Append( spl, [ i, i ] );
>          Append( splcentralizers, tcents[i] * [ 22 ] );
>          if orders[i] mod 2 = 1 then
>            Append( splorders, [ ord, 2 * ord ] );
>          elif i in mustlift then
>            Append( splorders, [ 2 * ord, 2 * ord ] );
>          elif i in maylift then
>            Append( splorders, [ [ ord, 2 * ord ], [ ord, 2 * ord ] ] );
>          else
>            Append( splorders, [ ord, ord ] );
>          fi;
>        else
>          Add( spl, i );
>          Add( splcentralizers, tcents[i] );
>          if i in mustlift then
>            Add( splorders, 2 * ord );
>          elif i in maylift then
>            Add( splorders, [ ord, 2 * ord ] );
>          else
>            Add( splorders, ord );
>          fi;
>        fi;
>      od;

>      return ConvertToCharacterTableNC( rec(
>                 UnderlyingCharacteristic:= 0,
>                 OrdersClassRepresentatives:= splorders,
>                 SizesCentralizers:= splcentralizers,
>                 Size:= splcentralizers[1],
>                 ComputedClassFusions:= [ rec( name:= Identifier( t ),
>                     map:= spl ) ],
>               ) );
>  end;;

##
gap> initialFusion:= function( 2s, 2t, 2sfuss, 2tfust, sfust, defined )
>      local fus, comp, pre, imgs;

>      # Use element orders and centralizer orders.
>      fus:= InitFusion( 2s, 2t );

>      # Use the commutative diagram.
>      comp:= CompositionMaps( InverseMap( 2tfust ),
>                              CompositionMaps( sfust, 2sfuss ) );
>      if MeetMaps( fus, comp ) <> true then
>        return fail;
>      fi;

>      # Define classes that are not yet defined.
>      defined:= ShallowCopy( defined );
>      for pre in InverseMap( 2sfuss ) do
>        if IsList( pre ) then
>          imgs:= fus{ pre };
>          if imgs[1] = imgs[2] and IsList( imgs[1] ) then
>            if Intersection( defined, 2tfust{ imgs[1] } ) = [] then
>              # The classes in preimage and image split, and we may choose.
>              fus[ pre[1] ]:= imgs[1][1];
>              fus[ pre[2] ]:= imgs[1][2];
>              UniteSet( defined, 2tfust{ imgs[1] } );
>            fi;
>          fi;
>        elif IsList( fus[ pre ] ) then
>          # The class splits in the image but not in the preimage,
>          # we should have noticed this earlier.
>          return fail;
>        fi;
>      od;

>      return fus;
>    end;;

##
gap> useInducedClassFunction:= function( 2s, 2t, chi, 2sfuss, 2sfus2t )
>      local localfus, unknown, i, swaps, inv, pair, poss, choices, choice,
>            map, ind, para, new;

>      # Remove indet. in places where the character is zero.
>      localfus:= ShallowCopy( 2sfus2t );
>      unknown:= [];
>      for i in [ 1 .. Length( 2sfus2t ) ] do
>        if IsList( 2sfus2t[i] ) then
>          if chi[i] = 0 then
>            localfus[i]:= localfus[i][1];
>          else
>            Add( unknown, i );
>          fi;
>        fi;
>      od;

>      # Collect the possible swaps.
>      swaps:= [];
>      inv:= InverseMap( 2sfuss );
>      for i in [ 1 .. Length( localfus ) ] do
>        if IsList( localfus[i] ) then
>          pair:= inv[ 2sfuss[i] ];
>          Add( swaps, ( pair[1], pair[2] ) );
>          localfus{ pair }:= localfus[i];
>        fi;
>      od;

>      # Try all possibilities (hopefully not too many).
>      poss:= [];
>      if IsEmpty( swaps ) then
>        choices:= [ [] ];
>      else
>        choices:= IteratorOfCombinations( swaps );
>      fi;
>      for choice in choices do
>        map:= Permuted( localfus, Product( choice, () ) );
>        ind:= InducedClassFunctionsByFusionMap( 2s, 2t, [ chi ], map )[1];
>        if IsInt( ScalarProduct( 2t, ind, ind ) ) then
>          Add( poss, map );
>        fi;
>      od;

>      if poss = [] then
>        return false;
>      fi;

>      para:= Parametrized( poss );
>      new:= Filtered( unknown, i -> IsInt( para[i] ) );
>      if new <> [] then
>        2sfus2t{ new }:= para{ new };
>      fi;

>      return true;
>    end;;

##
gap> good:= [];;
gap> ker:= ClassPositionsOfKernel( GetFusionMap( 2m3, m3 ) );;
gap> testcharsm3:= Filtered( Irr( 2m3 ),
>        chi -> not IsSubset( ClassPositionsOfKernel( chi ), ker ) );;
gap> runOneTest:= function( s, 2s, t, 2t, sfust, testchars, defined )
>      local fus, pos, l, chi;
>      fus:= initialFusion( 2s, 2t, GetFusionMap( 2s, s ),
>                           GetFusionMap( 2t, t ), sfust, defined );
>      # Process the irreducible characters,
>      # ordered by increasing indeterminateness.
>      pos:= PositionsProperty( fus, IsList );
>      testchars:= ShallowCopy( testchars );
>      l:= - List( testchars, x -> Number( pos, i -> x[i] = 0 ) );
>      SortParallel( l, testchars );
>      for chi in testchars do
>        if useInducedClassFunction( 2s, 2t, chi, GetFusionMap( 2s, s ),
>                                    fus ) = false then
>          # This splitting is not possible.
>          return fail;
>        fi;
>      od;
>      return fus;
>    end;;
gap> defined:= [];;
gap> for choice in poss do
>      2t:= tableHead( t, Union( mustsplit, choice ), [], [] );
>      fus:= runOneTest( m3, 2m3, t, 2t, m3fust, testcharsm3, defined );
>      if fus <> fail then
>        Add( good, choice );
>      fi;
>    od;
gap> Length( good );
1

##
gap> choice:= good[1];
1936394346509194111112114 ]
gap> UniteSet( mustsplit, choice );
gap> oddRootsOfSplittingClassesSplit( t, mustsplit );
#I  class 74 splits (3rd root of 19)
#I  class 76 splits (3rd root of 19)
#I  class 77 splits (3rd root of 19)
gap> UniteSet( mustnotsplit, Difference( open, choice ) );
gap> Difference( [ 1 .. Length( orders ) ],
>                Union( mustsplit, mustnotsplit ) );
1037384041425760616265668889909596113
  115116 ]
gap> 2t:= tableHead( t, mustsplit, [], [] );;
gap> NrConjugacyClasses( 2t );
202
gap> 2m3fus2t:= runOneTest( m3, 2m3, t, 2t, m3fust, testcharsm3, defined );
1355781012161814182323222526312329
  31323334364440384247404446495155537171
  5762586367716875768078828484999291103
  1071111071119997109111110121115125126127131
  129135133144145140140148150156158166166170168
  18117618217818918519319124667911131619
  15192424222625312430313233353745413943
  48414546505256547272576359626872677577
  8179838585100939110410811210811210098109
  112110122116125126128132130136134145144141141
  149151157159167167171169182177181179190186194
  192 ]
gap> defined:= Set( m3fust );;

##
gap> ind2m3:= InducedClassFunctionsByFusionMap( 2m3, 2t, testcharsm3,
>                 2m3fus2t );;

##
gap> s:= CharacterTable( "Fi22" );;
gap> fus:= PossibleClassFusions( s, t );;
gap> rep:= RepresentativesFusions( s, fus, Group( () ) );;
gap> Length( rep );
3
gap> List( rep, map -> Intersection( map, oneorbit ) );
[ [ 11 ], [ 12 ], [ 13 ] ]

##
gap> m7:= s;;  m7fust:= rep[1];;
gap> m8:= s;;  m8fust:= rep[2];;
gap> m9:= s;;  m9fust:= rep[3];;

##
gap> open:= Difference( m7fust, Union( mustsplit, mustnotsplit ) );
[  ]
gap> 2s:= CharacterTable( "2.Fi22" );;
gap> initialFusion( 2s, 2t, GetFusionMap( 2s, m7 ),
>        GetFusionMap( 2t, t ), m7fust, defined );
fail

##
gap> 2m7:= CharacterTable( "Cyclic", 2 ) * m7;;

##
gap> parametersFABR:= rec( maxlen:= 10, minamb:= 1, maxamb:= 10^6,
>        quick:= false, contained:= ContainedPossibleCharacters );;

##
gap> ker:= ClassPositionsOfKernel( GetFusionMap( 2m7, m7 ) );;
gap> testcharsm7:= Filtered( Irr( 2m7 ),
>        chi -> not IsSubset( ClassPositionsOfKernel( chi ), ker ) );;
gap> fus:= initialFusion( 2m7, 2t, GetFusionMap( 2m7, m7 ),
>              GetFusionMap( 2t, t ), m7fust, defined );;
gap> possfus:= FusionsAllowedByRestrictions( 2m7, 2t, testcharsm7,
>                  ind2m3, fus, parametersFABR );
[ [ 145781210121824262931343743474039
      465249445051556362687578808083848688
      1039999108117119113122109112115127127132
      135140140152154157158167170172174181182194
      236791311131923253031353642484138
      465150454952566263677579818182858789
      104100100107118120114121109111116128128131
      136141141153155156159166171173175182181193 ], 
  [ 145781210121824262931343743474039
      465249445051556263687578808083848688
      1039999108117119113122109112115127127132
      135140140152154157158167170172174182181194
      236791311131923253031353642484138
      465150454952566362677579818182858789
      104100100107118120114121109111116128128131
      136141141153155156159166171173175181182193 ] ]
gap> poss2m7fus2t:= possfus;;
gap> UniteSet( defined, Set( m7fust ) );
gap> possind2m7:= List( poss2m7fus2t,
>        map -> Set( InducedClassFunctionsByFusionMap( 2m7, 2t,
>                        testcharsm7, map ) ) );;
gap> List( possind2m7, Length );
6363 ]
gap> Length( Intersection( possind2m7 ) );
39

##
gap> 2s:= 2m7;
CharacterTable( "C2xFi22" )
gap> open:= Difference( m8fust, Union( mustsplit, mustnotsplit ) );
4065115 ]
gap> good:= [];;
gap> for choice in Combinations( open ) do
>      2t:= tableHead( t, Union( mustsplit, choice ), [], [] );
>      fus:= initialFusion( 2s, 2t, GetFusionMap( 2s, m8 ),
>                GetFusionMap( 2t, t ), m8fust, defined );;
>      if FusionsAllowedByRestrictions( 2s, 2t, testcharsm7, ind2m3, fus,
>             parametersFABR ) <> [] then
>        Add( good, choice );
>      fi;
>    od;
gap> good;
[  ]

##
gap> 2m8:= CharacterTable( "2.Fi22" );;

##
gap> notSplittingClassesOfSubgroupDoNotSplit( GetFusionMap( 2m8, m8 ),
> m8fust, mustnotsplit );
#I  class 40 does not split (as in subgroup)
#I  class 65 does not split (as in subgroup)
#I  class 115 does not split (as in subgroup)
gap> 2t:= tableHead( t, mustsplit, [], [] );;

##
gap> ker:= ClassPositionsOfKernel( GetFusionMap( 2m8, m8 ) );;
gap> testcharsm8:= Filtered( Irr( 2m8 ),
>        chi -> not IsSubset( ClassPositionsOfKernel( chi ), ker ) );;
gap> fus:= initialFusion( 2m8, 2t, GetFusionMap( 2m8, m8 ),
>        GetFusionMap( 2t, t ), m8fust, defined );;
gap> ind:= Concatenation( ind2m3, Intersection( possind2m7 ) );;
gap> possfus:= FusionsAllowedByRestrictions( 2m8, 2t, testcharsm8, ind,
>        fus, parametersFABR );
[ [ 1234567891213101112132023242729
      303134353637424347484041383946515249
      504445495051525556646469757578798081
      80818283848586878889105101101101107108
      116115120119113114123109111112117118127128
      127128131132135136142142153152155154156157
      158159166167170171173172175174183183193194 ] ]
gap> 2m8fus2t:= possfus[1];;
gap> UniteSet( defined, m8fust );
gap> ind2m8:= InducedClassFunctionsByFusionMap( 2m8, 2t, testcharsm8,
>                 2m8fus2t );;

##
gap> Filtered( orbsbeta, l -> Intersection( l, [ 4065115 ] ) <> [] );
[ [ 4041 ], [ 6566 ], [ 115116 ] ]
gap> UniteSet( mustnotsplit, [ 4166116 ] );
gap> open:= Difference( m9fust, Union( mustsplit, mustnotsplit ) );
[  ]
gap> 2m9:= 2m8;;
gap> testcharsm9:= testcharsm8;;
gap> fus:= initialFusion( 2m9, 2t, GetFusionMap( 2m9, m9 ),
>        GetFusionMap( 2t, t ), m9fust, defined );;
gap> ind:= Concatenation( ind2m3, Intersection( possind2m7 ), ind2m8 );;
gap> possfus:= FusionsAllowedByRestrictions( 2m9, 2t, testcharsm9, ind,
>        fus, parametersFABR );
[ [ 1234567891213101112132123242829
      303134353637424347484041383946515249
      504445495051525556656570757578798081
      80818283848586878889106102102102107108
      116115118117113114124109111112119120127128
      127128131132135136143143153152155154156157
      158159166167170171173172175174184184193194 ] ]
gap> 2m9fus2t:= possfus[1];;
gap> UniteSet( defined, m9fust );
gap> ind2m9:= InducedClassFunctionsByFusionMap( 2m9, 2t, testcharsm9,
>                 2m9fus2t );;

##
gap> open:= Difference( m4fust, Union( mustsplit, mustnotsplit ) );
95 ]
gap> ker:= ClassPositionsOfKernel( GetFusionMap( 2m4, m4 ) );;
gap> testcharsm4:= Filtered( Irr( 2m4 ),
>        chi -> not IsSubset( ClassPositionsOfKernel( chi ), ker ) );;
gap> good:= [];;
gap> for choice in Combinations( open ) do
>      2t:= tableHead( t, Union( mustsplit, choice ), [], [] );
>      fus:= runOneTest( m4, 2m4, t, 2t, m4fust, testcharsm4, [] );
>      if fus <> fail then
>        Add( good, [ choice, 2t ] );
>      fi;
>    od;
gap> List( good, l -> l[1] );
[ [  ] ]
gap> UniteSet( mustnotsplit, open );
gap> 2t:= good[1][2];;
gap> 2tfust:= GetFusionMap( 2t, t );;
gap> fus:= initialFusion( 2m4, 2t, GetFusionMap( 2m4, m4 ),
>                         2tfust, m4fust, defined );;
gap> ind:= Concatenation( ind2m3, Intersection( possind2m7 ), ind2m8,
>                         ind2m9 );;
gap> possfus:= FusionsAllowedByRestrictions( 2m4, 2t, testcharsm4, ind,
>        fus, parametersFABR );
[ [ 123465567789101112131620141520
      202423242322272727313123242930313233
      343536374544414038394243484740414445
      464650495251555653547373735757646458
      596464697369757677808178798283858484
      85101101929391105108107112111108107112111
      1011019798109109111112110123117118125126
      127128131132130129135136133134146146146146
      142142148149150151156157159158167166167166
      170171168169183183177176183183178179189190
      187187194193192191 ] ]
gap> 2m4fus2t:= possfus[1];;
gap> UniteSet( defined, Set( m4fust ) );
gap> ind2m4:= InducedClassFunctionsByFusionMap( 2m4, 2t, testcharsm4,
>                 2m4fus2t );;

##
gap> open:= Difference( m5fust, Union( mustsplit, mustnotsplit ) );
96 ]
gap> UniteSet( mustnotsplit, open );

##
gap> ker:= ClassPositionsOfKernel( GetFusionMap( 2m5, m5 ) );;
gap> testcharsm5:= Filtered( Irr( 2m5 ),
>        chi -> not IsSubset( ClassPositionsOfKernel( chi ), ker ) );;
gap> fus:= initialFusion( 2m5, 2t, GetFusionMap( 2m5, m5 ),
>              GetFusionMap( 2t, t ), m5fust, defined );;
gap> ind:= Concatenation( ind2m3, Intersection( possind2m7 ), ind2m8,
>              ind2m9, ind2m4 );;
gap> possfus:= FusionsAllowedByRestrictions( 2m5, 2t, testcharsm5,
>                  ind, fus, parametersFABR );
[ [ 123465567789101112131621141521
      212423242322282828313123242930313233
      343536374544414038394243484740414445
      464650495251555653547474745757656558
      596565707470757677808178798283858484
      85102102929391106108107112111108107112111
      1021029798109109111112110124119120125126
      127128131132130129135136133134147147147147
      143143148149150151156157159158167166167166
      170171168169184184177176184184178179189190
      188188194193192191 ] ]
gap> 2m5fus2t:= possfus[1];;
gap> UniteSet( defined, Set( m5fust ) );
gap> ind2m5:= InducedClassFunctionsByFusionMap( 2m5, 2t, testcharsm5,
>                 2m5fus2t );;

##
gap> s:= CharacterTable( "U6(2)" );;
gap> InitFusion( CharacterTable( "C6" ) * s, 2t );
fail

##
gap> 2s:= CharacterTable( "2.U6(2)" );;
gap> 2u12:= CharacterTable( "C3" ) * 2s;;
gap> orders2u12:= OrdersClassRepresentatives( 2u12 );;
gap> inv:= First( ClassPositionsOfCentre( 2u12 ), 
>                 i -> orders2u12[i] = 2 );;
gap> ker:= [ 1, inv ];;
gap> u12:= 2u12 / ker;;
gap> testcharsu12:= Filtered( Irr( 2u12 ),
>        chi -> not IsSubset( ClassPositionsOfKernel( chi ), ker ) );;

##
gap> fus:= PossibleClassFusions( u12, t );;
gap> rep:= RepresentativesFusions( u12, fus, Group( () ) );;
gap> Length( rep );
2
gap> possu12fust:= rep;;

##
gap> List( possu12fust, map -> Difference( map,
>                         Union( mustsplit, mustnotsplit ) ) );
[ [ 103757606162113 ], [ 103757606162113 ] ]
gap> possnotsplit:= List( [ 12 ], i -> ShallowCopy( mustnotsplit ) );;
gap> for i in [ 12 ] do
>      notSplittingClassesOfSubgroupDoNotSplit(
>          GetFusionMap( 2u12, u12 ), rep[i], possnotsplit[i] );
>    od;
#I  class 10 does not split (as in subgroup)
#I  class 37 does not split (as in subgroup)
#I  class 57 does not split (as in subgroup)
#I  class 60 does not split (as in subgroup)
#I  class 61 does not split (as in subgroup)
#I  class 62 does not split (as in subgroup)
#I  class 113 does not split (as in subgroup)
#I  class 10 does not split (as in subgroup)
#I  class 37 does not split (as in subgroup)
#I  class 57 does not split (as in subgroup)
#I  class 60 does not split (as in subgroup)
#I  class 61 does not split (as in subgroup)
#I  class 62 does not split (as in subgroup)
#I  class 113 does not split (as in subgroup)
gap> Set( possnotsplit );
[ [ 491012131417182021222935374041444547
      484957586061626566686971727980818292
      939596113115116118119 ] ]
gap> mustnotsplit:= possnotsplit[1];;

##
gap> s:= CharacterTable( "O10-(2)" );;
gap> fus:= PossibleClassFusions( s, t );;
gap> rep:= RepresentativesFusions( s, fus, Group( () ) );;
gap> Length( rep );
2
gap> m10:= s;;  possm10fust:= rep;;

##
gap> 2m10:= CharacterTable( "Cyclic", 2 ) * m10;;

##
gap> List( possm10fust, map -> Difference( map,
>                         Union( mustsplit, mustnotsplit ) ) );
[ [ 42 ], [ 42 ] ]
gap> possnotsplit:= List( [ 12 ], i -> ShallowCopy( mustnotsplit ) );;
gap> for i in [ 12 ] do
>      computeContributions( m10, t, possm10fust[i], Irr( m10 ), 10^7,
>          ShallowCopy( mustsplit ), possnotsplit[i] );
>    od;
#I  class 42 does not split (contribution criterion)
#I  class 42 does not split (contribution criterion)
gap> Set( possnotsplit );
[ [ 491012131417182021222935374041424445
      474849575860616265666869717279808182
      92939596113115116118119 ] ]
gap> mustnotsplit:= possnotsplit[1];;

##
gap> fus:= List( rep, map -> initialFusion( 2m10, 2t,
>                 GetFusionMap( 2m10, m10 ), GetFusionMap( 2t, t ),
>                 map, defined ) );;
gap> ker:= ClassPositionsOfKernel( GetFusionMap( 2m10, m10 ) );;
gap> testcharsm10:= Filtered( Irr( 2m10 ),
>        chi -> not IsSubset( ClassPositionsOfKernel( chi ), ker ) );;
gap> ind:= Concatenation( ind2m3, ind2m4, ind2m5,
>              Intersection( possind2m7 ), ind2m8, ind2m9 );;
gap> possfus:= List( fus, map -> FusionsAllowedByRestrictions( 2m10, 2t,
>                  testcharsm10, ind, map, parametersFABR ) );
[ [ [ 13557108881012161417232223312933
          3434383636364444444040364942423840
          4247404447474651535857606675767878
          7878828484868892909097949490111111
          1119291941071071131079596111110109129
          133133133135133135135148150153155153155
          158164166168178176180180191191191193195
          1971971951992012466711999111316
          1517242224313033353539373737454545
          4141375043433941434841454848465254
          5957606675777979797983858587899390
          9098949490112112112939194108108114108
          9596112110109130134134134136134136136149
          151152154152154159165167169179177180180
          192192192194196198198196200202 ] ], 
  [ [ 13557108881012161417232223312933
          3434383636364444444040364942423840
          4247404447474651535857606675767878
          7878828484868892909097949490111111
          1119291941071071131079596111110109129
          133133133135133135135148150155153155153
          158164166168178176180180191191191193195
          1971971951992012466711999111316
          1517242224313033353539373737454545
          4141375043433941434841454848465254
          5957606675777979797983858587899390
          9098949490112112112939194108108114108
          9596112110109130134134134136134136136149
          151154152154152159165167169179177180180
          192192192194196198198196200202 ] ] ]
gap> List( possfus, Length );
11 ]
gap> poss2m10fus2t:= Concatenation( possfus );;
gap> Set( possm10fust[1] ) = Set( possm10fust[2] );
true
gap> UniteSet( defined, possm10fust[1] );

##
gap> possind2m10:= List( poss2m10fus2t,
>        map -> Set( InducedClassFunctionsByFusionMap( 2m10, 2t,
>                        testcharsm10, map ) ) );;
gap> possind2m10[1] = possind2m10[2];
true
gap> ind2m10:= possind2m10[1];;

##
gap> fus:= List( possu12fust, map -> initialFusion( 2u12, 2t,
>                 GetFusionMap( 2u12, u12 ), GetFusionMap( 2t, t ),
>                 map, defined ) );;
gap> ind:= Concatenation( ind2m3, ind2m4, ind2m5,
>              Intersection( possind2m7 ), ind2m8, ind2m9, ind2m10 );;
gap> possfus:= List( fus, map -> FusionsAllowedByRestrictions( 2u12, 2t,
>                  testcharsu12, ind, map, parametersFABR ) );
[ [ [ 1234567891213101116171819202123
          2431343542434243363747484041383944
          4549505556606263646578797879808182
          8386878889919190909596103104105106
          107108135136153152155154893637404146
          1011891213909499100101102107108109
          1351363637363738394041444542434748
          5152170171180181182183184787978798081
          19319419519619719890909293949499100101
          1021111121331341531521551548936374041
          461011891213909499100101102107108109
          1351363637363738394041444542434748
          5152170171180181182183184787978798081
          19319419519619719890909293949499100101
          102111112133134153152155154 ] ], 
  [ [ 1234567891213101116171819202123
          2431343542434243363747484041383944
          4549505556606263646578797879808182
          8386878889919190909596103104105106
          107108135136155154153152893637404146
          1011891213909499100101102107108109
          1351363637363738394041444542434748
          5152170171180181182183184787978798081
          19319419519619719890909293949499100101
          1021111121331341551541531528936374041
          461011891213909499100101102107108109
          1351363637363738394041444542434748
          5152170171180181182183184787978798081
          19319419519619719890909293949499100101
          102111112133134155154153152 ] ] ]
gap> List( possfus, Length );
11 ]
gap> poss2u12fus2t:= Concatenation( possfus );;
gap> Set( possu12fust[1] ) = Set( possu12fust[2] );
true
gap> UniteSet( defined, possu12fust[1] );

##
gap> possind2u12:= List( poss2u12fus2t,
>        map -> Set( InducedClassFunctionsByFusionMap( 2u12, 2t,
>                        testcharsu12, map ) ) );;
gap> possind2u12[1] = possind2u12[2];
true
gap> ind2u12:= possind2u12[1];;

##
gap> posssplit:= Difference( [ 1 .. Length( orders ) ],
>                            Union( mustsplit, mustnotsplit ) );
38888990 ]
gap> NrConjugacyClasses( t );
126
gap> NrConjugacyClasses( 2t );
202

##
gap> ForAll( ind2u12,
>        chi -> ForAll( possind2m7[1],
>                   psi -> IsInt( ScalarProduct( 2t, chi, psi ) ) ) );
false

##
gap> 2m7fus2t:= poss2m7fus2t[2];;
gap> ind2m7:= possind2m7[2];;

##
gap> nothit:= Difference( [ 1 .. Length( orders ) ],
>                 Flat( [ m3fust, m4fust, m5fust, m7fust, m8fust, m9fust,
>                         possm10fust, possu12fust ] ) );
38888990103104 ]
gap> orders{ nothit };
81616161919 ]

##
gap> for p in [ 2 .. Maximum( OrdersClassRepresentatives( 2t ) ) ] do
>      if IsPrimeInt( p ) then
>        PowerMap( t, p );
>        pow:= InitPowerMap( 2t, p );
>        comp:= CompositionMaps( InverseMap( GetFusionMap( 2t, t ) ),
>                   CompositionMaps( PowerMap( t, p ),
>                      GetFusionMap( 2t, t ) ) );
>        MeetMaps( pow, comp );
>        ComputedPowerMaps( 2t )[p]:= pow;
>      fi;
>    od;

##
gap> pos:= Positions( OrdersClassRepresentatives( 2t ), 38 );
161163 ]
gap> indcyc:= Filtered( InducedCyclic( 2t, pos, "all" ),
>                       chi -> chi[1] = - chi[2] );;

##
gap> pow:= ComputedPowerMaps( 2t )[5];;
gap> comp:= CompositionMaps( CompositionMaps( 2m3fus2t, PowerMap( 2m3, 5 ) ),
>                            InverseMap( 2m3fus2t ) );;
gap> MeetMaps( pow, comp );
true
gap> comp:= CompositionMaps( CompositionMaps( 2m7fus2t, PowerMap( 2m7, 5 ) ),
>                            InverseMap( 2m7fus2t ) );;
gap> MeetMaps( pow, comp );
true
gap> fus:= Parametrized( poss2m10fus2t );;
gap> comp:= CompositionMaps( CompositionMaps( fus, PowerMap( 2m10, 5 ) ),
>                            InverseMap( fus ) );;
gap> MeetMaps( pow, comp );
true
gap> ForAll( pow, IsInt );
true
gap> Intersection( PowerMap( t, 5 ), posssplit ) = posssplit;
true
gap> ForAll( posssplit, i -> Positions( PowerMap( t, 5 ), i ) = [ i ] );
true
gap> ind:= Concatenation(
>              [ ind2m3, ind2m4, ind2m5, ind2m7, ind2m8, ind2m9 ] );;
gap> minus:= List( ind, chi -> MinusCharacter( chi, pow, 5 ) );;
gap> ind:= Concatenation(
>              [ ind2m3, ind2m4, ind2m5, minus, ind2m7, ind2m8, ind2m9,
>                ind2u12, ind2m10, indcyc ] );;

##
gap> lll:= LLL( 2t, ind );;
gap> Length( lll.irreducibles );
2
gap> irr:= Set( lll.irreducibles );;
gap> red:= Reduced( 2t, irr, lll.remainders );;
gap> lll:= LLL( 2t, red.remainders );;
gap> Length( lll.irreducibles );
2
gap> UniteSet( irr, lll.irreducibles );
gap> red:= Reduced( 2t, irr, lll.remainders );;
gap> lll:= LLL( 2t, red.remainders );;
gap> Sum( lll.norms );
772
gap> lll:= LLL( 2t, lll.remainders, "sort" );;
gap> Sum( lll.norms );
729
gap> Length( lll.irreducibles );
0
gap> red:= Reduced( 2t, irr, lll.remainders );;
gap> lll:= LLL( 2t, red.remainders );;
gap> Sum( lll.norms );
710

##
gap> Length( lll.norms );
72
gap> gram:= MatScalarProducts( 2t, lll.remainders, lll.remainders );;
gap> emb:= OrthogonalEmbeddings( gram, 72 + 4 );;
gap> Length( emb.solutions );
1
gap> Length( emb.solutions[1] );
72

##
gap> dec:= Decreased( 2t, lll.remainders,
>                     emb.vectors{ emb.solutions[1] } );;
gap> Length( dec.irreducibles );
72
gap> UniteSet( irr, dec.irreducibles );
gap> factchars:= RestrictedClassFunctions( Irr( t ), 2t );;
gap> irr:= Concatenation( factchars, irr );;
gap> DimensionsMat( irr );
202202 ]

##
gap> Size( 2t ) = Sum( List( irr, chi -> chi[1]^2 ) );
true
gap> SetIrr( 2t, List( irr, x -> Character( 2t, x ) ) );

##
gap> for p in [ 2 .. Maximum( OrdersClassRepresentatives( 2t ) ) ] do
>      if IsPrimeInt( p ) then
>        poss:= PossiblePowerMaps( 2t, p,
>                   rec( powermap:= ComputedPowerMaps( 2t )[p] ) );
>        if Length( poss ) <> 1 then
>          Error( "problem with ", Ordinal( p ), " power map" );
>        fi;
>        ComputedPowerMaps( 2t )[p]:= poss[1];
>      fi;
>    od;
gap> lib:= CharacterTable( "2.2E6(2)" );;
gap> tr:= TransformingPermutationsCharacterTables( lib, 2t );;
gap> IsRecord( tr );
true

##
gap> tr.columns;
(25,26)(62,63)(67,68)(121,122)(144,145)(152,153)(154,155)(172,173)(174,
175)(181,182)

##
gap> t:= CharacterTable( "2E6(2)" );;
gap> t2:= CharacterTable( "2E6(2).2" );;
gap> 2t:= CharacterTable( "2.2E6(2)" );;
gap> tfust2:= GetFusionMap( t, t2 );;
gap> 2tfust:= GetFusionMap( 2t, t );;
gap> orbsbeta:= Filtered( InverseMap( tfust2 ), IsList );
[ [ 1213 ], [ 1718 ], [ 4041 ], [ 4445 ], [ 4748 ], [ 5556 ], 
  [ 6162 ], [ 6566 ], [ 6869 ], [ 7677 ], [ 7980 ], [ 8990 ], 
  [ 9293 ], [ 9596 ], [ 99100 ], [ 103104 ], [ 109110 ], 
  [ 115116 ], [ 118119 ], [ 123124 ], [ 125126 ] ]
gap> beta:= Product( List( orbsbeta, x -> ( x[1], x[2] ) ) );
(12,13)(17,18)(40,41)(44,45)(47,48)(55,56)(61,62)(65,66)(68,69)(76,77)(79,
80)(89,90)(92,93)(95,96)(99,100)(103,104)(109,110)(115,116)(118,119)(123,
124)(125,126)
gap> aut:= AutomorphismsOfTable( 2t );;
gap> Size( aut );
256
gap> filt:= Filtered( Elements( aut ),
>               x -> OnTuples( 2tfust, beta ) = Permuted( 2tfust, x ) );;
gap> Length( filt );
1
gap> betalift:= filt[1];;

##
gap> 2tfus2t2:= [];;
gap> max:= 0;;
gap> for i in [ 1 .. NrConjugacyClasses( 2t ) ] do
>      img:= i^betalift;
>      if img = i then
>        # no fusion
>        max:= max + 1;
>        2tfus2t2[i]:= max;
>      elif i < img then
>        # fusion of two classes
>        max:= max + 1;
>        2tfus2t2[i]:= max;
>        2tfus2t2[ img ]:= max;
>      fi;
>    od;
gap> max;
174

##
gap> n:= NrConjugacyClasses( 2t );
202
gap> f:= NrMovedPoints( betalift ) / 2;
28
gap> 2 * n - 3 * f;  n - f;  n - 2 * f;
320
174
146

##
gap> NrConjugacyClasses( t2 ) - Maximum( tfust2 );
84
gap> 320 - NrConjugacyClasses( t2 );
131

##
gap> inv:= InverseMap( 2tfust );;
gap> nonsplit:= PositionsProperty( inv, IsInt);;
gap> mustnotsplit:= Set( tfust2{ nonsplit } );
491012131618192027333536383941434451
  52545558606263697071777880829698100 ]
gap> split:= PositionsProperty( inv, IsList );;
gap> mustsplit:= Set( tfust2{ split } );
123567811141517212223242526282930
  31323437404245464748495053565759616465
  66676872737475767981838485868788899091
  929394959799101102103104105 ]
gap> selfCentralizingClassesSplit( t2, mustsplit );
#I  class 172 splits (self-centralizing)
#I  class 180 splits (self-centralizing)
#I  class 181 splits (self-centralizing)
#I  class 182 splits (self-centralizing)
#I  class 183 splits (self-centralizing)
#I  class 184 splits (self-centralizing)
#I  class 185 splits (self-centralizing)
#I  class 188 splits (self-centralizing)
#I  class 189 splits (self-centralizing)

##
gap> c2:= CharacterTable( "C2" );;
gap> s:= CharacterTable( "F4(2)" );;
gap> s2:= c2 * s;;
gap> 2s:= s * c2;;
gap> 2s2:= s2 * c2;;
gap> sfuss2:= GetFusionMap( s, s2 );;
gap> 2sfuss:= GetFusionMap( 2s, s );;
gap> 2s2fuss2:= GetFusionMap( 2s2, s2 );;

##
gap> 2s2alt:= c2 * 2s;;
gap> Irr( 2s2alt ) = Irr( 2s2 );
true
gap> ComputedPowerMaps( 2s2alt ) = ComputedPowerMaps( 2s2 );
true
gap> 2sfus2s2:= GetFusionMap( 2s, 2s2alt );;

##
gap> CompositionMaps( sfuss2, 2sfuss )
>        = CompositionMaps( 2s2fuss2, 2sfus2s2 );
true

##
gap> sfust:= PossibleClassFusions( s, t );;
gap> rep:= RepresentativesFusions( AutomorphismsOfTable( s ),
>              sfust, Group( () ) );;
gap> Length( rep );
3
gap> comp:= List( rep, map -> CompositionMaps( InverseMap( 2tfust ),
>                                 CompositionMaps( map, 2sfuss ) ) );;
gap> poss:= List( comp, map -> PossibleClassFusions( 2s, 2t,
>                                  rec( fusionmap:= map ) ) );;
gap> List( poss, Length );
100 ]
gap> sfust:= rep[1];;
gap> 2sfus2t:= poss[1][1];;
gap> CompositionMaps( sfust, 2sfuss )
>        = CompositionMaps( 2tfust, 2sfus2t );
true

##
gap> comp:= CompositionMaps( CompositionMaps( tfust2, sfust ),
>                            InverseMap( sfuss2 ) );;
gap> poss:= PossibleClassFusions( s2, t2, rec( fusionmap:= comp ) );;
gap> Length(  poss );
1
gap> s2fust2:= poss[1];;
gap> CompositionMaps( tfust2, sfust )
>        = CompositionMaps( s2fust2, sfuss2 );
true

##
gap> splittingClassesWithOddCentralizerIndexSplit( s2, t2, s2fust2,
>        2s2fuss2, mustsplit );
#I  class 106 splits (odd centralizer index)
#I  class 107 splits (odd centralizer index)
#I  class 114 splits (odd centralizer index)
#I  class 115 splits (odd centralizer index)
#I  class 117 splits (odd centralizer index)
#I  class 133 splits (odd centralizer index)
#I  class 116 splits (odd centralizer index)
#I  class 118 splits (odd centralizer index)
#I  class 119 splits (odd centralizer index)
#I  class 148 splits (odd centralizer index)
#I  class 147 splits (odd centralizer index)
#I  class 156 splits (odd centralizer index)
#I  class 155 splits (odd centralizer index)
#I  class 134 splits (odd centralizer index)
#I  class 140 splits (odd centralizer index)
#I  class 143 splits (odd centralizer index)
#I  class 149 splits (odd centralizer index)
#I  class 176 splits (odd centralizer index)
#I  class 175 splits (odd centralizer index)
#I  class 157 splits (odd centralizer index)
#I  class 174 splits (odd centralizer index)
#I  class 177 splits (odd centralizer index)

##
gap> c3:= CharacterTable( "Cyclic", 3 );;
gap> h:= c3 * CharacterTable( "U6(2)" );;
gap> poss:= PossibleClassFusions( h, t );;
gap> cen:= ClassPositionsOfCentre( h );
14793 ]
gap> Set( List( poss, x -> x{ cen } ) );
[ [ 155 ] ]
gap> SizesCentralizers( t )[5] = Size( h );
true

##
gap> h:= CharacterTable( "U6(2)" );;
gap> pos:= PositionsProperty( SizesCentralizers( t2 ),
>                             x -> x mod Size( h ) = 0 );
125 ]
gap> Difference( pos, tfust2 );
[  ]

##
gap> h:= c3 * CharacterTable( "U6(2).2" );;
gap> possfus:= PossibleClassFusions( h, t2 );;
gap> inv:= Positions( OrdersClassRepresentatives( h ), 2 );
2343839 ]
gap> outerinv:= Difference( inv, ClassPositionsOfDerivedSubgroup( h ) );
3839 ]
gap> imgs:= Set( List( possfus, x -> x{ outerinv } ) );
[ [ 106107 ] ]
gap> List( imgs[1], x -> Positions( s2fust2, x ) );
[ [ 9698 ], [ 9799100 ] ]
gap> h:= CharacterTable( "2.U6(2).2" );
CharacterTable( "2.U6(2).2" )
gap> Positions( OrdersClassRepresentatives( h ), 2 );
23456765666768 ]

##
gap> c3:= CharacterTable( "Cyclic", 3 );;
gap> 2u:= c3 * CharacterTable( "2.U6(2)" );;
gap> 2uorders:= OrdersClassRepresentatives( 2u );;
gap> ker:= First( ClassPositionsOfCentre( 2u ), i -> 2uorders[i] = 2 );
2
gap> u:= 2u / [ 1, ker ];;
gap> 2u2:= c3 * CharacterTable( "2.U6(2).2" );;
gap> 2u2orders:= OrdersClassRepresentatives( 2u2 );;
gap> ker:= First( ClassPositionsOfCentre( 2u2 ), i -> 2u2orders[i] = 2 );
2
gap> u2:= 2u2 / [ 1, ker ];;
gap> 2ufusu:= GetFusionMap( 2u, u );;
gap> 2u2fusu2:= GetFusionMap( 2u2, u2 );;
gap> poss:= PossibleClassFusions( 2u, 2u2 );;
gap> rep:= RepresentativesFusions( 2u, poss, Group( () ) );;
gap> Length( rep );
1
gap> 2ufus2u2:= rep[1];;
gap> ufusu2:= CompositionMaps( 2u2fusu2,
>              CompositionMaps( 2ufus2u2, InverseMap( 2ufusu ) ) );;

##
gap> CompositionMaps( ufusu2, 2ufusu )
>        = CompositionMaps( 2u2fusu2, 2ufus2u2 );
true

##
gap> poss:= PossibleClassFusions( 2u, 2t );;
gap> rep:= RepresentativesFusions( 2u, poss, Group( () ) );;
gap> Length( rep );
2
gap> poss2ufus2t:= rep;;
gap> possufust:= List( rep, map -> CompositionMaps( 2tfust,
>        CompositionMaps( map, InverseMap( 2ufusu ) ) ) );;
gap> Length( Set( possufust ) );
2

##
gap> comp1:= CompositionMaps(
>                CompositionMaps( tfust2, possufust[1] ),
>                    InverseMap( ufusu2 ) );;
gap> poss1:= PossibleClassFusions( u2, t2, rec( fusionmap:= comp1 ) );;
gap> Length( poss1 );
2
gap> comp2:= CompositionMaps(
>                CompositionMaps( tfust2, possufust[2] ),
>                    InverseMap( ufusu2 ) );;
gap> poss2:= PossibleClassFusions( u2, t2, rec( fusionmap:= comp2 ) );;
gap> Length(  poss2 );
2
gap> poss1 = poss2;
true
gap> rep:= RepresentativesFusions( u2, poss1, Group( () ) );;
gap> Length( rep );
1
gap> u2fust2:= rep[1];;

##
gap> splittingClassesWithOddCentralizerIndexSplit( u2, t2, u2fust2,
>        2u2fusu2, mustsplit );
#I  class 135 splits (odd centralizer index)
#I  class 139 splits (odd centralizer index)
#I  class 141 splits (odd centralizer index)
#I  class 161 splits (odd centralizer index)
gap> notSplittingClassesOfSubgroupDoNotSplit( 2u2fusu2, u2fust2,
>        mustnotsplit );
#I  class 120 does not split (as in subgroup)
#I  class 126 does not split (as in subgroup)
#I  class 127 does not split (as in subgroup)
#I  class 150 does not split (as in subgroup)
#I  class 151 does not split (as in subgroup)
#I  class 163 does not split (as in subgroup)
#I  class 164 does not split (as in subgroup)
#I  class 165 does not split (as in subgroup)
#I  class 186 does not split (as in subgroup)
#I  class 187 does not split (as in subgroup)

##
gap> computeContributions2:= function( s2, 2s, t2, 2t, s2fust2, 2sfus2s2,
>                                2sfus2t, tfust2,
>                                characters, bound,
>                                mustsplit, mustnotsplit, proj )
>      local inv, i, known, candidates, r, psi, res;

>      inv:= InverseMap( s2fust2 );

>      repeat
>        for i in Union( mustnotsplit, tfust2 ) do
>          # The induced character is either zero at the preimage of 'i',
>          # and there is no contribution to the norm,
>          # or the preimage of 'i' lies inside the subgroup of index 2.
>          Unbind( inv[i] );
>        od;
>        known:= [ ShallowCopy( mustsplit ), ShallowCopy( mustnotsplit ) ];
>        candidates:= [];
>        for i in [ 1 .. Length( characters ) ] do
>          r:= contributionData( s2, t2, inv, characters[i]{ proj },
>                                mustsplit );
>          if r.size < bound then
>            # Restrict the character to 2.U, and induce it to 2.G.
>            psi:= InducedClassFunctionsByFusionMap( 2s, 2t,
>                      [ characters[i]{ 2sfus2s2 } ], 2sfus2t )[1];
>            r.safepart:= r.safepart + ScalarProduct( 2t, psi, psi ) / 2;
>            Add( candidates, r );
>          fi;
>        od;
>        SortParallel( List( candidates, r -> r.size ), candidates );
>        for r in candidates do
>          res:= integralContributions( r );
>          if Length( res ) = 0 then
>            Error( "no solution" );
>          fi;
>          evaluateContributions( r, res, s2fust2, mustsplit, mustnotsplit );
>          oddRootsOfSplittingClassesSplit( t2, mustsplit );
>        od;
>      until known = [ mustsplit, mustnotsplit ];
>    end;;

##
gap> ker:= ClassPositionsOfKernel( 2s2fuss2 );;
gap> testchars:= Filtered( Irr( 2s2 ), x -> x[ ker[1] ] <> x[ ker[2] ]  );;
gap> computeContributions2( s2, 2s, t2, 2t, s2fust2, 2sfus2s2, 2sfus2t,
>        tfust2, testchars, 10^7, mustsplit, mustnotsplit,
>        ProjectionMap( 2s2fuss2 ) );
#I  class 109 splits (contribution criterion)
#I  class 136 splits (contribution criterion)
#I  class 158 splits (5th root of 109)
#I  class 173 splits (7th root of 109)
#I  class 110 splits (contribution criterion)
#I  class 108 splits (contribution criterion)
#I  class 137 splits (contribution criterion)
#I  class 159 splits (contribution criterion)
#I  class 138 splits (3rd root of 108)
#I  class 111 splits (contribution criterion)
#I  class 112 splits (contribution criterion)
#I  class 142 splits (3rd root of 111)
#I  class 144 splits (3rd root of 111)
#I  class 145 splits (3rd root of 112)

##
gap> orders:= OrdersClassRepresentatives( t2 );;
gap> invol:= Positions( orders, 2 );;
gap> Difference( invol, s2fust2 );
[  ]

##
gap> open:= Difference( s2fust2, Union( mustsplit, mustnotsplit ) );
113121122123125128129131132146153154162166 ]

##
gap> PowerMap( t2, 3 ){ [ 146162166 ] };
113123121 ]
gap> poss:= Filtered( Combinations( open ),
>               x -> ( not 113 in x or 146 in x ) and
>                    ( not 123 in x or 162 in x ) and
>                    ( not 121 in x or 166 in x ) );;
gap> Length( poss );
6912

##
gap> initialFusion2:= function( 2s2, 2t2,
>                               2s2fuss2, 2t2fust2, s2fust2,
>                               2sfus2s2, 2tfus2t2, 2sfus2t,
>                               defined )
>      local fus, comp, pre, imgs;

>      # Use element orders and centralizer orders.
>      fus:= InitFusion( 2s2, 2t2 );

>      # Use the commutative diagram on the right of the cube.
>      comp:= CompositionMaps( InverseMap( 2t2fust2 ),
>                 CompositionMaps( s2fust2, 2s2fuss2 ) );
>      if not MeetMaps( fus, comp ) then
>        return fail;
>      fi;

>      # Use the commutative diagram on the bottom of the cube.
>      comp:= CompositionMaps( 2tfus2t2,
>                 CompositionMaps( 2sfus2t, InverseMap( 2sfus2s2 ) ) );

>      if not MeetMaps( fus, comp ) then
>        return fail;
>      fi;

>      # Define classes that are not yet defined.
>      defined:= ShallowCopy( defined );
>      for pre in InverseMap( 2s2fuss2 ) do
>        if IsList( pre ) then
>          imgs:= fus{ pre };
>          if imgs[1] = imgs[2] and IsList( imgs[1] )
>             and Intersection( defined, imgs[1] ) = [] then
>            # The classes in preimage and image split, and we may choose.
>            fus[ pre[1] ]:= imgs[1][1];
>            fus[ pre[2] ]:= imgs[1][2];
>            UniteSet( defined, imgs[1] );
>          fi;
>        elif IsList( fus[ pre ] ) then
>          # The class splits in the image but not in the preimage,
>          # something must be wrong.
>          return fail;
>        fi;
>      od;

>      return fus;
>    end;;

##
gap> good:= [];;
gap> ker:= ClassPositionsOfKernel( GetFusionMap( 2s2, s2 ) );;
gap> testcharss:= Filtered( Irr( 2s2 ),
>        chi -> not IsSubset( ClassPositionsOfKernel( chi ), ker ) );;
gap> runOneTest2:= function( s2, 2s2, t2, 2t2, s2fust2,
>                            2sfus2s2, 2tfus2t2, 2sfus2t,
>                            testchars, defined )
>      local fus, pos, l, chi;

>      fus:= initialFusion2( 2s2, 2t2,
>                            GetFusionMap( 2s2, s2 ),
>                            GetFusionMap( 2t2, t2 ),
>                            s2fust2,
>                            2sfus2s2, 2tfus2t2, 2sfus2t,
>                            defined );

>      # Process the irreducible characters,
>      # ordered by increasing indeterminateness.
>      pos:= PositionsProperty( fus, IsList );
>      testchars:= ShallowCopy( testchars );
>      l:= - List( testchars, x -> Number( pos, i -> x[i] = 0 ) );
>      SortParallel( l, testchars );
>      for chi in testchars do
>        if useInducedClassFunction( 2s2, 2t2, chi,
>               GetFusionMap( 2s2, s2 ), fus ) = false then
>          # This splitting is not possible.
>          return fail;
>        fi;
>      od;
>      return fus;
>    end;;
gap> defined:= [];;
gap> for choice in poss do
>      2t2:= tableHead( t2, Union( mustsplit, choice ), [], [] );
>      fus:= runOneTest2( s2, 2s2, t2, 2t2, s2fust2,
>                   2sfus2s2, 2tfus2t2, 2sfus2t,
>                testcharss, defined );
>      if fus <> fail then
>        Add( good, choice );
>      fi;
>    od;
gap> Length( good );
1

##
gap> choice:= good[1];
113121122123125131146153154162166 ]
gap> UniteSet( mustsplit, choice );
gap> UniteSet( mustnotsplit, Difference( open, choice ) );
gap> oddRootsOfSplittingClassesSplit( t2, mustsplit );
#I  class 168 splits (3rd root of 122)
#I  class 171 splits (3rd root of 131)

##
gap> 2t2:= tableHead( t2, mustsplit, [], [] );;
gap> 2s2fus2t2:= runOneTest2( s2, 2s2, t2, 2t2, s2fust2,
>                       2sfus2s2, 2tfus2t2, 2sfus2t,
>                       testcharss, defined );;
gap> NrConjugacyClasses( 2t2 );
320
gap> defined:= Set( 2s2fus2t2 );;
gap> inds:= Set( InducedClassFunctionsByFusionMap( 2s2, 2t2, testcharss,
>                                                  2s2fus2t2 ) );;

##
gap> poss2u2fus2t2:= List( poss2ufus2t, map ->
>                              initialFusion2( 2u2, 2t2,
>                                  GetFusionMap( 2u2, u2 ),
>                                  GetFusionMap( 2t2, t2 ),
>                                  u2fust2,
>                                  2ufus2u2, 2tfus2t2, map,
>                                  defined ) );;
gap> Length( Set( poss2u2fus2t2 ) );
1
gap> fus:= poss2u2fus2t2[1];;
gap> ker:= ClassPositionsOfKernel( GetFusionMap( 2u2, u2 ) );;
gap> testcharsu:= Filtered( Irr( 2u2 ),
>        chi -> not IsSubset( ClassPositionsOfKernel( chi ), ker ) );;
gap> possfus:= FusionsAllowedByRestrictions( 2u2, 2t2, testcharsu,
>                  inds, fus, parametersFABR );;
gap> List( possfus, Indeterminateness );
1616 ]

##
gap> good:= [];;
gap> for map in Set( Concatenation( List( possfus, ContainedMaps ) ) ) do
>      indu:= Set( InducedClassFunctionsByFusionMap( 2u2, 2t2,
>                      testcharsu, map ) );
>      if ForAll( indu, x -> IsInt( ScalarProduct( 2t2, x, x ) ) ) then
>        Add( good, map );
>      fi;
>    od;
gap> Length( good );
2
gap> poss2u2fus2t2:= good;;
gap> indu:= List( good,
>                 map -> Set( InducedClassFunctionsByFusionMap( 2u2, 2t2,
>                                 testcharsu, map ) ) );;
gap> List( indu, Length );
9898 ]
gap> Length( Intersection( indu ) );
34
gap> Set( poss2u2fus2t2[1] ) = Set( poss2u2fus2t2[2] );
true
gap> UniteSet( defined, Set( poss2u2fus2t2[1] ) );

##
gap> 2t2fust2:= GetFusionMap( 2t2, t2 );;
gap> p:= 5;;
gap> pow5:= InitPowerMap( 2t2, p );;
gap> comp:= CompositionMaps( InverseMap( 2t2fust2 ),
>            CompositionMaps( PowerMap( t2, p ), 2t2fust2 ) );;
gap> MeetMaps( pow5, comp );
true
gap> comp:= CompositionMaps( 2tfus2t2,
>            CompositionMaps( PowerMap( 2t, p ),
>                InverseMap( 2tfus2t2 ) ) );;
gap> MeetMaps( pow5, comp );
true
gap> comp:= CompositionMaps( 2s2fus2t2,
>            CompositionMaps( PowerMap( 2s2, p ),
>                InverseMap( 2s2fus2t2 ) ) );;
gap> MeetMaps( pow5, comp );
true
gap> para:= Parametrized( poss2u2fus2t2 );;
gap> comp:= CompositionMaps( para,
>            CompositionMaps( PowerMap( 2u2, p ),
>                InverseMap( para ) ) );;
gap> MeetMaps( pow5, comp );
true
gap> Indeterminateness( pow5 );
4096

##
gap> ambig:= PositionsProperty( pow5, IsList );
283284287288307308309310317318319320 ]
gap> ambig:= Filtered( ambig,
>                i -> OrdersClassRepresentatives( 2t2 )[i] mod 5 = 0 );
309310319320 ]
gap> Intersection( ambig, defined );
[  ]
gap> pow5{ ambig };
[ [ 204205 ], [ 204205 ], [ 227228 ], [ 227228 ] ]
gap> pow5{ ambig }:= [ 204205227228 ];;
gap> UniteSet( defined, ambig );

##
gap> p:= 3;;
gap> pow3:= InitPowerMap( 2t2, p );;
gap> comp:= CompositionMaps( InverseMap( 2t2fust2 ),
>            CompositionMaps( PowerMap( t2, p ), 2t2fust2 ) );;
gap> MeetMaps( pow3, comp );
true
gap> comp:= CompositionMaps( 2tfus2t2,
>            CompositionMaps( PowerMap( 2t, p ),
>                InverseMap( 2tfus2t2 ) ) );;
gap> MeetMaps( pow3, comp );
true
gap> comp:= CompositionMaps( 2s2fus2t2,
>            CompositionMaps( PowerMap( 2s2, p ),
>                InverseMap( 2s2fus2t2 ) ) );;
gap> MeetMaps( pow3, comp );
true
gap> para:= Parametrized( poss2u2fus2t2 );;
gap> comp:= CompositionMaps( para,
>            CompositionMaps( PowerMap( 2u2, p ),
>                InverseMap( para ) ) );;
gap> MeetMaps( pow3, comp );
true
gap> Indeterminateness( pow3 );
65536
gap> CommutativeDiagram( pow3, pow5, pow5, pow3 );
rec( imp1 := [ 309310319320 ], imp2 := [  ], imp3 := [  ], imp4 := [  ] 
 )
gap> Indeterminateness( pow3 );
4096
gap> ambig:= PositionsProperty( pow3, IsList );
239240273274283284287288307308317318 ]
gap> ambig:=  Difference( ambig, defined );
283284287288307308317318 ]
gap> pow3{ ambig };
[ [ 206207 ], [ 206207 ], [ 218219 ], [ 218219 ], [ 231232 ], 
  [ 231232 ], [ 317318 ], [ 317318 ] ]
gap> pow3{ [ 283284287288307308 ] }:=
>              [ 206207218219231232 ];;
gap> CommutativeDiagram( pow3, pow5, pow5, pow3 );
rec( imp1 := [  ], imp2 := [  ], imp3 := [ 283284287288307308 ], 
  imp4 := [  ] )

##
gap> poss3:= [];;
gap> for possindu in indu do
>      testchars:= Concatenation( inds, possindu );
>      Add( poss3, PowerMapsAllowedBySymmetrizations( 2t2, testchars,
>                      testchars, StructuralCopy( pow3 ), p,
>                      parametersFABR ) );
>    od;
gap> List( poss3, Length );
11 ]
gap> poss3:= List( poss3, l -> l[1] );;
gap> List( poss3, Indeterminateness );
44 ]

##
gap> p:= 2;;
gap> pow2:= InitPowerMap( 2t2, p );;
gap> comp:= CompositionMaps( InverseMap( 2t2fust2 ),
>               CompositionMaps( PowerMap( t2, p ), 2t2fust2 ) );;
gap> MeetMaps( pow2, comp );
true
gap> comp:= CompositionMaps( 2tfus2t2,
>               CompositionMaps( PowerMap( 2t, p ),
>                   InverseMap( 2tfus2t2 ) ) );;
gap> MeetMaps( pow2, comp );
true
gap> comp:= CompositionMaps( 2s2fus2t2,
>               CompositionMaps( PowerMap( 2s2, p ),
>                   InverseMap( 2s2fus2t2 ) ) );;
gap> MeetMaps( pow2, comp );
true
gap> para:= Parametrized( poss2u2fus2t2 );;
gap> comp:= CompositionMaps( para,
>               CompositionMaps( PowerMap( 2u2, p ),
>                   InverseMap( para ) ) );;
gap> MeetMaps( pow2, comp );
true
gap> Indeterminateness( pow2 );
131072
gap> CommutativeDiagram( pow3, pow2, pow2, pow3 );
rec( imp1 := [  ], imp2 := [  ], 
  imp3 := [ 283284287288307308319320 ], imp4 := [  ] )
gap> Indeterminateness( pow2 );
512
gap> CommutativeDiagram( pow5, pow2, pow2, pow5 );
rec( imp1 := [  ], imp2 := [  ], imp3 := [ 309310 ], imp4 := [  ] )
gap> Indeterminateness( pow2 );
128

##
gap> indt:= Set( InducedClassFunctionsByFusionMap( 2t, 2t2,
>               Filtered( Irr( 2t ), x -> x[1] <> x[2] ), 2tfus2t2 ) );;
gap> irr:= Filtered( indt, x -> ScalarProduct( 2t2, x, x ) = 1 );;
gap> Length( irr ); 
7

##
gap> red:= Reduced( 2t2, irr, Concatenation( indt, inds ) );;
gap> Length( red.irreducibles );
0
gap> lll:= LLL( 2t2, red.remainders, 99/100 );;
gap> Length( lll.irreducibles );
4
gap> UniteSet( irr, lll.irreducibles );
gap> Length( irr ); 
11
gap> missing:= NrConjugacyClasses( 2t2 ) - NrConjugacyClasses( t2 )
>                  - Length( irr );
120
gap> redindu:= List( indu, l -> ReducedCharacters( 2t2, irr, l ) );;
gap> List( redindu, r -> r.irreducibles );
[ [  ], [  ] ]
gap> redindu:= List( redindu, r -> r.remainders );;

##
gap> inducand:= redindu[1];;
gap> testchars:= Concatenation( irr, red.remainders, inducand );;
gap> minus5:= List( testchars, x -> MinusCharacter( x, pow5, 5 ) );;
gap> minus3:= List( testchars, x -> MinusCharacter( x, poss3[1], 3 ) );;
gap> minus:= Reduced( 2t2, irr, Concatenation( minus5, minus3 ) );;
gap> Length( minus.irreducibles );
0
gap> lll2:= LLL( 2t2, Concatenation( lll.remainders, inducand,
>                         minus.remainders ), 99/100 );;
gap> Length( lll2.irreducibles );
0
gap> Length( lll2.norms );
119
gap> gram:= MatScalarProducts( 2t2, lll2.remainders, lll2.remainders );;
gap> emb:= OrthogonalEmbeddings( gram, missing );;
gap> Length( emb.solutions );
1
gap> dec:= Decreased( 2t2, lll2.remainders, emb.vectors{ emb.solutions[1] } );;
gap> Length( dec.irreducibles );
118
gap> Length( dec.remainders );
1

##
gap> redt:= Reduced( 2t2, Concatenation( irr, dec.irreducibles ), indt );;
gap> Length( redt.remainders );
1
gap> redt.remainders[1] in indt;
true

##
gap> split:= Union( Filtered( InverseMap( 2t2fust2 ), IsList ) );;
gap> Filtered( split, i -> ForAll( Concatenation( irr, dec.irreducibles ),
>                                  x -> x[i] = 0 ) );
317318 ]
gap> Positions( OrdersClassRepresentatives( 2t2 ), 56 );
317318 ]
gap> SizesCentralizers( 2t2 )[317];
112

##
gap> factirr:= List( Irr( t2 ), x -> x{ 2t2fust2 } );;
gap> poss2:= PowerMapsAllowedBySymmetrizations( 2t2, factirr,
>                dec.irreducibles, StructuralCopy( pow2 ), 2,
>                parametersFABR );;
gap> Length( poss2 );
1
gap> Indeterminateness( poss2[1] );
1
gap> cand:= ShallowCopy( redt.remainders[1] / 2 );;
gap> cand{ [ 317318 ] }:= [ 1, -1 ] * ( 2 * Sqrt(-7) );;
gap> minus2:= MinusCharacter( cand, poss2[1], 2 );;
gap> ForAll( Flat( MatScalarProducts( 2t2, factirr, [ minus2 ] ) ), IsInt );
false
gap> cand{ [ 317318 ] }:= [ 1, -1 ] * ( 2 * Sqrt(7) );;
gap> minus2:= MinusCharacter( cand, poss2[1], 2 );;
gap> ForAll( Flat( MatScalarProducts( 2t2, factirr, [ minus2 ] ) ), IsInt );
true

##
gap> cand2:= ShallowCopy( cand );;
gap> cand2{ [ 317318 ] }:= [ -11 ] * ( 2 * Sqrt(7) );;
gap> SetIrr( 2t2, Concatenation( factirr, irr, dec.irreducibles,
>                     [ cand, cand2 ] ) );
gap> for p in [ 2 .. Maximum( OrdersClassRepresentatives( 2t2 ) ) ] do
>      if IsPrimeInt( p ) then
>        if p = 2 then
>          poss:= PossiblePowerMaps( 2t2, p,
>                     rec( powermap:= poss2[1] ) );
>        elif p = 3 then
>          poss:= PossiblePowerMaps( 2t2, p,
>                     rec( powermap:= StructuralCopy( pow3 ) ) );
>        elif p = 5 then
>          poss:= PossiblePowerMaps( 2t2, p,
>                     rec( powermap:= StructuralCopy( pow5 ) ) );
>        else
>          poss:= PossiblePowerMaps( 2t2, p );
>        fi;
>        if Length( poss ) <> 1 then
>          Error( "not expected" );
>        fi;
>        ComputedPowerMaps( 2t2 )[p]:= poss[1];
>      fi;
>    od;
gap> lib:= CharacterTable( "2.2E6(2).2" );;
gap> tr:= TransformingPermutationsCharacterTables( lib, 2t2 );;
gap> tr.columns;
(177,178)(179,180)(183,184)(185,186)(189,190)(195,196)(199,200)(201,202)(204,
205)(206,207)(208,209)(218,219)(223,224)(225,226)(227,228)(231,232)(233,
234)(235,236)(241,242)(243,244)(245,246)(247,248)(253,254)(258,259)(260,
261)(266,267)(268,269)(273,274)(275,276)(280,281)(283,284)(287,288)(293,
294)(299,300)(307,308)(309,310)

##
gap> 2t2:= tableHead( t2, mustsplit, [], [] );;
gap> inducand:= redindu[2];;
gap> testchars:= Concatenation( irr, red.remainders, inducand );;
gap> minus5:= List( testchars, x -> MinusCharacter( x, pow5, 5 ) );;
gap> minus3:= List( testchars, x -> MinusCharacter( x, poss3[2], 3 ) );;
gap> minus:= Reduced( 2t2, irr, Concatenation( minus5, minus3 ) );;
gap> Length( minus.irreducibles );
0
gap> lll2:= LLL( 2t2, Concatenation( lll.remainders, inducand,
>                         minus.remainders ), 99/100 );;
gap> Length( lll2.irreducibles );
0
gap> Length( lll2.norms );
119
gap> gram:= MatScalarProducts( 2t2, lll2.remainders, lll2.remainders );;
gap> emb:= OrthogonalEmbeddings( gram, missing );;
gap> Length( emb.solutions );
1
gap> dec:= Decreased( 2t2, lll2.remainders, emb.vectors{ emb.solutions[1] } );;
gap> Length( dec.irreducibles );
118
gap> Length( dec.remainders );
1
gap> redt:= Reduced( 2t2, Concatenation( irr, dec.irreducibles ), indt );;
gap> Length( redt.remainders );
1
gap> redt.remainders[1] in indt;
true
gap> poss2:= PowerMapsAllowedBySymmetrizations( 2t2, factirr,
>                dec.irreducibles, StructuralCopy( pow2 ), 2,
>                parametersFABR );;
gap> Length( poss2 );
1
gap> Indeterminateness( poss2[1] );
1
gap> cand:= ShallowCopy( redt.remainders[1] / 2 );;
gap> cand{ [ 317318 ] }:= [ 1, -1 ] * ( 2 * Sqrt(-7) );;
gap> minus2:= MinusCharacter( cand, poss2[1], 2 );;
gap> ForAll( Flat( MatScalarProducts( 2t2, factirr, [ minus2 ] ) ), IsInt );
false
gap> cand{ [ 317318 ] }:= [ 1, -1 ] * ( 2 * Sqrt(7) );;
gap> minus2:= MinusCharacter( cand, poss2[1], 2 );;
gap> ForAll( Flat( MatScalarProducts( 2t2, factirr, [ minus2 ] ) ), IsInt );
true
gap> cand2:= ShallowCopy( cand );;
gap> cand2{ [ 317318 ] }:= [ -11 ] * ( 2 * Sqrt(7) );;
gap> SetIrr( 2t2, Concatenation( factirr, irr, dec.irreducibles,
>                     [ cand, cand2 ] ) );
gap> for p in [ 2 .. Maximum( OrdersClassRepresentatives( 2t2 ) ) ] do
>      if IsPrimeInt( p ) then
>        if p = 2 then
>          poss:= PossiblePowerMaps( 2t2, p,
>                     rec( powermap:= poss2 ) );
>        elif p = 3 then
>          poss:= PossiblePowerMaps( 2t2, p,
>                     rec( powermap:= StructuralCopy( pow3 ) ) );
>        elif p = 5 then
>          poss:= PossiblePowerMaps( 2t2, p,
>                     rec( powermap:= StructuralCopy( pow5 ) ) );
>        else
>          poss:= PossiblePowerMaps( 2t2, p );
>        fi;
>        if Length( poss ) <> 1 then
>          Error( "not expected" );
>        fi;
>        ComputedPowerMaps( 2t2 )[p]:= poss[1];
>      fi;
>    od;
gap> tr:= TransformingPermutationsCharacterTables( lib, 2t2 );;
gap> tr.columns;
(177,178)(179,180)(183,184)(185,186)(189,190)(195,196)(199,200)(201,202)(204,
205)(206,207)(208,209)(218,219)(223,224)(225,226)(227,228)(231,232)(233,
234)(235,236)(239,240)(241,242)(243,244)(245,246)(247,248)(253,254)(258,
259)(260,261)(266,267)(268,269)(275,276)(280,281)(283,284)(287,288)(293,
294)(299,300)(307,308)(309,310)

##
gap> t:= CharacterTable( "B" );;
gap> s:= CharacterTable( "2.2E6(2).2" );;
gap> 2s:= CharacterTable( "2^2.2E6(2).2" );;
gap> 2sfuss:= GetFusionMap( 2s, s );;

##
gap> fus:= PossibleClassFusions( s, t );;
gap> Length( fus );
16
gap> n:= NrConjugacyClasses( 2s );;
gap> indperm:= pi -> PermList( CompositionMaps( 2sfuss,
>        CompositionMaps( ListPerm( pi, n ), InverseMap( 2sfuss ) ) ) );;
gap> ind:= Group( List( GeneratorsOfGroup( AutomorphismsOfTable( 2s ) ),
>                       indperm ) );;
gap> Size( ind );
16
gap> rep:= RepresentativesFusions( ind, fus, Group( () ) );;
gap> Length( rep );
2

##
gap> List( rep, map -> map{ ClassPositionsOfCentre( s ) } );
[ [ 12 ], [ 12 ] ]
gap> List( rep, map -> Positions( map, 2 ) );
[ [ 24175 ], [ 24176 ] ]
gap> pos:= List( [ 175176 ], i -> Positions( 2sfuss, i ) );
[ [ 251 ], [ 252 ] ]
gap> OrdersClassRepresentatives( 2s ){ [ 251252 ] };
24 ]
gap> sfust:= rep[1];;

##
gap> orders:= OrdersClassRepresentatives( t );;
gap> mustsplit:= PositionsProperty( orders, IsOddInt );
1671819314647547581829198109112113128
  131145146151155160172173177 ]
gap> selfCentralizingClassesSplit( t, mustsplit );
#I  class 158 splits (self-centralizing)
#I  class 159 splits (self-centralizing)
#I  class 165 splits (self-centralizing)
#I  class 169 splits (self-centralizing)
#I  class 170 splits (self-centralizing)
#I  class 171 splits (self-centralizing)
#I  class 176 splits (self-centralizing)
#I  class 182 splits (self-centralizing)
#I  class 183 splits (self-centralizing)
#I  class 184 splits (self-centralizing)
gap> splittingClassesWithOddCentralizerIndexSplit( s, t, sfust,
>        2sfuss, mustsplit );
#I  class 110 splits (odd centralizer index)
#I  class 68 splits (odd centralizer index)
#I  class 73 splits (odd centralizer index)
#I  class 79 splits (odd centralizer index)
#I  class 94 splits (odd centralizer index)
#I  class 136 splits (odd centralizer index)
#I  class 140 splits (odd centralizer index)
gap> mustnotsplit:= [];;
gap> notSplittingClassesOfSubgroupDoNotSplit( 2sfuss, sfust, mustnotsplit );
#I  class 2 does not split (as in subgroup)
#I  class 4 does not split (as in subgroup)
#I  class 5 does not split (as in subgroup)
#I  class 8 does not split (as in subgroup)
#I  class 9 does not split (as in subgroup)
#I  class 10 does not split (as in subgroup)
#I  class 11 does not split (as in subgroup)
#I  class 13 does not split (as in subgroup)
#I  class 14 does not split (as in subgroup)
#I  class 15 does not split (as in subgroup)
#I  class 17 does not split (as in subgroup)
#I  class 20 does not split (as in subgroup)
#I  class 21 does not split (as in subgroup)
#I  class 23 does not split (as in subgroup)
#I  class 24 does not split (as in subgroup)
#I  class 25 does not split (as in subgroup)
#I  class 27 does not split (as in subgroup)
#I  class 29 does not split (as in subgroup)
#I  class 30 does not split (as in subgroup)
#I  class 32 does not split (as in subgroup)
#I  class 33 does not split (as in subgroup)
#I  class 34 does not split (as in subgroup)
#I  class 35 does not split (as in subgroup)
#I  class 36 does not split (as in subgroup)
#I  class 37 does not split (as in subgroup)
#I  class 38 does not split (as in subgroup)
#I  class 39 does not split (as in subgroup)
#I  class 40 does not split (as in subgroup)
#I  class 41 does not split (as in subgroup)
#I  class 44 does not split (as in subgroup)
#I  class 48 does not split (as in subgroup)
#I  class 50 does not split (as in subgroup)
#I  class 52 does not split (as in subgroup)
#I  class 55 does not split (as in subgroup)
#I  class 56 does not split (as in subgroup)
#I  class 57 does not split (as in subgroup)
#I  class 58 does not split (as in subgroup)
#I  class 59 does not split (as in subgroup)
#I  class 61 does not split (as in subgroup)
#I  class 62 does not split (as in subgroup)
#I  class 63 does not split (as in subgroup)
#I  class 65 does not split (as in subgroup)
#I  class 66 does not split (as in subgroup)
#I  class 67 does not split (as in subgroup)
#I  class 69 does not split (as in subgroup)
#I  class 70 does not split (as in subgroup)
#I  class 71 does not split (as in subgroup)
#I  class 72 does not split (as in subgroup)
#I  class 76 does not split (as in subgroup)
#I  class 77 does not split (as in subgroup)
#I  class 78 does not split (as in subgroup)
#I  class 80 does not split (as in subgroup)
#I  class 83 does not split (as in subgroup)
#I  class 84 does not split (as in subgroup)
#I  class 85 does not split (as in subgroup)
#I  class 86 does not split (as in subgroup)
#I  class 87 does not split (as in subgroup)
#I  class 88 does not split (as in subgroup)
#I  class 92 does not split (as in subgroup)
#I  class 93 does not split (as in subgroup)
#I  class 95 does not split (as in subgroup)
#I  class 97 does not split (as in subgroup)
#I  class 99 does not split (as in subgroup)
#I  class 101 does not split (as in subgroup)
#I  class 102 does not split (as in subgroup)
#I  class 103 does not split (as in subgroup)
#I  class 114 does not split (as in subgroup)
#I  class 115 does not split (as in subgroup)
#I  class 116 does not split (as in subgroup)
#I  class 117 does not split (as in subgroup)
#I  class 118 does not split (as in subgroup)
#I  class 119 does not split (as in subgroup)
#I  class 120 does not split (as in subgroup)
#I  class 122 does not split (as in subgroup)
#I  class 123 does not split (as in subgroup)
#I  class 124 does not split (as in subgroup)
#I  class 126 does not split (as in subgroup)
#I  class 129 does not split (as in subgroup)
#I  class 130 does not split (as in subgroup)
#I  class 132 does not split (as in subgroup)
#I  class 133 does not split (as in subgroup)
#I  class 134 does not split (as in subgroup)
#I  class 135 does not split (as in subgroup)
#I  class 137 does not split (as in subgroup)
#I  class 138 does not split (as in subgroup)
#I  class 139 does not split (as in subgroup)
#I  class 141 does not split (as in subgroup)
#I  class 149 does not split (as in subgroup)
#I  class 150 does not split (as in subgroup)
#I  class 152 does not split (as in subgroup)
#I  class 153 does not split (as in subgroup)
#I  class 154 does not split (as in subgroup)
#I  class 156 does not split (as in subgroup)
#I  class 157 does not split (as in subgroup)
#I  class 161 does not split (as in subgroup)
#I  class 163 does not split (as in subgroup)
#I  class 166 does not split (as in subgroup)
#I  class 167 does not split (as in subgroup)
#I  class 168 does not split (as in subgroup)
#I  class 175 does not split (as in subgroup)
#I  class 178 does not split (as in subgroup)
#I  class 179 does not split (as in subgroup)
#I  class 180 does not split (as in subgroup)
#I  class 181 does not split (as in subgroup)
gap> proj:= Filtered( Irr( 2s ), x -> x[1] <> x[2] );;
gap> projmap:= ProjectionMap( 2sfuss );;
gap> proj:= List( proj, x -> x{ projmap } );;
gap> computeContributions( s, t, sfust, proj, 10^6,
>        mustsplit, mustnotsplit );
#I  class 3 splits (contribution criterion)
#I  class 12 splits (contribution criterion)
#I  class 42 splits (contribution criterion)
#I  class 22 splits (3rd root of 3)
#I  class 26 splits (3rd root of 3)
#I  class 60 splits (3rd root of 12)
#I  class 64 splits (3rd root of 12)
#I  class 125 splits (3rd root of 42)
#I  class 49 splits (5th root of 3)
#I  class 51 splits (5th root of 3)
#I  class 105 splits (5th root of 12)
#I  class 143 splits (5th root of 26)
#I  class 144 splits (5th root of 26)
#I  class 111 splits (11th root of 3)
#I  class 104 does not split (contribution criterion)
#I  class 28 splits (contribution criterion)
#I  class 142 splits (5th root of 28)

##
gap> invol:= Positions( OrdersClassRepresentatives( t ), 2 );
2345 ]
gap> IsSubset( sfust, invol );
true
gap> invols:= List( invol, i -> Positions( sfust, i ) );
[ [ 24175 ], [ 35 ], [ 176177 ], [ 67178 ] ]
gap> preim2s:= List( invols,
>        l -> PositionsProperty( 2sfuss, x -> x in l ) );
[ [ 36251 ], [ 4578 ], [ 252253 ], [ 910254 ] ]
gap> List( preim2s, l -> OrdersClassRepresentatives( 2s ){ l } );
[ [ 222 ], [ 2222 ], [ 44 ], [ 222 ] ]
gap> invmustlift:= [ 4 ];;
gap> invmaylift:= [];;

##
gap> open:= Difference( sfust, Union( mustsplit, mustnotsplit ) );
8990 ]
gap> defined:= [];;
gap> ker:= ClassPositionsOfKernel( GetFusionMap( 2s, s ) );
12 ]
gap> testcharss:= Filtered( Irr( 2s ),
>        chi -> not IsSubset( ClassPositionsOfKernel( chi ), ker ) );;
gap> good:= [];;
gap> for choice in Combinations( open ) do
>      2t:= tableHead( t, Union( mustsplit, choice ),
>                      invmustlift, invmaylift ); 
>      fus:= runOneTest( s, 2s, t, 2t, sfust, testcharss, defined );
>      if fus <> fail then
>        Add( good, rec( choice:= choice, table:= 2t, map:= fus ) );
>      fi;
>    od;
gap> List( good, x -> x.choice );
[ [ 89 ], [ 90 ] ]

##
gap> List( good, x -> Indeterminateness( x.map ) );
44 ]
gap> goodfus:= [];;
gap> for map in ContainedMaps( good[1].map ) do
>      2t:= good[1].table;
>      ind:= InducedClassFunctionsByFusionMap( 2s, 2t, testcharss, map );
>      if ForAll( Flat( MatScalarProducts( 2t, ind, ind ) ), IsInt ) then
>        Add( goodfus, map );
>      fi;
>    od;
gap> Length( goodfus );
0
gap> 2t:= good[2].table;;
gap> 2tfust:= GetFusionMap( 2t, t );;
gap> AddSet( mustnotsplit, 89 );
gap> AddSet( mustsplit, 90 );

##
gap> inds:= [];;
gap> for map in ContainedMaps( good[2].map ) do
>      ind:= InducedClassFunctionsByFusionMap( 2s, 2t, testcharss, map );
>      if ForAll( Flat( MatScalarProducts( 2t, ind, ind ) ), IsInt ) then
>        Add( inds, rec( 2tfust:= 2tfust, characters:= ind, map:= map ) );
>      fi;
>    od;
gap> Length( inds );
2

##
gap> p:= 2;;
gap> 2tfust:= GetFusionMap( 2t, t );;
gap> for testinds in inds do
>      pow:= InitPowerMap( 2t, p );
>      Congruences( 2t, testinds.characters, pow, p, false );
>      TransferDiagram( pow, 2tfust, PowerMap( t, p ) );
>      TransferDiagram( PowerMap( 2s, p ), testinds.map, pow );
>      factirr:= List( Irr( t ), x -> x{ 2tfust } );
>      testinds.pow2:= PowerMapsAllowedBySymmetrizations( 2t, factirr,
>                          testinds.characters, pow, p, parametersFABR );
>    od;
gap> List( inds, x -> Length( x.pow2 ) );
10 ]
gap> inds:= inds[1];;

##
gap> Length( Difference( [ 1 .. NrConjugacyClasses( t ) ],
>            Union( mustsplit, mustnotsplit ) ) );
17

##
gap> th:= CharacterTable( "Th" );;
gap> poss:= PossibleClassFusions( th, t );;
gap> Length( poss );
2
gap> rep:= RepresentativesFusions( th, poss, Group( () ) );;
gap> Length( rep );
1
gap> thfust:= rep[1];;
gap> 2th:= CharacterTable( "Cyclic", 2 ) * th;;
gap> 2thfusth:= GetFusionMap( 2th, th );;
gap> splittingClassesWithOddCentralizerIndexSplit( th, t, thfust,
>        2thfusth, mustsplit );
#I  class 96 splits (odd centralizer index)

##
gap> splitFusionAndCharacters:= function( r, t, tosplit_in_t )
>      local 2tfust, inv, tosplit_in_2t, result, shift, j, i, spl;

>      2tfust:= r.2tfust;
>      inv:= InverseMap( 2tfust );
>      tosplit_in_2t:= inv{ tosplit_in_t };
>      if ForAny( inv{ tosplit_in_t }, IsList ) then
>        Error( "the classes in ",
>               Filtered( tosplit_in_t, i -> IsList( inv[i] ) ),
>               " were already split" );
>      elif ForAny( r.characters,
>                   x -> not IsZero( x{ tosplit_in_2t } ) ) then
>        Error( "all characters must vanish on the classes to be split" );
>      fi;

>      # Adjust the characters of '2t'.
>      spl:= Concatenation( [ 1 .. Length( r.characters[1] ) ],
>                           tosplit_in_2t );
>      Sort( spl );
>      result:= rec( characters:= List( r.characters, chi -> chi{ spl } ),
>                    2tfust:= 2tfust{ spl } );

>      if IsBound( r.map ) then
>        if Intersection( tosplit_in_2t, r.map ) <> [] then
>          Error( "the classes to be split must not occur in the subgroup" );
>        fi;

>        # Adjust the fusion from a subgroup to '2t'.
>        Add( tosplit_in_2t, Length( 2tfust ) + 1 );
>        shift:= [];
>        for j in [ 1 .. tosplit_in_2t[1] - 1 ] do
>          shift[j]:= 0;
>        od;
>        for i in [ 1 .. Length( tosplit_in_2t ) - 1 ] do
>          for j in [ tosplit_in_2t[i] .. tosplit_in_2t[ i+1 ] - 1 ] do
>            shift[j]:= i;
>          od;
>        od;
>        result.map:= r.map + shift{ r.map };
>      fi;

>      return result;
> end;;
gap> inds:= splitFusionAndCharacters( inds, t, [ 96 ] );;

##
gap> open:= Difference( thfust, Union( mustsplit, mustnotsplit ) );
4553108127 ]
gap> defined:= Set( sfust );;
gap> ker:= ClassPositionsOfKernel( GetFusionMap( 2th, th ) );
149 ]
gap> testcharsth:= Filtered( Irr( 2th ),
>               x -> not IsSubset( ClassPositionsOfKernel( x ), ker ) );;
gap> good:= [];;
gap> for choice in Combinations( open ) do
>      2t:= tableHead( t, Union( mustsplit, choice ),
>                      invmustlift, invmaylift );
>      fus:= runOneTest( th, 2th, t, 2t, thfust, testcharsth, defined );
>      if fus <> fail then
>        Add( good, rec( choice:= choice, map:= fus, table:= 2t ) );
>      fi;
>    od;
gap> List( good, x -> x.choice );
[ [ 4553127 ], [ 53 ], [ 53127 ] ]

##
gap> UniteSet( mustsplit, [ 53 ] );
gap> UniteSet( mustnotsplit, [ 108 ] );

##
gap> good2:= [];;
gap> for r in good do
>      splitinds:= splitFusionAndCharacters( inds, t, r.choice );
>      2t:= r.table;;
>      fus:= StructuralCopy( r.map );;
>      2tfust:= GetFusionMap( 2t, t );;
>      factirr:= List( Irr( t ), x -> x{ 2tfust } );;
>      possfus:= FusionsAllowedByRestrictions( 2th, 2t, testcharsth,
>                   splitinds.characters, fus, parametersFABR );;
>      for paramap in possfus do
>        for map in ContainedMaps( paramap ) do
>          indth:= Set( InducedClassFunctionsByFusionMap( 2th, 2t,
>                           testcharsth, map ) );
>          if ForAll( Flat( MatScalarProducts( 2t, indth, indth ) ),
>                     IsInt ) and
>             ForAll( Flat( MatScalarProducts( 2t, indth,
>                               splitinds.characters ) ), IsInt ) then
>            # Use the 2-nd power map.
>            ind:= Concatenation( splitinds.characters, indth );
>            pow:= InitPowerMap( 2t, p );
>            if Congruences( 2t, ind, pow, p, false ) = true and
>               TransferDiagram( pow, 2tfust, PowerMap( t, p ) ) <> fail and
>               TransferDiagram( PowerMap( 2th, p ), map, pow ) <> fail and
>               TransferDiagram( PowerMap( 2s, p ), splitinds.map,
>                                pow ) <> fail then
>              poss:= PowerMapsAllowedBySymmetrizations( 2t, factirr, ind,
>                         pow, p, parametersFABR );
>              if Length( poss ) <> 0 then
>                r.pow2:= poss;
>                Add( good2, rec( table:= 2t,
>                                 choice:= r.choice,
>                                 2thfus2t:= map,
>                                 ind:= ind,
>                                 2sfus2t:= splitinds.map ) );
>              fi;
>            fi;
>          fi;
>        od;
>      od;
>    od;
gap> List( good2, x -> x.choice );
[ [ 4553127 ], [ 53 ], [ 53127 ] ]

##
gap> 2t:= good2[2].table;;
gap> 2tfust:= GetFusionMap( 2t, t );;
gap> 2thfus2t:= good2[2].2thfus2t;;
gap> 2sfus2t:= good2[2].2sfus2t;;
gap> ind:= good2[2].ind;;
gap> factirr:= List( Irr( t ), x -> x{ 2tfust } );;

##
gap> nothit_in_t:= Difference( mustsplit, Union( thfust, sfust ) );;
gap> nothit_in_2t:= PositionsProperty( 2tfust, i -> i in nothit_in_t );
6667136137147148149150162163166167186187188
  189217218222223224225226227228229230231234235
  236237242243 ]
gap> orders_2t:= OrdersClassRepresentatives( 2t );;
gap> orders_2t{ nothit_in_2t };
10102020234623462424255030303030404044
  444646464647944794104104551106060 ]

##
gap> powermaps:= ComputedPowerMaps( 2t );;
gap> primes:= Filtered( [ 1 .. Maximum( orders_2t ) ], IsPrimeInt );;
gap> for p in primes do
>      pow:= InitPowerMap( 2t, p );
>      if TransferDiagram( pow, 2tfust, PowerMap( t, p ) ) = fail or
>         TransferDiagram( PowerMap( 2th, p ), 2thfus2t, pow ) = fail or
>         TransferDiagram( PowerMap( 2s, p ), 2sfus2t, pow ) = fail or
>         ConsiderSmallerPowerMaps( 2t, pow, p, false ) <> true or
>         Congruences( 2t, ind, pow, p, false ) <> true then
>        Error( "contradiction" );
>      fi;
>      poss:= PowerMapsAllowedBySymmetrizations( 2t, ind, ind,
>                 pow, p, parametersFABR );
>      if Length( poss ) = 1 then
>        powermaps[p]:= poss[1];
>      else
>        powermaps[p]:= pow;
>      fi;
>    od;

##
gap> known:= Filtered( nothit_in_2t,
>                i -> ForAll( powermaps, map -> IsInt( map[i] ) ) );
147148149150166167228229230231236237 ]

##
gap> List( Difference( nothit_in_2t, known ),
>          i -> Number( powermaps, map -> IsList( map[i] ) ) );
22222525262626262626272726262727272727
  272727 ]
gap> oddprimes:= Difference( primes, [ 2 ] );;
gap> inv:= InverseMap( 2tfust );;
gap> for i in [ 1 .. Length( inv ) ] do
>      if IsList( inv[i] ) then
>        # the classes of g and g*z
>        pair:= inv[i];
>        for p in oddprimes do
>          if powermaps[p]{ pair } = [ pair, pair ] then
>            # the p-th powers of g and g*z are conj. to g or g*z
>            for k in Filtered( oddprimes,
>                               x -> orders_2t[ pair[1] ] mod x = 0 ) do
>              img:= powermaps[k][ pair[1] ];
>              if IsList( img ) then
>                if powermaps[p]{ img } = img then
>                  # the p-th power of g^k is conj. to g^k 
>                  powermaps[p]{ pair }:= pair;
>                elif powermaps[p]{ img } = Reversed( img ) then
>                  # the p-th power of g^k is conj. to g^k*z
>                  powermaps[p]{ pair }:= pair{ [ 21 ] };
>                fi;
>              fi;
>            od;
>          fi;
>        od;
>      fi;
>    od;
gap> List( Difference( nothit_in_2t, known ),
>          i -> Number( powermaps, map -> IsList( map[i] ) ) );
1111111717171727272626181818182727
  22 ]

##
gap> pos:= [ 6667136137 ];;
gap> powermaps[5]{ pos };
[ [ 45 ], [ 45 ], [ 1617 ], [ 1617 ] ]
gap> powermaps[5]{ pos }:= [ 451617 ];;
gap> pos:= [ 162163 ];;
gap> powermaps[3]{ pos };
[ [ 5354 ], [ 5354 ] ]
gap> powermaps[3]{ pos }:= [ 5354 ];;

##
gap> pos:= [ 242243 ];;
gap> powermaps[3]{ pos };
[ [ 136137 ], [ 136137 ] ]
gap> powermaps[5]{ pos };
[ [ 7879 ], [ 7879 ] ]
gap> powermaps[3]{ [ 7879 ] };
1617 ]
gap> powermaps[3]{ pos }:= [ 136137 ];;
gap> powermaps[5]{ pos }:= [ 7879 ];;

##
gap> pos:= Intersection( Difference( nothit_in_2t, known ),
>                        Positions( orders_2t, 46 ) );
224225226227 ]
gap> powermaps[5]{ pos };
[ [ 226227 ], [ 226227 ], [ 224225 ], [ 224225 ] ]
gap> setGaloisInfo( powermaps, [ 224226 ], orders_2t, primes, Sqrt(-23) );
gap> setGaloisInfo( powermaps, [ 225227 ], orders_2t, primes, Sqrt(-23) );

##
gap> powermaps[23]{ pos };                                            
[ [ 45 ], [ 45 ], [ 45 ], [ 45 ] ]
gap> powermaps[23]{ pos }:= [ 4545 ];;
gap> ForAll( List( powermaps, x -> x{ pos } ), IsPositionsList );
true

##
gap> pos:= Intersection( nothit_in_2t, Positions( orders_2t, 30 ) );
186187188189 ]
gap> Field( Flat( List( factirr, x -> x{ pos } ) ) )
>    = Field( Rationals, [ Sqrt( -15 ) ] );
true

##
gap> List( powermaps, x -> x[66] );
[ , 2566,, 4,, 66,,,, 66,, 66,,,, 66,, 66,,,, 66,,,,,, 66,, 66,,,,,, 66,,,, 
  66,, 66,,,, 66,,,,,, 66,,,,,, 66,, 66,,,,,, 66,,,, 66,, 66,,,,,, 66,,,, 66,,
  ,,,, 66,,,,,,,, 66,,,, 66,, 66,,,, 66,, 66 ]
gap> setGaloisInfo( powermaps, [ 186188 ], orders_2t, primes, Sqrt(-15) );
gap> setGaloisInfo( powermaps, [ 187189 ], orders_2t, primes, Sqrt(-15) );
gap> powermaps[3]{ pos };
[ [ 6667 ], [ 6667 ], [ 6667 ], [ 6667 ] ]
gap> powermaps[3]{ pos }:= [ 66676667 ];;
gap> powermaps[5]{ pos };
[ [ 3435 ], [ 3435 ], [ 3435 ], [ 3435 ] ]
gap> powermaps[3]{ [ 3435 ] };
45 ]
gap> powermaps[5]{ [ 6667 ] };
45 ]
gap> powermaps[5]{ pos }:= [ 34353435 ];;
gap> ForAll( List( powermaps, x -> x{ pos } ), IsPositionsList ); #  true
true

##
gap> pos:= Intersection( nothit_in_2t, Positions( orders_2t, 44 ) );
222223 ]
gap> vals:= List( [ 1, -111, -11 ], Sqrt );;
gap> good:= [];;
gap> for val in vals do
>      setGaloisInfo( powermaps, pos, orders_2t, primes, val );
>      indcyc:= InducedCyclic( 2t, pos, "all" );
>      if ForAll( indcyc, x -> IsInt( ScalarProduct( 2t, x, x ) ) ) then
>        minus:= MinusCharacter( indcyc[1], powermaps[2], 2 );
>        if ForAll( List( factirr, x -> ScalarProduct( 2t, x, minus ) ), 
>                   IsInt ) then
>          Add( good, val );
>        fi;
>      fi;
>    od;
gap> good = [ Sqrt( -11 ) ];
true
gap> setGaloisInfo( powermaps, pos, orders_2t, primes, good[1] );

##
gap> pos:= Intersection( nothit_in_2t, Positions( orders_2t, 104 ) );
234235 ]
gap> vals:= List( [ 1, -12, -213, -1326, -26 ], Sqrt );;
gap> good:= [];;
gap> for val in vals do
>      setGaloisInfo( powermaps, pos, orders_2t, primes, val );
>      indcyc:= InducedCyclic( 2t, pos, "all" );
>      if ForAll( indcyc, x -> IsInt( ScalarProduct( 2t, x, x ) ) ) then
>        minus:= MinusCharacter( indcyc[1], powermaps[2], 2 );
>        if ForAll( List( factirr, x -> ScalarProduct( 2t, x, minus ) ), 
>                   IsInt ) then
>          Add( good, val );
>        fi;
>      fi;
>    od;
gap> good = [ Sqrt( -26 ) ];
true
gap> setGaloisInfo( powermaps, pos, orders_2t, primes, good[1] );

##
gap> pos:= Intersection( nothit_in_2t, Positions( orders_2t, 40 ) );
217218 ]

##
gap> powermaps[2]{ pos };
[ [ 136137 ], [ 136137 ] ]
gap> TransferDiagram( powermaps[5], powermaps[2], powermaps[5] );
rec( impbetween := [ 131139217218 ], impinside1 := [  ], 
  impinside2 := [  ] )
gap> IsPositionsList( powermaps[2] );
true

##
gap> vals:= List( [ 1, -12, -25, -510, -10 ], Sqrt );;
gap> good:= [];;
gap> for val in vals do
>      setGaloisInfo( powermaps, pos, orders_2t, primes, val );
>      indcyc:= InducedCyclic( 2t, pos, "all" );
>      if ForAll( indcyc, x -> IsInt( ScalarProduct( 2t, x, x ) ) ) then
>        minus:= MinusCharacter( indcyc[1], powermaps[2], 2 );
>        if ForAll( List( factirr, x -> ScalarProduct( 2t, x, minus ) ),
>                   IsInt ) then
>          Add( good, val );
>        fi;
>      fi;
>    od;
gap> good = [ Sqrt( 5 ), Sqrt( -5 ) ];
true

##
gap> indcyc:= InducedCyclic( 2t, Difference( nothit_in_2t, pos ), "all" );;
gap> indcyc:= Reduced( 2t, factirr, indcyc ).remainders;;
gap> setGaloisInfo( powermaps, pos, orders_2t, primes, Sqrt( 5 ) );
gap> indcyc40r5:= InducedCyclic( 2t, pos, "all" );;
gap> indcyc40r5:= Reduced( 2t, factirr, indcyc40r5 ).remainders;;
gap> testind:= Concatenation( ind, indcyc, indcyc40r5 );;
gap> lll:= LLL( 2t, testind, 99/100 );;
gap> Length( lll.norms );
63
gap> Length( mustsplit );
63
gap> Length( Difference( [ 1 .. NrConjugacyClasses( t ) ],
>            Union( mustsplit, mustnotsplit ) ) );
14
gap> gram:= MatScalarProducts( 2t, lll.remainders, lll.remainders );;
gap> emb:= OrthogonalEmbeddings( gram, 63 + 14 );;
gap> List( emb.solutions, Length );
636363656565 ]
gap> dec:= List( emb.solutions,
>              x -> Decreased( 2t, lll.remainders, emb.vectors{ x } ) );;
gap> Positions( dec, fail );
1236 ]

##
gap> dec:= Filtered( dec, x -> x <> fail );;
gap> List( dec, r -> Length( r.irreducibles ) );
6161 ]

##
gap> degreesum:= List( dec,
>        r -> Sum( List( r.irreducibles, x -> x[1]^2 ) ) );;
gap> Set( degreesum );
4154780380522839827726467072000000 ]
gap> n:= Size( t ) - degreesum[1];
1100703586363451113472000000

##
gap> red:= List( dec, r -> Reduced( 2t, r.irreducibles, testind ) );;
gap> norm2:= List( red, r -> First( r.remainders,
>                              x -> ScalarProduct( 2t, x, x ) = 2 ) );;
gap> norm2[1] = norm2[2];
true
gap> norm2[1][1] = Sqrt( 2 * n );
true

##
gap> setGaloisInfo( powermaps, pos, orders_2t, primes, Sqrt( -5 ) );
gap> indcyc40i5:= InducedCyclic( 2t, pos, "all" );;
gap> indcyc40i5:= Reduced( 2t, factirr, indcyc40i5 ).remainders;;
gap> testind:= Concatenation( ind, indcyc, indcyc40i5 );;
gap> lll:= LLL( 2t, testind, 99/100 );;
gap> gram:= MatScalarProducts( 2t, lll.remainders, lll.remainders );;
gap> emb:= OrthogonalEmbeddings( gram, 63 + 14 );;
gap> List( emb.solutions, Length );
636363656565 ]
gap> dec:= List( emb.solutions,
>              x -> Decreased( 2t, lll.remainders, emb.vectors{ x } ) );;
gap> Positions( dec, fail );
36 ]
gap> dec:= Filtered( dec, x -> x <> fail );;
gap> List( dec, r -> Length( r.irreducibles ) );
63636161 ]

##
gap> dec1:= dec{ [ 12 ] };;
gap> dec2:= dec{ [ 34 ] };;
gap> degreesum:= List( dec2,
>        r -> Sum( List( r.irreducibles, x -> x[1]^2 ) ) );;
gap> Set( degreesum );
4154780380522839827726467072000000 ]
gap> n:= Size( t ) - degreesum[1];
1100703586363451113472000000
gap> red:= List( dec2, r -> Reduced( 2t, r.irreducibles, testind ) );;
gap> norm2:= List( red, r -> First( r.remainders,
>                              x -> ScalarProduct( 2t, x, x ) = 2 ) );;
gap> Length( Set( norm2 ) );
1
gap> norm2[1][1] = Sqrt( 2 * n );
true

##
gap> HasIrr( 2t );
false
gap> SetIrr( 2t, Concatenation( factirr, dec1[1].irreducibles ) );
gap> lib:= CharacterTable( "2.B" );;
gap> TransformingPermutationsCharacterTables( 2t, lib );
rec( columns := (4,5)(29,30)(34,35)(63,64)(66,67)(122,123)(125,126)(145,
    146)(186,187)(188,189)(224,225)(226,227), 
  group := <permutation group with 17 generators>, 
  rows := (185,213,243,236,191,205,225,229,247,200,232,222,207,216,187,206,
    212,234,194,244,217,202,245,199,238,235,221,192,214,230,201,186,211,227,
    226,208,198,242,218,193,209,220,196,210,241,203,189,224,219,197,204,223,
    240,190,215,195,233)(188,239)(231,246,237) )
gap> ResetFilterObj( 2t, HasIrr );
gap> SetIrr( 2t, Concatenation( factirr, dec1[2].irreducibles ) );
gap> TransformingPermutationsCharacterTables( 2t, lib );
rec( columns := (4,5)(29,30)(34,35)(63,64)(66,67)(122,123)(125,126)(143,
    144)(145,146)(186,187)(188,189)(224,225)(226,227)(244,245), 
  group := <permutation group with 17 generators>, 
  rows := (185,212,234,194,244,217,202,245,199,238,190,215,195,233)(186,211,
    227,226,208,198,242,218,193,209,220,196,210,241,203,189,224,219,197,204,
    223,240,235,221,192,214,230,201)(187,206,213,243,191,205,225,229,247,200,
    232,222,207,216)(188,239)(231,246,237) )

##
gap> good2[3].choice;
53127 ]
gap> pos:= Positions( 2tfust, 127 );
165 ]
gap> 2t:= good2[3].table;;
gap> 2tfust:= GetFusionMap( 2t, t );;
gap> 2thfus2t:= good2[3].2thfus2t;;
gap> 2sfus2t:= good2[3].2sfus2t;;
gap> ind:= good2[3].ind;;
gap> factirr:= List( Irr( t ), x -> x{ 2tfust } );;
gap> UniteSet( mustsplit, good2[3].choice );
gap> spl:= SortedList( Concatenation( [ 1 .. 247 ], pos ) );;
gap> testind:= Concatenation( good2[3].ind,
>        List( Concatenation( indcyc, indcyc40r5 ), x -> x{ spl } ) );;
gap> lll:= LLL( 2t, testind, 99/100 );;
gap> Length( lll.norms );
64
gap> Length( mustsplit );
64
gap> Length( Difference( [ 1 .. NrConjugacyClasses( t ) ],
>            Union( mustsplit, mustnotsplit ) ) );
13
gap> gram:= MatScalarProducts( 2t, lll.remainders, lll.remainders );;
gap> emb:= OrthogonalEmbeddings( gram, 64+13 );;
gap> List( emb.solutions, Length );
64646465656566666667676767676767676769
  6969 ]
gap> dec:= List( emb.solutions,
>            x -> Decreased( 2t, lll.remainders, emb.vectors{ x } ) );;
gap> Positions( dec, fail );
123678916171821 ]
gap> dec:= Filtered( dec, x -> x <> fail );;
gap> List( dec, r -> Length( r.irreducibles ) );
61616361616361616161 ]
gap> degreesum:= List( dec,
>        r -> Sum( List( r.irreducibles, x -> x[1]^2 ) ) );;
gap> degreesumset:= Set( degreesum );
41547803805228398277264670720000004154781481226426191177580544000000 ]
gap> n:= Size( t ) - degreesumset;
11007035863634511134720000000 ]
gap> List( degreesumset, x -> Positions( degreesum, x ) );
[ [ 124578910 ], [ 36 ] ]
gap> dec:= dec{ Positions( degreesum, degreesumset[1] ) };;
gap> red:= List( dec, r -> Reduced( 2t, r.irreducibles, testind ) );;
gap> norm2:= List( red, r -> First( r.remainders,
>                              x -> ScalarProduct( 2t, x, x ) = 2 ) );;
gap> Length( Set( norm2 ) );
1
gap> norm2[1][1] = Sqrt( 2 * n[1] );
true

##
gap> testind:= Concatenation( good2[3].ind,
>        List( Concatenation( indcyc, indcyc40i5 ), x -> x{ spl } ) );;
gap> lll:= LLL( 2t, testind, 99/100 );;
gap> gram:= MatScalarProducts( 2t, lll.remainders, lll.remainders );;
gap> emb:= OrthogonalEmbeddings( gram, 64+13 );;
gap> List( emb.solutions, Length );
64646465656566666667676767676767676769
  6969 ]
gap> dec:= List( emb.solutions,
>            x -> Decreased( 2t, lll.remainders, emb.vectors{ x } ) );;
gap> Positions( dec, fail );
123678916171821 ]
gap> dec:= Filtered( dec, x -> x <> fail );;
gap> List( dec, r -> Length( r.irreducibles ) );
61616361616361616161 ]
gap> degreesum:= List( dec,
>        r -> Sum( List( r.irreducibles, x -> x[1]^2 ) ) );;
gap> degreesumset:= Set( degreesum );
41547803805228398277264670720000004154781481226426191177580544000000 ]
gap> n:= Size( t ) - degreesumset;
11007035863634511134720000000 ]
gap> List( degreesumset, x -> Positions( degreesum, x ) );
[ [ 124578910 ], [ 36 ] ]
gap> dec:= dec{ Positions( degreesum, degreesumset[1] ) };;
gap> red:= List( dec, r -> Reduced( 2t, r.irreducibles, testind ) );;
gap> norm2:= List( red, r -> First( r.remainders,
>                              x -> ScalarProduct( 2t, x, x ) = 2 ) );;
gap> Length( Set( norm2 ) );
1
gap> norm2[1][1] = Sqrt( 2 * n[1] );
true

##
gap> good2[1].choice;
4553127 ]
gap> 2tfust:= GetFusionMap( good2[2].table, t );;
gap> pos:= Union( Positions( 2tfust, 45 ), Positions( 2tfust, 127 ) );
57165 ]
gap> 2t:= good2[1].table;;
gap> 2tfust:= GetFusionMap( 2t, t );;
gap> 2thfus2t:= good2[1].2thfus2t;;
gap> 2sfus2t:= good2[1].2sfus2t;;
gap> ind:= good2[1].ind;;
gap> factirr:= List( Irr( t ), x -> x{ 2tfust } );;
gap> UniteSet( mustsplit, good2[1].choice );
gap> spl:= SortedList( Concatenation( [ 1 .. 247 ], pos ) );;
gap> testind:= Concatenation( good2[1].ind,
>        List( Concatenation( indcyc, indcyc40r5 ), x -> x{ spl } ) );;
gap> lll:= LLL( 2t, testind, 99/100 );;
gap> Length( lll.norms );
65
gap> Length( mustsplit );
65
gap> Length( Difference( [ 1 .. NrConjugacyClasses( t ) ],
>            Union( mustsplit, mustnotsplit ) ) );
12
gap> gram:= MatScalarProducts( 2t, lll.remainders, lll.remainders );;
gap> emb:= OrthogonalEmbeddings( gram, 65+12 );;
gap> List( emb.solutions, Length );
66666666666666666667676767676767676767
  67676767676767676868686969696969696969
  69696969696969696969717171 ]
gap> dec:= List( emb.solutions,
>            x -> Decreased( 2t, lll.remainders, emb.vectors{ x } ) );;
gap> Positions( dec, fail );
123456789121314152425262728293033
  3435364546474851 ]
gap> dec:= Filtered( dec, x -> x <> fail );;
gap> List( dec, r -> Length( r.irreducibles ) );
63636361616163616161636363616161636161
  616161 ]
gap> degreesum:= List( dec,
>        r -> Sum( List( r.irreducibles, x -> x[1]^2 ) ) );;
gap> degreesumset:= Set( degreesum );
41547803805228398277264670720000004154781481226426191177580544000000 ]
gap> Size( t ) - degreesumset;
11007035863634511134720000000 ]
gap> Positions( degreesum, degreesumset[2] );
123711121317 ]
gap> dec:= dec{ Positions( degreesum, degreesumset[1] ) };;
gap> red:= List( dec, r -> Reduced( 2t, r.irreducibles, testind ) );;
gap> norm2:= List( red, r -> First( r.remainders,
>                              x -> ScalarProduct( 2t, x, x ) = 2 ) );;
gap> Length( Set( norm2 ) );
1
gap> norm2[1][1];
0

##
gap> testind:= Concatenation( good2[1].ind,
>        List( Concatenation( indcyc, indcyc40i5 ), x -> x{ spl } ) );;
gap> lll:= LLL( 2t, testind, 99/100 );;
gap> gram:= MatScalarProducts( 2t, lll.remainders, lll.remainders );;
gap> emb:= OrthogonalEmbeddings( gram, 65+12 );;
gap> List( emb.solutions, Length );
66666666666666666667676767676767676767
  67676767676767676868686969696969696969
  69696969696969696969717171 ]
gap> dec:= List( emb.solutions,
>            x -> Decreased( 2t, lll.remainders, emb.vectors{ x } ) );;
gap> Positions( dec, fail );
123456789121314152425262728293033
  3435364546474851 ]
gap> dec:= Filtered( dec, x -> x <> fail );;
gap> List( dec, r -> Length( r.irreducibles ) );
63636361616163616161636363616161636161
  616161 ]
gap> degreesum:= List( dec,
>        r -> Sum( List( r.irreducibles, x -> x[1]^2 ) ) );;
gap> degreesumset:= Set( degreesum );
41547803805228398277264670720000004154781481226426191177580544000000 ]
gap> Size( t ) - degreesumset;
11007035863634511134720000000 ]
gap> Positions( degreesum, degreesumset[2] );
123711121317 ]
gap> dec:= dec{ Positions( degreesum, degreesumset[1] ) };;
gap> red:= List( dec, r -> Reduced( 2t, r.irreducibles, testind ) );;
gap> norm2:= List( red, r -> First( r.remainders,
>                              x -> ScalarProduct( 2t, x, x ) = 2 ) );;
gap> Length( Set( norm2 ) );
1
gap> norm2[1][1];
0

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

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


[Dauer der Verarbeitung: 0.101 Sekunden, vorverarbeitet 2026-06-17]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik