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
%%
3
%W examples.tex ACE appendix - examples Alexander Hulpke
4
%W Joachim Neub"user
5
%W Greg Gamble
6
%%
7
%H $Id$
8
%%
9
%Y Copyright (C) 2000 Centre for Discrete Mathematics and Computing
10
%Y Department of Information Tech. & Electrical Eng.
11
%Y University of Queensland, Australia.
12
%%
13
14
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
15
\Chapter{Examples}
16
17
In this chapter we collect together a number of examples which
18
illustrate the various ways in which the {\ACE} Package may be used,
19
and give some interactions with the `ACEExample' function. In a number
20
of cases, we have set the `InfoLevel' of `InfoACE' to 3, so that all
21
output from {\ACE} is displayed, prepended by ```\#I '''. Recall that
22
to also see the commands directed *to* {\ACE} (behind a ```ToACE> '''
23
prompt), you will need to set the `InfoACE' level to 4. We have
24
omitted the line
25
26
\beginexample
27
gap> LoadPackage("ace");
28
true
29
30
\endexample
31
32
which is, of course, required at the beginning of any session
33
requiring {\ACE}.
34
35
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
36
\Section{Example where ACE is made the Standard Coset Enumerator}
37
38
If {\ACE} is made the standard coset enumerator, one simply uses the
39
method of passing arguments normally used with those commands that
40
invoke `CosetTableFromGensAndRels', but one is able to use all options
41
available via the {\ACE} interface. As an example we use {\ACE} to
42
compute the permutation representation of a perfect group from the
43
data library ({\GAP}'s perfect group library stores for each group a
44
presentation together with generators of a subgroup as words in the
45
group generators such that the permutation representation on the
46
cosets of this subgroup will be a (nice) faithful permutation
47
representation for the perfect group). The example we have chosen is
48
an extension of a group of order 16 by the simple alternating group
49
$A_5$.
50
51
\beginexample
52
gap> TCENUM:=ACETCENUM;; # Make ACE the standard coset enumerator
53
gap> G := PerfectGroup(IsPermGroup, 16*60, 1 # Arguments ... as per usual
54
> : max := 50, mess := 10 # ... but we use ACE options
55
> );
56
A5 2^4
57
gap> GeneratorsOfGroup(G); # Just to show we indeed have a perm'n rep'n
58
[ (2,4)(3,5)(7,15)(8,14)(10,13)(12,16), (2,6,7)(3,11,12)(4,14,5)(8,9,13)(10,
59
15,16), (1,2)(3,8)(4,9)(5,10)(6,7)(11,15)(12,14)(13,16),
60
(1,3)(2,8)(4,13)(5,6)(7,10)(9,16)(11,12)(14,15),
61
(1,4)(2,9)(3,13)(5,14)(6,15)(7,11)(8,16)(10,12),
62
(1,5)(2,10)(3,6)(4,14)(7,8)(9,12)(11,16)(13,15) ]
63
gap> Order(G);
64
960
65
66
\endexample
67
68
The call to `PerfectGroup' produced an output string that identifies
69
the group `G', but we didn't see how {\ACE} became involved here.
70
Let's redo that part of the above example after first setting the
71
`InfoLevel' of `InfoACE' to 3, so that we may get to glimpse what's
72
going on behind the scenes.
73
74
\beginexample
75
gap> SetInfoACELevel(3); # Just to see what's going on behind the scenes
76
gap> # Recall that we did: TCENUM:=ACETCENUM;;
77
gap> G := PerfectGroup(IsPermGroup, 16*60, 1 # Arguments ... as per usual
78
> : max := 50, mess := 10 # ... but we use ACE options
79
> );
80
#I ACE 3.001 Sun Sep 30 22:08:11 2001
81
#I =========================================
82
#I Host information:
83
#I name = rigel
84
#I ***
85
#I #--- ACE 3.001: Run Parameters ---
86
#I Group Name: G;
87
#I Group Generators: abstuv;
88
#I Group Relators: (a)^2, (s)^2, (t)^2, (u)^2, (v)^2, (b)^3, (st)^2, (uv)^2,
89
#I (su)^2, (sv)^2, (tu)^2, (tv)^2, asau, atav, auas, avat, Bvbu, Bsbvt,
90
#I Bubvu, Btbvuts, (ab)^5;
91
#I Subgroup Name: H;
92
#I Subgroup Generators: a, b;
93
#I Wo:1000000; Max:50; Mess:10; Ti:-1; Ho:-1; Loop:0;
94
#I As:0; Path:0; Row:1; Mend:0; No:21; Look:0; Com:10;
95
#I C:0; R:0; Fi:11; PMod:3; PSiz:256; DMod:4; DSiz:1000;
96
#I #---------------------------------
97
#I SG: a=1 r=1 h=1 n=2; l=1 c=+0.00; m=1 t=1
98
#I RD: a=11 r=1 h=1 n=12; l=2 c=+0.00; m=11 t=11
99
#I RD: a=21 r=2 h=1 n=22; l=2 c=+0.00; m=21 t=21
100
#I CC: a=29 r=4 h=1 n=31; l=2 c=+0.00; d=0
101
#I CC: a=19 r=4 h=1 n=31; l=2 c=+0.00; d=0
102
#I CC: a=19 r=6 h=1 n=36; l=2 c=+0.00; d=0
103
#I INDEX = 16 (a=16 r=36 h=1 n=36; l=3 c=0.00; m=30 t=35)
104
#I CO: a=16 r=17 h=1 n=17; c=+0.00
105
#I coset || b B a s t u v
106
#I -------+-------------------------------------------------
107
#I 1 || 1 1 1 2 3 4 5
108
#I 2 || 11 14 4 1 6 8 9
109
#I 3 || 13 15 5 6 1 10 11
110
#I 4 || 7 5 2 8 10 1 7
111
#I 5 || 4 7 3 9 11 7 1
112
#I 6 || 8 10 7 3 2 12 14
113
#I 7 || 5 4 6 15 16 5 4
114
#I 8 || 10 6 8 4 12 2 15
115
#I 9 || 16 12 10 5 14 15 2
116
#I 10 || 6 8 9 12 4 3 16
117
#I 11 || 14 2 11 14 5 16 3
118
#I 12 || 9 16 15 10 8 6 13
119
#I 13 || 15 3 13 16 15 14 12
120
#I 14 || 2 11 16 11 9 13 6
121
#I 15 || 3 13 12 7 13 9 8
122
#I 16 || 12 9 14 13 7 11 10
123
A5 2^4
124
125
\endexample
126
127
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
128
\Section{Example of Using ACECosetTableFromGensAndRels}
129
130
The following example calls {\ACE} for up to 800 coset numbers (`max
131
:= 800') using Mendelsohn style relator processing (`mendelsohn') and
132
sets progress messages to be printed every 500 iterations (`messages
133
:=500'); we do ```SetInfoACELevel(3);''' so that we may see these
134
messages. The value of `table', i.e.~the {\GAP} coset table,
135
immediately follows the last {\ACE} message (```\#I ''') line, but
136
both the coset table from {\ACE} and the {\GAP} coset table have been
137
abbreviated. A slightly modified version of this example, which
138
includes the `echo' option is available on-line via `table :=
139
ACEExample("perf602p5");'. You may wish to peruse the notes in the
140
`ACEExample' index first, however, by executing `ACEExample();'. (Note
141
that the final table output here is `lenlex' standardised (the case
142
since {\GAP} 4.3); with {\GAP} 4.2 the final table was `semilenlex'
143
standardised.)
144
145
\beginexample
146
gap> SetInfoACELevel(3); # So we can see the progress messages
147
gap> G := PerfectGroup(2^5*60, 2);;# See previous example:
148
gap> # "Example where ACE is made the
149
gap> # Standard Coset Enumerator"
150
gap> fgens := FreeGeneratorsOfFpGroup(G);;
151
gap> table := ACECosetTableFromGensAndRels(
152
> # arguments
153
> fgens, RelatorsOfFpGroup(G), fgens{[1]}
154
> # options
155
> : mendelsohn, max:=800, mess:=500);
156
#I ACE 3.001 Sun Sep 30 22:10:10 2001
157
#I =========================================
158
#I Host information:
159
#I name = rigel
160
#I ***
161
#I #--- ACE 3.001: Run Parameters ---
162
#I Group Name: G;
163
#I Group Generators: abstuvd;
164
#I Group Relators: (s)^2, (t)^2, (u)^2, (v)^2, (d)^2, aad, (b)^3, (st)^2,
165
#I (uv)^2, (su)^2, (sv)^2, (tu)^2, (tv)^2, Asau, Atav, Auas, Avat, Bvbu,
166
#I dAda, dBdb, (ds)^2, (dt)^2, (du)^2, (dv)^2, Bubvu, Bsbdvt, Btbvuts,
167
#I (ab)^5;
168
#I Subgroup Name: H;
169
#I Subgroup Generators: a;
170
#I Wo:1000000; Max:800; Mess:500; Ti:-1; Ho:-1; Loop:0;
171
#I As:0; Path:0; Row:1; Mend:1; No:28; Look:0; Com:10;
172
#I C:0; R:0; Fi:13; PMod:3; PSiz:256; DMod:4; DSiz:1000;
173
#I #---------------------------------
174
#I SG: a=1 r=1 h=1 n=2; l=1 c=+0.00; m=1 t=1
175
#I RD: a=321 r=68 h=1 n=412; l=5 c=+0.00; m=327 t=411
176
#I CC: a=435 r=162 h=1 n=719; l=9 c=+0.00; d=0
177
#I CL: a=428 r=227 h=1 n=801; l=13 c=+0.00; m=473 t=800
178
#I DD: a=428 r=227 h=1 n=801; l=14 c=+0.00; d=33
179
#I CO: a=428 r=192 h=243 n=429; l=15 c=+0.00; m=473 t=800
180
#I INDEX = 480 (a=480 r=210 h=484 n=484; l=18 c=0.00; m=480 t=855)
181
#I CO: a=480 r=210 h=481 n=481; c=+0.00
182
#I coset || a A b B s t u v d
183
#I -------+---------------------------------------------------------------
184
#I 1 || 1 1 7 6 2 3 4 5 1
185
#I 2 || 4 4 22 36 1 8 10 11 2
186
... 476 lines omitted here ...
187
#I 479 || 479 479 384 383 475 468 470 471 479
188
#I 480 || 480 480 421 420 470 469 475 476 480
189
[ [ 1, 8, 13, 6, 7, 4, 5, 2, 34, 35, 32, 33, 3, 48, 49, 46, 47, 57, 59, 28,
190
21, 25, 62, 64, 22, 26, 66, 20, 67, 69, 74, 11, 12, 9, 10, 89, 65, 87,
191
... 30 lines omitted here ...
192
477, 438, 478, 446, 475, 479, 471, 473, 476, 469 ],
193
[ 1, 8, 13, 6, 7, 4, 5, 2, 34, 35, 32, 33, 3, 48, 49, 46, 47, 57, 59, 28,
194
21, 25, 62, 64, 22, 26, 66, 20, 67, 69, 74, 11, 12, 9, 10, 89, 65, 87,
195
... 30 lines omitted here ...
196
477, 438, 478, 446, 475, 479, 471, 473, 476, 469 ],
197
... 363 lines omitted here ...
198
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
199
21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
200
... 30 lines omitted here ...
201
472, 473, 474, 475, 476, 477, 478, 479, 480 ] ]
202
203
\endexample
204
205
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
206
\Section{Example of Using ACE Interactively (Using ACEStart)}
207
208
Now we illustrate a simple interactive process, with an enumeration of
209
an index 12 subgroup (isomorphic to $C_5$) within $A_5$. Observe that
210
we have relied on the default level of messaging from {\ACE}
211
(`messages' = 0) which gives a result line (the ```\#I INDEX''' line
212
here) only, without parameter information. The result line is visible
213
in the `Info'-ed component of the output below because we set the
214
`InfoLevel' of `InfoACE' to a value of at least 2 (in fact we set it
215
to 3; doing ```SetInfoACELevel(2);''' would make *only* the result
216
line visible). We have however used the option `echo', so that we can
217
see how the interface handled the arguments and options. On-line try:
218
`SetInfoACELevel(3); ACEExample("A5-C5", ACEStart);' (this is nearly
219
equivalent to the sequence following, but the variables `F', `a', `b',
220
`G' are not accessible, being ``local'' to `ACEExample').
221
222
\beginexample
223
gap> SetInfoACELevel(3); # So we can see output from ACE binary
224
gap> F := FreeGroup("a","b");; a := F.1;; b := F.2;;
225
gap> G := F / [a^2, b^3, (a*b)^5 ];
226
<fp group on the generators [ a, b ]>
227
gap> ACEStart(FreeGeneratorsOfFpGroup(G), RelatorsOfFpGroup(G), [a*b]
228
> # Options
229
> : echo, # Echo handled by GAP (not ACE)
230
> enum := "A_5", # Give the group G a meaningful name
231
> subg := "C_5"); # Give the subgroup a meaningful name
232
ACEStart called with the following arguments:
233
Group generators : [ a, b ]
234
Group relators : [ a^2, b^3, a*b*a*b*a*b*a*b*a*b ]
235
Subgroup generators : [ a*b ]
236
#I ACE 3.001 Sun Sep 30 22:11:42 2001
237
#I =========================================
238
#I Host information:
239
#I name = rigel
240
ACEStart called with the following options:
241
echo := true (not passed to ACE)
242
enum := A_5
243
subg := C_5
244
#I ***
245
#I INDEX = 12 (a=12 r=16 h=1 n=16; l=3 c=0.00; m=14 t=15)
246
1
247
248
\endexample
249
250
The return value on the last line is an ``index'' that identifies the
251
interactive process; we use this ``index'' with functions that need to
252
interact with the interactive {\ACE} process; we now demonstrate this
253
with the interactive version of `ACEStats':
254
255
\beginexample
256
gap> ACEStats(1);
257
rec( index := 12, cputime := 0, cputimeUnits := "10^-2 seconds",
258
activecosets := 12, maxcosets := 14, totcosets := 15 )
259
gap> # Actually, we didn't need to pass an argument to ACEStats()
260
gap> # ... we could have relied on the default:
261
gap> ACEStats();
262
rec( index := 12, cputime := 0, cputimeUnits := "10^-2 seconds",
263
activecosets := 12, maxcosets := 14, totcosets := 15 )
264
265
\endexample
266
267
Similarly, we may use `ACECosetTable' with 0 or 1 arguments, which is
268
the interactive version of `ACECosetTableFromGensAndRels', and which
269
returns a standard table (since {\GAP} 4.3, a standard table is a
270
`lenlex' standard table; with {\GAP} 4.2, it was a `semilenlex'
271
standard table).
272
273
\beginexample
274
gap> ACECosetTable(); # Interactive version of ACECosetTableFromGensAndRels()
275
#I CO: a=12 r=13 h=1 n=13; c=+0.00
276
#I coset || b B a
277
#I -------+---------------------
278
#I 1 || 3 2 2
279
#I 2 || 1 3 1
280
#I 3 || 2 1 4
281
#I 4 || 8 5 3
282
#I 5 || 4 8 6
283
#I 6 || 9 7 5
284
#I 7 || 6 9 8
285
#I 8 || 5 4 7
286
#I 9 || 7 6 10
287
#I 10 || 12 11 9
288
#I 11 || 10 12 12
289
#I 12 || 11 10 11
290
[ [ 2, 1, 4, 3, 7, 8, 5, 6, 10, 9, 12, 11 ],
291
[ 2, 1, 4, 3, 7, 8, 5, 6, 10, 9, 12, 11 ],
292
[ 3, 1, 2, 5, 6, 4, 8, 9, 7, 11, 12, 10 ],
293
[ 2, 3, 1, 6, 4, 5, 9, 7, 8, 12, 10, 11 ] ]
294
gap> # To terminate the interactive process we do:
295
gap> ACEQuit(1); # Again, we could have omitted the 1
296
gap> # If we had more than one interactive process we could have
297
gap> # terminated them all in one go with:
298
gap> ACEQuitAll();
299
300
\endexample
301
302
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
303
\Section{Fun with ACEExample}
304
305
First let's see the `ACEExample' index (obtained with no argument,
306
with `"index"' as argument, or with a non-existent example as
307
argument):
308
309
\beginexample
310
gap> ACEExample();
311
#I ACEExample Index (Table of Contents)
312
#I ------------------------------------
313
#I This table of possible examples is displayed when calling ACEExample
314
#I with no arguments, or with the argument: "index" (meant in the sense
315
#I of `list'), or with a non-existent example name.
316
#I
317
#I The following ACE examples are available (in each case, for a subgroup
318
#I H of a group G, the cosets of H in G are enumerated):
319
#I
320
#I Example G H strategy
321
#I ------- - - --------
322
#I "A5" A_5 Id default
323
#I "A5-C5" A_5 C_5 default
324
#I "C5-fel0" C_5 Id felsch := 0
325
#I "F27-purec" F(2,7) = C_29 Id purec
326
#I "F27-fel0" F(2,7) = C_29 Id felsch := 0
327
#I "F27-fel1" F(2,7) = C_29 Id felsch := 1
328
#I "M12-hlt" M_12 (Matthieu group) Id hlt
329
#I "M12-fel1" M_12 (Matthieu group) Id felsch := 1
330
#I "SL219-hard" SL(2,19) ||G : H|| = 180 hard
331
#I "perf602p5" PerfectGroup(60*2^5,2) ||G : H|| = 480 default
332
#I * "2p17-fel1" ||G|| = 2^17 Id felsch := 1
333
#I "2p17-fel1a" ||G|| = 2^17 ||G : H|| = 1 felsch := 1
334
#I "2p17-2p3-fel1" ||G|| = 2^17 ||G : H|| = 2^3 felsch := 1
335
#I "2p17-2p14-fel1" ||G|| = 2^17 ||G : H|| = 2^14 felsch := 1
336
#I "2p17-id-fel1" ||G|| = 2^17 Id felsch := 1
337
#I * "2p18-fel1" ||G|| = 2^18 ||G : H|| = 2 felsch := 1
338
#I * "big-fel1" ||G|| = 2^18.3 ||G : H|| = 6 felsch := 1
339
#I * "big-hard" ||G|| = 2^18.3 ||G : H|| = 6 hard
340
#I
341
#I Notes
342
#I -----
343
#I 1. The example (first) argument of ACEExample() is a string; each
344
#I example above is in double quotes to remind you to include them.
345
#I 2. By default, ACEExample applies ACEStats to the chosen example. You
346
#I may alter the ACE function used, by calling ACEExample with a 2nd
347
#I argument; choose from: ACECosetTableFromGensAndRels (or, equival-
348
#I ently ACECosetTable), or ACEStart, e.g. `ACEExample("A5", ACEStart);'
349
#I 3. You may call ACEExample with additional ACE options (entered after a
350
#I colon in the usual way for options), e.g. `ACEExample("A5" : hlt);'
351
#I 4. Try the *-ed examples to explore how to modify options when an
352
#I enumeration fails (just follow the instructions you get within the
353
#I break-loop, or see Notes 2. and 3.).
354
#I 5. Try `SetInfoACELevel(3);' before calling ACEExample, to see the
355
#I effect of setting the "mess" (= "messages") option.
356
#I 6. To suppress a long output, use a double semicolon (`;;') after the
357
#I ACEExample command. (However, this does not suppress Info-ed output.)
358
#I 7. Also, try `SetInfoACELevel(2);' or `SetInfoACELevel(4);' before
359
#I calling ACEExample.
360
gap>
361
362
\endexample
363
364
Notice that the example we first met in Section~"Using ACE Directly to
365
Generate a Coset Table", the Fibonacci group F(2,7), is available via
366
examples `"F27-purec"', `"F27-fel0"', and `"F27-fel1"' (with 2nd
367
argument `ACECosetTableFromGensAndRels' to produce a coset table),
368
except that each of these enumerate the cosets of its trivial subgroup
369
(of index 29). Let's experiment with the first of these F(2,7)
370
examples; since this example uses the `messages' option, we ought to
371
set the `InfoLevel' of `InfoACE' to 3, first, but since the coset
372
table is quite long, we will be content for the moment with applying
373
the default function `ACEStats' to the example.
374
375
Before exhibiting the example we list a few observations that should
376
be made. Observe that the first group of `Info' lines list the
377
commands that are executed; these lines are followed by the result of
378
the `echo' option (see~"option echo"); which in turn are followed by
379
`Info' messages from {\ACE} courtesy of the non-zero value of the
380
`messages' option (and we see these because we first set the
381
`InfoLevel' of `InfoACE' to 3); and finally, we get the output
382
(record) of the `ACEStats' command.
383
384
Observe also that {\ACE} uses the same generators as are input; this
385
will always occur if you stick to single lowercase letters for your
386
generator names. Note, also that capitalisation is used by {\ACE} as a
387
short-hand for inverses, e.g.~`C = c^-1' (see `Group Relators' in the
388
{\ACE} ``Run Parameters'' block).
389
390
\beginexample
391
gap> SetInfoACELevel(3);
392
gap> ACEExample("F27-purec");
393
#I # ACEExample "F27-purec" : enumeration of cosets of H in G,
394
#I # where G = F(2,7) = C_29, H = Id, using purec strategy.
395
#I #
396
#I # F, G, a, b, c, d, e, x, y are local to ACEExample
397
#I # We define F(2,7) on 7 generators
398
#I F := FreeGroup("a","b","c","d","e", "x", "y");
399
#I a := F.1; b := F.2; c := F.3; d := F.4;
400
#I e := F.5; x := F.6; y := F.7;
401
#I G := F / [a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1,
402
#I e*x*y^-1, x*y*a^-1, y*a*b^-1];
403
#I ACEStats(
404
#I FreeGeneratorsOfFpGroup(G),
405
#I RelatorsOfFpGroup(G),
406
#I [] # Generators of identity subgroup (empty list)
407
#I # Options that don't affect the enumeration
408
#I : echo, enum := "F(2,7), aka C_29", subg := "Id",
409
#I # Other options
410
#I wo := "2M", mess := 25000, purec);
411
ACEStats called with the following arguments:
412
Group generators : [ a, b, c, d, e, x, y ]
413
Group relators : [ a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1, e*x*y^-1,
414
x*y*a^-1, y*a*b^-1 ]
415
Subgroup generators : [ ]
416
#I ACE 3.001 Sun Sep 30 22:16:08 2001
417
#I =========================================
418
#I Host information:
419
#I name = rigel
420
ACEStats called with the following options:
421
echo := true (not passed to ACE)
422
enum := F(2,7), aka C_29
423
subg := Id
424
wo := 2M
425
mess := 25000
426
purec (no value, passed to ACE via option: pure c)
427
#I ***
428
#I #--- ACE 3.001: Run Parameters ---
429
#I Group Name: F(2,7), aka C_29;
430
#I Group Generators: abcdexy;
431
#I Group Relators: abC, bcD, cdE, deX, exY, xyA, yaB;
432
#I Subgroup Name: Id;
433
#I Subgroup Generators: ;
434
#I Wo:2M; Max:142855; Mess:25000; Ti:-1; Ho:-1; Loop:0;
435
#I As:0; Path:0; Row:0; Mend:0; No:0; Look:0; Com:100;
436
#I C:1000; R:0; Fi:1; PMod:0; PSiz:256; DMod:4; DSiz:1000;
437
#I #---------------------------------
438
#I DD: a=5290 r=1 h=1050 n=5291; l=8 c=+0.00; d=2
439
#I CD: a=10410 r=1 h=2149 n=10411; l=13 c=+0.01; m=10410 t=10410
440
#I DD: a=15428 r=1 h=3267 n=15429; l=18 c=+0.01; d=0
441
#I DD: a=20430 r=1 h=4386 n=20431; l=23 c=+0.02; d=1
442
#I DD: a=25397 r=1 h=5519 n=25399; l=28 c=+0.01; d=1
443
#I CD: a=30313 r=1 h=6648 n=30316; l=33 c=+0.01; m=30313 t=30315
444
#I DS: a=32517 r=1 h=7326 n=33240; l=36 c=+0.01; s=2000 d=997 c=4
445
#I DS: a=31872 r=1 h=7326 n=33240; l=36 c=+0.00; s=4000 d=1948 c=53
446
#I DS: a=29077 r=1 h=7326 n=33240; l=36 c=+0.00; s=8000 d=3460 c=541
447
#I DS: a=23433 r=1 h=7326 n=33240; l=36 c=+0.01; s=16000 d=5940 c=2061
448
#I DS: a=4163 r=1 h=7326 n=33240; l=36 c=+0.03; s=32000 d=447 c=15554
449
#I INDEX = 29 (a=29 r=1 h=33240 n=33240; l=37 c=0.15; m=33237 t=33239)
450
rec( index := 29, cputime := 15, cputimeUnits := "10^-2 seconds",
451
activecosets := 29, maxcosets := 33237, totcosets := 33239 )
452
453
\endexample
454
455
Now let's see that we can add some new options, even ones that
456
over-ride the example's options; but first we'll reduce the output a
457
bit by setting the `InfoLevel' of `InfoACE' to 2 and since we are not
458
going to observe any progress messages from {\ACE} with that `InfoACE'
459
level we'll set `messages := 0'; also we'll use the function
460
`ACECosetTableFromGensAndRels' and so it's like our first encounter
461
with F(2,7) we'll add the subgroup generator `c' via `sg := ["c"]'
462
(see "option sg"). Observe that `"c"' is a string not a {\GAP} group
463
generator; to convert a list of {\GAP} words <sgens> in generators
464
<fgens>, suitable for an assignment of the `sg' option use the
465
construction: `ToACEWords(<fgens>, <sgens>)' (see~"ToACEWords"). Note
466
again that if only single lowercase letter strings are used to
467
identify the {\GAP} group generators, the same strings are used to
468
identify those generators in {\ACE}. (It's actually fortunate that we
469
could pass the value of `sg' as a string here, since the generators of
470
each `ACEExample' example are *local* variables and so are not
471
accessible, though we could call `ACEExample' with 2nd argument
472
`ACEStart' and use `ACEGroupGenerators' to get at them.) For good
473
measure, we also change the string identifying the subgroup (since it
474
will no longer be the trivial group), via the `subgroup' option (see
475
"option subgroup").
476
477
In considering the example following, observe that in the `Info' block
478
all the original example options are listed along with our new options
479
`sg := [ "c" ], messages := 0' after the tag ```\# User Options'''.
480
Following the `Info' block there is a block due to `echo'; in its
481
listing of the options first up there is `aceexampleoptions' alerting
482
us that we passed some `ACEExample' options; observe also that in this
483
block `subg := Id' and `mess := 25000' disappear (they are over-ridden
484
by `subgroup := "\< c >", messages := 0', but the quotes for the value
485
of `subgroup' are not visible); note that we don't have to use the
486
same abbreviations for options to over-ride them. Also observe that
487
our new options are *last*.
488
489
\beginexample
490
gap> SetInfoACELevel(2);
491
gap> ACEExample("F27-purec", ACECosetTableFromGensAndRels
492
> : sg := ["c"], subgroup := "< c >", messages := 0);
493
#I # ACEExample "F27-purec" : enumeration of cosets of H in G,
494
#I # where G = F(2,7) = C_29, H = Id, using purec strategy.
495
#I #
496
#I # F, G, a, b, c, d, e, x, y are local to ACEExample
497
#I # We define F(2,7) on 7 generators
498
#I F := FreeGroup("a","b","c","d","e", "x", "y");
499
#I a := F.1; b := F.2; c := F.3; d := F.4;
500
#I e := F.5; x := F.6; y := F.7;
501
#I G := F / [a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1,
502
#I e*x*y^-1, x*y*a^-1, y*a*b^-1];
503
#I ACECosetTableFromGensAndRels(
504
#I FreeGeneratorsOfFpGroup(G),
505
#I RelatorsOfFpGroup(G),
506
#I [] # Generators of identity subgroup (empty list)
507
#I # Options that don't affect the enumeration
508
#I : echo, enum := "F(2,7), aka C_29", subg := "Id",
509
#I # Other options
510
#I wo := "2M", mess := 25000, purec,
511
#I # User Options
512
#I sg := [ "c" ],
513
#I subgroup := "< c >",
514
#I messages := 0);
515
ACECosetTableFromGensAndRels called with the following arguments:
516
Group generators : [ a, b, c, d, e, x, y ]
517
Group relators : [ a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1, e*x*y^-1,
518
x*y*a^-1, y*a*b^-1 ]
519
Subgroup generators : [ ]
520
ACECosetTableFromGensAndRels called with the following options:
521
aceexampleoptions := true (inserted by ACEExample, not passed to ACE)
522
echo := true (not passed to ACE)
523
enum := F(2,7), aka C_29
524
wo := 2M
525
purec (no value, passed to ACE via option: pure c)
526
sg := [ "c" ] (brackets are not passed to ACE)
527
subgroup := < c >
528
messages := 0
529
#I INDEX = 1 (a=1 r=2 h=2 n=2; l=4 c=0.00; m=332 t=332)
530
[ [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ],
531
[ 1 ], [ 1 ], [ 1 ], [ 1 ] ]
532
533
\endexample
534
535
\atindex{break-loop}{@\noexpand`break'-loop}\indextt{OnBreak}
536
Now following on from our last example we shall demonstrate how one
537
can recover from a `break'-loop (see Section~"Using ACE Directly to
538
Generate a Coset Table"). To force the `break'-loop we pass `max := 2'
539
(see~"option max"), while using the {\ACE} interface function
540
`ACECosetTableFromGensAndRels' with `ACEExample'; in this way, {\ACE}
541
will not be able to complete the enumeration, and hence enters a
542
`break'-loop when it tries to provide a complete coset table. While
543
we're at it we'll pass the `hlt' (see~"option hlt") strategy option
544
(which will over-ride `purec'). (The `InfoACE' level is still 2.) To
545
avoid getting a trace-back during the `break'-loop (which can look a
546
little scary to the unitiated) we will set `OnBreak'
547
(see~"ref:OnBreak") as follows:
548
549
\beginexample
550
gap> NormalOnBreak := OnBreak;; # Save the old value to restore it later
551
gap> OnBreak := function() Where(0); end;;
552
553
\endexample
554
555
Note that there are some ``user-input'' comments inserted at the
556
`brk>' prompt.
557
558
\beginexample
559
gap> ACEExample("F27-purec", ACECosetTableFromGensAndRels
560
> : sg := ["c"], subgroup := "< c >", max := 2, hlt);
561
#I # ACEExample "F27-purec" : enumeration of cosets of H in G,
562
#I # where G = F(2,7) = C_29, H = Id, using purec strategy.
563
#I #
564
#I # F, G, a, b, c, d, e, x, y are local to ACEExample
565
#I # We define F(2,7) on 7 generators
566
#I F := FreeGroup("a","b","c","d","e", "x", "y");
567
#I a := F.1; b := F.2; c := F.3; d := F.4;
568
#I e := F.5; x := F.6; y := F.7;
569
#I G := F / [a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1,
570
#I e*x*y^-1, x*y*a^-1, y*a*b^-1];
571
#I ACECosetTableFromGensAndRels(
572
#I FreeGeneratorsOfFpGroup(G),
573
#I RelatorsOfFpGroup(G),
574
#I [] # Generators of identity subgroup (empty list)
575
#I # Options that don't affect the enumeration
576
#I : echo, enum := "F(2,7), aka C_29", subg := "Id",
577
#I # Other options
578
#I wo := "2M", mess := 25000, purec,
579
#I # User Options
580
#I sg := [ "c" ],
581
#I subgroup := "< c >",
582
#I max := 2,
583
#I hlt := true);
584
ACECosetTableFromGensAndRels called with the following arguments:
585
Group generators : [ a, b, c, d, e, x, y ]
586
Group relators : [ a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1, e*x*y^-1,
587
x*y*a^-1, y*a*b^-1 ]
588
Subgroup generators : [ ]
589
ACECosetTableFromGensAndRels called with the following options:
590
aceexampleoptions := true (inserted by ACEExample, not passed to ACE)
591
echo := true (not passed to ACE)
592
enum := F(2,7), aka C_29
593
wo := 2M
594
mess := 25000
595
purec (no value, passed to ACE via option: pure c)
596
sg := [ "c" ] (brackets are not passed to ACE)
597
subgroup := < c >
598
max := 2
599
hlt (no value)
600
#I OVERFLOW (a=2 r=1 h=1 n=3; l=4 c=0.00; m=2 t=2)
601
Error, no coset table ...
602
the `ACE' coset enumeration failed with the result:
603
OVERFLOW (a=2 r=1 h=1 n=3; l=4 c=0.00; m=2 t=2)
604
Entering break read-eval-print loop ...
605
try relaxing any restrictive options
606
e.g. try the `hard' strategy or increasing `workspace'
607
type: '?strategy options' for info on strategies
608
type: '?options for ACE' for info on options
609
type: 'DisplayACEOptions();' to see current ACE options;
610
type: 'SetACEOptions(:<option1> := <value1>, ...);'
611
to set <option1> to <value1> etc.
612
(i.e. pass options after the ':' in the usual way)
613
... and then, type: 'return;' to continue.
614
Otherwise, type: 'quit;' to quit to outer loop.
615
brk> # Let's give ACE enough coset numbers to work with ...
616
brk> # and while we're at it see the effect of 'echo := 2' :
617
brk> SetACEOptions(: max := 0, echo := 2);
618
brk> # Let's check what the options are now:
619
brk> DisplayACEOptions();
620
rec(
621
enum := "F(2,7), aka C_29",
622
wo := "2M",
623
mess := 25000,
624
purec := true,
625
sg := [ "c" ],
626
subgroup := "< c >",
627
hlt := true,
628
max := 0,
629
echo := 2 )
630
631
brk> # That's ok ... so now we 'return;' to escape the break-loop
632
brk> return;
633
ACECosetTableFromGensAndRels called with the following arguments:
634
Group generators : [ a, b, c, d, e, x, y ]
635
Group relators : [ a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1, e*x*y^-1,
636
x*y*a^-1, y*a*b^-1 ]
637
Subgroup generators : [ ]
638
ACECosetTableFromGensAndRels called with the following options:
639
enum := F(2,7), aka C_29
640
wo := 2M
641
mess := 25000
642
purec (no value, passed to ACE via option: pure c)
643
sg := [ "c" ] (brackets are not passed to ACE)
644
subgroup := < c >
645
hlt (no value)
646
max := 0
647
echo := 2 (not passed to ACE)
648
Other options set via ACE defaults:
649
asis := 0
650
compaction := 10
651
ct := 0
652
dmode := 0
653
dsize := 1000
654
fill := 1
655
hole := -1
656
lookahead := 1
657
loop := 0
658
mendelsohn := 0
659
no := 0
660
path := 0
661
pmode := 0
662
psize := 256
663
row := 1
664
rt := 1000
665
time := -1
666
#I INDEX = 1 (a=1 r=2 h=2 n=2; l=3 c=0.00; m=2049 t=3127)
667
[ [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ],
668
[ 1 ], [ 1 ], [ 1 ], [ 1 ] ]
669
670
\endexample
671
672
Observe that `purec' did *not* disappear from the option list;
673
nevertheless, it *is* over-ridden by the `hlt' option (at the {\ACE}
674
level). Observe the ```Other options set via ACE defaults''' list of
675
options that has resulted from having the `echo := 2' option
676
(see~"option echo"). Observe, also, that `hlt' is nowhere near as
677
good, here, as `purec' (refer to Section~"Using ACE Directly to
678
Generate a Coset Table"): whereas `purec' completed the same
679
enumeration with a total number of coset numbers of 332, the `hlt'
680
strategy required 3127.
681
682
Before we finish this section, let us say something about the examples
683
listed when one calls `ACEExample' with no arguments that have a `*'
684
beside them; these are examples for which the enumeration fails to
685
complete. The first such example listed is `"2p17-fel1"', where a
686
group of order $2^{17}$ is enumerated over the identity subgroup with
687
the `felsch := 1' strategy. The enumeration fails after defining a
688
total number of 416664 coset numbers. (In fact, the enumeration can be
689
made to succeed by simply increasing `workspace' to `"4700k"', but in
690
doing so a total of 783255 coset numbers are defined.) With the
691
example `"2p17-fel1a"' the same group is again enumerated, again with
692
the `felsch := 1' strategy, but this time over the group itself and
693
after tweaking a few options, to see how well we can do. The other
694
`"2p17-<XXX>"' examples are again enumerations of the same group but
695
over smaller and smaller subgroups, until we once again enumerate over
696
the identity subgroup but far more efficiently this time (only needing
697
to define a total of 550659 coset numbers, which can be achieved with
698
`workspace' set to `"3300k"').
699
700
The other `*'-ed examples enumerate overgroups of the group of order
701
$2^{17}$ of the `"2p17-<XXX>"' examples. It's recommended that you try
702
these with second argument `ACECosetTableFromGensAndRels' so that you
703
enter a `break'-loop, where you can experiment with modifying the
704
options using `SetACEOptions'. The example `"2p18-fel1"' can be made
705
to succeed with `hard, mend, workspace := "10M"'; why don't you see if
706
you can do better! There are no hints for the other two `*'-ed
707
examples; they are exercises for you to try.
708
709
Let's now restore the original value of `OnBreak':
710
711
\beginexample
712
gap> OnBreak := NormalOnBreak;;
713
714
\endexample
715
716
Of course, running `ACEExample' with `ACEStart' as second argument
717
opens up far more flexibility. Try it! Have fun! Play with as many
718
options as you can.
719
720
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
721
\Section{Using ACEReadResearchExample}
722
723
\indextt{PGRelFind}
724
Without an argument, the function `ACEReadResearchExample' reads the
725
file `"pgrelfind.g"' in the `res-examples' directory which defines
726
{\GAP} functions such as `PGRelFind', that were used in \cite{CHHR01}
727
to show that the group $L_3(5)$ has deficiency 0.
728
%display{nonhtml}
729
%
730
%*Some background*
731
%enddisplay
732
733
The *deficiency* of a finite presentation $\{X \mid R\}$ of a finite
734
group $G$ is $|R| - |X|$, and the *deficiency* of the group $G$ is the
735
minimum of the deficiencies of all finite presentations of $G$.
736
737
%display{nonhtml}
738
%The following result (with a constructive proof) is Lemma 2.2 in
739
%\cite{CHHR01}.
740
%
741
%*Lemma*
742
%Let $G$ be a simple group with trivial Schur multiplier. Suppose $G$
743
%has a presentation of the form
744
%$$
745
%P = \{ a, b \mid a^2=1, b^p=1, w(a,b)=1\}
746
%$$
747
%with $p$ prime. Then $G$ has deficiency zero.
748
%
749
%Prior to the paper \cite{CHHR01} there remained just two simple groups
750
%with trivial Schur multiplier of order less than one million, namely
751
%$L_3(5)$ and $PSp_4(4)$, that had not been shown to have deficiency
752
%zero. Using `TranslatePresentation' and `PGRelFind' the question for
753
%$L_3(5)$ is now settled, but whether $PSp_4(4)$ has deficiency 0 is
754
%still open.
755
%
756
%We now sketch the method used in \cite{CHHR01} to show that a simple
757
%group $G$ with trivial Schur multiplier (in particular, $L_3(5)$) has
758
%deficiency 0. We start with a known two-generator presentation of the
759
%group $G$, on say $x$ and $y$. Then an invocation of
760
%`TranslatePresentation' (which uses Tietze transformations) translates
761
%the presentation into a presentation on two new generators $a$ and $b$
762
%say, having several relators but for which the first two relators are
763
%of form $a^2$ and $b^p$ for some prime $p$. Finally, `PGRelFind' is
764
%invoked to find a presentation on the generators $a$ and $b$ found by
765
%`TranslatePresentation' that contains $a^2$ and $b^p$ and just one
766
%more relator. If the search by `PGRelFind' is successful then the
767
%Lemma shows the group has deficiency zero.
768
%
769
%*Some details (what the file `pgrelfind.g' defines)*
770
%enddisplay
771
772
Let us now invoke `ACEReadResearchExample' with no arguments:
773
774
\beginexample
775
gap> ACEReadResearchExample();
776
#I The following are now defined:
777
#I
778
#I Functions:
779
#I PGRelFind, ClassesGenPairs, TranslatePresentation,
780
#I IsACEResExampleOK
781
#I Variables:
782
#I ACEResExample, ALLRELS, newrels, F, a, b, newF, x, y,
783
#I L2_8, L2_16, L3_3s, U3_3s, M11, M12, L2_32,
784
#I U3_4s, J1s, L3_5s, PSp4_4s, presentations
785
#I
786
#I Also:
787
#I
788
#I TCENUM = ACETCENUM (Todd-Coxeter Enumerator is now ACE)
789
#I
790
#I For an example of their application, you might like to try:
791
#I gap> ACEReadResearchExample("doL28.g" : optex := [1,2,4,5,8]);
792
#I (the output is 65 lines followed by a 'gap> ' prompt)
793
#I
794
#I For information type: ?Using ACEReadResearchExample
795
gap>
796
797
\endexample
798
799
%display{nontext}
800
The output (`Info'-ed at `InfoACELevel' 1) states that a number of new
801
functions are defined. During a {\GAP} session, you can find out
802
details of these functions by typing:
803
804
\begintt
805
gap> ?Using ACEReadResearchExample
806
\endtt
807
808
%enddisplay
809
%display{nonhtml}
810
%The output (`Info'-ed at `InfoACELevel' 1) states that a number of
811
%functions and variables have been defined, which we will now describe.
812
%
813
%\>PGRelFind( <fgens>, <rels>, <sgens> ) F
814
%
815
%For the perfect *simple* group $S = \langle <fgens> \mid <rels>
816
%\rangle$ with subgroup $\langle <sgens> \rangle$ where each element of
817
%the list <sgens> is a word in the generators <fgens>, `PGRelFind'
818
%tries to find a third relator such that together with the two
819
%order-defining relators of <fgens> a presentation on three relators is
820
%determined, and if successful returns a record with fields `fgens :=
821
%<fgens>', `rels' set to the new 3-relator list found, and `sgens :=
822
%<sgens>'. <fgens> should be a list of two generators of a free group,
823
%say `[<a>, <b>]'; <rels> should contain words in the generators
824
%<fgens>, the first of which should determine that <a> is an
825
%involution, and the second should determine that <b> is of order <p>
826
%for some prime <p>. The subgroup $\langle <sgens> \rangle$ should
827
%ideally be a maximal subgroup of $\langle <fgens> \mid <rels>
828
%\rangle$. It turns out that one only needs to test for relators that
829
%are the products of an odd number of bi-syllables of form $<a><b>^k$,
830
%for some integer $k$ in the range $1,\ldots,<p> - 1$. We will use the
831
%term *bi-syllabic length* to mean the number of bi-syllables of form
832
%$<a><b>^k$ in such a relator. Furthermore, each relator we test can be
833
%assumed to have the prefix (which we subsequently call the <head>)
834
%$<a><b><a><b><a><b>^{-1}$ if <p> is 3, or $<a><b>$ otherwise.
835
%
836
%Each relator tested is of form `<head> * <middle> * <tail>', where
837
%each of <head>, <middle>, <tail> is a word of integral bi-syllabic
838
%length. Moreover,
839
%
840
%\beginlist%unordered
841
%
842
%\item{--} <head> is fixed (as mentioned above);
843
%
844
%\item{--} all <tail>s of the opposite parity bi-syllabic length up to
845
%a maximum prescribed length are pre-computed (since <head> is
846
%generally of odd bi-syllabic length, <tail>s are generally of even
847
%bi-syllabic length); and
848
%
849
%\item{--} the bi-syllabic length of the <middle>s is always even,
850
%starting from an initial minimum <middle> length and increasing in
851
%steps of `<granularity> + 2', where <granularity> is defined to be the
852
%difference of the maximum and minimum bi-syllabic lengths of a <tail>
853
%(see below).
854
%
855
%\endlist
856
%
857
%Since the <tail>s in general are not all of the same length, it is
858
%possible when a search is successful that the first relator found is
859
%not the shortest. Hence searching continues until a relator of
860
%shortest length can be guaranteed.
861
%
862
%To provide some user control of the algorithm, `PGRelFind' has a
863
%number of options (entered after the arguments and after a colon in
864
%the usual way):
865
%
866
%\beginitems
867
%
868
%\quad`head := <head>' &
869
%Redefines <head> which by default is `<a>*<b>*<a>*<b>*<a>/<b>' if the
870
%order of <b> is 3, or `<a>*<b>' otherwise, where <a> and <b> are as
871
%defined above; <head> must be a word consisting of `<a>*<b>^<k>'
872
%bi-syllables for integers <k>.
873
%
874
%\quad`Nrandom := <nOrFunc>' &
875
%Sets the number of <middle>s to be generated for each length of a
876
%<middle>; <nOrFunc> may be a non-negative integer or a single-argument
877
%function that returns a positive integer.
878
%
879
%&
880
%Each <middle> may be generated sequentially or randomly. If `<nOrFunc>
881
%= 0' then <middle>s are generated sequentially (and hence
882
%exhaustively), as they are by default. If <nOrFunc> is a positive
883
%integer then, for each bi-syllabic length of a <middle>, <nOrFunc>
884
%``random'' <middle>s are generated. If <nOrFunc> is a single-argument
885
%function then for each bi-syllabic length <len> of a <middle>,
886
%`<nOrFunc>(<len>)' ``random'' <middle>s are generated.
887
%
888
%\quad`ACEworkspace := <workspace>' &
889
%Sets the option `workspace' used by {\ACE} to <workspace> when running
890
%the index check of the large subgroup. If the index is right, {\ACE}
891
%is set to use `2*<workspace>' to check the index of the cyclic
892
%subgroup $\langle <b> \rangle$. By default, <workspace> is set to
893
%`10^6', which is too small for many of the `do<XXX>.g' files (see
894
%below). Of course, groups for which {\ACE} overflows the workspace are
895
%indistinguishable from infinite groups, and one can't easily be sure
896
%whether a relator wasn't found because the workspace was too small or
897
%because there wasn't one to be found.
898
%
899
%\quad`Ntails := <Ntails>' &
900
%Sets the approximate number of <tail>s generated to <Ntails>; it is
901
%used to set `maxTailLength' (described next); <Ntails> must a positive
902
%integer. The default behaviour is given by `<Ntails> = 2048'.
903
%
904
%\quad`maxTailLength := <len>' &
905
%Sets the *intended* maximum bi-syllabic length of a <tail> to <len>;
906
%<len> must be a positive integer.
907
%
908
%&
909
%The default behaviour is given by `<len> = LogInt(<Ntails>, <orderb> -
910
%1)', where <orderb> is the order of <b>. The *actual* maximum
911
%bi-syllabic length of a <tail> may be set 1 less, in order that it has
912
%the same parity as the minimum bi-syllabic length of a <tail>.
913
%
914
%\quad`minMiddleLength := <len>' &
915
%Sets the minimum bi-syllabic length of a <middle> (which, by default
916
%is 0) to <len>; <len> should be a non-negative even integer.
917
%
918
%\quad`maxMiddleLength := <len>' &
919
%Sets the *intended* maximum bi-syllabic length of a <middle> to <len>;
920
%<len> should be a positive integer.
921
%
922
%&
923
%The default behaviour is given by `<len> = 30'. The *actual* maximum
924
%bi-syllabic length of a <middle> is adjusted downwards by the least
925
%amount necessary to ensure that the difference of the minimum and
926
%maximum bi-syllabic lengths of a <middle> is divisible by
927
%`<granularity> + 2'. (Recall that <granularity> is the difference of
928
%the maximum and minimum bi-syllabic lengths of a <tail>.)
929
%
930
%\enditems
931
%
932
%Please note that the relators tested are saved in the lists `ALLRELS'
933
%and `newrels' (see~"ALLRELS").
934
%
935
%\>ClassesGenPairs( <G>, <orderx>, <ordery> ) F
936
%
937
%finds, and returns as a list of 2-element lists, generator pairs of
938
%elements for the group <G> of orders <orderx> and <ordery>, where
939
%<orderx> and <ordery> are positive integers.
940
%
941
%\>TranslatePresentation( <fgens>, <rels>, <sgens>, <newgens> ) F
942
%
943
%finds a new presentation, in terms of the generators <newgens>, for
944
%the *simple* group $S = \langle <fgens> \mid <rels> \rangle$, with
945
%subgroup generated by <sgens>; <fgens> should be a *pair* of free
946
%group generators; <rels>, <sgens> and <newgens> should be lists of
947
%words in <fgens>. Furthermore, <newgens> should be a list of two
948
%words, the first of which should be of even order and the second of
949
%odd prime order in the group $S$. The idea is that, by using Tietze
950
%transformations, the variables `x' and `y' (see~"x") are assigned to
951
%the words of <newgens>, which make up the new <fgens>, and <rels> and
952
%<sgens> are written in terms of the new <fgens>,
953
%`TranslatePresentation' returns a record with fields `fgens', `rels'
954
%and `sgens' that are the new values of <fgens>, and <rels> and
955
%<sgens>, respectively.
956
%
957
%\>IsACEResExampleOK() F
958
%
959
%does a number of integrity checks and tries to give an accurate
960
%diagnosis if something is wrong, returning `true' if everything is
961
%``OK'' and `false' otherwise. It is called whenever
962
%`ACEReadResearchExample' is executed and is not intended for direct
963
%usage by users.
964
%
965
%\>`ACEResExample' V
966
%
967
%is initially set to a record with one field `filename' whenever
968
%`ACEReadResearchExample' is executed and the value set to that field
969
%is the name of the file read by `ACEReadResearchExample'; other fields
970
%are set as the need arises. Essentially, it is used as a temporary
971
%variable store when `ACEReadResearchExample' reads a `do<XXX>.g' file.
972
%
973
%\>`ALLRELS' V
974
%\>`newrels' V
975
%
976
%are initially set to null lists. Each time `PGRelFind' is executed
977
%these each ``third'' relator tested is appended to `ALLRELS' and each
978
%relator that is satisfied by the group defined by the <fgens> and
979
%<rels> arguments of `PGRelFind' (see~"PGRelFind") is appended to
980
%`newrels'. The user should normally reset these lists back to null
981
%lists between invocations of `PGRelFind'.
982
%
983
%\>`F' V
984
%\>`a' V
985
%\>`b' V
986
%
987
%are the free group `F' and its two generators `a' and `b', used in the
988
%presentations described below.
989
%
990
%\>`newF' V
991
%\>`x' V
992
%\>`y' V
993
%
994
%are the free group `newF' and its two generators `x' and `y'; the
995
%record field `fgens' returned by `TranslatePresentation' is the list
996
%`[x, y]' (see~"TranslatePresentation").
997
%
998
%\>`L2_8' V
999
%\>`L2_16' V
1000
%\>`L3_3s' V
1001
%\>`U3_3s' V
1002
%\>`M11' V
1003
%\>`M12' V
1004
%\>`L2_32' V
1005
%\>`U3_4s' V
1006
%\>`J1s' V
1007
%\>`L3_5s' V
1008
%\>`PSp4_4s' V
1009
%
1010
%contain presentations for the perfect simple groups $L_2(8)$,
1011
%$L_2(16)$, $L_3(3)$, $U_3(3)$, $M_{11}$, $M_{12}$, $L_2(32)$, $U_3(4)$,
1012
%$J_1$, $L_3(5)$ and $PSp_4(4)$, respectively. Those with names ending
1013
%in `s'contain lists of records (the `s' is meant to suggest ``plural''),
1014
%and those with no `s' are just single records, where each record has the
1015
%following fields:
1016
%
1017
%\beginitems
1018
%
1019
%\quad`source' &
1020
%a citation giving the source from which the presentation was obtained,
1021
%where `CCN85', `CMY79' and `CR84' indicate \cite{CCN85}, \cite{CMY79}
1022
%and \cite{CR84}, respectively, and `Bray' indicates the website
1023
%\URL{http://www.cix.co.uk/~vicarage/};
1024
%
1025
%\quad`rels' &
1026
%the relators of the group in terms of the generators `a' and `b'
1027
%defined above (see~"a"); and
1028
%
1029
%\quad`sgens' &
1030
%the generators of a large (usually maximal) subgroup of the group, in
1031
%terms of the generators `a' and `b'.
1032
%
1033
%\enditems
1034
%
1035
%\>`presentations' V
1036
%
1037
%is a record whose fields are the names of the presentation variables
1038
%of~"M11", and whose values are the variables,
1039
%e.g.~`presentations.L2_16' is the same object as `L2_16'.
1040
%
1041
%*The `do<XXX>.g' files*
1042
%
1043
%Each `do<XXX>.g' file (other than the generic `doGrp.g') had a name
1044
%that is formed by taking one of the fields of `presentations',
1045
%removing any underscore or `s', prepending `"do"' and appending
1046
%`".g"'; also, each requires that you run
1047
%
1048
%\beginexample
1049
%gap> ACEReadResearchExample();
1050
%\endexample
1051
%
1052
%first to define the functions described above. If you forget, never
1053
%mind~\dots~you will be reminded.
1054
%
1055
%Many of the outputs are fairly lengthy and you may wish to use `LogTo'
1056
%(see~"ref:LogTo") in order to peruse the output at leisure, later.
1057
%Also, for many of the larger groups one needs to be able to set
1058
%`ACEworkspace' larger than `10^6', but how large? The investigation
1059
%showing that $L_3(5)$ has deficiency 0 was run on an SGI Origin 2000
1060
%with 6.4 Gb of RAM and with `ACEworkspace' set to `10^8', to find a
1061
%``third'' relator of 23 bisyllables. It turns out however that one
1062
%need only set `ACEworkspace := 5 * 10^6' to find that
1063
%relator~\dots~one can be very knowledgeable in hindsight! In the list
1064
%below we give values for `ACEworkspace' that will succeed in finding
1065
%the shortest ``third'' relator that we found, when the method
1066
%succeeded. (Of course, `PGRelFind' runs a lot faster if the workspace
1067
%given to {\ACE} is kept small.)
1068
%
1069
%Recall `ACEReadResearchExample' expects a filename (i.e.~a string), or
1070
%no argument; here are the *filenames* of the `do<XXX>.g' provided:
1071
%
1072
%\beginitems
1073
%
1074
%\quad`"doGrp.g"' &
1075
%This allows the user to experiment with any of the groups that have
1076
%data in the `presentations' record. The user *must* supply a value for
1077
%the following option:
1078
%
1079
%\qquad`grp := <presField>' &
1080
%<presField> must be the name (i.e.~a string) of a field in the
1081
%`presentations' record (this selects the group to be investigated);
1082
%and, possibly one or both of the following options:
1083
%
1084
%\qquad`n := <n>' &
1085
%If <presField>, above, ends in `s' then the user *must* supply a
1086
%positive integer <n> for `n', which indicates that the <n>th record of
1087
%`presentations.(<presField>)' is desired.
1088
%
1089
%\qquad`newgens := <wordlist>' &
1090
%<wordlist> must be a list of two words in the generators `a' and `b'
1091
%which are to be the words used for the <newgens> argument of
1092
%`TranslatePresentation' (see~"TranslatePresentation" for the
1093
%conditions they must satisfy). If `newgens' is not supplied, it is
1094
%assumed that `TranslatePresentation' is not needed, i.e.~that the
1095
%generators `a' and `b' are already an involution and an element of odd
1096
%prime order, respectively, and that `PGRelFind' may be immediately
1097
%applied.
1098
%
1099
%&
1100
%The user may also supply `PGRelFind' options, though unlike `grp' and
1101
%`newgens', they will not be directly observable in the output.
1102
%An example using both sets of options is given below.
1103
%
1104
%\quad`"doL28.g"' &
1105
%This provides a nice small example. You may supply any `PGRelFind'
1106
%options you wish, and/or you may use the following option which has
1107
%been specifically designed to help you get acquainted with the
1108
%`PGRelFind' options (only the equivalent of the `optex' options will
1109
%be explicitly observable in the output).
1110
%
1111
%\qquad`optex := <val>' &
1112
%<val> may be an integer or a list of integers in the range
1113
%$1,\ldots,8$. The output of `ACEReadResearchExample();' suggests a
1114
%combination that is 65 lines long. Most of the possible choices for
1115
%`optex' give an output of the order of 100 to 200 lines, which isn't
1116
%too bad if you have say an `xterm' window with the capacity to scroll
1117
%back.
1118
%
1119
%\quad`"doL216.g"' &
1120
%As is the case with the remaining `do<XXX>.g' files, there are no
1121
%options other than those for `PGRelFind'. It is sufficient to set
1122
%`ACEworkspace := 2 * 10^4'.
1123
%
1124
%\quad`"doL33.g"' &
1125
%It is sufficient to set `ACEworkspace := 2 * 10^4'.
1126
%
1127
%\quad`"doU33.g"' &
1128
%Though $U_3(3)$ is known to have deficiency 0, the
1129
%`TranslatePresentation'-`PGRelFind' method does not appear to be able
1130
%to demonstrate it.
1131
%
1132
%\quad`"doM11.g"' &
1133
%`ACEworkspace' needs to be set to at least `6 * 10^6'.
1134
%
1135
%\quad`"doL232.g"' &
1136
%It is sufficient to set `ACEworkspace := 5 * 10^4'.
1137
%
1138
%\quad`"doU34.g"' &
1139
%It is sufficient to set `ACEworkspace := 5 * 10^4'.
1140
%
1141
%\quad`"doJ1.g"' &
1142
%`ACEworkspace' needs to be set to at least `5 * 10^6'.
1143
%
1144
%\quad`"doL35.g"' &
1145
%`ACEworkspace' needs to be set to at least `5 * 10^6'.
1146
%
1147
%\quad`"doPSp44.g"' &
1148
%We were unable to determine whether $PSp_4(4)$ has deficiency 0, via
1149
%the `TranslatePresentation'-`PGRelFind' method.
1150
%
1151
%\enditems
1152
%
1153
%The following example shows that you can use both the options peculiar
1154
%to the file `doGrp.g' and the options of `PGRelFind' when
1155
%`ACEReadResearchExample' is called with argument (filename)
1156
%`"doGrp.g"'.
1157
%
1158
%\beginexample
1159
%gap> ACEReadResearchExample("doGrp.g"
1160
%> : grp := "L2_8", newgens := [a^3*b, a^2*b],
1161
%> head := x*y*x*y*x*y^-1*x*y*x*y);
1162
%# IsACEResExampleOK() sets ACEResExample.grp from options grp, n
1163
%# ACEResExample.newgens from option newgens
1164
%gap> ACEResExample.G := TranslatePresentation([a, b],
1165
%> ACEResExample.grp.rels,
1166
%> ACEResExample.grp.sgens,
1167
%> ACEResExample.newgens);
1168
%#I there are 4 generators and 6 relators of total length 45
1169
%#I there are 2 generators and 4 relators of total length 55
1170
%rec(
1171
% fgens := [ x, y ],
1172
% rels := [ x^2, y^3, y^-1*x*y^-1*x*y^-1*x*y^-1*x*y^-1*x*y^-1*x*y^-1*x,
1173
% x*y^-1*x*y*x*y^-1*x*y*x*y^-1*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y*x*y^
1174
% -1*x*y*x*y^-1*x*y*x*y^-1*x*y*x*y ],
1175
% sgens := [ x*y^-1 ] )
1176
%gap> ACEResExample.Gn := PGRelFind(ACEResExample.G.fgens,
1177
%> ACEResExample.G.rels,
1178
%> ACEResExample.G.sgens);
1179
%GroupOrder=504 SubgroupIndex=72
1180
%#bisyllables in head = 5 head: x*y*x*y*x*y^-1*x*y*x*y
1181
%Max #bisyllables in tail = 10 (granularity = 10)
1182
%#bisyllables in middle = 0
1183
%Candidate relator: x*y*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y^-1*x*y*x*y*x*y*x*y^
1184
%-1*x*y^-1*x*y^-1*x*y*x*y^-1
1185
% #bisyllables = 15 (#bisyllables in tail = 10) #words tested: 1
1186
%ACEStats:
1187
% index=72 cputime=10 ms maxcosets=98 totcosets=121
1188
%Large subgroup index OK
1189
%ACEStats for cyclic subgroup:
1190
% index=168 cputime=10 ms maxcosets=170 totcosets=232
1191
%Cyclic subgroup index OK
1192
%Success! ... new relator:
1193
% x*y*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y^-1*x*y*x*y*x*y*x*y^-1*x*y^-1*x*y^
1194
%-1*x*y*x*y^-1
1195
%... continuing (there may be a shorter relator).
1196
%Candidate relator: x*y*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y*x*y^-1*x*y^-1*x*y^
1197
%-1*x*y*x*y*x*y*x*y^-1*x*y^-1
1198
% #bisyllables = 15 (#bisyllables in tail = 10) #words tested: 1
1199
%ACEStats:
1200
% index=72 cputime=10 ms maxcosets=102 totcosets=123
1201
%Large subgroup index OK
1202
%ACEStats for cyclic subgroup:
1203
% index=168 cputime=0 ms maxcosets=170 totcosets=236
1204
%Cyclic subgroup index OK
1205
%Success! ... new relator:
1206
% x*y*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y*x*y^-1*x*y^-1*x*y^-1*x*y*x*y*x*y*x*y^
1207
%-1*x*y^-1
1208
%... continuing (there may be a shorter relator).
1209
%Middles of length 0 exhausted.
1210
%Relator found of length 15, is shortest.
1211
%rec(
1212
% gens := [ x, y ],
1213
% rels :=
1214
% [ x^2, y^3, x*y*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y*x*y^-1*x*y^-1*x*y^-1*x*y*x*y*\
1215
%x*y*x*y^-1*x*y^-1 ],
1216
% sgens := [ x*y^-1 ] )
1217
%gap>
1218
%\endexample
1219
%
1220
%The following
1221
%
1222
%\beginexample
1223
%gap> ACEReadResearchExample("doGrp.g" : grp := "L3_3s", n := 1);
1224
%\endexample
1225
%
1226
%is essentially equivalent to
1227
%
1228
%\beginexample
1229
%gap> ACEReadResearchExample("doL33.g");
1230
%\endexample
1231
%
1232
%Observe that the option `n' is needed because `grp' selects a list of
1233
%records (as indicated by the trailing `s' of `"L3_3s"'). Also, observe
1234
%that the `newgens' option was not used since we already have a
1235
%presentation where the generators `a' and `b' are an involution and of
1236
%odd prime order, respectively.
1237
%enddisplay
1238
1239
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1240
%%
1241
%E
1242
1243