CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In

Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.

| Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

Views: 418346
1
2
6 New GAP Objects and Utility Functions Provided by the AtlasRep Package
3
4
This chapter describes GAP objects and functions that are provided by the
5
AtlasRep package but that might be of general interest.
6
7
The new objects are straight line decisions (see Section 6.1) and black box
8
programs (see Section 6.2).
9
10
The new functions are concerned with representations of minimal degree, see
11
Section 6.3.
12
13
14
6.1 Straight Line Decisions
15
16
Straight line decisions are similar to straight line programs (see
17
Section 'Reference: Straight Line Programs') but return true or false. A
18
straight line decisions checks a property for its inputs. An important
19
example is to check whether a given list of group generators is in fact a
20
list of standard generators (cf. Section3.3) for this group.
21
22
A straight line decision in GAP is represented by an object in the filter
23
IsStraightLineDecision (6.1-1) that stores a list of lines each of which has
24
one of the following three forms.
25
26
1 a nonempty dense list l of integers,
27
28
2 a pair [ l, i ] where l is a list of form 1. and i is a positive
29
integer,
30
31
3 a list ["Order", i, n ] where i and n are positive integers.
32
33
The first two forms have the same meaning as for straight line programs (see
34
Section 'Reference: Straight Line Programs'), the last form means a check
35
whether the element stored at the label i-th has the order n.
36
37
For the meaning of the list of lines, see ResultOfStraightLineDecision
38
(6.1-6).
39
40
Straight line decisions can be constructed using StraightLineDecision
41
(6.1-5), defining attributes for straight line decisions are
42
NrInputsOfStraightLineDecision (6.1-3) and LinesOfStraightLineDecision
43
(6.1-2), an operation for straight line decisions is
44
ResultOfStraightLineDecision (6.1-6).
45
46
Special methods applicable to straight line decisions are installed for the
47
operations Display (Reference: Display), IsInternallyConsistent (Reference:
48
IsInternallyConsistent), PrintObj (Reference: PrintObj), and ViewObj
49
(Reference: ViewObj).
50
51
For a straight line decision prog, the default Display (Reference: Display)
52
method prints the interpretation of prog as a sequence of assignments of
53
associative words and of order checks; a record with components gensnames
54
(with value a list of strings) and listname (a string) may be entered as
55
second argument of Display (Reference: Display), in this case these names
56
are used, the default for gensnames is [ g1, g2, ... ], the default for
57
listname is r.
58
59
6.1-1 IsStraightLineDecision
60
61
IsStraightLineDecision( obj )  Category
62
63
Each straight line decision in GAP lies in the filter
64
IsStraightLineDecision.
65
66
6.1-2 LinesOfStraightLineDecision
67
68
LinesOfStraightLineDecision( prog )  operation
69
Returns: the list of lines that define the straight line decision.
70
71
This defining attribute for the straight line decision prog (see
72
IsStraightLineDecision (6.1-1)) corresponds to LinesOfStraightLineProgram
73
(Reference: LinesOfStraightLineProgram) for straight line programs.
74
75
 Example 
76
gap> dec:= StraightLineDecision( [ [ [ 1, 1, 2, 1 ], 3 ],
77
> [ "Order", 1, 2 ], [ "Order", 2, 3 ], [ "Order", 3, 5 ] ] );
78
<straight line decision>
79
gap> LinesOfStraightLineDecision( dec );
80
[ [ [ 1, 1, 2, 1 ], 3 ], [ "Order", 1, 2 ], [ "Order", 2, 3 ], 
81
 [ "Order", 3, 5 ] ]
82

83
84
6.1-3 NrInputsOfStraightLineDecision
85
86
NrInputsOfStraightLineDecision( prog )  operation
87
Returns: the number of inputs required for the straight line decision.
88
89
This defining attribute corresponds to NrInputsOfStraightLineProgram
90
(Reference: NrInputsOfStraightLineProgram).
91
92
 Example 
93
gap> NrInputsOfStraightLineDecision( dec );
94
2
95

96
97
6.1-4 ScanStraightLineDecision
98
99
ScanStraightLineDecision( string )  function
100
Returns: a record containing the straight line decision, or fail.
101
102
Let string be a string that encodes a straight line decision in the sense
103
that it consists of the lines listed for ScanStraightLineProgram (7.4-1),
104
except that oup lines are not allowed, and instead lines of the following
105
form may occur.
106
107
chor a b
108
means that it is checked whether the order of the element at label a
109
is b.
110
111
ScanStraightLineDecision returns a record containing as the value of its
112
component program the corresponding GAP straight line decision
113
(see IsStraightLineDecision (6.1-1)) if the input string satisfies the
114
syntax rules stated above, and returns fail otherwise. In the latter case,
115
information about the first corrupted line of the program is printed if the
116
info level of InfoCMeatAxe (7.1-2) is at least 1.
117
118
 Example 
119
gap> str:= "inp 2\nchor 1 2\nchor 2 3\nmu 1 2 3\nchor 3 5";;
120
gap> prg:= ScanStraightLineDecision( str );
121
rec( program := <straight line decision> )
122
gap> prg:= prg.program;;
123
gap> Display( prg );
124
# input:
125
r:= [ g1, g2 ];
126
# program:
127
if Order( r[1] ) <> 2 then return false; fi;
128
if Order( r[2] ) <> 3 then return false; fi;
129
r[3]:= r[1]*r[2];
130
if Order( r[3] ) <> 5 then return false; fi;
131
# return value:
132
true
133

134
135
6.1-5 StraightLineDecision
136
137
StraightLineDecision( lines[, nrgens] )  function
138
StraightLineDecisionNC( lines[, nrgens] )  function
139
Returns: the straight line decision given by the list of lines.
140
141
Let lines be a list of lists that defines a unique straight line decision
142
(see IsStraightLineDecision (6.1-1)); in this case StraightLineDecision
143
returns this program, otherwise an error is signalled. The optional argument
144
nrgens specifies the number of input generators of the program; if a list of
145
integers (a line of form 1. in the definition above) occurs in lines then
146
this number is not determined by lines and therefore must be specified by
147
the argument nrgens; if not then StraightLineDecision returns fail.
148
149
StraightLineDecisionNC does the same as StraightLineDecision, except that
150
the internal consistency of the program is not checked.
151
152
6.1-6 ResultOfStraightLineDecision
153
154
ResultOfStraightLineDecision( prog, gens[, orderfunc] )  operation
155
Returns: true if all checks succeed, otherwise false.
156
157
ResultOfStraightLineDecision evaluates the straight line decision
158
(see IsStraightLineDecision (6.1-1)) prog at the group elements in the list
159
gens.
160
161
The function for computing the order of a group element can be given as the
162
optional argument orderfunc. For example, this may be a function that gives
163
up at a certain limit if one has to be aware of extremely huge orders in
164
failure cases.
165
166
The result of a straight line decision with lines p_1, p_2, ..., p_k when
167
applied to gens is defined as follows.
168
169
(a)
170
First a list r of intermediate values is initialized with a shallow
171
copy of gens.
172
173
(b)
174
For i ≤ k, before the i-th step, let r be of length n. If p_i is the
175
external representation of an associative word in the first n
176
generators then the image of this word under the homomorphism that is
177
given by mapping r to these first n generators is added to r. If p_i
178
is a pair [ l, j ], for a list l, then the same element is computed,
179
but instead of being added to r, it replaces the j-th entry of r. If
180
p_i is a triple ["Order", i, n ] then it is checked whether the order
181
of r[i] is n; if not then false is returned immediately.
182
183
(c)
184
If all k lines have been processed and no order check has failed then
185
true is returned.
186
187
Here are some examples.
188
189
 Example 
190
gap> dec:= StraightLineDecision( [ ], 1 );
191
<straight line decision>
192
gap> ResultOfStraightLineDecision( dec, [ () ] );
193
true
194

195
196
The above straight line decision dec returns true –for any input of the
197
right length.
198
199
 Example 
200
gap> dec:= StraightLineDecision( [ [ [ 1, 1, 2, 1 ], 3 ],
201
>  [ "Order", 1, 2 ], [ "Order", 2, 3 ], [ "Order", 3, 5 ] ] );
202
<straight line decision>
203
gap> LinesOfStraightLineDecision( dec );
204
[ [ [ 1, 1, 2, 1 ], 3 ], [ "Order", 1, 2 ], [ "Order", 2, 3 ], 
205
 [ "Order", 3, 5 ] ]
206
gap> ResultOfStraightLineDecision( dec, [ (), () ] );
207
false
208
gap> ResultOfStraightLineDecision( dec, [ (1,2)(3,4), (1,4,5) ] );
209
true
210

211
212
The above straight line decision admits two inputs; it tests whether the
213
orders of the inputs are 2 and 3, and the order of their product is 5.
214
215
216
6.1-7 Semi-Presentations and Presentations
217
218
We can associate a finitely presented group F / R to each straight line
219
decision dec, say, as follows. The free generators of the free group F are
220
in bijection with the inputs, and the defining relators generating R as a
221
normal subgroup of F are given by those words w^k for which dec contains a
222
check whether the order of w equals k.
223
224
So if dec returns true for the input list [ g_1, g_2, ..., g_n ] then
225
mapping the free generators of F to the inputs defines an epimorphism Φ from
226
F to the group G, say, that is generated by these inputs, such that R is
227
contained in the kernel of Φ.
228
229
(Note that satisfying dec is a stronger property than satisfying a
230
presentation. For example, ⟨ x ∣ x^2 = x^3 = 1 ⟩ is a presentation for the
231
trivial group, but the straight line decision that checks whether the order
232
of x is both 2 and 3 clearly always returns false.)
233
234
The ATLAS of Group Representations contains the following two kinds of
235
straight line decisions.
236
237
 A presentation is a straight line decision dec that is defined for a
238
set of standard generators of a group G and that returns true if and
239
only if the list of inputs is in fact a sequence of such standard
240
generators for G. In other words, the relators derived from the order
241
checks in the way described above are defining relators for G, and
242
moreover these relators are words in terms of standard generators. (In
243
particular the kernel of the map Φ equals R whenever dec returns
244
true.)
245
246
 A semi-presentation is a straight line decision dec that is defined
247
for a set of standard generators of a group G and that returns true
248
for a list of inputs that is known to generate a group isomorphic with
249
G if and only if these inputs form in fact a sequence of standard
250
generators for G. In other words, the relators derived from the order
251
checks in the way described above are not necessarily defining
252
relators for G, but if we assume that the g_i generate G then they are
253
standard generators. (In particular, F / R may be a larger group than
254
G but in this case Φ maps the free generators of F to standard
255
generators of G.)
256
257
More about semi-presentations can be found in [NW05].
258
259
Available presentations and semi-presentations are listed by
260
DisplayAtlasInfo (3.5-1), they can be accessed via AtlasProgram (3.5-3).
261
(Clearly each presentation is also a semi-presentation. So a
262
semi-presentation for some standard generators of a group is regarded as
263
available whenever a presentation for these standard generators and this
264
group is available.)
265
266
Note that different groups can have the same semi-presentation. We
267
illustrate this with an example that is mentioned in [NW05]. The groups
268
L_2(7) ≅ L_3(2) and L_2(8) are generated by elements of the orders 2 and 3
269
such that their product has order 7, and no further conditions are necessary
270
to define standard generators.
271
272
 Example 
273
gap> check:= AtlasProgram( "L2(8)", "check" );
274
rec( groupname := "L2(8)", 
275
 identifier := [ "L2(8)", "L28G1-check1", 1, 1 ], 
276
 program := <straight line decision>, standardization := 1 )
277
gap> gens:= AtlasGenerators( "L2(8)", 1 );
278
rec( charactername := "1a+8a", 
279
 generators := [ (1,2)(3,4)(6,7)(8,9), (1,3,2)(4,5,6)(7,8,9) ], 
280
 groupname := "L2(8)", id := "", 
281
 identifier := [ "L2(8)", [ "L28G1-p9B0.m1", "L28G1-p9B0.m2" ], 1, 9 
282
 ], isPrimitive := true, maxnr := 1, p := 9, rankAction := 2, 
283
 repname := "L28G1-p9B0", repnr := 1, size := 504, 
284
 stabilizer := "2^3:7", standardization := 1, transitivity := 3, 
285
 type := "perm" )
286
gap> ResultOfStraightLineDecision( check.program, gens.generators );
287
true
288
gap> gens:= AtlasGenerators( "L3(2)", 1 );
289
rec( generators := [ (2,4)(3,5), (1,2,3)(5,6,7) ], 
290
 groupname := "L3(2)", id := "a", 
291
 identifier := [ "L3(2)", [ "L27G1-p7aB0.m1", "L27G1-p7aB0.m2" ], 1, 
292
 7 ], isPrimitive := true, maxnr := 1, p := 7, rankAction := 2, 
293
 repname := "L27G1-p7aB0", repnr := 1, size := 168, 
294
 stabilizer := "S4", standardization := 1, transitivity := 2, 
295
 type := "perm" )
296
gap> ResultOfStraightLineDecision( check.program, gens.generators );
297
true
298

299
300
6.1-8 AsStraightLineDecision
301
302
AsStraightLineDecision( bbox )  attribute
303
Returns: an equivalent straight line decision for the given black box
304
program, or fail.
305
306
For a black box program (see IsBBoxProgram (6.2-1)) bbox,
307
AsStraightLineDecision returns a straight line decision (see
308
IsStraightLineDecision (6.1-1)) with the same output as bbox, in the sense
309
of AsBBoxProgram (6.2-5), if such a straight line decision exists, and fail
310
otherwise.
311
312
 Example 
313
gap> lines:= [ [ "Order", 1, 2 ], [ "Order", 2, 3 ],
314
>  [ [ 1, 1, 2, 1 ], 3 ], [ "Order", 3, 5 ] ];;
315
gap> dec:= StraightLineDecision( lines, 2 );
316
<straight line decision>
317
gap> bboxdec:= AsBBoxProgram( dec );
318
<black box program>
319
gap> asdec:= AsStraightLineDecision( bboxdec );
320
<straight line decision>
321
gap> LinesOfStraightLineDecision( asdec );
322
[ [ "Order", 1, 2 ], [ "Order", 2, 3 ], [ [ 1, 1, 2, 1 ], 3 ], 
323
 [ "Order", 3, 5 ] ]
324

325
326
6.1-9 StraightLineProgramFromStraightLineDecision
327
328
StraightLineProgramFromStraightLineDecision( dec )  operation
329
Returns: the straight line program associated to the given straight line
330
decision.
331
332
For a straight line decision dec (see IsStraightLineDecision (6.1-1),
333
StraightLineProgramFromStraightLineDecision returns the straight line
334
program (see IsStraightLineProgram (Reference: IsStraightLineProgram)
335
obtained by replacing each line of type 3. (i.e, each order check) by an
336
assignment of the power in question to a new slot, and by declaring the list
337
of these elements as the return value.
338
339
This means that the return value describes exactly the defining relators of
340
the presentation that is associated to the straight line decision, see
341
6.1-7.
342
343
For example, one can use the return value for printing the relators with
344
StringOfResultOfStraightLineProgram (Reference:
345
StringOfResultOfStraightLineProgram), or for explicitly constructing the
346
relators as words in terms of free generators, by applying
347
ResultOfStraightLineProgram (Reference: ResultOfStraightLineProgram) to the
348
program and to these generators.
349
350
 Example 
351
gap> dec:= StraightLineDecision( [ [ [ 1, 1, 2, 1 ], 3 ],
352
> [ "Order", 1, 2 ], [ "Order", 2, 3 ], [ "Order", 3, 5 ] ] );
353
<straight line decision>
354
gap> prog:= StraightLineProgramFromStraightLineDecision( dec );
355
<straight line program>
356
gap> Display( prog );
357
# input:
358
r:= [ g1, g2 ];
359
# program:
360
r[3]:= r[1]*r[2];
361
r[4]:= r[1]^2;
362
r[5]:= r[2]^3;
363
r[6]:= r[3]^5;
364
# return values:
365
[ r[4], r[5], r[6] ]
366
gap> StringOfResultOfStraightLineProgram( prog, [ "a", "b" ] );
367
"[ a^2, b^3, (ab)^5 ]"
368
gap> gens:= GeneratorsOfGroup( FreeGroup( "a", "b" ) );
369
[ a, b ]
370
gap> ResultOfStraightLineProgram( prog, gens );
371
[ a^2, b^3, (a*b)^5 ]
372

373
374
375
6.2 Black Box Programs
376
377
Black box programs formalize the idea that one takes some group elements,
378
forms arithmetic expressions in terms of them, tests properties of these
379
expressions, executes conditional statements (including jumps inside the
380
program) depending on the results of these tests, and eventually returns
381
some result.
382
383
A specification of the language can be found in [Nic06], see also
384
385
http://brauer.maths.qmul.ac.uk/Atlas/info/blackbox.html.
386
387
The inputs of a black box program may be explicit group elements, and the
388
program may also ask for random elements from a given group. The program
389
steps form products, inverses, conjugates, commutators, etc. of known
390
elements, tests concern essentially the orders of elements, and the result
391
is a list of group elements or true or false or fail.
392
393
Examples that can be modeled by black box programs are
394
395
straight line programs,
396
which require a fixed number of input elements and form arithmetic
397
expressions of elements but do not use random elements, tests,
398
conditional statements and jumps; the return value is always a list of
399
elements; these programs are described in Section 'Reference: Straight
400
Line Programs'.
401
402
straight line decisions,
403
which differ from straight line programs only in the sense that also
404
order tests are admissible, and that the return value is true if all
405
these tests are satisfied, and false as soon as the first such test
406
fails; they are described in Section 6.1.
407
408
scripts for finding standard generators,
409
which take a group and a function to generate a random element in this
410
group but no explicit input elements, admit all control structures,
411
and return either a list of standard generators or fail; see
412
ResultOfBBoxProgram (6.2-4) for examples.
413
414
In the case of general black box programs, currently GAP provides only the
415
possibility to read an existing program via ScanBBoxProgram (6.2-2), and to
416
run the program using RunBBoxProgram (6.2-3). It is not our aim to write
417
such programs in GAP.
418
419
The special case of the find scripts mentioned above is also admissible as
420
an argument of ResultOfBBoxProgram (6.2-4), which returns either the set of
421
generators or fail.
422
423
Contrary to the general situation, more support is provided for straight
424
line programs and straight line decisions in GAP, see Section 'Reference:
425
Straight Line Programs' for functions that manipulate them (compose,
426
restrict etc.).
427
428
The functions AsStraightLineProgram (6.2-6) and AsStraightLineDecision
429
(6.1-8) can be used to transform a general black box program object into a
430
straight line program or a straight line decision if this is possible.
431
432
Conversely, one can create an equivalent general black box program from a
433
straight line program or from a straight line decision with AsBBoxProgram
434
(6.2-5).
435
436
(Computing a straight line program related to a given straight line decision
437
is supported in the sense of StraightLineProgramFromStraightLineDecision
438
(6.1-9).)
439
440
Note that none of these three kinds of objects is a special case of another:
441
Running a black box program with RunBBoxProgram (6.2-3) yields a record,
442
running a straight line program with ResultOfStraightLineProgram (Reference:
443
ResultOfStraightLineProgram) yields a list of elements, and running a
444
straight line decision with ResultOfStraightLineDecision (6.1-6) yields true
445
or false.
446
447
6.2-1 IsBBoxProgram
448
449
IsBBoxProgram( obj )  Category
450
451
Each black box program in GAP lies in the filter IsBBoxProgram.
452
453
6.2-2 ScanBBoxProgram
454
455
ScanBBoxProgram( string )  function
456
Returns: a record containing the black box program encoded by the input
457
string, or fail.
458
459
For a string string that describes a black box program, e.g., the return
460
value of StringFile (GAPDoc: StringFile), ScanBBoxProgram computes this
461
black box program. If this is successful then the return value is a record
462
containing as the value of its component program the corresponding GAP
463
object that represents the program, otherwise fail is returned.
464
465
As the first example, we construct a black box program that tries to find
466
standard generators for the alternating group A_5; these standard generators
467
are any pair of elements of the orders 2 and 3, respectively, such that
468
their product has order 5.
469
470
 Example 
471
gap> findstr:= "\
472
>  set V 0\n\
473
> lbl START1\n\
474
>  rand 1\n\
475
>  ord 1 A\n\
476
>  incr V\n\
477
>  if V gt 100 then timeout\n\
478
>  if A notin 1 2 3 5 then fail\n\
479
>  if A noteq 2 then jmp START1\n\
480
> lbl START2\n\
481
>  rand 2\n\
482
>  ord 2 B\n\
483
>  incr V\n\
484
>  if V gt 100 then timeout\n\
485
>  if B notin 1 2 3 5 then fail\n\
486
>  if B noteq 3 then jmp START2\n\
487
>  # The elements 1 and 2 have the orders 2 and 3, respectively.\n\
488
>  set X 0\n\
489
> lbl CONJ\n\
490
>  incr X\n\
491
>  if X gt 100 then timeout\n\
492
>  rand 3\n\
493
>  cjr 2 3\n\
494
>  mu 1 2 4 # ab\n\
495
>  ord 4 C\n\
496
>  if C notin 2 3 5 then fail\n\
497
>  if C noteq 5 then jmp CONJ\n\
498
>  oup 2 1 2";;
499
gap> find:= ScanBBoxProgram( findstr );
500
rec( program := <black box program> )
501

502
503
The second example is a black box program that checks whether its two inputs
504
are standard generators for A_5.
505
506
 Example 
507
gap> checkstr:= "\
508
> chor 1 2\n\
509
> chor 2 3\n\
510
> mu 1 2 3\n\
511
> chor 3 5";;
512
gap> check:= ScanBBoxProgram( checkstr );
513
rec( program := <black box program> )
514

515
516
6.2-3 RunBBoxProgram
517
518
RunBBoxProgram( prog, G, input, options )  function
519
Returns: a record describing the result and the statistics of running the
520
black box program prog, or fail, or the string "timeout".
521
522
For a black box program prog, a group G, a list input of group elements, and
523
a record options, RunBBoxProgram applies prog to input, where G is used only
524
to compute random elements.
525
526
The return value is fail if a syntax error or an explicit fail statement is
527
reached at runtime, and the string "timeout" if a timeout statement is
528
reached. (The latter might mean that the random choices were unlucky.)
529
Otherwise a record with the following components is returned.
530
531
gens
532
a list of group elements, bound if an oup statement was reached,
533
534
result
535
true if a true statement was reached, false if either a false
536
statement or a failed order check was reached,
537
538
The other components serve as statistical information about the numbers of
539
the various operations (multiply, invert, power, order, random, conjugate,
540
conjugateinplace, commutator), and the runtime in milliseconds (timetaken).
541
542
The following components of options are supported.
543
544
randomfunction
545
the function called with argument G in order to compute a random
546
element of G (default PseudoRandom (Reference: PseudoRandom))
547
548
orderfunction
549
the function for computing element orders (the default is Order
550
(Reference: Order)),
551
552
quiet
553
if true then ignore echo statements (default false),
554
555
verbose
556
if true then print information about the line that is currently
557
processed, and about order checks (default false),
558
559
allowbreaks
560
if true then call Error (Reference: Error) when a break statement is
561
reached, otherwise ignore break statements (default true).
562
563
As an example, we run the black box programs constructed in the example for
564
ScanBBoxProgram (6.2-2).
565
566
 Example 
567
gap> g:= AlternatingGroup( 5 );;
568
gap> res:= RunBBoxProgram( find.program, g, [], rec() );;
569
gap> IsBound( res.gens ); IsBound( res.result );
570
true
571
false
572
gap> List( res.gens, Order );
573
[ 2, 3 ]
574
gap> Order( Product( res.gens ) );
575
5
576
gap> res:= RunBBoxProgram( check.program, "dummy", res.gens, rec() );;
577
gap> IsBound( res.gens ); IsBound( res.result );
578
false
579
true
580
gap> res.result;
581
true
582
gap> othergens:= GeneratorsOfGroup( g );;
583
gap> res:= RunBBoxProgram( check.program, "dummy", othergens, rec() );;
584
gap> res.result;
585
false
586

587
588
6.2-4 ResultOfBBoxProgram
589
590
ResultOfBBoxProgram( prog, G )  function
591
Returns: a list of group elements or true, false, fail, or the string
592
"timeout".
593
594
This function calls RunBBoxProgram (6.2-3) with the black box program prog
595
and second argument either a group or a list of group elements; the default
596
options are assumed. The return value is fail if this call yields fail,
597
otherwise the gens component of the result, if bound, or the result
598
component if not.
599
600
As an example, we run the black box programs constructed in the example for
601
ScanBBoxProgram (6.2-2).
602
603
 Example 
604
gap> g:= AlternatingGroup( 5 );;
605
gap> res:= ResultOfBBoxProgram( find.program, g );;
606
gap> List( res, Order );
607
[ 2, 3 ]
608
gap> Order( Product( res ) );
609
5
610
gap> res:= ResultOfBBoxProgram( check.program, res );
611
true
612
gap> othergens:= GeneratorsOfGroup( g );;
613
gap> res:= ResultOfBBoxProgram( check.program, othergens );
614
false
615

616
617
6.2-5 AsBBoxProgram
618
619
AsBBoxProgram( slp )  attribute
620
Returns: an equivalent black box program for the given straight line
621
program or straight line decision.
622
623
Let slp be a straight line program (see IsStraightLineProgram (Reference:
624
IsStraightLineProgram)) or a straight line decision (see
625
IsStraightLineDecision (6.1-1)). Then AsBBoxProgram returns a black box
626
program bbox (see IsBBoxProgram (6.2-1)) with the same output as slp, in the
627
sense that ResultOfBBoxProgram (6.2-4) yields the same result for bbox as
628
ResultOfStraightLineProgram (Reference: ResultOfStraightLineProgram) or
629
ResultOfStraightLineDecision (6.1-6), respectively, for slp.
630
631
 Example 
632
gap> f:= FreeGroup( "x", "y" );; gens:= GeneratorsOfGroup( f );;
633
gap> slp:= StraightLineProgram( [ [1,2,2,3], [3,-1] ], 2 );
634
<straight line program>
635
gap> ResultOfStraightLineProgram( slp, gens );
636
y^-3*x^-2
637
gap> bboxslp:= AsBBoxProgram( slp );
638
<black box program>
639
gap> ResultOfBBoxProgram( bboxslp, gens );
640
[ y^-3*x^-2 ]
641
gap> lines:= [ [ "Order", 1, 2 ], [ "Order", 2, 3 ],
642
>  [ [ 1, 1, 2, 1 ], 3 ], [ "Order", 3, 5 ] ];;
643
gap> dec:= StraightLineDecision( lines, 2 );
644
<straight line decision>
645
gap> ResultOfStraightLineDecision( dec, [ (1,2)(3,4), (1,3,5) ] );
646
true
647
gap> ResultOfStraightLineDecision( dec, [ (1,2)(3,4), (1,3,4) ] );
648
false
649
gap> bboxdec:= AsBBoxProgram( dec );
650
<black box program>
651
gap> ResultOfBBoxProgram( bboxdec, [ (1,2)(3,4), (1,3,5) ] );
652
true
653
gap> ResultOfBBoxProgram( bboxdec, [ (1,2)(3,4), (1,3,4) ] );
654
false
655

656
657
6.2-6 AsStraightLineProgram
658
659
AsStraightLineProgram( bbox )  attribute
660
Returns: an equivalent straight line program for the given black box
661
program, or fail.
662
663
For a black box program (see AsBBoxProgram (6.2-5)) bbox,
664
AsStraightLineProgram returns a straight line program (see
665
IsStraightLineProgram (Reference: IsStraightLineProgram)) with the same
666
output as bbox if such a straight line program exists, and fail otherwise.
667
668
 Example 
669
gap> Display( AsStraightLineProgram( bboxslp ) );
670
# input:
671
r:= [ g1, g2 ];
672
# program:
673
r[3]:= r[1]^2;
674
r[4]:= r[2]^3;
675
r[5]:= r[3]*r[4];
676
r[3]:= r[5]^-1;
677
# return values:
678
[ r[3] ]
679
gap> AsStraightLineProgram( bboxdec );
680
fail
681

682
683
684
6.3 Representations of Minimal Degree
685
686
This section deals with minimal degrees of permutation and matrix
687
representations. We do not provide an algorithm that computes these degrees
688
for an arbitrary group, we only provide some tools for evaluating known
689
databases, mainly concerning bicyclic extensions (see [CCNPW85,
690
Section 6.5]) of simple groups, in order to derive the minimal degrees, see
691
Section 6.3-4.
692
693
In the AtlasRep package, this information can be used for prescribing
694
minimality conditions in DisplayAtlasInfo (3.5-1), OneAtlasGeneratingSetInfo
695
(3.5-5), and AllAtlasGeneratingSetInfos (3.5-6). An overview of the stored
696
minimal degrees can be shown with BrowseMinimalDegrees (3.6-1).
697
698
6.3-1 MinimalRepresentationInfo
699
700
MinimalRepresentationInfo( grpname, conditions )  function
701
Returns: a record with the components value and source, or fail
702
703
Let grpname be the GAP name of a group G, say. If the information described
704
by conditions about minimal representations of this group can be computed or
705
is stored then MinimalRepresentationInfo returns a record with the
706
components value and source, otherwise fail is returned.
707
708
The following values for conditions are supported.
709
710
 If conditions is NrMovedPoints (Reference: NrMovedPoints (for a
711
permutation)) then value, if known, is the degree of a minimal
712
faithful (not necessarily transitive) permutation representation for
713
G.
714
715
 If conditions consists of Characteristic (Reference: Characteristic)
716
and a prime integer p then value, if known, is the dimension of a
717
minimal faithful (not necessarily irreducible) matrix representation
718
in characteristic p for G.
719
720
 If conditions consists of Size (Reference: Size) and a prime power q
721
then value, if known, is the dimension of a minimal faithful (not
722
necessarily irreducible) matrix representation over the field of size
723
q for G.
724
725
In all cases, the value of the component source is a list of strings that
726
describe sources of the information, which can be the ordinary or modular
727
character table of G (see [CCNPW85], [JLPW95], [HL89]), the table of marks
728
of G, or [Jan05]. For an overview of minimal degrees of faithful matrix
729
representations for sporadic simple groups and their covering groups, see
730
also
731
732
http://www.math.rwth-aachen.de/~MOC/mindeg/.
733
734
Note that MinimalRepresentationInfo cannot provide any information about
735
minimal representations over prescribed fields in characteristic zero.
736
737
Information about groups that occur in the AtlasRep package is precomputed
738
in MinimalRepresentationInfoData (6.3-2), so the packages CTblLib and TomLib
739
are not needed when MinimalRepresentationInfo is called for these groups.
740
(The only case that is not covered by this list is that one asks for the
741
minimal degree of matrix representations over a prescribed field in
742
characteristic coprime to the group order.)
743
744
One of the following strings can be given as an additional last argument.
745
746
"cache"
747
means that the function tries to compute (and then store) values that
748
are not stored in MinimalRepresentationInfoData (6.3-2), but stored
749
values are preferred; this is also the default.
750
751
"lookup"
752
means that stored values are returned but the function does not
753
attempt to compute values that are not stored in
754
MinimalRepresentationInfoData (6.3-2).
755
756
"recompute"
757
means that the function always tries to compute the desired value, and
758
checks the result against stored values.
759
760
 Example 
761
gap> MinimalRepresentationInfo( "A5", NrMovedPoints );
762
rec( 
763
 source := [ "computed (alternating group)", 
764
 "computed (char. table)", "computed (subgroup tables)", 
765
 "computed (subgroup tables, known repres.)", 
766
 "computed (table of marks)" ], value := 5 )
767
gap> MinimalRepresentationInfo( "A5", Characteristic, 2 );
768
rec( source := [ "computed (char. table)" ], value := 2 )
769
gap> MinimalRepresentationInfo( "A5", Size, 2 );
770
rec( source := [ "computed (char. table)" ], value := 4 )
771

772
773
6.3-2 MinimalRepresentationInfoData
774
775
MinimalRepresentationInfoData global variable
776
777
This is a record whose components are GAP names of groups for which
778
information about minimal permutation and matrix representations were known
779
in advance or have been computed in the current GAP session. The value for
780
the group G, say, is a record with the following components.
781
782
NrMovedPoints
783
a record with the components value (the degree of a smallest faithful
784
permutation representation of G) and source (a string describing the
785
source of this information).
786
787
Characteristic
788
a record whose components are at most 0 and strings corresponding to
789
prime integers, each bound to a record with the components value (the
790
degree of a smallest faithful matrix representation of G in this
791
characteristic) and source (a string describing the source of this
792
information).
793
794
CharacteristicAndSize
795
a record whose components are strings corresponding to prime integers
796
p, each bound to a record with the components sizes (a list of powers
797
q of p), dimensions (the corresponding list of minimal dimensions of
798
faithful matrix representations of G over a field of size q), sources
799
(the corresponding list of strings describing the source of this
800
information), and complete (a record with the components val (true if
801
the minimal dimension over any finite field in characteristic p can be
802
derived from the values in the record, and false otherwise) and source
803
(a string describing the source of this information)).
804
805
The values are set by SetMinimalRepresentationInfo (6.3-3).
806
807
6.3-3 SetMinimalRepresentationInfo
808
809
SetMinimalRepresentationInfo( grpname, op, value, source )  function
810
Returns: true if the values were successfully set, false if stored values
811
contradict the given ones.
812
813
This function sets an entry in MinimalRepresentationInfoData (6.3-2) for the
814
group G, say, with GAP name grpname.
815
816
Supported values for op are
817
818
 "NrMovedPoints" (see NrMovedPoints (Reference: NrMovedPoints (for a
819
permutation))), which means that value is the degree of minimal
820
faithful (not necessarily transitive) permutation representations of
821
G,
822
823
 a list of length two with first entry "Characteristic" (see
824
Characteristic (Reference: Characteristic)) and second entry char
825
either zero or a prime integer, which means that value is the
826
dimension of minimal faithful (not necessarily irreducible) matrix
827
representations of G in characteristic char,
828
829
 a list of length two with first entry "Size" (see Size (Reference:
830
Size)) and second entry a prime power q, which means that value is the
831
dimension of minimal faithful (not necessarily irreducible) matrix
832
representations of G over the field with q elements, and
833
834
 a list of length three with first entry "Characteristic" (see
835
Characteristic (Reference: Characteristic)), second entry a prime
836
integer p, and third entry the string "complete", which means that the
837
information stored for characteristic p is complete in the sense that
838
for any given power q of p, the minimal faithful degree over the field
839
with q elements equals that for the largest stored field size of which
840
q is a power.
841
842
In each case, source is a string describing the source of the data; computed
843
values are detected from the prefix "comp" of source.
844
845
If the intended value is already stored and differs from value then an error
846
message is printed.
847
848
 Example 
849
gap> SetMinimalRepresentationInfo( "A5", "NrMovedPoints", 5,
850
>  "computed (alternating group)" );
851
true
852
gap> SetMinimalRepresentationInfo( "A5", [ "Characteristic", 0 ], 3,
853
>  "computed (char. table)" );
854
true
855
gap> SetMinimalRepresentationInfo( "A5", [ "Characteristic", 2 ], 2,
856
>  "computed (char. table)" );
857
true
858
gap> SetMinimalRepresentationInfo( "A5", [ "Size", 2 ], 4,
859
>  "computed (char. table)" );
860
true
861
gap> SetMinimalRepresentationInfo( "A5", [ "Size", 4 ], 2,
862
>  "computed (char. table)" );
863
true
864
gap> SetMinimalRepresentationInfo( "A5", [ "Characteristic", 3 ], 3,
865
>  "computed (char. table)" );
866
true
867

868
869
870
6.3-4 Criteria Used to Compute Minimality Information
871
872
The information about the minimal degree of a faithful matrix representation
873
of G in a given characteristic or over a given field in positive
874
characteristic is derived from the relevant (ordinary or modular) character
875
table of G, except in a few cases where this table itself is not known but
876
enough information about the degrees is available in [HL89] and [Jan05].
877
878
The following criteria are used for deriving the minimal degree of a
879
faithful permutation representation of G from the information in the GAP
880
libraries of character tables and of tables of marks.
881
882
 If the name of G has the form "An" or "An.2" (denoting alternating and
883
symmetric groups, respectively) then the minimal degree is n, except
884
if n is smaller than 3 or 2, respectively.
885
886
 If the name of G has the form "L2(q)" (denoting projective special
887
linear groups in dimension two) then the minimal degree is q + 1,
888
except if q ∈ { 2, 3, 5, 7, 9, 11 }, see [Hup67, Satz II.8.28].
889
890
 If the largest maximal subgroup of G is core-free then the index of
891
this subgroup is the minimal degree. (This is used when the two
892
character tables in question and the class fusion are available in
893
GAP's Character Table Library ([Bre13]); this happens for many
894
character tables of simple groups.)
895
896
 If G has a unique minimal normal subgroup then each minimal faithful
897
permutation representation is transitive.
898
899
In this case, the minimal degree can be computed directly from the
900
information in the table of marks of G if this is available in GAP's
901
Library of Tables of Marks ([NMP13]).
902
903
Suppose that the largest maximal subgroup of G is not core-free but
904
simple and normal in G, and that the other maximal subgroups of G are
905
core-free. In this case, we take the minimum of the indices of the
906
core-free maximal subgroups and of the product of index and minimal
907
degree of the normal maximal subgroup. (This suffices since no
908
core-free subgroup of the whole group can contain a nontrivial normal
909
subgroup of a normal maximal subgroup.)
910
911
Let N be the unique minimal normal subgroup of G, and assume that G/N
912
is simple and has minimal degree n, say. If there is a subgroup U of
913
index n ⋅ |N| in G that intersects N trivially then the minimal degree
914
of G is n ⋅ |N|. (This is used for the case that N is central in G and
915
N × U occurs as a subgroup of G.)
916
917
 If we know a subgroup of G whose minimal degree is n, say, and if we
918
know either (a class fusion from) a core-free subgroup of index n in G
919
or a faithful permutation representation of degree n for G then n is
920
the minimal degree for G. (This happens often for tables of almost
921
simple groups.)
922
923
924