1# This file was created from xpl/ctblpope.xpl, do not edit!
2#############################################################################
3##
4#W  ctblpope.tst              GAP applications              Thomas Breuer
5##
6#Y  Copyright 1999,  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( "ctblpope.tst" );`.
10##
11
12gap> START_TEST( "ctblpope.tst" );
13
14gap> LoadPackage( "ctbllib", "1.2" );
15true
16gap> g:= MathieuGroup( 24 );;
17gap> SetName( g, "m24" );
18gap> Size( g );  IsSimple( g );  NrMovedPoints( g );
19244823040
20true
2124
22gap> ccl:= AttributeValueNotSet( ConjugacyClasses, g );;
23gap> HasConjugacyClasses( g );
24false
25gap> invariants:= List( ccl, c -> [ Order( Representative( c ) ),
26>        Size( c ), Size( ConjugacyClass( g, Representative( c )^2 ) ) ] );;
27gap> SortParallel( invariants, ccl );
28gap> SetConjugacyClasses( g, ccl );
29gap> NrConjugacyClasses( g );
3026
31gap> pi:= NaturalCharacter( g );
32Character( CharacterTable( m24 ), [ 24, 8, 0, 6, 0, 0, 4, 0, 4, 2, 0, 3, 3,
33  2, 0, 2, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1 ] )
34gap> IsTransitive( pi );  Transitivity( pi );
35true
365
37gap> Display( pi );
38CT1
39
40     2 10 10  9  3  3  7  7  5  2  3  3  1  1  4   2   .   2   2   1   1   .
41     3  3  1  1  3  2  1  .  1  1  1  1  1  1  .   .   .   1   1   .   .   1
42     5  1  .  1  1  .  .  .  .  1  .  .  .  .  .   1   .   .   .   .   .   1
43     7  1  1  .  .  1  .  .  .  .  .  .  1  1  .   .   .   .   .   1   1   .
44    11  1  .  .  .  .  .  .  .  .  .  .  .  .  .   .   1   .   .   .   .   .
45    23  1  .  .  .  .  .  .  .  .  .  .  .  .  .   .   .   .   .   .   .   .
46
47       1a 2a 2b 3a 3b 4a 4b 4c 5a 6a 6b 7a 7b 8a 10a 11a 12a 12b 14a 14b 15a
48
49Y.1    24  8  .  6  .  .  4  .  4  2  .  3  3  2   .   2   .   .   1   1   1
50
51     2   .   .   .   .   .
52     3   1   1   1   .   .
53     5   1   .   .   .   .
54     7   .   1   1   .   .
55    11   .   .   .   .   .
56    23   .   .   .   1   1
57
58       15b 21a 21b 23a 23b
59
60Y.1      1   .   .   1   1
61gap> piop:= pi * pi;
62Character( CharacterTable( m24 ), [ 576, 64, 0, 36, 0, 0, 16, 0, 16, 4, 0, 9,
63  9, 4, 0, 4, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1 ] )
64gap> IsTransitive( piop );
65false
66gap> piup:= SymmetricParts( UnderlyingCharacterTable(pi), [ pi ], 2 )[1];
67Character( CharacterTable( m24 ), [ 300, 44, 12, 21, 0, 4, 12, 0, 10, 5, 0,
68  6, 6, 4, 2, 3, 1, 0, 2, 2, 1, 1, 0, 0, 1, 1 ] )
69gap> IsTransitive( piup );
70false
71gap> ScalarProduct( piup, TrivialCharacter( g ) );
722
73gap> comb:= Combinations( [ 1 .. 24 ], 2 );;
74gap> hom:= ActionHomomorphism( g, comb, OnSets );;
75gap> pihom:= NaturalCharacter( hom );
76Character( CharacterTable( m24 ), [ 276, 36, 12, 15, 0, 4, 8, 0, 6, 3, 0, 3,
77  3, 2, 2, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0 ] )
78gap> Transitivity( pihom );
791
80gap> pi2s:= piup - pi;
81VirtualCharacter( CharacterTable( m24 ), [ 276, 36, 12, 15, 0, 4, 8, 0, 6, 3,
82  0, 3, 3, 2, 2, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0 ] )
83gap> pi2s = pihom;
84true
85gap> HasIrr( g );  HasIrr( CharacterTable( g ) );
86false
87false
88gap> IsPrimitive( g, comb, OnSets );
89true
90gap> tbl:= CharacterTable( "M24" );
91CharacterTable( "M24" )
92gap> maxes:= Maxes( tbl );
93[ "M23", "M22.2", "2^4:a8", "M12.2", "2^6:3.s6", "L3(4).3.2_2",
94  "2^6:(psl(3,2)xs3)", "L2(23)", "L3(2)" ]
95gap> s:= CharacterTable( maxes[2] );
96CharacterTable( "M22.2" )
97gap> TrivialCharacter( s )^tbl;
98Character( CharacterTable( "M24" ), [ 276, 36, 12, 15, 0, 4, 8, 0, 6, 3, 0,
99  3, 3, 2, 2, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0 ] )
100gap> m11:= CharacterTable( "M11" );;
101gap> SetName( m11, "m11" );
102gap> perms:= PermChars( m11 );
103[ Character( m11, [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ),
104  Character( m11, [ 11, 3, 2, 3, 1, 0, 1, 1, 0, 0 ] ),
105  Character( m11, [ 12, 4, 3, 0, 2, 1, 0, 0, 1, 1 ] ),
106  Character( m11, [ 22, 6, 4, 2, 2, 0, 0, 0, 0, 0 ] ),
107  Character( m11, [ 55, 7, 1, 3, 0, 1, 1, 1, 0, 0 ] ),
108  Character( m11, [ 66, 10, 3, 2, 1, 1, 0, 0, 0, 0 ] ),
109  Character( m11, [ 110, 6, 2, 2, 0, 0, 2, 2, 0, 0 ] ),
110  Character( m11, [ 110, 6, 2, 6, 0, 0, 0, 0, 0, 0 ] ),
111  Character( m11, [ 110, 14, 2, 2, 0, 2, 0, 0, 0, 0 ] ),
112  Character( m11, [ 132, 12, 6, 0, 2, 0, 0, 0, 0, 0 ] ),
113  Character( m11, [ 144, 0, 0, 0, 4, 0, 0, 0, 1, 1 ] ),
114  Character( m11, [ 165, 13, 3, 1, 0, 1, 1, 1, 0, 0 ] ),
115  Character( m11, [ 220, 4, 4, 0, 0, 4, 0, 0, 0, 0 ] ),
116  Character( m11, [ 220, 12, 4, 4, 0, 0, 0, 0, 0, 0 ] ),
117  Character( m11, [ 220, 20, 4, 0, 0, 2, 0, 0, 0, 0 ] ),
118  Character( m11, [ 330, 2, 6, 2, 0, 2, 0, 0, 0, 0 ] ),
119  Character( m11, [ 330, 18, 6, 2, 0, 0, 0, 0, 0, 0 ] ),
120  Character( m11, [ 396, 12, 0, 4, 1, 0, 0, 0, 0, 0 ] ),
121  Character( m11, [ 440, 8, 8, 0, 0, 2, 0, 0, 0, 0 ] ),
122  Character( m11, [ 440, 24, 8, 0, 0, 0, 0, 0, 0, 0 ] ),
123  Character( m11, [ 495, 15, 0, 3, 0, 0, 1, 1, 0, 0 ] ),
124  Character( m11, [ 660, 4, 3, 4, 0, 1, 0, 0, 0, 0 ] ),
125  Character( m11, [ 660, 12, 3, 0, 0, 3, 0, 0, 0, 0 ] ),
126  Character( m11, [ 660, 12, 12, 0, 0, 0, 0, 0, 0, 0 ] ),
127  Character( m11, [ 660, 28, 3, 0, 0, 1, 0, 0, 0, 0 ] ),
128  Character( m11, [ 720, 0, 0, 0, 0, 0, 0, 0, 5, 5 ] ),
129  Character( m11, [ 792, 24, 0, 0, 2, 0, 0, 0, 0, 0 ] ),
130  Character( m11, [ 880, 0, 16, 0, 0, 0, 0, 0, 0, 0 ] ),
131  Character( m11, [ 990, 6, 0, 2, 0, 0, 2, 2, 0, 0 ] ),
132  Character( m11, [ 990, 6, 0, 6, 0, 0, 0, 0, 0, 0 ] ),
133  Character( m11, [ 990, 30, 0, 2, 0, 0, 0, 0, 0, 0 ] ),
134  Character( m11, [ 1320, 8, 6, 0, 0, 2, 0, 0, 0, 0 ] ),
135  Character( m11, [ 1320, 24, 6, 0, 0, 0, 0, 0, 0, 0 ] ),
136  Character( m11, [ 1584, 0, 0, 0, 4, 0, 0, 0, 0, 0 ] ),
137  Character( m11, [ 1980, 12, 0, 4, 0, 0, 0, 0, 0, 0 ] ),
138  Character( m11, [ 1980, 36, 0, 0, 0, 0, 0, 0, 0, 0 ] ),
139  Character( m11, [ 2640, 0, 12, 0, 0, 0, 0, 0, 0, 0 ] ),
140  Character( m11, [ 3960, 24, 0, 0, 0, 0, 0, 0, 0, 0 ] ),
141  Character( m11, [ 7920, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ) ]
142gap> Length( perms );
14339
144gap> degrees:= DivisorsInt( Size( m11 ) );;
145gap> perms2:= [];;
146gap> for d in degrees do
147>      Append( perms2, PermChars( m11, d ) );
148>    od;
149gap> Set( perms ) = Set( perms2 );
150true
151gap> perms3:= [];;
152gap> for d in degrees do
153>      Append( perms3, PermChars( m11, rec( torso:= [ d ] ) ) );
154>    od;
155gap> Set( perms ) = Set( perms3 );
156true
157gap> newperms:= TestPerm4( m11, perms );;
158gap> newperms = perms;
159true
160gap> newperms:= TestPerm5( m11, perms, m11 mod 11 );;
161gap> newperms = perms;
162false
163gap> Difference( perms, newperms );
164[ Character( m11, [ 220, 4, 4, 0, 0, 4, 0, 0, 0, 0 ] ) ]
165gap> tom:= TableOfMarks( "M11" );
166TableOfMarks( "M11" )
167gap> trueperms:= PermCharsTom( m11, tom );;
168gap> Length( trueperms );  Length( Set( trueperms ) );
16939
17036
171gap> Difference( perms, trueperms );
172[ Character( m11, [ 220, 4, 4, 0, 0, 4, 0, 0, 0, 0 ] ),
173  Character( m11, [ 660, 4, 3, 4, 0, 1, 0, 0, 0, 0 ] ),
174  Character( m11, [ 660, 12, 3, 0, 0, 3, 0, 0, 0, 0 ] ) ]
175gap> u62:= CharacterTable( "U6(2)" );;
176gap> m22:= CharacterTable( "M22" );;
177gap> fus:= PossibleClassFusions( m22, u62 );
178[ [ 1, 3, 7, 10, 14, 15, 22, 24, 24, 26, 33, 34 ],
179  [ 1, 3, 7, 10, 14, 15, 22, 24, 24, 26, 34, 33 ],
180  [ 1, 3, 7, 11, 14, 15, 22, 24, 24, 27, 33, 34 ],
181  [ 1, 3, 7, 11, 14, 15, 22, 24, 24, 27, 34, 33 ],
182  [ 1, 3, 7, 12, 14, 15, 22, 24, 24, 28, 33, 34 ],
183  [ 1, 3, 7, 12, 14, 15, 22, 24, 24, 28, 34, 33 ] ]
184gap> RepresentativesFusions( m22, fus, u62 );
185[ [ 1, 3, 7, 10, 14, 15, 22, 24, 24, 26, 33, 34 ] ]
186gap> cand:= Set( List( fus,
187>  x -> Induced( m22, u62, [ TrivialCharacter( m22 ) ], x )[1] ) );
188[ Character( CharacterTable( "U6(2)" ), [ 20736, 0, 384, 0, 0, 0, 54, 0, 0,
189      0, 0, 48, 0, 16, 6, 0, 0, 0, 0, 0, 0, 6, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0,
190      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ),
191  Character( CharacterTable( "U6(2)" ), [ 20736, 0, 384, 0, 0, 0, 54, 0, 0,
192      0, 48, 0, 0, 16, 6, 0, 0, 0, 0, 0, 0, 6, 0, 2, 0, 0, 4, 0, 0, 0, 0, 0,
193      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ),
194  Character( CharacterTable( "U6(2)" ), [ 20736, 0, 384, 0, 0, 0, 54, 0, 0,
195      48, 0, 0, 0, 16, 6, 0, 0, 0, 0, 0, 0, 6, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0,
196      1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ) ]
197gap> PermCharInfo( u62, cand ).ATLAS;
198[ "1a+22a+252a+616a+1155c+1386a+8064a+9240c",
199  "1a+22a+252a+616a+1155b+1386a+8064a+9240b",
200  "1a+22a+252a+616a+1155a+1386a+8064a+9240a" ]
201gap> aut:= AutomorphismsOfTable( u62 );;  Size( aut );
20224
203gap> elms:= Filtered( Elements( aut ), x -> Order( x ) = 3 );
204[ (10,11,12)(26,27,28)(40,41,42), (10,12,11)(26,28,27)(40,42,41) ]
205gap> Position( cand, Permuted( cand[1], elms[1] ) );
2063
207gap> Position( cand, Permuted( cand[3], elms[1] ) );
2082
209gap> u622:= CharacterTable( "U6(2).2" );;
210gap> m222:= CharacterTable( "M22.2" );;
211gap> fus:= PossibleClassFusions( m222, u622 );
212[ [ 1, 3, 7, 10, 13, 14, 20, 22, 22, 24, 29, 38, 39, 42, 41, 46, 50, 53, 58,
213      59, 59 ] ]
214gap> cand:= Induced( m222, u622, [ TrivialCharacter( m222 ) ], fus[1] );
215[ Character( CharacterTable( "U6(2).2" ), [ 20736, 0, 384, 0, 0, 0, 54, 0, 0,
216      48, 0, 0, 16, 6, 0, 0, 0, 0, 0, 6, 0, 2, 0, 4, 0, 0, 0, 0, 1, 0, 0, 0,
217      0, 0, 0, 0, 0, 1080, 72, 0, 48, 8, 0, 0, 0, 18, 0, 0, 0, 8, 0, 0, 2, 0,
218      0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0 ] ) ]
219gap> PermCharInfo( u622, cand ).ATLAS;
220[ "1a+22a+252a+616a+1155a+1386a+8064a+9240a" ]
221gap> o8p3:= CharacterTable("O8+(3)");;
222gap> Size( o8p3 ) / (2^9*168);
22357572775
224gap> o8p2:= CharacterTable( "O8+(2)" );;
225gap> fus:= PossibleClassFusions( o8p2, o8p3 );;
226gap> Length( fus );
22724
228gap> rep:= RepresentativesFusions( o8p2, fus, o8p3 );
229[ [ 1, 5, 2, 3, 4, 5, 7, 8, 12, 16, 17, 19, 23, 20, 21, 22, 23, 24, 25, 26,
230      37, 38, 42, 31, 32, 36, 49, 52, 51, 50, 43, 44, 45, 53, 55, 56, 57, 71,
231      71, 71, 72, 73, 74, 78, 79, 83, 88, 89, 90, 94, 100, 101, 105 ] ]
232gap> fus:= rep[1];;
233gap> Size( o8p2 ) / (2^9*168);
2342025
235gap> sub:= CharacterTable( "2^6:A8" );;
236gap> subfus:= GetFusionMap( sub, o8p2 );
237[ 1, 3, 2, 2, 4, 5, 6, 13, 3, 6, 12, 13, 14, 7, 21, 24, 11, 30, 29, 31, 13,
238  17, 15, 16, 14, 17, 36, 37, 18, 41, 24, 44, 48, 28, 33, 32, 34, 35, 35, 51,
239  51 ]
240gap> fus:= CompositionMaps( fus, subfus );
241[ 1, 2, 5, 5, 3, 4, 5, 23, 2, 5, 19, 23, 20, 7, 37, 31, 17, 50, 51, 43, 23,
242  23, 21, 22, 20, 23, 56, 57, 24, 72, 31, 78, 89, 52, 45, 44, 53, 55, 55,
243  100, 100 ]
244gap> Size( sub ) / (2^9*168);
24515
246gap> List( Irr( sub ), Degree );
247[ 1, 7, 14, 20, 21, 21, 21, 28, 35, 45, 45, 56, 64, 70, 28, 28, 35, 35, 35,
248  35, 70, 70, 70, 70, 140, 140, 140, 140, 140, 210, 210, 252, 252, 280, 280,
249  315, 315, 315, 315, 420, 448 ]
250gap> cand:= PermChars( sub, 15 );
251[ Character( CharacterTable( "2^6:A8" ), [ 15, 15, 15, 7, 7, 7, 7, 7, 3, 3,
252      3, 3, 3, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1,
253      1, 1, 1, 1, 1, 0, 0 ] ) ]
254gap> ind:= Induced( sub, o8p3, cand, fus );
255[ Character( CharacterTable( "O8+(3)" ), [ 57572775, 59535, 59535, 59535,
256      3591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2187, 0, 27, 135, 135, 135, 243,
257      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 27, 27, 0,
258      0, 0, 0, 27, 27, 27, 27, 0, 8, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
259      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
260      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ) ]
261gap> o8p33:= CharacterTable( "O8+(3).3" );;
262gap> inv:= InverseMap( GetFusionMap( o8p3, o8p33 ) );
263[ 1, [ 2, 3, 4 ], 5, 6, [ 7, 8, 9 ], [ 10, 11, 12 ], 13, [ 14, 15, 16 ], 17,
264  18, 19, [ 20, 21, 22 ], 23, [ 24, 25, 26 ], [ 27, 28, 29 ], 30,
265  [ 31, 32, 33 ], [ 34, 35, 36 ], [ 37, 38, 39 ], [ 40, 41, 42 ],
266  [ 43, 44, 45 ], 46, [ 47, 48, 49 ], 50, [ 51, 52, 53 ], 54, 55, 56, 57,
267  [ 58, 59, 60 ], [ 61, 62, 63 ], 64, [ 65, 66, 67 ], 68, [ 69, 70, 71 ],
268  [ 72, 73, 74 ], [ 75, 76, 77 ], [ 78, 79, 80 ], [ 81, 82, 83 ], 84, 85,
269  [ 86, 87, 88 ], [ 89, 90, 91 ], [ 92, 93, 94 ], 95, 96, [ 97, 98, 99 ],
270  [ 100, 101, 102 ], [ 103, 104, 105 ], [ 106, 107, 108 ], [ 109, 110, 111 ],
271  [ 112, 113, 114 ] ]
272gap> ext:= CompositionMaps( ind[1], inv );
273[ 57572775, 59535, 3591, 0, 0, 0, 0, 0, 2187, 0, 27, 135, 243, 0, 0, 0, 0, 0,
274  0, 0, 27, 0, 0, 27, 27, 0, 8, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
275  0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
276gap> perms:= PermChars( o8p33, rec( torso:= ext ) );
277[ Character( CharacterTable( "O8+(3).3" ), [ 57572775, 59535, 3591, 0, 0, 0,
278      0, 0, 2187, 0, 27, 135, 243, 0, 0, 0, 0, 0, 0, 0, 27, 0, 0, 27, 27, 0,
279      8, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
280      0, 0, 3159, 3159, 243, 243, 39, 39, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3,
281      3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 2, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0
282     ] ) ]
283gap> PermCharInfo( o8p33, perms ).ATLAS;
284[ "1a+780aabb+2457a+2808abc+9450aaabbcc+18200abcdddef+24192a+54600a^{5}b+70200\
285aabb+87360ab+139776a^{5}+147420a^{4}b^{4}+163800ab+184275aabc+199017aa+218700a\
286+245700a+291200aef+332800a^{4}b^{5}c^{5}+491400aaabcd+531441a^{5}b^{4}c^{4}+55\
2872825a^{4}+568620aabb+698880a^{4}b^{4}+716800aaabbccdddeeff+786240aabb+873600aa\
288+998400aa+1257984a^{6}+1397760aa" ]
289gap> o73:= CharacterTable( "O7(3)" );;
290gap> a7:= CharacterTable( "A7" );;
291gap> fus:= PossibleClassFusions( a7, o73 );
292[ [ 1, 3, 6, 10, 15, 16, 24, 33, 33 ], [ 1, 3, 7, 10, 15, 16, 22, 33, 33 ] ]
293gap> ind:= List( fus,
294>       x -> Induced( a7, o73, [ TrivialCharacter( a7 ) ], x )[1] );;
295gap> mat:= MatScalarProducts( o73, Irr( o73 ), ind );;
296gap> sum:= Sum( mat );
297[ 2, 6, 2, 0, 8, 6, 2, 4, 4, 8, 3, 0, 4, 4, 9, 3, 5, 0, 0, 9, 0, 10, 5, 6,
298  15, 1, 12, 1, 15, 7, 2, 4, 14, 16, 0, 12, 12, 7, 8, 8, 14, 12, 12, 14, 6,
299  6, 20, 16, 12, 12, 12, 10, 10, 12, 12, 8, 12, 6 ]
300gap> const:= Filtered( [ 1 .. Length( sum ) ], x -> sum[x] <> 0 );
301[ 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16, 17, 20, 22, 23, 24, 25, 26,
302  27, 28, 29, 30, 31, 32, 33, 34, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
303  47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58 ]
304gap> Length( const );
30552
306gap> const:= Irr( o73 ){ const };;
307gap> rat:= RationalizedMat( const );;
308gap> names:= ClassNames( o73 );
309[ "1a", "2a", "2b", "2c", "3a", "3b", "3c", "3d", "3e", "3f", "3g", "4a",
310  "4b", "4c", "4d", "5a", "6a", "6b", "6c", "6d", "6e", "6f", "6g", "6h",
311  "6i", "6j", "6k", "6l", "6m", "6n", "6o", "6p", "7a", "8a", "8b", "9a",
312  "9b", "9c", "9d", "10a", "10b", "12a", "12b", "12c", "12d", "12e", "12f",
313  "12g", "12h", "13a", "13b", "14a", "15a", "18a", "18b", "18c", "18d", "20a"
314 ]
315gap> List( fus, x -> names{ x } );
316[ [ "1a", "2b", "3b", "3f", "4d", "5a", "6h", "7a", "7a" ],
317  [ "1a", "2b", "3c", "3f", "4d", "5a", "6f", "7a", "7a" ] ]
318gap> torso:= [ 28431 ];;
319gap> zeros:= [ 5, 8, 9, 11, 17, 20, 23, 28, 29, 32, 36, 37, 38,
320>              43, 46, 47, 48, 53, 54, 55, 56, 57, 58 ];;
321gap> names{ zeros };
322[ "3a", "3d", "3e", "3g", "6a", "6d", "6g", "6l", "6m", "6p", "9a", "9b",
323  "9c", "12b", "12e", "12f", "12g", "15a", "18a", "18b", "18c", "18d", "20a" ]
324gap> for i in zeros do
325>      torso[i]:= 0;
326>    od;
327gap> torso;
328[ 28431,,,, 0,,, 0, 0,, 0,,,,,, 0,,, 0,,, 0,,,,, 0, 0,,, 0,,,, 0, 0, 0,,,,, 0,
329  ,, 0, 0, 0,,,,, 0, 0, 0, 0, 0, 0 ]
330gap> perms:= PermChars( o73, rec( torso:= torso, chars:= rat ) );
331[ Character( CharacterTable( "O7(3)" ), [ 28431, 567, 567, 111, 0, 0, 243, 0,
332      0, 81, 0, 15, 3, 27, 15, 6, 0, 0, 27, 0, 3, 27, 0, 0, 0, 3, 9, 0, 0, 3,
333      3, 0, 4, 1, 1, 0, 0, 0, 0, 2, 2, 3, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
334      0, 0, 0, 0 ] ) ]
335gap> PermCharInfo( o73, perms ).ATLAS;
336[ "1a+78a+168a+182a+260ab+1092a+2457a+2730a+4095b+5460a+11648a" ]
337gap> o8p3:= CharacterTable( "O8+(3)" );;
338gap> o8p2:= CharacterTable( "O8+(2)" );;
339gap> fus:= PossibleClassFusions( o8p2, o8p3 );;
340gap> NamesOfFusionSources( o8p2 );
341[ "A9", "2^8:O8+(2)", "O8+(2)M2", "O8+(2)M3", "O8+(2)M5", "O8+(2)M6",
342  "O8+(2)M8", "O8+(2)M9", "(3xU4(2)):2", "O8+(2)M11", "O8+(2)M12",
343  "2^(1+8)_+:(S3xS3xS3)", "3^4:2^3.S4(a)", "(A5xA5):2^2", "O8+(2)M16",
344  "O8+(2)M17", "2^(1+8)+.O8+(2)", "2^6:A8", "2.O8+(2)", "2^2.O8+(2)", "S6(2)"
345 ]
346gap> sub:= CharacterTable( "2^6:A8" );;
347gap> subfus:= GetFusionMap( sub, o8p2 );
348[ 1, 3, 2, 2, 4, 5, 6, 13, 3, 6, 12, 13, 14, 7, 21, 24, 11, 30, 29, 31, 13,
349  17, 15, 16, 14, 17, 36, 37, 18, 41, 24, 44, 48, 28, 33, 32, 34, 35, 35, 51,
350  51 ]
351gap> fus:= List( fus, x -> CompositionMaps( x, subfus ) );;
352gap> fus:= Set( fus );;
353gap> Length( fus );
35424
355gap> ind:= List( fus, x -> Induced( sub, o8p3,
356>                              [ TrivialCharacter( sub ) ], x )[1] );;
357gap> ind:= Set( ind );;
358gap> Length( ind );
3596
360gap> o8p32:= CharacterTable( "O8+(3).2_1" );;
361gap> fus:= GetFusionMap( o8p3, o8p32 );;
362gap> ext:= List( ind, x -> CompositionMaps( x, InverseMap( fus ) ) );;
363gap> ext:= Filtered( ext, x -> ForAll( x, IsInt ) );
364[ [ 3838185, 17577, 8505, 8505, 873, 0, 0, 0, 0, 6561, 0, 0, 729, 0, 9, 105,
365      45, 45, 105, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 9, 9, 27, 27,
366      0, 0, 27, 9, 0, 8, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0,
367      0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
368      0, 0 ], [ 3838185, 17577, 8505, 8505, 873, 0, 6561, 0, 0, 0, 0, 0, 729,
369      0, 9, 105, 45, 45, 105, 30, 0, 0, 0, 0, 0, 0, 189, 0, 0, 0, 9, 0, 0, 0,
370      9, 27, 27, 0, 0, 9, 27, 0, 8, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,
371      0, 0, 9, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0,
372      0, 0, 0, 0, 0 ] ]
373gap> s444:= CharacterTable( "S4(4).4" );;
374gap> NamesOfFusionSources( s444 );
375[ "(L3(2)xS4(4):2).2", "S4(4)", "S4(4).2" ]
376gap> perms:= PermChars( s444, rec( torso:= [ Size( s444 ) / ( 5^2*2^5 ) ] ) );
377[ Character( CharacterTable( "S4(4).4" ), [ 4896, 384, 96, 0, 16, 32, 36, 16,
378      0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ),
379  Character( CharacterTable( "S4(4).4" ), [ 4896, 192, 32, 0, 0, 8, 6, 1, 0,
380      2, 0, 0, 36, 0, 12, 0, 0, 0, 1, 0, 6, 6, 2, 2, 0, 0, 0, 0, 1, 1 ] ),
381  Character( CharacterTable( "S4(4).4" ), [ 4896, 240, 64, 0, 8, 8, 36, 16,
382      0, 0, 0, 0, 0, 12, 8, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ) ]
383gap> PermCharInfo( s444, perms ).ATLAS;
384[ "1abcd+50abcd+153abcd+170a^{4}b^{4}+680aabb",
385  "1a+50ac+153a+170aab+256a+680abb+816a+1020a",
386  "1ac+50ac+68a+153abcd+170aabbb+204a+680abb+1020a" ]
387gap> t:= CharacterTable( "Co1" );
388CharacterTable( "Co1" )
389gap> s:= CharacterTable( Maxes( t )[5] );
390CharacterTable( "2^(1+8)+.O8+(2)" )
391gap> ind:= Induced( s, t, [ TrivialCharacter( s ) ] );;
392gap> PermCharInfo( t, ind ).ATLAS;
393[ "1a+299a+17250a+27300a+80730a+313950a+644644a+2816856a+5494125a+12432420a+24\
394794000a" ]
395gap> centorder:= SizesCentralizers( t )[3];;
396gap> maxes:= List( Maxes( t ), CharacterTable );;
397gap> cand:= Filtered( maxes, x -> Size( x ) mod centorder = 0 );
398[ CharacterTable( "(A4xG2(4)):2" ) ]
399gap> u:= cand[1];;
400gap> index:= Size( u ) / centorder;
4013
402gap> subperm:= PermChars( u, rec( degree := index, bounds := false ) );
403[ Character( CharacterTable( "(A4xG2(4)):2" ),
404    [ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
405      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3,
406      3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0,
407      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
408      1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ] ) ]
409gap> subperm = PermChars( u, rec( torso := [ 3 ] ) );
410true
411gap> ind:= Induced( u, t, subperm );
412[ Character( CharacterTable( "Co1" ), [ 2065694400, 181440, 119408, 38016,
413      2779920, 0, 0, 378, 30240, 864, 0, 720, 316, 80, 2520, 30, 0, 6480,
414      1508, 0, 0, 0, 0, 0, 38, 18, 105, 0, 600, 120, 56, 24, 0, 12, 0, 0, 0,
415      120, 48, 18, 0, 0, 6, 0, 360, 144, 108, 0, 0, 10, 0, 0, 0, 0, 0, 4, 2,
416      3, 9, 0, 0, 15, 3, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 12,
417      8, 0, 6, 0, 0, 3, 0, 1, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0 ] ) ]
418gap> PermCharInfo( t, ind ).ATLAS;
419[ "1a+1771a+8855a+27300aa+313950a+345345a+644644aa+871884aaa+1771000a+2055625a\
420+4100096a+7628985a+9669660a+12432420aa+21528000aa+23244375a+24174150aa+2479400\
4210a+31574400aa+40370176a+60435375a+85250880aa+100725625a+106142400a+150732800a+\
422184184000a+185912496a+207491625a+299710125a+302176875a" ]
423gap> centorder:= SizesCentralizers( t )[4];;
424gap> cand:= Filtered( maxes, x -> Size( x ) mod centorder = 0 );
425[ CharacterTable( "Co2" ), CharacterTable( "2^11:M24" ) ]
426gap> u:= cand[1];;
427gap> GetFusionMap( u, t );
428[ 1, 2, 2, 4, 7, 6, 9, 11, 11, 10, 11, 12, 14, 17, 16, 21, 23, 20, 22, 22,
429  24, 28, 30, 33, 31, 32, 33, 33, 37, 42, 41, 43, 44, 48, 52, 49, 53, 55, 53,
430  52, 54, 60, 60, 60, 64, 65, 65, 67, 66, 70, 73, 72, 78, 79, 84, 85, 87, 92,
431  93, 93 ]
432gap> centorder;
433389283840
434gap> SizesCentralizers( u )[4];
4351474560
436gap> u:= cand[2];
437CharacterTable( "2^11:M24" )
438gap> index:= Size( u ) / centorder;
4391288
440gap> subperm:= PermChars( u, rec( torso := [ index ] ) );
441[ Character( CharacterTable( "2^11:M24" ), [ 1288, 1288, 1288, 56, 56, 56,
442      56, 56, 56, 48, 48, 48, 48, 48, 10, 10, 10, 10, 7, 7, 8, 8, 8, 8, 8, 8,
443      4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 3, 3, 3, 0,
444      0, 0, 0, 2, 2, 2, 2, 3, 3, 3, 1, 1, 2, 2, 2, 2, 1, 1, 0, 0, 0, 0, 0, 0,
445      0, 0, 0, 0, 0, 0 ] ) ]
446gap> subperm = PermChars( u, rec( degree:= index, bounds := false ) );
447true
448gap> ind:= Induced( u, t, subperm );
449[ Character( CharacterTable( "Co1" ), [ 10680579000, 1988280, 196560, 94744,
450      0, 17010, 0, 945, 7560, 3432, 2280, 1728, 252, 308, 0, 225, 0, 0, 0,
451      270, 0, 306, 0, 46, 45, 25, 0, 0, 120, 32, 12, 52, 36, 36, 0, 0, 0, 0,
452      0, 45, 15, 0, 9, 3, 0, 0, 0, 0, 18, 0, 30, 0, 6, 18, 0, 3, 5, 0, 0, 0,
453      0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 3, 0, 0, 0, 0, 1, 0, 0, 0, 0, 6, 0, 2,
454      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ) ]
455gap> PermCharInfo( t, ind ).ATLAS;
456[ "1a+17250aa+27300a+80730aa+644644aaa+871884a+1821600a+2055625aaa+2816856a+54\
45794125a^{4}+12432420aa+16347825aa+23244375a+24174150aa+24667500aa+24794000aaa+3\
4581574400a+40370176a+55255200a+66602250a^{4}+83720000aa+85250880aaa+91547820aa+1\
45906142400a+150732800a+184184000aaa+185912496aaa+185955000aaa+207491625aaa+21554\
4607904aa+241741500aaa+247235625a+257857600aa+259008750a+280280000a+302176875a+32\
4616956500a+387317700a+402902500a+464257024a+469945476b+502078500a+503513010a+504\
462627200a+522161640a" ]
463gap> t:= CharacterTable( "G2(3)" );
464CharacterTable( "G2(3)" )
465gap> t:= CharacterTable( "G2(3)" );;
466gap> n:= Length( RationalizedMat( Irr( t ) ) );;
467gap> maxmult:= List( [ 1 .. n ], i -> 1 );;
468gap> perms:= [];;
469gap> divs:= DivisorsInt( Size( t ) );;
470gap> for d in divs do
471>      Append( perms,
472>              PermChars( t, rec( bounds  := false,
473>                                 degree  := d,
474>                                 maxmult := maxmult ) ) );
475>    od;
476gap> Length( perms );
47742
478gap> List( perms, Degree );
479[ 1, 351, 351, 364, 364, 378, 378, 546, 546, 546, 546, 546, 702, 702, 728,
480  728, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1092, 1456, 1456, 1638,
481  1638, 2184, 2184, 2457, 2457, 2457, 2457, 3159, 3276, 3276, 3276, 3276,
482  4368, 6552, 6552 ]
483gap> tom:= TableOfMarks( "G2(3)" );
484TableOfMarks( "G2(3)" )
485gap> tbl:= CharacterTable( "G2(3)" );
486CharacterTable( "G2(3)" )
487gap> permstom:= PermCharsTom( tbl, tom );;
488gap> Length( permstom );
489433
490gap> multfree:= Intersection( perms, permstom );;
491gap> Length( multfree );
49215
493gap> List( multfree, Degree );
494[ 1, 351, 351, 364, 364, 378, 378, 702, 702, 728, 728, 1092, 1092, 2184, 2184
495 ]
496gap> tbl2:= CharacterTable("O8+(2).2");;
497gap> s3:= CharacterTable( "Symmetric", 3 );;
498gap> s:= CharacterTableWreathSymmetric( s3, 4 );
499CharacterTable( "Sym(3)wrS4" )
500gap> fus:= PossibleClassFusions( s, tbl2 );
501[ [ 1, 41, 6, 3, 48, 9, 42, 19, 51, 8, 5, 50, 24, 49, 7, 2, 44, 22, 42, 12,
502      53, 17, 58, 21, 5, 47, 26, 50, 37, 52, 23, 60, 18, 4, 46, 25, 14, 61,
503      20, 9, 53, 30, 51, 26, 64, 8, 52, 31, 13, 56, 38 ] ]
504gap> pi:= Induced( s, tbl2, [ TrivialCharacter( s ) ], fus[1] )[1];
505Character( CharacterTable( "O8+(2).2" ), [ 11200, 256, 160, 160, 80, 40, 40,
506  76, 13, 0, 0, 8, 8, 4, 0, 0, 16, 16, 4, 4, 4, 1, 1, 1, 1, 5, 0, 0, 0, 1, 1,
507  0, 0, 0, 0, 0, 2, 2, 0, 0, 1120, 96, 0, 16, 0, 16, 8, 10, 4, 6, 7, 12, 3,
508  0, 0, 2, 0, 4, 0, 1, 1, 0, 0, 1, 0, 0, 0 ] )
509gap> PermCharInfo( tbl2, pi ).ATLAS;
510[ "1a+84a+168a+175a+300a+700c+972a+1400a+3200a+4200b" ]
511gap> tbl:= CharacterTable( "O8+(2)" );
512CharacterTable( "O8+(2)" )
513gap> rest:= RestrictedClassFunction( pi, tbl );
514Character( CharacterTable( "O8+(2)" ), [ 11200, 256, 160, 160, 160, 80, 40,
515  40, 40, 76, 13, 0, 0, 8, 8, 8, 4, 0, 0, 0, 16, 16, 16, 4, 4, 4, 4, 1, 1, 1,
516  1, 1, 1, 5, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 2, 2, 0, 0, 0 ] )
517gap> PermCharInfo( tbl, rest ).ATLAS;
518[ "1a+84abc+175a+300a+700bcd+972a+3200a+4200a" ]
519gap> tbl:= CharacterTable( "M22" );
520CharacterTable( "M22" )
521gap> perms:= PermChars( tbl, rec( torso:= [ 56 ] ) );
522[ Character( CharacterTable( "M22" ), [ 56, 8, 2, 4, 0, 1, 2, 0, 0, 2, 1, 1
523     ] ) ]
524gap> pi:= perms[1];;
525gap> Norm( pi );
5262
527gap> Display( tbl, rec( chars:= perms ) );
528M22
529
530     2  7  7  2  5  4  .  2  .  .  3   .   .
531     3  2  1  2  .  .  .  1  .  .  .   .   .
532     5  1  .  .  .  .  1  .  .  .  .   .   .
533     7  1  .  .  .  .  .  .  1  1  .   .   .
534    11  1  .  .  .  .  .  .  .  .  .   1   1
535
536       1a 2a 3a 4a 4b 5a 6a 7a 7b 8a 11a 11b
537    2P 1a 1a 3a 2a 2a 5a 3a 7a 7b 4a 11b 11a
538    3P 1a 2a 1a 4a 4b 5a 2a 7b 7a 8a 11a 11b
539    5P 1a 2a 3a 4a 4b 1a 6a 7b 7a 8a 11a 11b
540    7P 1a 2a 3a 4a 4b 5a 6a 1a 1a 8a 11b 11a
541   11P 1a 2a 3a 4a 4b 5a 6a 7a 7b 8a  1a  1a
542
543Y.1    56  8  2  4  .  1  2  .  .  2   1   1
544
545gap> perms:= PermChars( tbl, rec( torso:= [ 56 * 55 ] ) );;
546gap> Length( perms );
54716
548gap> OrdersClassRepresentatives( tbl );
549[ 1, 2, 3, 4, 4, 5, 6, 7, 7, 8, 11, 11 ]
550gap> perms:= Filtered( perms, x -> x[5] = 0 and x[10] <> 0 );
551[ Character( CharacterTable( "M22" ), [ 3080, 56, 2, 12, 0, 0, 2, 0, 0, 2, 0,
552      0 ] ), Character( CharacterTable( "M22" ),
553    [ 3080, 8, 2, 8, 0, 0, 2, 0, 0, 4, 0, 0 ] ),
554  Character( CharacterTable( "M22" ), [ 3080, 24, 11, 4, 0, 0, 3, 0, 0, 2, 0,
555      0 ] ), Character( CharacterTable( "M22" ),
556    [ 3080, 24, 20, 4, 0, 0, 0, 0, 0, 2, 0, 0 ] ) ]
557gap> infoperms:= PermCharInfo( tbl, perms );;
558gap> Display( tbl, infoperms.display );
559M22
560
561      2    7  7  2  5  2  3
562      3    2  1  2  .  1  .
563      5    1  .  .  .  .  .
564      7    1  .  .  .  .  .
565     11    1  .  .  .  .  .
566
567          1a 2a 3a 4a 6a 8a
568     2P   1a 1a 3a 2a 3a 4a
569     3P   1a 2a 1a 4a 2a 8a
570     5P   1a 2a 3a 4a 6a 8a
571     7P   1a 2a 3a 4a 6a 8a
572    11P   1a 2a 3a 4a 6a 8a
573
574I.1     3080 56  2 12  2  2
575I.2        1 21  8 54 24 36
576I.3        1  3  4  9 12 18
577I.4     3080  8  2  8  2  4
578I.5        1  3  8 36 24 72
579I.6        1  3  4  9 12 18
580I.7     3080 24 11  4  3  2
581I.8        1  9 44 18 36 36
582I.9        1  3  4  9 12 18
583I.10    3080 24 20  4  .  2
584I.11       1  9 80 18  . 36
585I.12       1  3  4  9 12 18
586gap> ly:= CharacterTable( "Ly" );;
587gap> mcl:= CharacterTable( "McL" );;
588gap> mcl2:= CharacterTable( "McL.2" );;
589gap> 3mcl2:= CharacterTable( "3.McL.2" );;
590gap> perms:= PermChars( mcl, rec( degree:= 15400 ) );
591[ Character( CharacterTable( "McL" ), [ 15400, 56, 91, 10, 12, 25, 0, 11, 2,
592      0, 0, 2, 1, 1, 1, 0, 0, 3, 0, 0, 1, 1, 1, 1 ] ),
593  Character( CharacterTable( "McL" ), [ 15400, 280, 10, 37, 20, 0, 5, 10, 1,
594      0, 0, 2, 1, 1, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0 ] ) ]
595gap> ord10:= Filtered( [ 1 .. NrConjugacyClasses( mcl ) ],
596>                      i -> OrdersClassRepresentatives( mcl )[i] = 10 );
597[ 15 ]
598gap> List( perms, pi -> pi[ ord10[1] ] );
599[ 1, 0 ]
600gap> pi:= perms[1];
601Character( CharacterTable( "McL" ), [ 15400, 56, 91, 10, 12, 25, 0, 11, 2, 0,
602  0, 2, 1, 1, 1, 0, 0, 3, 0, 0, 1, 1, 1, 1 ] )
603gap> map:= InverseMap( GetFusionMap( mcl, mcl2 ) );
604[ 1, 2, 3, 4, 5, 6, 7, 8, 9, [ 10, 11 ], 12, [ 13, 14 ], 15, 16, 17, 18,
605  [ 19, 20 ], [ 21, 22 ], [ 23, 24 ] ]
606gap> torso:= CompositionMaps( pi, map );
607[ 15400, 56, 91, 10, 12, 25, 0, 11, 2, 0, 2, 1, 1, 0, 0, 3, 0, 1, 1 ]
608gap> perms:= PermChars( mcl2, rec( torso:= torso ) );
609[ Character( CharacterTable( "McL.2" ), [ 15400, 56, 91, 10, 12, 25, 0, 11,
610      2, 0, 2, 1, 1, 0, 0, 3, 0, 1, 1, 110, 26, 2, 4, 0, 0, 5, 2, 1, 1, 0, 0,
611      1, 1 ] ) ]
612gap> pi:= Inflated( perms[1], 3mcl2 );
613Character( CharacterTable( "3.McL.2" ), [ 15400, 15400, 56, 56, 91, 91, 10,
614  12, 12, 25, 25, 0, 0, 11, 11, 2, 2, 0, 0, 0, 2, 2, 1, 1, 1, 0, 0, 0, 0, 3,
615  3, 0, 0, 0, 1, 1, 1, 1, 1, 1, 110, 26, 2, 4, 0, 0, 5, 2, 1, 1, 0, 0, 1, 1
616 ] )
617gap> fus:= PossibleClassFusions( 3mcl2, ly );;  Length( fus );
6184
619gap> g:= AutomorphismsOfTable( ly );;
620gap> OrbitLengths( g, fus, OnTuples );
621[ 4 ]
622gap> pi:= Induced( 3mcl2, ly, [ pi ], fus[1] )[1];
623Character( CharacterTable( "Ly" ), [ 147934325000, 286440, 1416800, 1082,
624  784, 12500, 0, 672, 42, 24, 0, 40, 0, 2, 20, 0, 0, 0, 64, 10, 0, 50, 2, 0,
625  0, 4, 0, 0, 0, 0, 4, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
626  0, 0, 0, 0 ] )
627gap> orders:= OrdersClassRepresentatives( ly );
628[ 1, 2, 3, 3, 4, 5, 5, 6, 6, 6, 7, 8, 8, 9, 10, 10, 11, 11, 12, 12, 14, 15,
629  15, 15, 18, 20, 21, 21, 22, 22, 24, 24, 24, 25, 28, 30, 30, 31, 31, 31, 31,
630  31, 33, 33, 37, 37, 40, 40, 42, 42, 67, 67, 67 ]
631gap> torso:= [];;
632gap> for i in [ 1 .. Length( orders ) ] do
633>      if orders[i] mod 2 = 1 then
634>        torso[i]:= pi[i]/2;
635>      fi;
636>    od;
637gap> torso;
638[ 73967162500,, 708400, 541,, 6250, 0,,,, 0,,, 1,,, 0, 0,,,, 25, 1, 0,,, 0, 0,
639  ,,,,, 0,,,, 0, 0, 0, 0, 0, 0, 0, 0, 0,,,,, 0, 0, 0 ]
640gap> perms:= PermChars( ly, rec( torso:= torso ) );;
641gap> Length( perms );
64243
643gap> perms:= Filtered( perms, cand -> ForAll( [ 1 .. Length( orders ) ],
644>        i -> cand[i] >= pi[i] / 2 ) );
645[ Character( CharacterTable( "Ly" ), [ 73967162500, 204820, 708400, 541, 392,
646      6250, 0, 1456, 61, 25, 0, 22, 10, 1, 10, 0, 0, 0, 32, 5, 0, 25, 1, 0,
647      1, 2, 0, 0, 0, 0, 4, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2,
648      0, 0, 0, 0, 0 ] ) ]
649gap> tbl:= CharacterTable( "U3(5).3.2" );
650CharacterTable( "U3(5).3.2" )
651gap> deg:= Size( tbl ) / ( 2^4*3^3 );
6521750
653gap> pi:= PermChars( tbl, rec( torso:= [ deg ] ) );
654[ Character( CharacterTable( "U3(5).3.2" ), [ 1750, 70, 13, 2, 0, 0, 1, 0, 0,
655      0, 10, 7, 10, 4, 2, 0, 0, 0, 0, 0, 0, 30, 10, 3, 0, 0, 1, 0, 0 ] ),
656  Character( CharacterTable( "U3(5).3.2" ), [ 1750, 30, 4, 6, 0, 0, 0, 0, 0,
657      0, 40, 7, 0, 6, 0, 0, 0, 0, 0, 0, 0, 20, 0, 2, 2, 0, 0, 0, 0 ] ) ]
658gap> ord8:= Filtered( [ 1 .. NrConjugacyClasses( tbl ) ],
659>               i -> OrdersClassRepresentatives( tbl )[i] = 8 );
660[ 9, 25 ]
661gap> List( pi, x -> x{ ord8 } );
662[ [ 0, 0 ], [ 0, 2 ] ]
663gap> subtbl:= CharacterTable( "U3(5)" );
664CharacterTable( "U3(5)" )
665gap> rest:= RestrictedClassFunctions( pi, subtbl );
666[ Character( CharacterTable( "U3(5)" ), [ 1750, 70, 13, 2, 0, 0, 0, 0, 1, 0,
667      0, 0, 0, 0 ] ), Character( CharacterTable( "U3(5)" ),
668    [ 1750, 30, 4, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ) ]
669gap> ord6:= Filtered( [ 1 .. NrConjugacyClasses( subtbl ) ],
670>               i -> OrdersClassRepresentatives( subtbl )[i] = 6 );
671[ 9 ]
672gap> List( rest, x -> x{ ord6 } );
673[ [ 1 ], [ 0 ] ]
674gap> tom:= TableOfMarks( "U3(5)" );
675TableOfMarks( "U3(5)" )
676gap> perms:= PermCharsTom( subtbl, tom );;
677gap> Set( Filtered( perms, x -> x[1] = deg ) ) = Set( rest );
678true
679gap> PermCharInfo( tbl, pi ).ATLAS;
680[ "1a+21a+42a+84aac+105a+125a+126a+250a+252a+288bc",
681  "1a+42a+84ac+105ab+125a+126a+250a+252b+288bc" ]
682gap> subtbl2:= CharacterTable( "U3(5).2" );;
683gap> rest2:= RestrictedClassFunctions( pi, subtbl2 );;
684gap> PermCharInfo( subtbl2, rest2 ).ATLAS;
685[ "1a+21aab+28aa+56aa+84a+105a+125aab+126aab+288aa",
686  "1a+21ab+28a+56a+84a+105ab+125aab+126a+252a+288aa" ]
687gap> subtbl3:= CharacterTable( "U3(5).3" );;
688gap> rest3:= RestrictedClassFunctions( pi, subtbl3 );;
689gap> PermCharInfo( subtbl3, rest3 ).ATLAS;
690[ "1a+21abc+84aab+105a+125abc+126abc+144bcef",
691  "1a+21bc+84ab+105aa+125abc+126adg+144bcef" ]
692gap> t:= CharacterTable( "O8+(2).3.2" );;
693gap> s:= CharacterTable( "O8+(2)" );;
694gap> tom:= TableOfMarks( s );;
695gap> perms:= PermCharsTom( s, tom );;
696gap> deg:= 3^4*5^2*7;
69714175
698gap> perms:= Filtered( perms, x -> x[1] = deg );;
699gap> Length( perms );
7004
701gap> Length( Set( perms ) );
7021
703gap> fus:= PossibleClassFusions( s, t );
704[ [ 1, 2, 3, 3, 3, 4, 5, 5, 5, 6, 7, 8, 9, 10, 10, 10, 11, 12, 12, 12, 13,
705      13, 13, 14, 14, 14, 15, 16, 16, 16, 17, 17, 17, 18, 19, 20, 21, 22, 22,
706      22, 23, 23, 23, 24, 24, 24, 25, 26, 26, 26, 27, 27, 27 ] ]
707gap> fus:= fus[1];;
708gap> inv:= InverseMap( fus );;
709gap> comp:= CompositionMaps( perms[1], inv );
710[ 14175, 1215, 375, 79, 0, 0, 27, 27, 99, 15, 7, 0, 0, 0, 0, 9, 3, 1, 0, 1,
711  1, 0, 0, 0, 0, 0, 0 ]
712gap> ext:= PermChars( t, rec( torso:= comp ) );
713[ Character( CharacterTable( "O8+(2).3.2" ),
714    [ 14175, 1215, 375, 79, 0, 0, 27, 27, 99, 15, 7, 0, 0, 0, 0, 9, 3, 1, 0,
715      1, 1, 0, 0, 0, 0, 0, 0, 63, 9, 15, 7, 1, 0, 3, 3, 3, 1, 0, 0, 1, 1,
716      945, 129, 45, 69, 21, 25, 13, 0, 0, 0, 9, 0, 3, 3, 7, 1, 0, 0, 0, 3, 1,
717      0, 0, 0, 0, 0, 0 ] ) ]
718gap> PermCharInfo( t, ext[1] ).ATLAS;
719[ "1a+50b+100a+252bb+300b+700b+972bb+1400a+1944a+3200b+4032b" ]
720gap> co1:= CharacterTable( "Co1" );;
721gap> order:= 2^(2+11+22-25) * 2 * Size( CharacterTable( "M24" ) );
722501397585920
723gap> maxes:= List( Maxes( co1 ), CharacterTable );;
724gap> filt:= Filtered( maxes, t -> Size( t ) mod order = 0 );
725[ CharacterTable( "2^11:M24" ) ]
726gap> List( filt, t -> Size( t ) / order );
727[ 1 ]
728gap> k:= filt[1];;
729gap> f:= CharacterTable( "Symmetric", 3 );
730CharacterTable( "Sym(3)" )
731gap> OrdersClassRepresentatives( f );
732[ 1, 2, 3 ]
733gap> deg3:= PermChars( f, 3 );
734[ Character( CharacterTable( "Sym(3)" ), [ 3, 1, 0 ] ) ]
735gap> deg6:= PermChars( f, 6 );
736[ Character( CharacterTable( "Sym(3)" ), [ 6, 0, 0 ] ) ]
737gap> deg3[1] - 1/3 * deg6[1];
738ClassFunction( CharacterTable( "Sym(3)" ), [ 1, 1, 0 ] )
739gap> m:= CharacterTable( "M" );
740CharacterTable( "M" )
741gap> g:= CharacterTable( "MC2B" );
742CharacterTable( "2^1+24.Co1" )
743gap> pi:= RestrictedClassFunction( TrivialCharacter( k )^co1, g );;
744gap> zclasses:= ClassPositionsOfCentre( g );;
745gap> gmodz:= g / zclasses;
746CharacterTable( "2^1+24.Co1/[ 1, 2 ]" )
747gap> invmap:= InverseMap( GetFusionMap( g, gmodz ) );;
748gap> pibar:= CompositionMaps( pi, invmap );;
749gap> factorders:= OrdersClassRepresentatives( gmodz );;
750gap> phibar:= [];;
751gap> for i in [ 1 .. NrConjugacyClasses( gmodz ) ] do
752>      if factorders[i] mod 2 = 1 then
753>        phibar[i]:= 2 * pibar[i];
754>      elif pibar[i] = 0 then
755>        phibar[i]:= 0;
756>      fi;
757>    od;
758gap> cand:= PermChars( gmodz, rec( torso:= phibar ) );;
759gap> Length( cand );
7601
761gap> phi:= RestrictedClassFunction( cand[1], g )^m;;
762gap> pi:= pi^m;;
763gap> cand:= ShallowCopy( pi - 1/3 * phi );;
764gap> morders:= OrdersClassRepresentatives( m );;
765gap> for i in [ 1 .. Length( morders ) ] do
766>      if morders[i] mod 3 = 0 and phi[ PowerMap( m, 3 )[i] ] <> 0 then
767>        Unbind( cand[i] );
768>      fi;
769>    od;
770gap> constit:= Filtered( RationalizedMat( Irr( m ) ),
771>                        chi -> ScalarProduct( m, chi, pi ) <> 0 );;
772gap> cand:= PermChars( m,
773>      rec( torso:= cand, chars:= constit,
774>           lower:= ShallowCopy( pi - 1/3 * phi ),
775>           normalsubgroup:= [ 1 .. NrConjugacyClasses( m ) ],
776>           nonfaithful:= TrivialCharacter( m ) ) );
777[ Character( CharacterTable( "M" ), [ 16009115629875684006343550944921875,
778      7774182899642733721875, 120168544413337875, 4436049512692980,
779      215448838605, 131873639625, 760550656275, 110042727795, 943894035,
780      568854195, 1851609375, 0, 4680311220, 405405, 78624756, 14467005,
781      178605, 248265, 874650, 0, 76995, 591163, 224055, 34955, 29539, 20727,
782      0, 0, 375375, 15775, 0, 0, 0, 495, 116532, 3645, 62316, 1017, 11268,
783      357, 1701, 45, 117, 705, 0, 0, 4410, 1498, 0, 3780, 810, 0, 0, 83, 135,
784      31, 0, 0, 0, 0, 0, 0, 0, 255, 195, 0, 215, 0, 0, 210, 0, 42, 0, 35, 15,
785      1, 1, 160, 48, 9, 92, 25, 9, 9, 5, 1, 21, 0, 0, 0, 0, 0, 98, 74, 42, 0,
786      0, 0, 120, 76, 10, 0, 0, 0, 0, 0, 1, 1, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0,
787      0, 0, 0, 0, 5, 3, 0, 0, 0, 18, 0, 10, 0, 3, 3, 0, 1, 1, 1, 1, 0, 0, 2,
788      0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 12, 0, 0, 2, 0, 0, 0, 2, 0, 0,
789      1, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
790      0, 0, 0, 0, 0, 0 ] ) ]
791gap> co1:= CharacterTable( "Co1" );;
792gap> order:= 2^(3+6+12+18-25) * 168 * 3 * Factorial( 6 ) / 7;
793849346560
794gap> maxes:= List( Maxes( co1 ), CharacterTable );;
795gap> filt:= Filtered( maxes, t -> Size( t ) mod order = 0 );
796[ CharacterTable( "2^(1+8)+.O8+(2)" ), CharacterTable( "2^(4+12).(S3x3S6)" ) ]
797gap> List( filt, t -> Size( t ) / order );
798[ 105, 1 ]
799gap> o8p2:= CharacterTable( "O8+(2)" );;
800gap> PermChars( o8p2, rec( torso:= [ 105 ] ) );
801[  ]
802gap> k:= filt[2];;
803gap> f:= CharacterTable( "L3(2)" );
804CharacterTable( "L3(2)" )
805gap> OrdersClassRepresentatives( f );
806[ 1, 2, 3, 4, 7, 7 ]
807gap> deg7:= PermChars( f, 7 );
808[ Character( CharacterTable( "L3(2)" ), [ 7, 3, 1, 1, 0, 0 ] ) ]
809gap> deg42:= PermChars( f, 42 );
810[ Character( CharacterTable( "L3(2)" ), [ 42, 2, 0, 2, 0, 0 ] ),
811  Character( CharacterTable( "L3(2)" ), [ 42, 6, 0, 0, 0, 0 ] ) ]
812gap> deg168:= PermChars( f, 168 );
813[ Character( CharacterTable( "L3(2)" ), [ 168, 0, 0, 0, 0, 0 ] ) ]
814gap> deg7[1] - 1/3 * deg42[2] + 1/21 * deg168[1];
815ClassFunction( CharacterTable( "L3(2)" ), [ 1, 1, 1, 1, 0, 0 ] )
816gap> m:= CharacterTable( "M" );
817CharacterTable( "M" )
818gap> g:= CharacterTable( "MC2B" );
819CharacterTable( "2^1+24.Co1" )
820gap> pi:= RestrictedClassFunction( TrivialCharacter( k )^co1, g );;
821gap> nsg:= ClassPositionsOfNormalSubgroups( k );;
822gap> nsgsizes:= List( nsg, x -> Sum( SizesConjugacyClasses( k ){ x } ) );;
823gap> nn:= nsg[ Position( nsgsizes, Size( k ) / 6 ) ];;
824gap> psi:= 0 * [ 1 .. NrConjugacyClasses( k ) ];;
825gap> for i in nn do
826>      psi[i]:= 6;
827>    od;
828gap> psi:= InducedClassFunction( k, psi, co1 );;
829gap> psi:= RestrictedClassFunction( psi, g );;
830gap> zclasses:= ClassPositionsOfCentre( g );;
831gap> gmodz:= g / zclasses;
832CharacterTable( "2^1+24.Co1/[ 1, 2 ]" )
833gap> invmap:= InverseMap( GetFusionMap( g, gmodz ) );;
834gap> psibar:= CompositionMaps( psi, invmap );;
835gap> factorders:= OrdersClassRepresentatives( gmodz );;
836gap> phibar:= [];;
837gap> upperphibar:= [];;
838gap> for i in [ 1 .. NrConjugacyClasses( gmodz ) ] do
839>      if factorders[i] mod 2 = 1 then
840>        phibar[i]:= 2 * psibar[i];
841>      elif psibar[i] = 0 then
842>        phibar[i]:= 0;
843>      else
844>        upperphibar[i]:= 2 * psibar[i];
845>      fi;
846>    od;
847gap> cand:= PermChars( gmodz, rec( torso:= phibar,
848>             upper:= upperphibar,
849>             normalsubgroup:= [ 1 .. NrConjugacyClasses( gmodz ) ],
850>             nonfaithful:= TrivialCharacter( gmodz ) ) );;
851gap> Length( cand );
8523
853gap> nn:= First( ClassPositionsOfNormalSubgroups( gmodz ),
854>                x -> Sum( SizesConjugacyClasses( gmodz ){x} ) = 2^24 );
855[ 1 .. 4 ]
856gap> cont:= PermCharInfo( gmodz, cand ).contained;;
857gap> cand:= cand{ Filtered( [ 1 .. Length( cand ) ],
858>                           i -> Sum( cont[i]{ nn } ) < 2^24 ) };;
859gap> Length( cand );
8602
861gap> poss:= [];;
862gap> for v in cand do
863>      phibar:= [];
864>      upperphibar:= [];
865>      for i in [ 1 .. NrConjugacyClasses( gmodz ) ] do
866>        if factorders[i] mod 2 = 1 then
867>          phibar[i]:= 2 * v[i];
868>        elif v[i] = 0 then
869>          phibar[i]:= 0;
870>        else
871>          upperphibar[i]:= 2 * v[i];
872>        fi;
873>      od;
874>      Append( poss, PermChars( gmodz, rec( torso:= phibar,
875>                      upper:= upperphibar,
876>                      normalsubgroup:= [ 1 .. NrConjugacyClasses( gmodz ) ],
877>                      nonfaithful:= TrivialCharacter( gmodz ) ) ) );
878>    od;
879gap> Length( poss );
8806
881gap> cont:= PermCharInfo( gmodz, poss ).contained;;
882gap> poss:= poss{ Filtered( [ 1 .. Length( poss ) ],
883>                           i -> Sum( cont[i]{ nn } ) < 2^23 ) };;
884gap> Length( poss );
8854
886gap> phicand:= RestrictedClassFunctions( poss, g );;
887gap> phicand:= RestrictedClassFunctions( poss, g );;
888gap> phicand:= InducedClassFunctions( phicand, m );;
889gap> psi:= psi^m;;
890gap> pi:= pi^m;;
891gap> cand:= List( phicand,
892>             phi -> ShallowCopy( pi - 1/3 * psi + 1/21 * phi ) );;
893gap> morders:= OrdersClassRepresentatives( m );;
894gap> for x in cand do
895>      for i in [ 1 .. Length( morders ) ] do
896>        if morders[i] mod 7 = 0 then
897>          Unbind( x[i] );
898>        fi;
899>      od;
900>    od;
901gap> cand:= Filtered( cand, x -> ForAll( x, IsInt ) );
902[ [ 4050306254358548053604918389065234375, 148844831270071996434375,
903      2815847622206994375, 14567365753025085, 3447181417680, 659368198125,
904      3520153823175, 548464353255, 5706077895, 3056566695, 264515625, 0,
905      19572895485, 6486480, 186109245, 61410960, 758160, 688365,,, 172503,
906      1264351, 376155, 137935, 99127, 52731, 0, 0, 119625, 3625, 0, 0, 0, 0,
907      402813, 29160, 185301, 2781, 21069, 1932, 4212, 360, 576, 1125, 0, 0,,,
908      , 2160, 810, 0, 0, 111, 179, 43, 0, 0, 0, 0, 0, 0, 0, 185, 105, 0, 65,
909      0, 0,,,,, 0, 0, 0, 0, 337, 105, 36, 157, 37, 18, 18, 16, 4, 21, 0, 0,
910      0, 0, 0,,,,, 0, 0, 60, 40, 10, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,,, 0, 0, 0,
911      0, 0, 0, 0, 0, 0, 5, 1, 0, 0, 0,,,,, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0,
912      0, 0, 0, 0, 0,,,, 0, 0, 0, 6, 8, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,,, 0,
913      0, 0, 0, 0,,,, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,, 0 ] ]
914gap> constit:= Filtered( RationalizedMat( Irr( m ) ),
915>                        chi -> ScalarProduct( m, chi, pi ) <> 0 );;
916gap> cand:= PermChars( m, rec( torso:= cand[1], chars:= constit ) );
917[ Character( CharacterTable( "M" ), [ 4050306254358548053604918389065234375,
918      148844831270071996434375, 2815847622206994375, 14567365753025085,
919      3447181417680, 659368198125, 3520153823175, 548464353255, 5706077895,
920      3056566695, 264515625, 0, 19572895485, 6486480, 186109245, 61410960,
921      758160, 688365, 58310, 0, 172503, 1264351, 376155, 137935, 99127,
922      52731, 0, 0, 119625, 3625, 0, 0, 0, 0, 402813, 29160, 185301, 2781,
923      21069, 1932, 4212, 360, 576, 1125, 0, 0, 1302, 294, 0, 2160, 810, 0, 0,
924      111, 179, 43, 0, 0, 0, 0, 0, 0, 0, 185, 105, 0, 65, 0, 0, 224, 0, 14,
925      0, 0, 0, 0, 0, 337, 105, 36, 157, 37, 18, 18, 16, 4, 21, 0, 0, 0, 0, 0,
926      70, 38, 14, 0, 0, 0, 60, 40, 10, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 10, 0,
927      0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 1, 0, 0, 0, 24, 0, 6, 0, 0, 0, 0, 0, 0,
928      0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 6, 8, 0, 0, 2, 0, 0,
929      0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,
930      0, 0, 0, 0, 0, 0, 4, 0, 0, 0 ] ) ]
931gap> co1:= CharacterTable( "Co1" );;
932gap> order:= 2^35*Size( CharacterTable( "L5(2)" ) )*6 / 2^25 / 31;
9331981808640
934gap> maxes:= List( Maxes( co1 ), CharacterTable );;
935gap> filt:= Filtered( maxes, t -> Size( t ) mod order = 0 );
936[ CharacterTable( "2^11:M24" ), CharacterTable( "2^(1+8)+.O8+(2)" ),
937  CharacterTable( "2^(2+12):(A8xS3)" ) ]
938gap> List( filt, t -> Size( t ) / order );
939[ 253, 45, 1 ]
940gap> m24:= CharacterTable( "M24" );;
941gap> cand:= PermChars( m24, rec( torso:=[ 253 ] ) );
942[ Character( CharacterTable( "M24" ), [ 253, 29, 13, 10, 1, 5, 5, 1, 3, 2, 1,
943      1, 1, 1, 3, 0, 2, 1, 1, 1, 0, 0, 1, 1, 0, 0 ] ) ]
944gap> TestPerm5( m24, cand, m24 mod 11 );
945[  ]
946gap> PermChars( CharacterTable( "O8+(2)" ), rec( torso:=[ 45 ] ) );
947[  ]
948gap> k:= filt[3];;
949gap> subtbl:= CharacterTable( "2^4:A8" );;
950gap> subtom:= TableOfMarks( subtbl );;
951gap> perms:= PermCharsTom( subtbl, subtom );;
952gap> nsg:= ClassPositionsOfNormalSubgroups( subtbl );
953[ [ 1 ], [ 1, 2 ], [ 1 .. 25 ] ]
954gap> above:= Filtered( perms, x -> x[1] = x[2] );;
955gap> tbl:= CharacterTable( "L5(2)" );;
956gap> above:= Set( Induced( subtbl, tbl, above ) );;
957gap> index2:= Filtered( perms,
958>      x -> Sum( PermCharInfo( subtbl, [x] ).contained[1]{ [1,2] } ) = 8 );;
959gap> index2:= Filtered( index2, x -> not x[1] in [ 630, 840, 1260, 1680 ] );;
960gap> index2:= Set( Induced( subtbl, tbl, index2 ) );;
961gap> orders:= OrdersClassRepresentatives( tbl );;
962gap> goodclasses:= Filtered( [ 1 .. NrConjugacyClasses( tbl ) ],
963>                            i -> not orders[i] in [ 21, 31 ] );
964[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 ]
965gap> matrix:= List( Concatenation( above, index2 ), x -> x{ goodclasses } );;
966gap> sol:= SolutionMat( matrix,
967>              ListWithIdenticalEntries( Length( goodclasses ), 1 ) );
968[ 692/651, 57/217, -78/217, -26/217, 0, 74/651, 11/217, 0, 3/217, 151/651, 0,
969  22/651, 0, 0, 0, -11/217, 0, 0, 0, 0, 0, 0, 0, 0, -115/651, 0, -3/31, 0, 0,
970  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
971  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
972  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
973  0, -34/93, -11/651, 0, 2/21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1/31, 0, 0, 0,
974  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
975  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
976  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
977  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
978  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
979  0, 0, 0, 0, 0, 0, 0 ]
980gap> nonzero:= Filtered( [ 1 .. Length( sol ) ], i -> sol[i] <> 0 );
981[ 1, 2, 3, 4, 6, 7, 9, 10, 12, 16, 25, 27, 106, 107, 109, 120 ]
982gap> sol:= sol{ nonzero };;
983gap> a8degrees:= List( above{ Filtered( nonzero,
984>                                 x -> x <= Length( above ) ) },
985>                      x -> x[1] ) / 31;
986[ 1, 8, 15, 28, 56, 56, 70, 105, 120, 168, 336, 336 ]
987gap> a8tbl:= subtbl / [ 1, 2 ];;
988gap> invtoa8:= InverseMap( GetFusionMap( subtbl, a8tbl ) );;
989gap> nsg:= ClassPositionsOfNormalSubgroups( k );;
990gap> nn:= First( nsg, x -> Sum( SizesConjugacyClasses( k ){ x } ) = 6*2^14 );;
991gap> a8tbl_other:= k / nn;;
992gap> g:= CharacterTable( "MC2B" );
993CharacterTable( "2^1+24.Co1" )
994gap> constit:= [];;
995gap> for i in [ 1 .. Length( a8degrees ) ] do
996>      cand:= PermChars( a8tbl_other, rec( torso:= [ a8degrees[i] ] ) );
997>      filt:= Filtered( perms, x -> x^tbl = above[ nonzero[i] ] );
998>      filt:= List( filt, x -> CompositionMaps( x, invtoa8 ) );
999>      cand:= Filtered( cand,
1000>               x -> ForAny( filt, y -> Collected( x ) = Collected(y) ) );
1001>      Add( constit, List( Induced( Restricted( Induced(
1002>        Restricted( cand, k ), co1 ), g ), m ), ValuesOfClassFunction ) );
1003>    od;
1004gap> List( constit, Length );
1005[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 ]
1006gap> downdegrees:= List( index2{ Filtered( nonzero,
1007>                                    x -> x > Length( above ) )
1008>                                - Length( above ) },
1009>                        x -> x[1] ) / 31;
1010[ 30, 210, 210, 1920 ]
1011gap> f:= g / ClassPositionsOfCentre( g );;
1012gap> forders:= OrdersClassRepresentatives( f );;
1013gap> inv:= InverseMap( GetFusionMap( g, f ) );;
1014gap> for j in [ 1 .. Length( downdegrees ) ] do
1015>      chars:= [];
1016>      cand:= PermChars( a8tbl_other, rec( torso:= [ downdegrees[j]/2 ] ) );
1017>      filt:= Filtered( perms, x -> x^tbl = index2[ nonzero[
1018>                   j + Length( a8degrees ) ] - Length( above ) ] );
1019>      filt:= Induced( subtbl, a8tbl, filt,
1020>                      GetFusionMap( subtbl, a8tbl ));
1021>      cand:= Filtered( cand, x -> ForAny( filt,
1022>                 y -> Collected( x ) = Collected( y ) ) );
1023>      cand:= Restricted( Induced( Restricted( cand, k ), co1 ), g );
1024>      for chi in cand do
1025>        cchi:= CompositionMaps( chi, inv );
1026>        upper:= [];
1027>        pphi:= [];
1028>        for i in [ 1 .. NrConjugacyClasses( f ) ] do
1029>          if forders[i] mod 2 = 1 then
1030>            pphi[i]:= 2 * cchi[i];
1031>          elif cchi[i] = 0 then
1032>            pphi[i]:= 0;
1033>          else
1034>            upper[i]:= 2* cchi[i];
1035>          fi;
1036>        od;
1037>        Append( chars, PermChars( f, rec( torso:= ShallowCopy( pphi ),
1038>            upper:= upper,
1039>            normalsubgroup:= [ 1 .. 4 ],
1040>            nonfaithful:= cchi ) ) );
1041>      od;
1042>      Add( constit, List( Induced( Restricted( chars, g ), m ),
1043>                          ValuesOfClassFunction ) );
1044>    od;
1045gap> List( constit, Length );
1046[ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 10, 10, 2 ]
1047gap> cand:= List( Cartesian( constit ), l -> sol * l );;
1048gap> m:= CharacterTable( "M" );
1049CharacterTable( "M" )
1050gap> morders:= OrdersClassRepresentatives( m );;
1051gap> for x in cand do
1052>      for i in [ 1 .. Length( morders ) ] do
1053>        if morders[i] mod 31 = 0 or morders[i] mod 21 = 0 then
1054>          Unbind( x[i] );
1055>        fi;
1056>      od;
1057>    od;
1058gap> cand:= Filtered( cand, x -> ForAll( x, IsInt ) );
1059[ [ 391965121389536908413379198941796875, 23914487292951376996875,
1060      474163138042468875, 9500455925885925, 646346515815, 334363486275,
1061      954161764875, 147339103275, 1481392395, 1313281515, 0, 8203125,
1062      9827885925, 1216215, 91556325, 9388791, 115911, 587331, 874650, 0,
1063      79515, 581955, 336375, 104371, 62331, 36855, 0, 0, 0, 0, 28125, 525,
1064      1125, 0, 188325, 16767, 88965, 2403, 9477, 1155, 891, 207, 351, 627, 0,
1065      0, 4410, 1498, 0, 0, 0, 30, 150, 91, 151, 31, 0, 0, 0, 0, 0, 0, 0, 0,
1066      0, 125, 0, 5, 5,,,,, 0, 0, 0, 0, 141, 45, 27, 61, 27, 9, 9, 7, 3, 15,
1067      0, 0, 0, 0, 0, 98, 74, 42, 0, 0, 30, 0, 0, 0, 6, 6, 6,,, 1, 1, 0, 0, 0,
1068      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,,,,, 0, 0, 0, 0, 0, 0,
1069      0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2,,, 0,
1070      0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,,,, 0, 0, 0, 0, 0, 0,,, 0, 0, 0, 0, 0,
1071      0,, 0, 0, 0 ] ]
1072gap> cand:= PermChars( m, rec( torso:= cand[1] ) );
1073[ Character( CharacterTable( "M" ), [ 391965121389536908413379198941796875,
1074      23914487292951376996875, 474163138042468875, 9500455925885925,
1075      646346515815, 334363486275, 954161764875, 147339103275, 1481392395,
1076      1313281515, 0, 8203125, 9827885925, 1216215, 91556325, 9388791, 115911,
1077      587331, 874650, 0, 79515, 581955, 336375, 104371, 62331, 36855, 0, 0,
1078      0, 0, 28125, 525, 1125, 0, 188325, 16767, 88965, 2403, 9477, 1155, 891,
1079      207, 351, 627, 0, 0, 4410, 1498, 0, 0, 0, 30, 150, 91, 151, 31, 0, 0,
1080      0, 0, 0, 0, 0, 0, 0, 125, 0, 5, 5, 210, 0, 42, 0, 0, 0, 0, 0, 141, 45,
1081      27, 61, 27, 9, 9, 7, 3, 15, 0, 0, 0, 0, 0, 98, 74, 42, 0, 0, 30, 0, 0,
1082      0, 6, 6, 6, 3, 3, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1083      1, 1, 0, 18, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,
1084      2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 2, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1085      0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 3, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] )
1086 ]
1087gap> Hbar:= CharacterTable( "O10+(2)" );;
1088gap> U_Abar:= CharacterTable( "O10+(2)M1" );
1089CharacterTable( "S8(2)" )
1090gap> Index( Hbar, U_Abar );
1091496
1092gap> U_Bbar:= CharacterTable( "O10+(2)M2" );
1093CharacterTable( "2^8:O8+(2)" )
1094gap> Index( Hbar, U_Bbar );
1095527
1096gap> b:= CharacterTable( "B" );
1097CharacterTable( "B" )
1098gap> Horder:= 2^26 * Size( Hbar );
10991577011055923770163200
1100gap> order:= Horder / ( 2 * 496 );
11011589728887019929600
1102gap> maxes:= List( Maxes( b ), CharacterTable );;
1103gap> filt:= Filtered( maxes, t -> Size( t ) mod order = 0 );
1104[ CharacterTable( "2^(9+16).S8(2)" ) ]
1105gap> List( filt, t -> Size( t ) / order );
1106[ 1 ]
1107gap> u1:= filt[1];
1108CharacterTable( "2^(9+16).S8(2)" )
1109gap> co1:= CharacterTable( "Co1" );;
1110gap> order:= Horder / ( 2^25 * 527 );
111189181388800
1112gap> maxes:= List( Maxes( co1 ), CharacterTable );;
1113gap> filt:= Filtered( maxes, t -> Size( t ) mod order = 0 );
1114[ CharacterTable( "2^(1+8)+.O8+(2)" ) ]
1115gap> List( filt, t -> Size( t ) / order );
1116[ 1 ]
1117gap> u2:= filt[1];
1118CharacterTable( "2^(1+8)+.O8+(2)" )
1119gap> m:= CharacterTable( "M" );
1120CharacterTable( "M" )
1121gap> 2b:= CharacterTable( "MC2A" );
1122CharacterTable( "2.B" )
1123gap> mm:= CharacterTable( "MC2B" );
1124CharacterTable( "2^1+24.Co1" )
1125gap> pi_A:= RestrictedClassFunction( TrivialCharacter( u1 )^b, 2b )^m;;
1126gap> pi_B:= RestrictedClassFunction( TrivialCharacter( u2 )^co1, mm )^m;;
1127gap> torso:= [ Size( m ) / Horder ];
1128[ 512372707698741056749515292734375 ]
1129gap> morders:= OrdersClassRepresentatives( m );;
1130gap> 2parts:= Union( [ 1 ], Filtered( Set( morders ),
1131>                          x -> IsPrimePowerInt( x ) and IsEvenInt( x ) ) );
1132[ 1, 2, 4, 8, 16, 32 ]
1133gap> factorders:= Set( OrdersClassRepresentatives( Hbar ) );;
1134gap> primes_A:= Filtered( Set( Factors( Horder ) ), p -> 496 mod p <> 0 );
1135[ 3, 5, 7, 17 ]
1136gap> primes_B:= Filtered( Set( Factors( Horder ) ), p -> 527 mod p <> 0 );
1137[ 2, 3, 5, 7 ]
1138gap> primes:= Union( primes_A, primes_B );;
1139gap> n:= NrConjugacyClasses( m );;
1140gap> for i in [ 1 .. n ] do
1141>   if Horder mod morders[i] <> 0 then
1142>     torso[i]:= 0;
1143>   elif ForAll( factorders, x -> not morders[i] / x in 2parts ) then
1144>     torso[i]:= 0;
1145>   else
1146>     for p in primes do
1147>       if morders[i] mod p = 0 then
1148>         pprime:= morders[i];
1149>         while pprime mod p = 0 do pprime:= pprime / p; od;
1150>         pos:= PowerMap( m, pprime )[i];
1151>         if p in primes_A and pi_A[ pos ] = 0 then
1152>           torso[i]:= 0;
1153>         elif p in primes_B and pi_B[ pos ] = 0 then
1154>           torso[i]:= 0;
1155>         fi;
1156>       fi;
1157>     od;
1158>   fi;
1159> od;
1160gap> torso;
1161[ 512372707698741056749515292734375,,,,, 0,,,,,,,,,,,, 0,, 0,,,,,,,,,,,,,, 0,,
1162  ,, 0,,,,,, 0, 0, 0,,, 0,,,, 0,,,,,,,,,, 0,,,,,,,, 0, 0, 0, 0, 0, 0, 0,,,,,
1163  0,,,,, 0, 0, 0, 0, 0, 0,,,, 0, 0,,,,, 0,,,,,,, 0, 0,, 0, 0,,,,, 0, 0, 0, 0,
1164  0,,,,, 0,, 0, 0, 0, 0, 0,, 0, 0, 0, 0, 0, 0,, 0,, 0, 0, 0, 0,, 0, 0, 0, 0,
1165  0,,,,,, 0,,, 0, 0,, 0, 0, 0, 0, 0, 0, 0, 0, 0,, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1166  0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]
1167gap> cand:= [ [ pi_A ], [ pi_B ] ];;
1168gap> candbar:= [ TrivialCharacter( U_Abar )^Hbar,
1169>                TrivialCharacter( U_Bbar )^Hbar ];;
1170gap> AddSubgroupOfS82:= function( subname )
1171>   local psis82;
1172>
1173>   psis82:= TrivialCharacter( CharacterTable( subname ) )^U_Abar;
1174>   Add( cand, [ Restricted( Restricted( psis82, u1 )^b, 2b )^m ] );
1175>   Add( candbar, psis82 ^ Hbar );
1176> end;;
1177gap> tt1:= CharacterTable( "O8+(2)" );
1178CharacterTable( "O8+(2)" )
1179gap> AddSubgroupOfO8p2:= function( subname )
1180>   local psi, list, char;
1181>
1182>   psi:= TrivialCharacter( CharacterTable( subname ) )^tt1;
1183>   list:= [];
1184>   for char in Orbit( AutomorphismsOfTable( tt1 ), psi, Permuted ) do
1185>     AddSet( list, Restricted( Restricted( char, u2 ) ^ co1, mm ) ^ m );
1186>   od;
1187>   Add( cand, list );
1188>   Add( candbar, Restricted( psi, U_Bbar ) ^ Hbar );
1189> end;;
1190gap> AddSubgroupOfS82( "O8+(2).2" );
1191gap> AddSubgroupOfO8p2( "S6(2)" );
1192gap> AddSubgroupOfS82( "O8-(2).2" );
1193gap> AddSubgroupOfS82( "A10.2" );
1194gap> AddSubgroupOfS82( "S4(4).2" );
1195gap> AddSubgroupOfS82( "L2(17)" );
1196gap> AddSubgroupOfO8p2( "A9" );
1197gap> AddSubgroupOfO8p2( "2^6:A8" );
1198gap> AddSubgroupOfO8p2( "(3xU4(2)):2" );
1199gap> AddSubgroupOfO8p2( "(A5xA5):2^2" );
1200gap> AddSubgroupOfS82( "S8(2)M4" );
1201gap> a5:= CharacterTable( "A5" );;
1202gap> fus:= PossibleClassFusions( a5, U_Abar )[1];;
1203gap> NrPolyhedralSubgroups( U_Abar, fus[2], fus[3], fus[4] );
1204rec( number := 548352, type := "A5" )
1205gap> psis82:= Induced( a5, U_Abar, [ TrivialCharacter( a5 ) ], fus )[1];;
1206gap> Add( cand, [ Restricted( Restricted( psis82, u1 )^b, 2b )^m ] );
1207gap> Add( candbar, psis82 ^ Hbar );
1208gap> List( cand, Length );
1209[ 1, 1, 1, 2, 1, 1, 1, 1, 2, 2, 2, 2, 1, 1 ]
1210gap> Hbarorders:= OrdersClassRepresentatives( Hbar );;
1211gap> TryCondition:= function( cond )
1212>   local pos, sol, lincomb, oldknown, i;
1213>
1214>   pos:= Filtered( [ 1 .. Length( Hbarorders ) ],
1215>             i -> cond( Hbarorders[i] ) );
1216>   sol:= SolutionMat( candbar{[1..Length(candbar)]}{ pos },
1217>             ListWithIdenticalEntries( Length( pos ), 1 ) );
1218>   if sol = fail then
1219>     return "no solution";
1220>   fi;
1221>
1222>   pos:= Filtered( [ 1 .. Length( morders) ], i -> cond( morders[i] ) );
1223>   lincomb:= Filtered( Set( List( Cartesian( cand ), x -> sol * x ) ),
1224>                 x -> ForAll( pos, i -> IsPosInt( x[i] ) or x[i] = 0 ) );
1225>   if Length( lincomb ) <> 1 then
1226>     return "solution is not unique";
1227>   fi;
1228>
1229>   lincomb:= lincomb[1];;
1230>   oldknown:= Number( torso );
1231>   for i in pos do
1232>     if IsBound( torso[i] ) then
1233>       if torso[i] <> lincomb[i] then
1234>         Error( "contradiction of new and known value at position ", i );
1235>       fi;
1236>     elif not IsInt( lincomb[i] ) or lincomb[i] < 0 then
1237>       Error( "new value at position ", i, " is not a nonneg. integer" );
1238>     fi;
1239>     torso[i]:= lincomb[i];
1240>   od;
1241>   return Concatenation( "now ", String( Number( torso ) ), " values (",
1242>              String( Number( torso ) - oldknown ), " new)" );
1243> end;;
1244gap> TryCondition( x -> x mod 7 = 0 and x mod 3 <> 0 );
1245"now 99 values (7 new)"
1246gap> TryCondition( x -> x mod 17 = 0 and x mod 3 <> 0 );
1247"now 102 values (3 new)"
1248gap> TryCondition( x -> x mod 5 = 0 and x mod 3 <> 0 );
1249"now 119 values (17 new)"
1250gap> TryCondition( x -> 4 mod x = 0 );
1251"now 125 values (6 new)"
1252gap> TryCondition( x -> 9 mod x = 0 );
1253"now 129 values (4 new)"
1254gap> TryCondition( x -> x in [ 9, 18, 36 ] );
1255"now 138 values (9 new)"
1256gap> constit:= Filtered( RationalizedMat( Irr( m ) ),
1257>               x -> ScalarProduct( m, x, pi_A ) <> 0
1258>                    and ScalarProduct( m, x, pi_B ) <> 0 );;
1259gap> lower:= [];;
1260gap> Hindex:= Size( m ) / Horder;
1261512372707698741056749515292734375
1262gap> for i in [ 1 .. NrConjugacyClasses( m ) ] do
1263>   lower[i]:= Maximum( pi_A[i] / ( pi_A[1] / Hindex ),
1264>                       pi_B[i] / ( pi_B[1] / Hindex ) );
1265> od;
1266gap> PermChars( m, rec( torso:= torso, chars:= constit, lower:= lower,
1267>    normalsubgroup:= [ 1 .. NrConjugacyClasses( m ) ],
1268>    nonfaithful:= TrivialCharacter( m ) ) );
1269[ Character( CharacterTable( "M" ), [ 512372707698741056749515292734375,
1270      405589064025344574375, 29628786742129575, 658201521662685,
1271      215448838605, 0, 121971774375, 28098354375, 335229607, 108472455,
1272      164587500, 4921875, 2487507165, 2567565, 26157789, 6593805, 398925, 0,
1273      437325, 0, 44983, 234399, 90675, 21391, 41111, 12915, 6561, 6561,
1274      177100, 7660, 6875, 315, 275, 0, 113373, 17901, 57213, 0, 4957, 1197,
1275      909, 301, 397, 0, 0, 0, 3885, 525, 0, 2835, 90, 45, 0, 103, 67, 43, 28,
1276      81, 189, 9, 9, 9, 0, 540, 300, 175, 20, 15, 7, 420, 0, 0, 0, 0, 0, 0,
1277      0, 165, 61, 37, 37, 0, 9, 9, 13, 5, 0, 0, 0, 0, 0, 0, 77, 45, 13, 0, 0,
1278      45, 115, 19, 10, 0, 5, 5, 9, 9, 1, 1, 0, 0, 4, 0, 0, 9, 9, 3, 1, 0, 0,
1279      0, 0, 0, 0, 4, 1, 1, 0, 24, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 1, 0,
1280      4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 3, 3, 1, 1, 2, 0, 3, 3, 0, 0, 0, 0, 0,
1281      0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1282      0, 0, 0, 0 ] ) ]
1283
1284gap> STOP_TEST( "ctblpope.tst", 6129230950 );
1285
1286#############################################################################
1287##
1288#E
1289
1290