1# This file was created from xpl/ambigfus.xpl, do not edit!
2#########################################################################
3##
4#W  ambigfus.tst              GAP applications              Thomas Breuer
5##
6#Y  Copyright 2003,  Lehrstuhl D fuer Mathematik,  RWTH Aachen,   Germany
7##
8##  In order to run the tests, one starts GAP from the `tst` subdirectory
9##  of the `pkg/ctbllib` directory, and calls `ReadTest( "ambigfus.tst" );`.
10##
11
12gap> START_TEST( "ambigfus.tst" );
13
14gap> LoadPackage( "ctbllib" );
15true
16gap> SetOfComposedClassFusions:= function( hfusg, ufush )
17>     local result, map1, map2;
18>     result:= [];;
19>     for map2 in hfusg do
20>       for map1 in ufush do
21>         AddSet( result, CompositionMaps( map2, map1 ) );
22>       od;
23>     od;
24>     return result;
25> end;;
26gap> co3:= CharacterTable( "Co3" );
27CharacterTable( "Co3" )
28gap> h:= CharacterTable( "Co3N5" );
29CharacterTable( "5^(1+2):(24:2)" )
30gap> hfusco3:= PossibleClassFusions( h, co3 );;
31gap> Length( RepresentativesFusions( h, hfusco3, co3 ) );
322
33gap> mx:= Maxes( co3 );
34[ "McL.2", "HS", "U4(3).(2^2)_{133}", "M23", "3^5:(2xm11)", "2.S6(2)",
35  "U3(5).3.2", "3^1+4:4s6", "2^4.a8", "L3(4).D12", "2xm12",
36  "2^2.(2^7.3^2).s3", "s3xpsl(2,8).3", "a4xs5" ]
37gap> maxes:= List( mx, CharacterTable );;
38gap> filt:= Filtered( maxes, x -> Size( x ) mod Size( h ) = 0 );
39[ CharacterTable( "McL.2" ), CharacterTable( "HS" ),
40  CharacterTable( "U3(5).3.2" ) ]
41gap> max:= filt[1];;
42gap> hfusmax:= PossibleClassFusions( h, max );;
43gap> maxfusco3:= PossibleClassFusions( max, co3 );;
44gap> comp:= SetOfComposedClassFusions( maxfusco3, hfusmax );;
45gap> Length( comp );
462
47gap> reps:= RepresentativesFusions( h, comp, co3 );
48[ [ 1, 2, 3, 4, 8, 8, 7, 9, 10, 11, 17, 17, 19, 19, 22, 23, 27, 27, 30, 33,
49      34, 40, 40, 40, 40, 42 ] ]
50gap> max:= filt[3];;
51gap> hfusmax:= PossibleClassFusions( h, max );;
52gap> maxfusco3:= PossibleClassFusions( max, co3 );;
53gap> comp:= SetOfComposedClassFusions( maxfusco3, hfusmax );;
54gap> reps2:= RepresentativesFusions( h, comp, co3 );;
55gap> reps2 = reps;
56true
57gap> GetFusionMap( h, co3 ) in reps;
58true
59gap> b:= CharacterTable( "B" );;
60gap> h:= CharacterTable( "31:15" );;
61gap> hfusb:= PossibleClassFusions( h, b );;
62gap> Length( RepresentativesFusions( h, hfusb, b ) );
632
64gap> th:= CharacterTable( "Th" );;
65gap> hfusth:= PossibleClassFusions( h, th );;
66gap> thfusb:= PossibleClassFusions( th, b );;
67gap> comp:= SetOfComposedClassFusions( thfusb, hfusth );;
68gap> Length( comp );
692
70gap> reps:= RepresentativesFusions( h, comp, b );
71[ [ 1, 145, 146, 82, 82, 19, 82, 7, 19, 82, 82, 19, 7, 82, 19, 82, 82 ] ]
72gap> GetFusionMap( h, b ) in reps;
73true
74gap> h:= CharacterTable( "SuzN3" );
75CharacterTable( "3^5:(3^2:SD16)" )
76gap> suz:= CharacterTable( "Suz" );
77CharacterTable( "Suz" )
78gap> hfussuz:= PossibleClassFusions( h, suz );;
79gap> Length( RepresentativesFusions( h, hfussuz, suz ) );
802
81gap> maxes:= List( Maxes( suz ), CharacterTable );;
82gap> filt:= Filtered( maxes, x -> Size( x ) mod Size( h ) = 0 );
83[ CharacterTable( "3_2.U4(3).2_3'" ), CharacterTable( "3^5:M11" ),
84  CharacterTable( "3^2+4:2(2^2xa4)2" ) ]
85gap> PossibleClassFusions( h, filt[1] );
86[  ]
87gap> max:= filt[2];;
88gap> hfusmax:= PossibleClassFusions( h, max );;
89gap> maxfussuz:= PossibleClassFusions( max, suz );;
90gap> comp:= SetOfComposedClassFusions( maxfussuz, hfusmax );;
91gap> repr:= RepresentativesFusions( h, comp, suz );
92[ [ 1, 2, 2, 4, 5, 4, 5, 5, 5, 5, 5, 6, 9, 9, 14, 15, 13, 16, 16, 14, 15, 13,
93      13, 13, 16, 15, 14, 16, 16, 16, 21, 21, 23, 22, 29, 29, 29, 38, 39 ] ]
94gap> GetFusionMap( h, suz ) in repr;
95true
96gap> f3p:= CharacterTable( "F3+" );;
97gap> h:= CharacterTable( "F3+N5" );;
98gap> hfusf3p:= PossibleClassFusions( h, f3p );;
99gap> Length( RepresentativesFusions( h, hfusf3p, f3p ) );
1002
101gap> maxes:= List( Maxes( f3p ), CharacterTable );;
102gap> filt:= Filtered( maxes, x -> Size( x ) mod Size( h ) = 0 );
103[ CharacterTable( "Fi23" ), CharacterTable( "2.Fi22.2" ),
104  CharacterTable( "(3xO8+(3):3):2" ), CharacterTable( "O10-(2)" ),
105  CharacterTable( "(A4xO8+(2).3).2" ), CharacterTable( "He.2" ),
106  CharacterTable( "F3+M14" ), CharacterTable( "(A5xA9):2" ) ]
107gap> possfus:= List( filt, x -> PossibleClassFusions( h, x ) );
108[ [  ], [  ], [  ], [  ],
109  [ [ 1, 69, 110, 12, 80, 121, 4, 72, 113, 11, 11, 79, 79, 120, 120, 3, 71,
110          11, 79, 23, 91, 112, 120, 132, 29, 32, 97, 100, 37, 37, 105, 105,
111          139, 140, 145, 146, 155, 155, 156, 156, 44, 44, 167, 167, 48, 48,
112          171, 171, 57, 57, 180, 180, 66, 66, 189, 189 ],
113      [ 1, 69, 110, 12, 80, 121, 4, 72, 113, 11, 11, 79, 79, 120, 120, 3, 71,
114          11, 79, 23, 91, 112, 120, 132, 29, 32, 97, 100, 37, 37, 105, 105,
115          140, 139, 146, 145, 156, 156, 155, 155, 44, 44, 167, 167, 48, 48,
116          171, 171, 57, 57, 180, 180, 66, 66, 189, 189 ] ], [  ], [  ], [  ] ]
117gap> max:= filt[5];
118CharacterTable( "(A4xO8+(2).3).2" )
119gap> hfusmax:= possfus[5];;
120gap> maxfusf3p:= PossibleClassFusions( max, f3p );;
121gap> comp:= SetOfComposedClassFusions( maxfusf3p, hfusmax );;
122gap> Length( comp );
1232
124gap> repr:= RepresentativesFusions( h, comp, f3p );
125[ [ 1, 2, 4, 12, 35, 54, 3, 3, 16, 9, 9, 11, 11, 40, 40, 2, 3, 9, 11, 35, 36,
126      13, 40, 90, 7, 22, 19, 20, 43, 43, 50, 50, 8, 8, 23, 23, 46, 46, 47,
127      47, 10, 10, 9, 9, 10, 10, 11, 11, 26, 26, 28, 28, 67, 67, 68, 68 ] ]
128gap> GetFusionMap( h, f3p ) in repr;
129true
130gap> b:= CharacterTable( "B" );
131CharacterTable( "B" )
132gap> h:= CharacterTable( "BN7" );
133CharacterTable( "BN7" )
134gap> hfusb:= PossibleClassFusions( h, b );;
135gap> Length( RepresentativesFusions( h, hfusb, b ) );
1362
137gap> Number( Factors( Size( b ) ), x -> x = 7 );
1382
139gap> th:= CharacterTable( "Th" );
140CharacterTable( "Th" )
141gap> Filtered( Maxes( th ), x -> Size( CharacterTable( x ) ) mod 7^2 = 0 );
142[ "3D4(2).3", "7^2:(3x2S4)" ]
143gap> thn7:= CharacterTable( "ThN7" );
144CharacterTable( "7^2:(3x2S4)" )
145gap> comp:= SetOfComposedClassFusions( PossibleClassFusions( th, b ),
146>               PossibleClassFusions( thn7, th ) );
147[ [ 1, 31, 7, 7, 5, 28, 28, 17, 72, 72, 6, 6, 7, 28, 27, 27, 109, 109, 17,
148      45, 45, 72, 72, 127, 127, 127, 127 ] ]
149gap> thn7fush:= PossibleClassFusions( thn7, h );;
150gap> filt:= Filtered( hfusb, x ->
151>               ForAny( thn7fush, y -> CompositionMaps( x, y ) in comp ) );;
152gap> Length( RepresentativesFusions( h, filt, b ) );
1531
154gap> GetFusionMap( h, b ) in filt;
155true
156gap> m:= CharacterTable( "(A4xO8+(2).3).2" );;
157gap> t:= CharacterTable( "F3+" );;
158gap> mfust:= PossibleClassFusions( m, t );;
159gap> repr:= RepresentativesFusions( m, mfust, t );;
160gap> Length( repr );
1612
162gap> a4inm:= Filtered( ClassPositionsOfNormalSubgroups( m ),
163>                      n -> Sum( SizesConjugacyClasses( m ){ n } ) = 12 );
164[ [ 1, 69, 110 ] ]
165gap> OrdersClassRepresentatives( m ){ a4inm[1] };
166[ 1, 2, 3 ]
167gap> List( repr, map -> map[110] );
168[ 4, 4 ]
169gap> OrdersClassRepresentatives( t ){ [ 1 .. 4 ] };
170[ 1, 2, 2, 3 ]
171gap> s:= CharacterTable( "F3+N3A" );
172CharacterTable( "(3xO8+(3):3):2" )
173gap> u:= CharacterTable( "Cyclic", 3 ) * CharacterTable( "O8+(2).3" );
174CharacterTable( "C3xO8+(2).3" )
175gap> ufuss:= PossibleClassFusions( u, s );;
176gap> ufusm:= PossibleClassFusions( u, m );;
177gap> sfust:= PossibleClassFusions( s, t );;
178gap> comp:= SetOfComposedClassFusions( sfust, ufuss );;
179gap> Length( comp );
1806
181gap> filt:= Filtered( mfust,
182>     x -> ForAny( ufusm, map -> CompositionMaps( x, map ) in comp ) );;
183gap> repr:= RepresentativesFusions( m, filt, t );;
184gap> Length( repr );
1851
186gap> GetFusionMap( m, t ) in repr;
187true
188gap> m:= CharacterTable( "A6xL2(8):3" );;
189gap> t:= CharacterTable( "F3+" );;
190gap> mfust:= PossibleClassFusions( m, t );;
191gap> Length( RepresentativesFusions( m, mfust, t ) );
1922
193gap> dppos:= ClassPositionsOfDirectProductDecompositions( m );
194[ [ [ 1, 12 .. 67 ], [ 1 .. 11 ] ] ]
195gap> List( dppos[1], l -> Sum( SizesConjugacyClasses( t ){ l } ) );
196[ 17733424133316996808705, 4545066196775803392 ]
197gap> List( dppos[1], l -> Sum( SizesConjugacyClasses( m ){ l } ) );
198[ 360, 1512 ]
199gap> 3Apos:= Position( OrdersClassRepresentatives( t ), 3 );
2004
201gap> 3Ainm:= List( mfust, map -> Position( map, 3Apos ) );
202[ 23, 23, 23, 23, 34, 34, 34, 34 ]
203gap> ForAll( 3Ainm, x -> x in dppos[1][1] );
204true
205gap> u:= CharacterTable( "3^2:2" ) * CharacterTable( "L2(8).3" );
206CharacterTable( "3^2:2xL2(8).3" )
207gap> s:= CharacterTable( "F3+N3A" );
208CharacterTable( "(3xO8+(3):3):2" )
209gap> ufuss:= PossibleClassFusions( u, s );;
210gap> comp:= SetOfComposedClassFusions( sfust, ufuss );;
211gap> ufusm:= PossibleClassFusions( u, m );;
212gap> filt:= Filtered( mfust,
213>               map -> ForAny( ufusm,
214>                          map2 -> CompositionMaps( map, map2 ) in comp ) );;
215gap> repr:= RepresentativesFusions( m, filt, t );;
216gap> Length( repr );
2171
218gap> GetFusionMap( m, t ) in repr;
219true
220gap> b:= CharacterTable( "B" );;
221gap> n:= CharacterTable( "BN3A" );
222CharacterTable( "S3xFi22.2" )
223gap> nfusb:= PossibleClassFusions( n, b );;
224gap> Length( nfusb );
2251
226gap> nfusb:= nfusb[1];;
227gap> fi222:= CharacterTable( "Fi22.2" );;
228gap> fi222n3a:= CharacterTable( "S3xU4(3).(2^2)_{122}" );;
229gap> s3:= CharacterTable( "S3" );;
230gap> inter:= s3 * fi222n3a;;
231gap> intermods3fusnmods3:= PossibleClassFusions( fi222n3a, fi222 );;
232gap> Length( intermods3fusnmods3 );
2332
234gap> Length( RepresentativesFusions( fi222n3a, intermods3fusnmods3, fi222 ) );
2351
236gap> interfusn:= CompositionMaps( InverseMap( GetFusionMap( n, fi222 ) ),
237>        CompositionMaps( intermods3fusnmods3[1],
238>            GetFusionMap( inter, fi222n3a ) ) );;
239gap> interfusn:= PossibleClassFusions( inter, n,
240>        rec( fusionmap:= interfusn, quick:= true ) );;
241gap> Length( interfusn );
2421
243gap> nccl:= NrConjugacyClasses( fi222 );;
244gap> interfusn[1] = Concatenation( List( [ 0 .. 2 ],
245>                       i -> intermods3fusnmods3[1] + i * nccl ) );
246true
247gap> tblg:= CharacterTable( "BM14" );
248CharacterTable( "(3^2:D8xU4(3).2^2).2" )
249gap> interfusg:= PossibleClassFusions( inter, tblg );;
250gap> Length( interfusg );
2512
252gap> Length( RepresentativesFusions( inter, interfusg, tblg ) );
2531
254gap> interfusb:= CompositionMaps( nfusb, interfusn[1] );;
255gap> approx:= List( interfusg,
256>        map -> CompositionMaps( interfusb, InverseMap( map ) ) );;
257gap> gfusb:= Set( Concatenation( List( approx,
258>                     map -> PossibleClassFusions( tblg, b,
259>                                rec( fusionmap:= map ) ) ) ) );;
260gap> Length( gfusb );
2614
262gap> Length( RepresentativesFusions( tblg, gfusb, b ) );
2631
264gap> GetFusionMap( tblg, b ) in gfusb;
265true
266gap> tblu:= CharacterTable( "7^(1+4):(3x2.S7)" );;
267gap> m:= CharacterTable( "M" );;
268gap> ufusm:= PossibleClassFusions( tblu, m );;
269gap> Length( RepresentativesFusions( tblu, ufusm, m ) );
2702
271gap> LoadPackage( "atlasrep" );
272true
273gap> g1:= AtlasGroup( "7^(2+1+2):GL2(7)" );;
274gap> s1:= SylowSubgroup( g1, 7 );;
275gap> n1:= Normalizer( g1, s1 );;
276gap> g2:= AtlasGroup( "7^(1+4):(3x2.S7)" );;
277gap> s2:= SylowSubgroup( g2, 7 );;
278gap> n2:= Normalizer( g2, s2 );;
279gap> Size( n1 ) = Size( n2 );
280true
281gap> ( Size( m ) / Size( s1 ) ) mod 7 <> 0;
282true
283gap> tbln:= CharacterTable( Image( IsomorphismPcGroup( n1 ) ) );;
284gap> tbls:= CharacterTable( "7^(2+1+2):GL2(7)" );;
285gap> nfusm:= PossibleClassFusions( tbln, m );;
286gap> Length( RepresentativesFusions( tbln, nfusm, m ) );
2872
288gap> nfuss:= PossibleClassFusions( tbln, tbls );;
289gap> sfusm:= PossibleClassFusions( tbls, m );;
290gap> nfusm:= SetOfComposedClassFusions( sfusm, nfuss );;
291gap> Length( nfusm );
2921
293gap> nfusu:= PossibleClassFusions( tbln, tblu );;
294gap> ufusm:= Filtered( ufusm, map2 -> ForAny( nfusu,
295>        map1 -> CompositionMaps( map2, map1 ) in nfusm ) );;
296gap> Length( RepresentativesFusions( tblu, ufusm, m ) );
2971
298gap> tblc:= CharacterTable( "MC7B" );
299CharacterTable( "7^1+4.2A7" )
300gap> cfusm:= PossibleClassFusions( tblc, m );;
301gap> Length( RepresentativesFusions( tblc, cfusm, m ) );
3022
303gap> cfusu:= PossibleClassFusions( tblc, tblu );;
304gap> cfusm:= SetOfComposedClassFusions( ufusm, cfusu );;
305gap> Length( RepresentativesFusions( tblc, cfusm, m ) );
3061
307gap> m:= CharacterTable( "3^7.O7(3):2" );;
308gap> t:= CharacterTable( "F3+.2" );;
309gap> mfust:= PossibleClassFusions( m, t );;
310gap> Length( RepresentativesFusions( m, mfust, t ) );
3112
312gap> nsg:= ClassPositionsOfNormalSubgroups( m );
313[ [ 1 ], [ 1 .. 4 ], [ 1 .. 158 ], [ 1 .. 291 ] ]
314gap> Sum( SizesConjugacyClasses( m ){ nsg[2] } );
3152187
316gap> 3^7;
3172187
318gap> rest:= Set( List( mfust, map -> map{ nsg[2] } ) );
319[ [ 1, 4, 5, 6 ] ]
320gap> List( rest, l -> ClassNames( t, "Atlas" ){ l } );
321[ [ "1A", "3A", "3B", "3C" ] ]
322gap> s:= CharacterTable( "F3+.2N3A" );
323CharacterTable( "S3xO8+(3):S3" )
324gap> PowerMap( m, 2 )[4];
3254
326gap> size_u:= 2 * SizesCentralizers( m )[ 2 ];
32753059069440
328gap> Size( s ) / size_u;
3293360
330gap> o8p3:= CharacterTable( "O8+(3)" );;
331gap> mx:= List( Maxes( o8p3 ), CharacterTable );;
332gap> filt:= Filtered( mx, x -> 3360 mod Index( o8p3, x ) = 0 );
333[ CharacterTable( "3^6:L4(3)" ), CharacterTable( "O8+(3)M8" ),
334  CharacterTable( "O8+(3)M9" ) ]
335gap> List( filt, x -> Index( o8p3, x ) );
336[ 1120, 1120, 1120 ]
337gap> uu:= filt[1];;
338gap> u:= CharacterTable( "Symmetric", 3 ) * uu;
339CharacterTable( "Sym(3)x3^6:L4(3)" )
340gap> uufusm:= PossibleClassFusions( uu, m );;
341gap> Length( uufusm );
3428
343gap> approx:= List( uufusm, map -> CompositionMaps( map,
344>                   InverseMap( GetFusionMap( uu, u ) ) ) );;
345gap> ufusm:= Concatenation( List( approx, map ->
346>        PossibleClassFusions( u, m, rec( fusionmap:= map ) ) ) );;
347gap> Length( ufusm );
3488
349gap> uufuss:= PossibleClassFusions( uu, s );;
350gap> Length( uufuss );
3518
352gap> approx:= List( uufuss, map -> CompositionMaps( map,
353>              InverseMap( GetFusionMap( uu, u ) ) ) );;
354gap> ufuss:= Concatenation( List( approx, map ->
355>   PossibleClassFusions( u, s, rec( fusionmap:= map ) ) ) );;
356gap> Length( ufuss );
3578
358gap> sfust:= PossibleClassFusions( s, t );;
359gap> comp:= SetOfComposedClassFusions( sfust, ufuss );;
360gap> Length( comp );
3618
362gap> filt:= Filtered( mfust, map2 -> ForAny( ufusm, map1 ->
363>        CompositionMaps( map2, map1 ) in comp ) );;
364gap> Length( filt );
3654
366gap> Length( RepresentativesFusions( m, filt, t ) );
3671
368gap> GetFusionMap( m, t ) in filt;
369true
370gap> t:= CharacterTable( "Suz" );;
371gap> 3t:= CharacterTable( "3.Suz" );;
372gap> s:= CharacterTable( "A7" );;
373gap> 3s:= CharacterTable( "3.A7" );;
374gap> PossibleClassFusions( s, 3t );
375[  ]
376gap> 3sfus3t:= PossibleClassFusions( 3s, 3t );;
377gap> Length( 3sfus3t );
3786
379gap> RepresentativesFusions( 3s, 3sfus3t, 3t );
380[ [ 1, 2, 3, 7, 8, 9, 16, 16, 26, 27, 28, 32, 33, 34, 47, 47, 47, 48, 49, 50,
381      48, 49, 50 ],
382  [ 1, 11, 12, 4, 36, 37, 13, 16, 23, 82, 83, 32, 100, 101, 44, 38, 41, 48,
383      112, 116, 48, 115, 113 ] ]
384gap> ClassPositionsOfCentre( 3t );
385[ 1, 2, 3 ]
386gap> sfust:= PossibleClassFusions( s, t );;
387gap> Length( sfust );
3881
389gap> filt:= Filtered( 3sfus3t, map -> CompositionMaps( GetFusionMap( 3t, t ),
390>                                         map )
391>               = CompositionMaps( sfust[1], GetFusionMap( 3s, s ) ) );
392[ [ 1, 2, 3, 7, 8, 9, 16, 16, 26, 27, 28, 32, 33, 34, 47, 47, 47, 48, 49, 50,
393      48, 49, 50 ],
394  [ 1, 3, 2, 7, 9, 8, 16, 16, 26, 28, 27, 32, 34, 33, 47, 47, 47, 48, 50, 49,
395      48, 50, 49 ] ]
396gap> RepresentativesFusions( 3s, filt, 3t );
397[ [ 1, 2, 3, 7, 8, 9, 16, 16, 26, 27, 28, 32, 33, 34, 47, 47, 47, 48, 49, 50,
398      48, 49, 50 ] ]
399gap> GetFusionMap( 3s, 3t ) in filt;
400true
401gap> u:= CharacterTable( "3_2.U4(3)" );;
402gap> PossibleClassFusions( s, u );
403[  ]
404gap> Length( PossibleClassFusions( 3s, u ) );
4058
406gap> s:= CharacterTable( "S6" );
407CharacterTable( "A6.2_1" )
408gap> t:= CharacterTable( "U4(2)" );
409CharacterTable( "U4(2)" )
410gap> sfust:= PossibleClassFusions( s, t );
411[ [ 1, 3, 6, 7, 9, 10, 3, 2, 9, 16, 15 ],
412  [ 1, 3, 7, 6, 9, 10, 2, 3, 9, 15, 16 ] ]
413gap> Length( RepresentativesFusions( s, sfust, t ) );
4141
415gap> 2t:= CharacterTable( "2.U4(2)" );
416CharacterTable( "2.U4(2)" )
417gap> 2s:= CharacterTable( "2.A6.2_1" );
418CharacterTable( "2.A6.2_1" )
419gap> 2sfus2t:= PossibleClassFusions( 2s, 2t );
420[ [ 1, 2, 4, 11, 12, 9, 10, 15, 16, 17, 3, 4, 15, 24, 25, 26, 26 ],
421  [ 1, 2, 4, 11, 12, 9, 10, 15, 16, 17, 3, 4, 15, 25, 24, 26, 26 ] ]
422gap> Length( RepresentativesFusions( 2s, 2sfus2t, 2t ) );
4231
424gap> 2sfuss:= GetFusionMap( 2s, s );
425[ 1, 1, 2, 3, 3, 4, 4, 5, 6, 6, 7, 8, 9, 10, 10, 11, 11 ]
426gap> 2tfust:= GetFusionMap( 2t, t );;
427gap> induced:= Set( List( 2sfus2t, x -> CompositionMaps( 2tfust,
428>      CompositionMaps( x, InverseMap( 2sfuss ) ) ) ) );
429[ [ 1, 3, 7, 6, 9, 10, 2, 3, 9, 15, 16 ] ]
430gap> auts:= AutomorphismsOfTable( s );
431Group([ (3,4)(7,8)(10,11) ])
432gap> other:= OnTuples( 2sfuss, GeneratorsOfGroup( auts )[1] );
433[ 1, 1, 2, 4, 4, 3, 3, 5, 6, 6, 8, 7, 9, 11, 11, 10, 10 ]
434gap> Set( List( 2sfus2t, x -> CompositionMaps( 2tfust,
435>      CompositionMaps( x, InverseMap( other ) ) ) ) );
436[ [ 1, 3, 6, 7, 9, 10, 3, 2, 9, 16, 15 ] ]
437gap> GetFusionMap( s, t ) in induced;
438true
439gap> s:= CharacterTable( "U3(8).3_1" );;
440gap> t:= CharacterTable( "2E6(2)" );;
441gap> sfust:= PossibleClassFusions( s, t );;
442gap> Length( sfust );
44324
444gap> Length( RepresentativesFusions( s, sfust, t ) );
4452
446gap> s2:= CharacterTable( "U3(8).6" );;
447gap> t2:= CharacterTable( "2E6(2).2" );;
448gap> s2fust2:= PossibleClassFusions( s2, t2 );;
449gap> Length( s2fust2 );
4502
451gap> Length( RepresentativesFusions( s2, s2fust2, t2 ) );
4521
453gap> sfuss2:= PossibleClassFusions( s, s2 );;
454gap> comp:= SetOfComposedClassFusions( s2fust2, sfuss2 );;
455gap> tfust2:= PossibleClassFusions( t, t2 );;
456gap> filt:= Filtered( sfust, map -> ForAny( tfust2,
457>               map2 -> CompositionMaps( map2, map ) in comp ) );;
458gap> Length( filt );
45912
460gap> Length( RepresentativesFusions( s, filt, t ) );
4611
462gap> Set( List( filt, x -> x{ [ 31 .. 36 ] } ) );
463[ [ 74, 74, 81, 82, 81, 82 ], [ 74, 74, 82, 81, 82, 81 ],
464  [ 81, 82, 74, 74, 81, 82 ], [ 81, 82, 81, 82, 74, 74 ],
465  [ 82, 81, 74, 74, 82, 81 ], [ 82, 81, 82, 81, 74, 74 ] ]
466gap> Set( List( Difference( sfust, filt ), x -> x{ [ 31 .. 36 ] } ) );
467[ [ 74, 74, 81, 82, 82, 81 ], [ 74, 74, 82, 81, 81, 82 ],
468  [ 81, 82, 74, 74, 82, 81 ], [ 81, 82, 82, 81, 74, 74 ],
469  [ 82, 81, 74, 74, 81, 82 ], [ 82, 81, 81, 82, 74, 74 ] ]
470gap> Set( List( sfuss2, x -> x{ [ 31 .. 36 ] } ) );
471[ [ 28, 29, 30, 31, 30, 31 ], [ 29, 28, 31, 30, 31, 30 ],
472  [ 30, 31, 28, 29, 30, 31 ], [ 30, 31, 30, 31, 28, 29 ],
473  [ 31, 30, 29, 28, 31, 30 ], [ 31, 30, 31, 30, 29, 28 ] ]
474gap> List( tfust2, x -> x{ [ 74, 81, 82 ] } );
475[ [ 65, 70, 71 ], [ 65, 70, 71 ], [ 65, 71, 70 ], [ 65, 71, 70 ],
476  [ 65, 70, 71 ], [ 65, 70, 71 ], [ 65, 71, 70 ], [ 65, 71, 70 ],
477  [ 65, 70, 71 ], [ 65, 70, 71 ], [ 65, 71, 70 ], [ 65, 71, 70 ] ]
478gap> List( s2fust2, x -> x{ [ 28 .. 31 ] } );
479[ [ 65, 65, 70, 71 ], [ 65, 65, 71, 70 ] ]
480gap> GetFusionMap( s, t ) in filt;
481true
482gap> s:= CharacterTable( "L3(4).2_1" );;
483gap> t:= CharacterTable( "U6(2)" );;
484gap> sfust:= PossibleClassFusions( s, t );;
485gap> Length( sfust );
48627
487gap> Length( RepresentativesFusions( s, sfust, t ) );
4883
489gap> s3:= CharacterTable( "L3(4).6" );;
490gap> t3:= CharacterTable( "U6(2).3" );;
491gap> s3fust3:= PossibleClassFusions( s3, t3 );;
492gap> Length( s3fust3 );
4932
494gap> Length( RepresentativesFusions( s3, s3fust3, t3 ) );
4951
496gap> sfuss3:= PossibleClassFusions( s, s3 );;
497gap> comp:= SetOfComposedClassFusions( s3fust3, sfuss3 );;
498gap> tfust3:= PossibleClassFusions( t, t3 );;
499gap> sfust = Filtered( sfust, map -> ForAny( tfust3,
500>                map2 -> CompositionMaps( map2, map ) in comp ) );
501true
502gap> OrdersClassRepresentatives( s );
503[ 1, 2, 3, 4, 4, 4, 5, 7, 2, 4, 6, 8, 8, 8 ]
504gap> sfuss3;
505[ [ 1, 2, 3, 4, 4, 4, 5, 6, 7, 8, 9, 10, 10, 10 ] ]
506gap> Set( List( sfust, map -> map{ [ 4 .. 6 ] } ) );
507[ [ 10, 10, 10 ], [ 10, 10, 11 ], [ 10, 10, 12 ], [ 10, 11, 10 ],
508  [ 10, 11, 11 ], [ 10, 11, 12 ], [ 10, 12, 10 ], [ 10, 12, 11 ],
509  [ 10, 12, 12 ], [ 11, 10, 10 ], [ 11, 10, 11 ], [ 11, 10, 12 ],
510  [ 11, 11, 10 ], [ 11, 11, 11 ], [ 11, 11, 12 ], [ 11, 12, 10 ],
511  [ 11, 12, 11 ], [ 11, 12, 12 ], [ 12, 10, 10 ], [ 12, 10, 11 ],
512  [ 12, 10, 12 ], [ 12, 11, 10 ], [ 12, 11, 11 ], [ 12, 11, 12 ],
513  [ 12, 12, 10 ], [ 12, 12, 11 ], [ 12, 12, 12 ] ]
514gap> Set( List( tfust3, map -> map{ [ 10 .. 12 ] } ) );
515[ [ 10, 10, 10 ] ]
516gap> Filtered( sfust, map -> Intersection( map, [ 10 .. 12 ] ) = [] );
517[  ]
518gap> filt:= Filtered( sfust, map -> IsSubset( map, [ 10 .. 12 ] ) );
519[ [ 1, 3, 7, 10, 11, 12, 15, 24, 4, 14, 23, 26, 27, 28 ],
520  [ 1, 3, 7, 10, 12, 11, 15, 24, 4, 14, 23, 26, 28, 27 ],
521  [ 1, 3, 7, 11, 10, 12, 15, 24, 4, 14, 23, 27, 26, 28 ],
522  [ 1, 3, 7, 11, 12, 10, 15, 24, 4, 14, 23, 27, 28, 26 ],
523  [ 1, 3, 7, 12, 10, 11, 15, 24, 4, 14, 23, 28, 26, 27 ],
524  [ 1, 3, 7, 12, 11, 10, 15, 24, 4, 14, 23, 28, 27, 26 ] ]
525gap> Length( RepresentativesFusions( s, filt, t ) );
5261
527gap> GetFusionMap( s, t ) in filt;
528true
529gap> s:= CharacterTable( "L2(16).4" );;
530gap> t:= CharacterTable( "J3.2" );;
531gap> fus:= PossibleClassFusions( s, t );
532[ [ 1, 2, 3, 6, 14, 15, 16, 2, 5, 7, 12, 5, 5, 8, 8, 13, 13 ],
533  [ 1, 2, 3, 6, 14, 15, 16, 2, 5, 7, 12, 19, 19, 22, 22, 23, 23 ],
534  [ 1, 2, 3, 6, 14, 16, 15, 2, 5, 7, 12, 5, 5, 8, 8, 13, 13 ],
535  [ 1, 2, 3, 6, 14, 16, 15, 2, 5, 7, 12, 19, 19, 22, 22, 23, 23 ] ]
536gap> RepresentativesFusions( s, fus, t );
537[ [ 1, 2, 3, 6, 14, 15, 16, 2, 5, 7, 12, 5, 5, 8, 8, 13, 13 ],
538  [ 1, 2, 3, 6, 14, 15, 16, 2, 5, 7, 12, 19, 19, 22, 22, 23, 23 ] ]
539gap> j3:= CharacterTable( "J3" );;
540gap> PossibleClassFusions( s, j3 );
541[  ]
542gap> GetFusionMap( j3, t );
543[ 1, 2, 3, 4, 5, 6, 6, 7, 8, 9, 10, 11, 12, 12, 13, 14, 14, 15, 16, 17, 17 ]
544gap> filt:= Filtered( fus,
545>          x -> not IsSubset( ClassPositionsOfDerivedSubgroup( t ), x ) );
546[ [ 1, 2, 3, 6, 14, 15, 16, 2, 5, 7, 12, 19, 19, 22, 22, 23, 23 ],
547  [ 1, 2, 3, 6, 14, 16, 15, 2, 5, 7, 12, 19, 19, 22, 22, 23, 23 ] ]
548gap> smod2:= s mod 2;;
549gap> tmod2:= t mod 2;;
550gap> admissible:= [];;
551gap> for map in filt do
552>      modmap:= CompositionMaps( InverseMap( GetFusionMap( tmod2, t ) ),
553>                   CompositionMaps( map, GetFusionMap( smod2, s ) ) );
554>      if not fail in Decomposition( Irr( smod2 ),
555>            List( Irr( tmod2 ), chi -> chi{ modmap } ), "nonnegative" ) then
556>        AddSet( admissible, map );
557>      fi;
558>    od;
559gap> admissible;
560[ [ 1, 2, 3, 6, 14, 16, 15, 2, 5, 7, 12, 19, 19, 22, 22, 23, 23 ] ]
561gap> CTblLib.Test.Decompositions( s, fus, t ) = admissible;
562true
563gap> GetFusionMap( s, t ) in admissible;
564true
565gap> m:= CharacterTable( "L2(17)" );;
566gap> t:= CharacterTable( "S8(2)" );;
567gap> mfust:= PossibleClassFusions( m, t );;
568gap> Length( RepresentativesFusions( m, mfust, t ) );
5694
570gap> filt:= CTblLib.Test.Decompositions( m, mfust, t );;
571gap> repr:= RepresentativesFusions( m, filt, t );;
572gap> Length( repr );
5731
574gap> GetFusionMap( m, t ) in repr;
575true
576gap> s:= CharacterTable( "L2(19)" );;
577gap> t:= CharacterTable( "J3" );;
578gap> sfust:= PossibleClassFusions( s, t );
579[ [ 1, 2, 4, 6, 7, 10, 11, 12, 13, 14, 20, 21 ],
580  [ 1, 2, 4, 6, 7, 10, 11, 12, 13, 14, 21, 20 ],
581  [ 1, 2, 4, 6, 7, 11, 12, 10, 13, 14, 20, 21 ],
582  [ 1, 2, 4, 6, 7, 11, 12, 10, 13, 14, 21, 20 ],
583  [ 1, 2, 4, 6, 7, 12, 10, 11, 13, 14, 20, 21 ],
584  [ 1, 2, 4, 6, 7, 12, 10, 11, 13, 14, 21, 20 ],
585  [ 1, 2, 4, 7, 6, 10, 11, 12, 14, 13, 20, 21 ],
586  [ 1, 2, 4, 7, 6, 10, 11, 12, 14, 13, 21, 20 ],
587  [ 1, 2, 4, 7, 6, 11, 12, 10, 14, 13, 20, 21 ],
588  [ 1, 2, 4, 7, 6, 11, 12, 10, 14, 13, 21, 20 ],
589  [ 1, 2, 4, 7, 6, 12, 10, 11, 14, 13, 20, 21 ],
590  [ 1, 2, 4, 7, 6, 12, 10, 11, 14, 13, 21, 20 ] ]
591gap> fusreps:= RepresentativesFusions( s, sfust, t );
592[ [ 1, 2, 4, 6, 7, 10, 11, 12, 13, 14, 20, 21 ] ]
593gap> tmod19:= t mod 19;
594BrauerTable( "J3", 19 )
595gap> deg110:= Filtered( Irr( tmod19 ), phi -> phi[1] = 110 );
596[ Character( BrauerTable( "J3", 19 ), [ 110, -2, 5, 2, 2, 0, 0, 1, 0,
597      -2*E(9)^2+E(9)^3-E(9)^4-E(9)^5+E(9)^6-2*E(9)^7,
598      E(9)^2+E(9)^3-E(9)^4-E(9)^5+E(9)^6+E(9)^7,
599      E(9)^2+E(9)^3+2*E(9)^4+2*E(9)^5+E(9)^6+E(9)^7, -2, -2, -1, 0, 0,
600      E(17)+E(17)^2+E(17)^4+E(17)^8+E(17)^9+E(17)^13+E(17)^15+E(17)^16,
601      E(17)^3+E(17)^5+E(17)^6+E(17)^7+E(17)^10+E(17)^11+E(17)^12+E(17)^14 ] )
602 ]
603gap> 9A:= Position( OrdersClassRepresentatives( tmod19 ), 9 );
60410
605gap> deg110[1][ 9A ];
606-2*E(9)^2+E(9)^3-E(9)^4-E(9)^5+E(9)^6-2*E(9)^7
607gap> AtlasIrrationality( "-1+2y9+&4" ) = deg110[1][ 9A ];
608true
609gap> smod19:= s mod 19;
610BrauerTable( "L2(19)", 19 )
611gap> compatible:= [];;
612gap> for map in sfust do
613>      comp:= CompositionMaps( InverseMap( GetFusionMap( tmod19, t ) ),
614>      CompositionMaps( map, GetFusionMap( smod19, s ) ) );
615>      rest:= List( Irr( tmod19 ), phi -> phi{ comp } );
616>      if not fail in Decomposition( Irr( smod19 ), rest, "nonnegative" ) then
617>        Add( compatible, map );
618>      fi;
619>    od;
620gap> compatible;
621[ [ 1, 2, 4, 6, 7, 11, 12, 10, 13, 14, 20, 21 ],
622  [ 1, 2, 4, 6, 7, 11, 12, 10, 13, 14, 21, 20 ],
623  [ 1, 2, 4, 6, 7, 12, 10, 11, 13, 14, 20, 21 ],
624  [ 1, 2, 4, 6, 7, 12, 10, 11, 13, 14, 21, 20 ],
625  [ 1, 2, 4, 7, 6, 11, 12, 10, 14, 13, 20, 21 ],
626  [ 1, 2, 4, 7, 6, 11, 12, 10, 14, 13, 21, 20 ],
627  [ 1, 2, 4, 7, 6, 12, 10, 11, 14, 13, 20, 21 ],
628  [ 1, 2, 4, 7, 6, 12, 10, 11, 14, 13, 21, 20 ] ]
629gap> reps:= RepresentativesFusions( s, compatible, t );
630[ [ 1, 2, 4, 6, 7, 11, 12, 10, 13, 14, 20, 21 ],
631  [ 1, 2, 4, 6, 7, 12, 10, 11, 13, 14, 20, 21 ] ]
632gap> compatiblemod19:= List( reps, map -> CompositionMaps(
633>        InverseMap( GetFusionMap( tmod19, t ) ),
634>        CompositionMaps( map, GetFusionMap( smod19, s ) ) ) );
635[ [ 1, 2, 4, 6, 7, 11, 12, 10, 13, 14 ],
636  [ 1, 2, 4, 6, 7, 12, 10, 11, 13, 14 ] ]
637gap> rest:= List( compatiblemod19, map -> Irr( tmod19 )[3]{ map } );;
638gap> dec:= Decomposition( Irr( smod19 ), rest, "nonnegative" );
639[ [ 0, 0, 1, 2, 1, 2, 2, 1, 0, 1 ], [ 0, 2, 0, 2, 0, 1, 2, 0, 2, 1 ] ]
640gap> List( Irr( smod19 ), phi -> phi[1] );
641[ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 ]
642gap> LoadPackage( "atlasrep" );
643true
644gap> prog:= AtlasStraightLineProgram( "J3", "maxes", 2 );
645rec( groupname := "J3", identifier := [ "J3", "J3G1-max2W1", 1 ],
646  program := <straight line program>, size := 3420, standardization := 1,
647  subgroupname := "L2(19)" )
648gap> gens:= OneAtlasGeneratingSet( "J3", Characteristic, 19, Dimension, 110 );
649rec( dim := 110,
650  generators := [ < immutable compressed matrix 110x110 over GF(19) >,
651      < immutable compressed matrix 110x110 over GF(19) > ],
652  groupname := "J3", id := "",
653  identifier := [ "J3", [ "J3G1-f19r110B0.m1", "J3G1-f19r110B0.m2" ], 1, 19 ],
654  repname := "J3G1-f19r110B0", repnr := 35, ring := GF(19), size := 50232960,
655  standardization := 1, type := "matff" )
656gap> restgens:= ResultOfStraightLineProgram( prog.program, gens.generators );
657[ < immutable compressed matrix 110x110 over GF(19) >,
658  < immutable compressed matrix 110x110 over GF(19) > ]
659gap> module:= GModuleByMats( restgens, GF( 19 ) );;
660gap> facts:= SMTX.CollectedFactors( module );;
661gap> Length( facts );
6627
663gap> List( facts, x -> x[1].dimension );
664[ 5, 7, 9, 11, 13, 15, 19 ]
665gap> List( facts, x -> x[2] );
666[ 1, 2, 1, 2, 2, 1, 1 ]
667gap> GetFusionMap( s, t ) = reps[1];
668true
669gap> LoadPackage( "atlasrep" );
670true
671gap> t:= CharacterTable( "F3+" );
672CharacterTable( "F3+" )
673gap> s:= CharacterTable( "U3(3).2" );
674CharacterTable( "U3(3).2" )
675gap> tnames:= ClassNames( t, "ATLAS" );
676[ "1A", "2A", "2B", "3A", "3B", "3C", "3D", "3E", "4A", "4B", "4C", "5A",
677  "6A", "6B", "6C", "6D", "6E", "6F", "6G", "6H", "6I", "6J", "6K", "7A",
678  "7B", "8A", "8B", "8C", "9A", "9B", "9C", "9D", "9E", "9F", "10A", "10B",
679  "11A", "12A", "12B", "12C", "12D", "12E", "12F", "12G", "12H", "12I",
680  "12J", "12K", "12L", "12M", "13A", "14A", "14B", "15A", "15B", "15C",
681  "16A", "17A", "18A", "18B", "18C", "18D", "18E", "18F", "18G", "18H",
682  "20A", "20B", "21A", "21B", "21C", "21D", "22A", "23A", "23B", "24A",
683  "24B", "24C", "24D", "24E", "24F", "24G", "26A", "27A", "27B", "27C",
684  "28A", "29A", "29B", "30A", "30B", "33A", "33B", "35A", "36A", "36B",
685  "36C", "36D", "39A", "39B", "39C", "39D", "42A", "42B", "42C", "45A",
686  "45B", "60A" ]
687gap> OrdersClassRepresentatives( s );
688[ 1, 2, 3, 3, 4, 4, 6, 7, 8, 12, 2, 4, 6, 8, 12, 12 ]
689gap> sfust:= List( [ "1A", "2B", "3D", "3E", "4C", "4C", "6J", "7B", "8C",
690>                    "12M" ], x -> Position( tnames, x ) );
691[ 1, 3, 7, 8, 11, 11, 22, 25, 28, 50 ]
692gap> sfust:= PossibleClassFusions( s, t, rec( fusionmap:= sfust ) );
693[ [ 1, 3, 7, 8, 11, 11, 22, 25, 28, 50, 3, 9, 23, 28, 43, 43 ],
694  [ 1, 3, 7, 8, 11, 11, 22, 25, 28, 50, 3, 11, 23, 28, 50, 50 ] ]
695gap> OrdersClassRepresentatives( s );
696[ 1, 2, 3, 3, 4, 4, 6, 7, 8, 12, 2, 4, 6, 8, 12, 12 ]
697gap> Maxes( s );
698[ "U3(3)", "3^(1+2):SD16", "L3(2).2", "2^(1+4).S3", "4^2:D12" ]
699gap> SizesCentralizers( s );
700[ 12096, 192, 216, 18, 96, 32, 24, 7, 8, 12, 48, 48, 6, 8, 12, 12 ]
701gap> u:= CharacterTable( Maxes( s )[2] );;
702gap> ufuss:= GetFusionMap( u, s );
703[ 1, 2, 11, 3, 4, 5, 12, 7, 13, 9, 9, 15, 16, 10 ]
704gap> 3Dcentralizer:= SizesCentralizers( t )[7];
705153055008
706gap> cand:= [];;
707gap> for name in Maxes( t ) do
708>      m:= CharacterTable( name );
709>      mfust:= GetFusionMap( m, t );
710>      if ForAny( [ 1 .. Length( mfust ) ],
711>          i -> mfust[i] = 7 and SizesCentralizers( m )[i] = 3Dcentralizer )
712>      then
713>        Add( cand, m );
714>      fi;
715>    od;
716gap> cand;
717[ CharacterTable( "3^7.O7(3)" ), CharacterTable( "3^2.3^4.3^8.(A5x2A4).2" ) ]
718gap> possufust:= List( sfust, x -> CompositionMaps( x, ufuss ) );
719[ [ 1, 3, 3, 7, 8, 11, 9, 22, 23, 28, 28, 43, 43, 50 ],
720  [ 1, 3, 3, 7, 8, 11, 11, 22, 23, 28, 28, 50, 50, 50 ] ]
721gap> m:= cand[1];;
722gap> ufusm:= PossibleClassFusions( u, m );;
723gap> Length( ufusm );
724242
725gap> comp:= List( ufusm, x -> CompositionMaps( GetFusionMap( m, t ), x ) );;
726gap> Intersection( possufust, comp );
727[ [ 1, 3, 3, 7, 8, 11, 11, 22, 23, 28, 28, 50, 50, 50 ] ]
728gap> m:= cand[2];;
729gap> ufusm:= PossibleClassFusions( u, m );;
730gap> Length( ufusm );
731256
732gap> comp:= List( ufusm, x -> CompositionMaps( GetFusionMap( m, t ), x ) );;
733gap> Intersection( possufust, comp );
734[ [ 1, 3, 3, 7, 8, 11, 11, 22, 23, 28, 28, 50, 50, 50 ] ]
735gap> GetFusionMap( s, t ) = sfust[2];
736true
737gap> t:= CharacterTable( "F3+" );;
738gap> u:= CharacterTable( "L2(13).2" );;
739gap> fus:= PossibleClassFusions( u, t );;
740gap> repr:= RepresentativesFusions( u, fus, t );;
741gap> Length( repr );
7423
743gap> filt:= Filtered( repr, x -> t.2b in x and t.3d in x and t.7b in x );
744[ [ 1, 3, 7, 22, 25, 25, 25, 51, 3, 9, 43, 43, 53, 53, 53 ],
745  [ 1, 3, 7, 22, 25, 25, 25, 51, 3, 11, 50, 50, 53, 53, 53 ] ]
746gap> ClassNames( t ){ [ 43, 50 ] };
747[ "12f", "12m" ]
748gap> pos:= Position( OrdersClassRepresentatives( t ), 13 );
74951
750gap> SizesCentralizers( t )[ pos ];
751234
752gap> ClassOrbit( t, pos );
753[ 51 ]
754gap> cand:= [];;
755gap> for name in Maxes( t ) do
756>      m:= CharacterTable( name );
757>      pos:= Position( OrdersClassRepresentatives( m ), 13 );
758>      if pos <> fail and
759>         SizesCentralizers( m )[ pos ] = 234
760>         and ClassOrbit( m, pos ) = [ pos ] then
761>        Add( cand, m );
762>      fi;
763>    od;
764gap> cand;
765[ CharacterTable( "(3^2:2xG2(3)).2" ) ]
766gap> s:= cand[1];;
767gap> sfust:= PossibleClassFusions( s, t );;
768gap> der:= ClassPositionsOfDerivedSubgroup( s );;
769gap> outer:= Difference( [ 1 .. NrConjugacyClasses( s ) ], der );;
770gap> sfust:= PossibleClassFusions( s, t );;
771gap> imgs:= Set( Flat( List( sfust, x -> x{ outer } ) ) );
772[ 2, 3, 10, 11, 15, 17, 18, 19, 21, 22, 26, 44, 45, 49, 50, 52, 62, 83, 87,
773  98 ]
774gap> t.12f in imgs;
775false
776gap> t.12m in imgs;
777true
778gap> GetFusionMap( u, t ) = filt[2];
779true
780gap> b:= CharacterTable( "B" );;
781gap> m11:= CharacterTable( "M11" );;
782gap> m11fusb:= PossibleClassFusions( m11, b );;
783gap> Length( m11fusb );
78431
785gap> CompositionMaps( ClassNames( b, "ATLAS" ), Parametrized( m11fusb ) );
786[ "1A", [ "2B", "2D" ], [ "3A", "3B" ], [ "4B", "4E", "4G", "4H", "4J" ],
787  [ "5A", "5B" ], [ "6C", "6E", "6H", "6I", "6J" ],
788  [ "8B", "8E", "8G", "8J", "8K", "8L", "8M", "8N" ],
789  [ "8B", "8E", "8G", "8J", "8K", "8L", "8M", "8N" ], "11A", "11A" ]
790gap> th:= CharacterTable( "Th" );;
791gap> s5:= CharacterTable( "S5" );;
792gap> s5fusth:= PossibleClassFusions( s5, th );
793[ [ 1, 2, 4, 8, 2, 7, 11 ] ]
794gap> thfusb:= PossibleClassFusions( th, b );;
795gap> s5fusb:= Set( List( thfusb, x -> CompositionMaps( x, s5fusth[1] ) ) );
796[ [ 1, 5, 7, 19, 5, 17, 29 ] ]
797gap> s5fusm11:= PossibleClassFusions( s5, m11 );
798[ [ 1, 2, 3, 5, 2, 4, 6 ] ]
799gap> m11fusb:= Filtered( m11fusb,
800>                  map -> CompositionMaps( map, s5fusm11[1] ) = s5fusb[1] );
801[ [ 1, 5, 7, 17, 19, 29, 45, 45, 54, 54 ] ]
802gap> CompositionMaps( ClassNames( b, "ATLAS" ), m11fusb[1] );
803[ "1A", "2D", "3B", "4J", "5B", "6J", "8N", "8N", "11A", "11A" ]
804gap> b:= CharacterTable( "B" );;
805gap> l:= CharacterTable( "L2(11).2" );;
806gap> lfusb:= PossibleClassFusions( l, b );;
807gap> Length( lfusb );
80816
809gap> CompositionMaps( ClassNames( b, "ATLAS" ), Parametrized( lfusb ) );
810[ "1A", [ "2B", "2D" ], [ "3A", "3B" ], [ "5A", "5B" ], [ "5A", "5B" ],
811  [ "6C", "6H", "6I", "6J" ], "11A", [ "2C", "2D" ],
812  [ "4D", "4E", "4F", "4G", "4H", "4J" ], [ "10C", "10E", "10F" ],
813  [ "10C", "10E", "10F" ],
814  [ "12E", "12F", "12H", "12I", "12J", "12L", "12N", "12P", "12Q", "12R",
815      "12S" ],
816  [ "12E", "12F", "12H", "12I", "12J", "12L", "12N", "12P", "12Q", "12R",
817      "12S" ] ]
818gap> m:= CharacterTable( "M11" );;
819gap> u:= CharacterTable( "L2(11)" );;
820gap> ufusm:= PossibleClassFusions( u, m );;
821gap> mfusb:= GetFusionMap( m, b );;
822gap> ufusb:= Set( List( ufusm, x -> CompositionMaps( mfusb, x ) ) );
823[ [ 1, 5, 7, 19, 19, 29, 54, 54 ] ]
824gap> ufusl:= PossibleClassFusions( u, l );
825[ [ 1, 2, 3, 4, 5, 6, 7, 7 ], [ 1, 2, 3, 5, 4, 6, 7, 7 ] ]
826gap> lfusb:= Filtered( lfusb,
827>              map2 -> ForAny( ufusl,
828>                        map1 -> CompositionMaps( map2, map1 ) in ufusb ) );
829[ [ 1, 5, 7, 19, 19, 29, 54, 5, 15, 53, 53, 73, 73 ] ]
830gap> b:= CharacterTable( "B" );;
831gap> t:= CharacterTable( "L3(3)" );;
832gap> tfusb:= PossibleClassFusions( t, b );;
833gap> Length( tfusb );
83436
835gap> m:= CharacterTable( "3^2.3^3.3^6.(S4x2S4)" );;
836gap> g:= PSL(3,3);;
837gap> mx:= MaximalSubgroupClassReps( g );;
838gap> u:= First( mx, x -> Size( x ) = 432 );;
839gap> u:= CharacterTable( u );;
840gap> ufusm:= PossibleClassFusions( u, m );;
841gap> ufust:= PossibleClassFusions( u, t );;
842gap> mfusb:= GetFusionMap( m, b );;
843gap> ufusb:= Set( List( ufusm, map -> CompositionMaps( mfusb, map ) ) );;
844gap> tfusb:= Filtered( tfusb, map -> ForAny( ufust,
845>        map2 -> CompositionMaps( map, map2 ) in ufusb ) );;
846gap> tfusb;
847[ [ 1, 5, 6, 7, 12, 27, 41, 41, 75, 75, 75, 75 ],
848  [ 1, 5, 7, 6, 12, 28, 41, 41, 75, 75, 75, 75 ],
849  [ 1, 5, 7, 7, 12, 28, 41, 41, 75, 75, 75, 75 ],
850  [ 1, 5, 7, 7, 12, 29, 41, 41, 75, 75, 75, 75 ],
851  [ 1, 5, 7, 7, 17, 29, 45, 45, 75, 75, 75, 75 ] ]
852gap> ClassNames( b, "ATLAS" ){ [ 12, 17 ] };
853[ "4E", "4J" ]
854gap> GetFusionMap( t, b ) = tfusb[5];
855true
856gap> b:= CharacterTable( "B" );;
857gap> u:= CharacterTable( "L2(17).2" );;
858gap> ufusb:= PossibleClassFusions( u, b );
859[ [ 1, 5, 7, 15, 42, 42, 47, 47, 47, 91, 4, 30, 89, 89, 89, 89, 97, 97, 97 ],
860  [ 1, 5, 7, 15, 44, 44, 46, 46, 46, 91, 5, 29, 90, 90, 90, 90, 96, 96, 96 ],
861  [ 1, 5, 7, 15, 44, 44, 47, 47, 47, 91, 5, 29, 90, 90, 90, 90, 95, 95, 95 ] ]
862gap> names:= ClassNames( b, "ATLAS" );;
863gap> pos:= List( [ "8M", "9A" ], x -> Position( names, x ) );
864[ 44, 46 ]
865gap> ufusb:= Filtered( ufusb, map -> IsSubset( map, pos ) );
866[ [ 1, 5, 7, 15, 44, 44, 46, 46, 46, 91, 5, 29, 90, 90, 90, 90, 96, 96, 96 ] ]
867gap> GetFusionMap( u, b ) = ufusb[1];
868true
869gap> u:= CharacterTable( "L2(49).2_3" );;
870gap> b:= CharacterTable( "B" );;
871gap> ufusb:= PossibleClassFusions( u, b );;
872gap> Length( RepresentativesFusions( u, ufusb, b ) );
8732
874gap> ufusb;
875[ [ 1, 5, 7, 15, 19, 28, 31, 42, 42, 71, 125, 125, 128, 128, 128, 128, 128,
876      15, 71, 71, 89, 89, 89, 89 ],
877  [ 1, 5, 7, 15, 19, 28, 31, 42, 42, 71, 125, 125, 128, 128, 128, 128, 128,
878      17, 72, 72, 89, 89, 89, 89 ] ]
879gap> g:= SL( 2, 49 );;
880gap> gens:= GeneratorsOfGroup( g );;
881gap> f:= GF(49);;
882gap> mats:= List( gens, x -> IdentityMat( 4, f ) );;
883gap> for i in [ 1 .. Length( gens ) ] do
884>      mats[i]{ [ 1, 2 ] }{ [ 1, 2 ] }:= gens[i];
885>      mats[i]{ [ 3, 4 ] }{ [ 3, 4 ] }:= List( gens[i],
886>                                              x -> List( x, y -> y^7 ) );
887>    od;
888gap> fieldaut:= PermutationMat( (1,3)(2,4), 4, f );;
889gap> diagaut:= IdentityMat( 4, f );;
890gap> diagaut[1][1]:= Z(49);;
891gap> diagaut[3][3]:= Z(49)^7;;
892gap> g:= Group( Concatenation( mats, [ fieldaut * diagaut ] ) );;
893gap> v:= [ 1, 0, 0, 0 ] * Z(7)^0;;
894gap> orb:= Orbit( g, v, OnLines );;
895gap> act:= Action( g, orb, OnLines );;
896gap> n:= Normalizer( act, SylowSubgroup( act, 7 ) );;
897gap> ntbl:= CharacterTable( n );;
898gap> bn7:= CharacterTable( "BN7" );;
899gap> nfusbn7:= PossibleClassFusions( ntbl, bn7 );;
900gap> Length( RepresentativesFusions( ntbl, nfusbn7, bn7 ) );
9013
902gap> nfusb:= SetOfComposedClassFusions( PossibleClassFusions( bn7, b ),
903>                                       nfusbn7 );;
904gap> Length( RepresentativesFusions( ntbl, nfusb, b ) );
9055
906gap> nfusu:= PossibleClassFusions( ntbl, u );;
907gap> Length( nfusu );
9084
909gap> filt:= Filtered( ufusb,
910>              x -> ForAny( nfusu, y -> CompositionMaps( x, y ) in nfusb ) );
911[ [ 1, 5, 7, 15, 19, 28, 31, 42, 42, 71, 125, 125, 128, 128, 128, 128, 128,
912      17, 72, 72, 89, 89, 89, 89 ] ]
913gap> ClassNames( b, "ATLAS" ){ filt[1] };
914[ "1A", "2D", "3B", "4H", "5B", "6I", "7A", "8K", "8K", "12Q", "24L", "24L",
915  "25A", "25A", "25A", "25A", "25A", "4J", "12R", "12R", "16G", "16G", "16G",
916  "16G" ]
917gap> GetFusionMap( u, b ) in filt;
918true
919gap> NrConjugacyClasses( u );  NrConjugacyClasses( act );
92024
92124
922gap> u:= CharacterTable( "L2(49).2_1" );;
923gap> g:= Group( Concatenation( mats, [ diagaut ] ) );;
924gap> orb:= Orbit( g, v, OnLines );;
925gap> act:= Action( g, orb, OnLines );;
926gap> Size(act );
927117600
928gap> NrConjugacyClasses( u );  NrConjugacyClasses( act );
92951
93051
931gap> u:= CharacterTable( "L2(49).2_2" );;
932gap> g:= Group( Concatenation( mats, [ fieldaut ] ) );;
933gap> orb:= Orbit( g, v, OnLines );;
934gap> act:= Action( g, orb, OnLines );;
935gap> NrConjugacyClasses( u );  NrConjugacyClasses( act );
93627
93727
938gap> PossibleClassFusions( CharacterTable( "L2(49).2_1" ), b );
939[  ]
940gap> n:= Normalizer( act, SylowSubgroup( act, 7 ) );;
941gap> Length( PossibleClassFusions( CharacterTable( n ), bn7 ) );
9420
943gap> t:= CharacterTable( "G2(5)" );;
944gap> s:= CharacterTable( "2^3.L3(2)" );;
945gap> sfust:= PossibleClassFusions( s, t );;
946gap> RepresentativesFusions( s, sfust, t );
947[ [ 1, 2, 2, 5, 6, 4, 13, 16, 17, 15, 15 ],
948  [ 1, 2, 2, 5, 6, 4, 14, 16, 17, 15, 15 ] ]
949gap> OrdersClassRepresentatives( s );
950[ 1, 2, 2, 4, 4, 3, 6, 8, 8, 7, 7 ]
951gap> g:= AtlasGroup( "G2(5)" );;
952gap> u:= AtlasSubgroup( "G2(5)", 7 );;
953gap> Size( u );
9541344
955gap> repeat
956>      x:= Random( u );
957>    until Order( x ) = 6;
958gap> siz:= Size( Centralizer( g, x ) );
95936
960gap> Filtered( [ 1 .. NrConjugacyClasses( t ) ],
961>              i -> SizesCentralizers( t )[i] = siz );
962[ 14 ]
963gap> GetFusionMap( s, t ) in Filtered( sfust, map -> 14 in map );
964true
965gap> b:= CharacterTable( "B" );;
966gap> m:= CharacterTable( "5^(1+4).2^(1+4).A5.4" );;
967gap> mfusb:= PossibleClassFusions( m, b );;
968gap> Length( mfusb );
9694
970gap> repres:= RepresentativesFusions( m, mfusb, b );;
971gap> Length( repres );
9722
973gap> char:= Filtered( Irr( b ), x -> x[1] = 4371 );;
974gap> Length( char );
9751
976gap> rest:= List( repres, map -> char[1]{ map } );;
977gap> scprs:= MatScalarProducts( m, Irr( m ), rest );;
978gap> constit:= List( scprs,
979>                x -> Filtered( [1 .. Length(x) ], i -> x[i] <> 0 ) );
980[ [ 2, 27, 60, 63, 73, 74, 75, 79, 82 ],
981  [ 2, 27, 60, 63, 70, 72, 75, 79, 84 ] ]
982gap> List( constit, x -> List( Irr( m ){ x }, Degree ) );
983[ [ 1, 6, 384, 480, 400, 400, 500, 1000, 1200 ],
984  [ 1, 6, 384, 480, 100, 300, 500, 1000, 1600 ] ]
985gap> g:= AtlasSubgroup( "B", Dimension, 4371, Ring, GF(3), 21 );;
986gap> module:= GModuleByMats( GeneratorsOfGroup( g ), GF(3) );;
987gap> dec:= MTX.CompositionFactors( module );;
988gap> SortedList( List( dec, x -> x.dimension ) );
989[ 1, 6, 100, 384, 400, 400, 400, 480, 1000, 1200 ]
990gap> tbl:= CharacterTable( "7^2:2psl(2,7)" );
991CharacterTable( "7^2:2psl(2,7)" )
992gap> tom:= TableOfMarks( tbl );
993TableOfMarks( "7^2:2L2(7)" )
994gap> fus:= PossibleFusionsCharTableTom( tbl, tom );
995[ [ 1, 6, 2, 4, 3, 5, 13, 13, 7, 8, 10, 9, 16, 7, 10, 9, 8, 16 ],
996  [ 1, 6, 2, 4, 3, 5, 13, 13, 7, 9, 8, 10, 16, 7, 8, 10, 9, 16 ],
997  [ 1, 6, 2, 4, 3, 5, 13, 13, 7, 10, 9, 8, 16, 7, 9, 8, 10, 16 ],
998  [ 1, 6, 2, 4, 3, 5, 13, 13, 7, 8, 9, 10, 16, 7, 9, 10, 8, 16 ],
999  [ 1, 6, 2, 4, 3, 5, 13, 13, 7, 10, 8, 9, 16, 7, 8, 9, 10, 16 ],
1000  [ 1, 6, 2, 4, 3, 5, 13, 13, 7, 9, 10, 8, 16, 7, 10, 8, 9, 16 ] ]
1001gap> reps:= RepresentativesFusions( tbl, fus, Group(()) );
1002[ [ 1, 6, 2, 4, 3, 5, 13, 13, 7, 8, 9, 10, 16, 7, 9, 10, 8, 16 ],
1003  [ 1, 6, 2, 4, 3, 5, 13, 13, 7, 8, 10, 9, 16, 7, 10, 9, 8, 16 ] ]
1004gap> AutomorphismsOfTable( tbl );
1005Group([ (9,14)(10,17)(11,15)(12,16)(13,18), (7,8), (10,11,12)(15,16,17) ])
1006gap> OrdersClassRepresentatives( tbl );
1007[ 1, 7, 2, 4, 3, 6, 8, 8, 7, 7, 7, 7, 14, 7, 7, 7, 7, 14 ]
1008gap> perms1:= PermCharsTom( reps[1], tom );;
1009gap> perms2:= PermCharsTom( reps[2], tom );;
1010gap> perms1 = perms2;
1011false
1012gap> Set( perms1 ) = Set( perms2 );
1013true
1014gap> Display( tbl );
10157^2:2psl(2,7)
1016
1017      2  4  .  4  3  1  1  3  3   1   .   .   .   1   1   .   .   .   1
1018      3  1  .  1  .  1  1  .  .   .   .   .   .   .   .   .   .   .   .
1019      7  3  3  1  .  .  .  .  .   2   2   2   2   1   2   2   2   2   1
1020
1021        1a 7a 2a 4a 3a 6a 8a 8b  7b  7c  7d  7e 14a  7f  7g  7h  7i 14b
1022     2P 1a 7a 1a 2a 3a 3a 4a 4a  7b  7c  7d  7e  7b  7f  7g  7h  7i  7f
1023     3P 1a 7a 2a 4a 1a 2a 8b 8a  7f  7i  7g  7h 14b  7b  7d  7e  7c 14a
1024     5P 1a 7a 2a 4a 3a 6a 8b 8a  7f  7i  7g  7h 14b  7b  7d  7e  7c 14a
1025     7P 1a 1a 2a 4a 3a 6a 8a 8b  1a  1a  1a  1a  2a  1a  1a  1a  1a  2a
1026    11P 1a 7a 2a 4a 3a 6a 8b 8a  7b  7c  7d  7e 14a  7f  7g  7h  7i 14b
1027    13P 1a 7a 2a 4a 3a 6a 8b 8a  7f  7i  7g  7h 14b  7b  7d  7e  7c 14a
1028
1029X.1      1  1  1  1  1  1  1  1   1   1   1   1   1   1   1   1   1   1
1030X.2      3  3  3 -1  .  .  1  1   B   B   B   B   B  /B  /B  /B  /B  /B
1031X.3      3  3  3 -1  .  .  1  1  /B  /B  /B  /B  /B   B   B   B   B   B
1032X.4      6  6  6  2  .  .  .  .  -1  -1  -1  -1  -1  -1  -1  -1  -1  -1
1033X.5      7  7  7 -1  1  1 -1 -1   .   .   .   .   .   .   .   .   .   .
1034X.6      8  8  8  . -1 -1  .  .   1   1   1   1   1   1   1   1   1   1
1035X.7      4  4 -4  .  1 -1  .  .  -B  -B  -B  -B   B -/B -/B -/B -/B  /B
1036X.8      4  4 -4  .  1 -1  .  . -/B -/B -/B -/B  /B  -B  -B  -B  -B   B
1037X.9      6  6 -6  .  .  .  A -A  -1  -1  -1  -1   1  -1  -1  -1  -1   1
1038X.10     6  6 -6  .  .  . -A  A  -1  -1  -1  -1   1  -1  -1  -1  -1   1
1039X.11     8  8 -8  . -1  1  .  .   1   1   1   1  -1   1   1   1   1  -1
1040X.12    48 -1  .  .  .  .  .  .   6  -1  -1  -1   .   6  -1  -1  -1   .
1041X.13    48 -1  .  .  .  .  .  .   C  -1  /C  /D   .  /C   C   D  -1   .
1042X.14    48 -1  .  .  .  .  .  .   C  /C  /D  -1   .  /C   D  -1   C   .
1043X.15    48 -1  .  .  .  .  .  .  /C   D  -1   C   .   C  -1  /C  /D   .
1044X.16    48 -1  .  .  .  .  .  .   C  /D  -1  /C   .  /C  -1   C   D   .
1045X.17    48 -1  .  .  .  .  .  .  /C   C   D  -1   .   C  /D  -1  /C   .
1046X.18    48 -1  .  .  .  .  .  .  /C  -1   C   D   .   C  /C  /D  -1   .
1047
1048A = E(8)-E(8)^3
1049  = Sqrt(2) = r2
1050B = E(7)+E(7)^2+E(7)^4
1051  = (-1+Sqrt(-7))/2 = b7
1052C = 2*E(7)+2*E(7)^2+2*E(7)^4
1053  = -1+Sqrt(-7) = 2b7
1054D = -3*E(7)-3*E(7)^2-2*E(7)^3-3*E(7)^4-2*E(7)^5-2*E(7)^6
1055  = (5-Sqrt(-7))/2 = 2-b7
1056gap> mat:= MatTom( tom );;
1057gap> mataut:= MatrixAutomorphisms( mat );;
1058gap> Print( mataut, "\n" );
1059Group( [ (11,12)(23,24)(27,28)(46,47)(53,54)(56,57),
1060  ( 9,10)(20,21)(31,32)(38,39), ( 8, 9)(20,22)(31,33)(38,40) ] )
1061gap> RepresentativesFusions( Group( () ), reps, mataut );
1062[ [ 1, 6, 2, 4, 3, 5, 13, 13, 7, 8, 9, 10, 16, 7, 9, 10, 8, 16 ] ]
1063gap> g:= UnderlyingGroup( tom );;
1064gap> tg:= CharacterTable( g );;
1065gap> tgfustom:= FusionCharTableTom( tg, tom );;
1066gap> trans:= TransformingPermutationsCharacterTables( tg, tbl );;
1067gap> tblfustom:= Permuted( tgfustom, trans.columns );;
1068gap> orbits:= List( reps, map -> OrbitFusions( AutomorphismsOfTable( tbl ),
1069>                                              map, Group( () ) ) );;
1070gap> PositionProperty( orbits, orb -> tblfustom in orb );
10712
1072gap> PositionProperty( orbits, orb -> FusionToTom( tbl ).map in orb );
10732
1074gap> u42:= CharacterTable( "U4(2)" );;
1075gap> u43:= CharacterTable( "U4(3)" );;
1076gap> u42fusu43:= PossibleClassFusions( u42, u43 );;
1077gap> Length( u42fusu43 );
10784
1079gap> Length( RepresentativesFusions( u42, u42fusu43, u43 ) );
10801
1081gap> u43_21:= CharacterTable( "U4(3).2_1" );;
1082gap> fus1:= GetFusionMap( u43, u43_21 );
1083[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 16, 17, 17, 18 ]
1084gap> act1:= Filtered( InverseMap( fus1 ), IsList );
1085[ [ 16, 17 ], [ 18, 19 ] ]
1086gap> CompositionMaps( ClassNames( u43, "Atlas" ), act1 );
1087[ [ "9A", "9B" ], [ "9C", "9D" ] ]
1088gap> u43_23:= CharacterTable( "U4(3).2_3" );;
1089gap> fus3:= GetFusionMap( u43, u43_23 );
1090[ 1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 10, 11, 11, 12, 13, 14, 13, 14, 15 ]
1091gap> act3:= Filtered( InverseMap( fus3 ), IsList );
1092[ [ 4, 5 ], [ 11, 12 ], [ 13, 14 ], [ 16, 18 ], [ 17, 19 ] ]
1093gap> CompositionMaps( ClassNames( u43, "Atlas" ), act3 );
1094[ [ "3B", "3C" ], [ "6B", "6C" ], [ "7A", "7B" ], [ "9A", "9C" ],
1095  [ "9B", "9D" ] ]
1096gap> firstfus:= First( u42fusu43, x -> IsSubset( x, [ 16, 17 ] ) );
1097[ 1, 2, 2, 3, 3, 5, 4, 7, 8, 9, 10, 10, 12, 12, 11, 12, 16, 17, 20, 20 ]
1098gap> secondfus:= First( u42fusu43, x -> IsSubset( x, [ 18, 19 ] ) );
1099[ 1, 2, 2, 3, 3, 4, 5, 7, 8, 9, 10, 10, 11, 11, 12, 11, 18, 19, 20, 20 ]
1100gap> 3u42:= CharacterTable( "Cyclic", 3 ) * u42;
1101CharacterTable( "C3xU4(2)" )
1102gap> 3u43:= CharacterTable( "3_1.U4(3)" );
1103CharacterTable( "3_1.U4(3)" )
1104gap> 3u42fus3u43:= PossibleClassFusions( 3u42, 3u43 );;
1105gap> Length( 3u42fus3u43 );
11068
1107gap> Length( RepresentativesFusions( 3u42, 3u42fus3u43, 3u43 ) );
11082
1109gap> inducedmaps:= List( 3u42fus3u43, map -> CompositionMaps(
1110>        GetFusionMap( 3u43, u43 ), CompositionMaps( map,
1111>        InverseMap( GetFusionMap( 3u42, u42 ) ) ) ) );;
1112gap> List( inducedmaps, map -> Position( u42fusu43, map ) );
1113[ 1, 1, 2, 2, 4, 4, 3, 3 ]
1114gap> rep:= RepresentativesFusions( 3u42, 3u42fus3u43, 3u43 );
1115[ [ 1, 4, 4, 7, 7, 10, 13, 15, 18, 21, 24, 24, 27, 27, 30, 27, 48, 49, 50,
1116      50, 2, 5, 5, 8, 8, 11, 13, 16, 19, 22, 25, 25, 28, 28, 31, 28, 48, 49,
1117      51, 51, 3, 6, 6, 9, 9, 12, 13, 17, 20, 23, 26, 26, 29, 29, 32, 29, 48,
1118      49, 52, 52 ],
1119  [ 1, 4, 4, 8, 9, 13, 10, 15, 18, 21, 25, 26, 31, 32, 27, 30, 46, 44, 51,
1120      52, 2, 5, 5, 9, 7, 13, 11, 16, 19, 22, 26, 24, 32, 30, 28, 31, 47, 42,
1121      52, 50, 3, 6, 6, 7, 8, 13, 12, 17, 20, 23, 24, 25, 30, 31, 29, 32, 45,
1122      43, 50, 51 ] ]
1123gap> irr:= Irr( 3u42 );;
1124gap> ind:= InducedClassFunctionsByFusionMap( 3u42, 3u43, irr, rep[1] );;
1125gap> Intersection( ind, Irr( 3u43 ) );
1126[ Character( CharacterTable( "3_1.U4(3)" ), [ 630, 630*E(3)^2, 630*E(3), 6,
1127      6*E(3)^2, 6*E(3), 9, 9*E(3)^2, 9*E(3), -9, -9*E(3)^2, -9*E(3), 0, 0, 2,
1128      2*E(3)^2, 2*E(3), -2, -2*E(3)^2, -2*E(3), 0, 0, 0, -3, -3*E(3)^2,
1129      -3*E(3), 3, 3*E(3)^2, 3*E(3), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1130      0, 0, 0, 0, 0, 0, -1, -E(3)^2, -E(3) ] ),
1131  Character( CharacterTable( "3_1.U4(3)" ), [ 630, 630*E(3), 630*E(3)^2, 6,
1132      6*E(3), 6*E(3)^2, 9, 9*E(3), 9*E(3)^2, -9, -9*E(3), -9*E(3)^2, 0, 0, 2,
1133      2*E(3), 2*E(3)^2, -2, -2*E(3), -2*E(3)^2, 0, 0, 0, -3, -3*E(3),
1134      -3*E(3)^2, 3, 3*E(3), 3*E(3)^2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1135      0, 0, 0, 0, 0, 0, 0, -1, -E(3), -E(3)^2 ] ) ]
1136gap> ind:= InducedClassFunctionsByFusionMap( 3u42, 3u43, irr, rep[2] );;
1137gap> Intersection( ind, Irr( 3u43 ) );
1138[  ]
1139gap> 2a12:= CharacterTable( "2.A12" );;
1140gap> mtbl:= CharacterTable( "2.3^4.2^3.S4" );;
1141gap> mtblfus2a12:= PossibleClassFusions( mtbl, 2a12 );;
1142gap> Length( mtblfus2a12 );
114332
1144gap> repres:= RepresentativesFusions( mtbl, mtblfus2a12, 2a12 );;
1145gap> Length( repres );
11462
1147gap> g:= AtlasGroup( "A12" );
1148Group([ (1,2,3), (2,3,4,5,6,7,8,9,10,11,12) ])
1149gap> 2g:= AtlasGroup( "2.A12" );
1150<matrix group of size 479001600 with 2 generators>
1151gap> f:= FreeGroup( 2 );;
1152gap> pi1:= GroupHomomorphismByImagesNC( f, 2g, GeneratorsOfGroup( f ),
1153>              GeneratorsOfGroup( 2g ) );;
1154gap> pi2:= GroupHomomorphismByImagesNC( f, g, GeneratorsOfGroup( f ),
1155>              GeneratorsOfGroup( g ) );;
1156gap> w:= WreathProduct( SymmetricGroup( 3 ), SymmetricGroup(4) );
1157<permutation group of size 31104 with 10 generators>
1158gap> NrMovedPoints( w );
115912
1160gap> s:= Intersection( w, g );  Size( s );
1161<permutation group with 8 generators>
116215552
1163gap> m:= SubgroupNC( 2g, List( SmallGeneratingSet( s ),
1164>            x -> ImagesRepresentative( pi1,
1165>                   PreImagesRepresentative( pi2, x ) ) ) );;
1166gap> iso:= IsomorphismPermGroup( m );;
1167gap> t:= CharacterTable( Image( iso ) );;
1168gap> Size( t );
116931104
1170gap> trans:= TransformingPermutationsCharacterTables( mtbl, t );;
1171gap> IsRecord( trans );
1172true
1173gap> para:= Parametrized( repres );
1174[ 1, 2, 6, 10, 8, 12, 7, 11, 9, 13, 5, 5, 17, 17, 17, 17, 3, 4, 24, 22, 27,
1175  25, 12, 10, 13, 11, 28, 29, 35, 37, 39, 36, 38, 40, 5, 23, 28, 29, 26, 14,
1176  14, 16, 16, 33, 34, [ 33, 34 ], [ 33, 34 ], 49, 49, 48, 48 ]
1177gap> PositionsProperty( para, IsList );
1178[ 46, 47 ]
1179gap> List( repres, map -> map{ [ 44 .. 47 ] } );
1180[ [ 33, 34, 33, 34 ], [ 33, 34, 34, 33 ] ]
1181gap> positions:= OnTuples( [ 44 .. 47 ], trans.columns );;
1182gap> classreps:= List( ConjugacyClasses( t ){ positions },
1183>        c -> PreImagesRepresentative( iso, Representative( c ) ) );;
1184gap> List( classreps, TraceMat );
1185[ Z(3)^0, Z(3), Z(3), Z(3)^0 ]
1186gap> good:= First( repres,
1187>                  map -> map{ [ 44 .. 47 ] } = [ 33, 34, 34, 33 ] );;
1188gap> GetFusionMap( mtbl, 2a12 ) = good;
1189true
1190gap> t:= CharacterTable( "L7(2)" );;
1191gap> s:= CharacterTable( "127:7" );;
1192gap> fus:= PossibleClassFusions( s, t );;
1193gap> repr:= RepresentativesFusions( s, fus, t );
1194[ [ 1, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
1195      114, 115, 117, 116, 76, 76, 77, 76, 77, 77 ],
1196  [ 1, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
1197      114, 115, 117, 116, 83, 83, 83, 83, 83, 83 ] ]
1198gap> diff:= Filtered( [ 1 .. Length( repr[1] ) ],
1199>                     i -> repr[1][i] <> repr[2][i] );
1200[ 20, 21, 22, 23, 24, 25 ]
1201gap> OrdersClassRepresentatives( s ){ diff };
1202[ 7, 7, 7, 7, 7, 7 ]
1203gap> List( repr, l -> l{ diff } );
1204[ [ 76, 76, 77, 76, 77, 77 ], [ 83, 83, 83, 83, 83, 83 ] ]
1205gap> SizesCentralizers( t ){ [ 76, 77, 83 ] };
1206[ 3528, 3528, 49 ]
1207gap> g:= Image( IsomorphismPermGroup( GL(7,2) ) );;
1208gap> repeat x:= Random( g ); until Order(x) = 127;
1209gap> n:= Normalizer( g, SubgroupNC( g, [ x ] ) );;
1210gap> Size( n ) / 127;
12117
1212gap> repeat x:= Random( n ); until Order( x ) = 7;
1213gap> c:= Centralizer( g, x );;
1214gap> Size( c );
121549
1216gap> GetFusionMap( s, t ) = repr[2];
1217true
1218gap> t:= CharacterTable( "M" );;
1219gap> s:= CharacterTable( "L2(59)" );;
1220gap> fus:= PossibleClassFusions( s, t );;
1221gap> repr:= RepresentativesFusions( s, fus, t );
1222[ [ 1, 152, 153, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 98,
1223      52, 32, 52, 14, 12, 98, 52, 32, 5, 98, 12, 98, 52, 3 ],
1224  [ 1, 152, 153, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 100,
1225      50, 30, 50, 15, 11, 100, 50, 30, 4, 100, 11, 100, 50, 3 ],
1226  [ 1, 152, 153, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 101,
1227      51, 30, 51, 14, 11, 101, 51, 30, 5, 101, 11, 101, 51, 3 ],
1228  [ 1, 152, 153, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 102,
1229      53, 32, 53, 18, 12, 102, 53, 32, 6, 102, 12, 102, 53, 3 ],
1230  [ 1, 152, 153, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 104,
1231      52, 33, 52, 17, 12, 104, 52, 33, 5, 104, 12, 104, 52, 3 ] ]
1232gap> ord:= OrdersClassRepresentatives( s );;
1233gap> ord30:= Filtered( [ 1 .. Length( ord ) ], i -> ord[i] = 30 );
1234[ 18, 24, 28, 30 ]
1235gap> List( repr, x -> x{ ord30 } );
1236[ [ 98, 98, 98, 98 ], [ 100, 100, 100, 100 ], [ 101, 101, 101, 101 ],
1237  [ 102, 102, 102, 102 ], [ 104, 104, 104, 104 ] ]
1238gap> pos:= Position( ClassNames( t, "Atlas" ), "30G" );;
1239gap> good:= Filtered( fus, map -> pos in map );
1240[ [ 1, 152, 153, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 104,
1241      52, 33, 52, 17, 12, 104, 52, 33, 5, 104, 12, 104, 52, 3 ],
1242  [ 1, 153, 152, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 104,
1243      52, 33, 52, 17, 12, 104, 52, 33, 5, 104, 12, 104, 52, 3 ] ]
1244gap> repr:= RepresentativesFusions( s, good, t );
1245[ [ 1, 152, 153, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 104,
1246      52, 33, 52, 17, 12, 104, 52, 33, 5, 104, 12, 104, 52, 3 ] ]
1247gap> GetFusionMap( s, t ) = repr[1];
1248true
1249gap> t:= CharacterTable( "M" );;
1250gap> s:= CharacterTable( "L2(71)" );;
1251gap> fus:= PossibleClassFusions( s, t );;
1252gap> repr:= RepresentativesFusions( s, fus, t );
1253[ [ 1, 169, 170, 112, 112, 112, 112, 19, 112, 11, 112, 112, 19, 112, 112,
1254      112, 11, 19, 112, 112, 114, 60, 36, 27, 114, 17, 114, 27, 7, 60, 114,
1255      5, 114, 60, 36, 27, 114, 3 ],
1256  [ 1, 169, 170, 112, 112, 112, 112, 19, 112, 11, 112, 112, 19, 112, 112,
1257      112, 11, 19, 112, 112, 115, 61, 36, 28, 115, 17, 115, 28, 7, 61, 115,
1258      5, 115, 61, 36, 28, 115, 3 ],
1259  [ 1, 169, 170, 112, 112, 112, 112, 19, 112, 11, 112, 112, 19, 112, 112,
1260      112, 11, 19, 112, 112, 117, 61, 43, 28, 117, 17, 117, 28, 9, 61, 117,
1261      5, 117, 61, 43, 28, 117, 3 ],
1262  [ 1, 169, 170, 113, 113, 113, 113, 20, 113, 12, 113, 113, 20, 113, 113,
1263      113, 12, 20, 113, 113, 114, 60, 36, 27, 114, 17, 114, 27, 7, 60, 114,
1264      5, 114, 60, 36, 27, 114, 3 ],
1265  [ 1, 169, 170, 113, 113, 113, 113, 20, 113, 12, 113, 113, 20, 113, 113,
1266      113, 12, 20, 113, 113, 115, 61, 36, 28, 115, 17, 115, 28, 7, 61, 115,
1267      5, 115, 61, 36, 28, 115, 3 ],
1268  [ 1, 169, 170, 113, 113, 113, 113, 20, 113, 12, 113, 113, 20, 113, 113,
1269      113, 12, 20, 113, 113, 117, 61, 43, 28, 117, 17, 117, 28, 9, 61, 117,
1270      5, 117, 61, 43, 28, 117, 3 ] ]
1271gap> ord:= OrdersClassRepresentatives( s );;
1272gap> ord36:= Filtered( [ 1 .. Length( ord ) ], i -> ord[i] = 36 );
1273[ 21, 25, 27, 31, 33, 37 ]
1274gap> List( repr, x -> x{ ord36 } );
1275[ [ 114, 114, 114, 114, 114, 114 ], [ 115, 115, 115, 115, 115, 115 ],
1276  [ 117, 117, 117, 117, 117, 117 ], [ 114, 114, 114, 114, 114, 114 ],
1277  [ 115, 115, 115, 115, 115, 115 ], [ 117, 117, 117, 117, 117, 117 ] ]
1278gap> pos1:= Position( ClassNames( t, "Atlas" ), "7B" );;
1279gap> pos2:= Position( ClassNames( t, "Atlas" ), "36D" );;
1280gap> pos:= [ pos1, pos2 ];;
1281gap> good:= Filtered( fus, map -> IsSubset( map, pos ) );
1282[ [ 1, 169, 170, 113, 113, 113, 113, 20, 113, 12, 113, 113, 20, 113, 113,
1283      113, 12, 20, 113, 113, 117, 61, 43, 28, 117, 17, 117, 28, 9, 61, 117,
1284      5, 117, 61, 43, 28, 117, 3 ],
1285  [ 1, 170, 169, 113, 113, 113, 113, 20, 113, 12, 113, 113, 20, 113, 113,
1286      113, 12, 20, 113, 113, 117, 61, 43, 28, 117, 17, 117, 28, 9, 61, 117,
1287      5, 117, 61, 43, 28, 117, 3 ] ]
1288gap> repr:= RepresentativesFusions( s, good, t );
1289[ [ 1, 169, 170, 113, 113, 113, 113, 20, 113, 12, 113, 113, 20, 113, 113,
1290      113, 12, 20, 113, 113, 117, 61, 43, 28, 117, 17, 117, 28, 9, 61, 117,
1291      5, 117, 61, 43, 28, 117, 3 ] ]
1292gap> GetFusionMap( s, t ) = repr[1];
1293true
1294gap> t:= CharacterTable( "M" );;
1295gap> s:= CharacterTable( "L2(41)" );;
1296gap> fus:= PossibleClassFusions( s, t );;
1297gap> repr:= RepresentativesFusions( s, fus, t );
1298[ [ 1, 127, 127, 64, 30, 64, 11, 7, 30, 64, 11, 64, 3, 70, 70, 19, 70, 70,
1299      19, 4, 70, 19, 70 ],
1300  [ 1, 127, 127, 64, 30, 64, 11, 7, 30, 64, 11, 64, 3, 72, 72, 19, 72, 72,
1301      19, 6, 72, 19, 72 ],
1302  [ 1, 127, 127, 64, 30, 64, 11, 7, 30, 64, 11, 64, 3, 73, 73, 20, 73, 73,
1303      20, 5, 73, 20, 73 ],
1304  [ 1, 127, 127, 66, 33, 66, 12, 7, 33, 66, 12, 66, 3, 72, 72, 19, 72, 72,
1305      19, 6, 72, 19, 72 ],
1306  [ 1, 127, 127, 66, 33, 66, 12, 7, 33, 66, 12, 66, 3, 73, 73, 20, 73, 73,
1307      20, 5, 73, 20, 73 ],
1308  [ 1, 127, 127, 67, 30, 67, 11, 10, 30, 67, 11, 67, 3, 72, 72, 19, 72, 72,
1309      19, 6, 72, 19, 72 ],
1310  [ 1, 127, 127, 67, 30, 67, 11, 10, 30, 67, 11, 67, 3, 73, 73, 20, 73, 73,
1311      20, 5, 73, 20, 73 ],
1312  [ 1, 127, 127, 68, 32, 68, 12, 10, 32, 68, 12, 68, 3, 72, 72, 19, 72, 72,
1313      19, 6, 72, 19, 72 ],
1314  [ 1, 127, 127, 68, 32, 68, 12, 10, 32, 68, 12, 68, 3, 73, 73, 20, 73, 73,
1315      20, 5, 73, 20, 73 ],
1316  [ 1, 127, 127, 69, 33, 69, 12, 9, 33, 69, 12, 69, 3, 72, 72, 19, 72, 72,
1317      19, 6, 72, 19, 72 ],
1318  [ 1, 127, 127, 69, 33, 69, 12, 9, 33, 69, 12, 69, 3, 73, 73, 20, 73, 73,
1319      20, 5, 73, 20, 73 ] ]
1320gap> ambig:= Parametrized( repr );;
1321gap> ambigpos:= PositionsProperty( ambig, IsList );
1322[ 4, 5, 6, 7, 8, 9, 10, 11, 12, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23 ]
1323gap> Set( OrdersClassRepresentatives( t ){ ambigpos } );
1324[ 3, 4, 5, 6, 7, 8 ]
1325gap> pos1:= Position( ClassNames( t, "Atlas" ), "3B" );;
1326gap> pos2:= Position( ClassNames( t, "Atlas" ), "4C" );;
1327gap> pos:= [ pos1, pos2 ];;
1328gap> good:= Filtered( fus, map -> IsSubset( map, pos ) );
1329[ [ 1, 127, 127, 69, 33, 69, 12, 9, 33, 69, 12, 69, 3, 73, 73, 20, 73, 73,
1330      20, 5, 73, 20, 73 ] ]
1331gap> GetFusionMap( s, t ) = good[1];
1332true
1333
1334gap> STOP_TEST( "ambigfus.tst", 6129230950 );
1335
1336#############################################################################
1337##
1338#E
1339
1340