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 moreexamples.tex ACE appendix - more examples Joachim Neub"user
4
%W Greg Gamble
5
%%
6
%H $Id$
7
%%
8
%Y Copyright (C) 2000 Centre for Discrete Mathematics and Computing
9
%Y Department of Information Tech. & Electrical Eng.
10
%Y University of Queensland, Australia.
11
%%
12
13
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
14
\Chapter{Finer Points with Examples}
15
16
The examples in this chapter are intended to provide the nearest
17
{\GAP} equivalent of the similarly named sections in Appendix~A of
18
`ace3001.ps' (the standalone manual in directory `standalone-doc').
19
There is a *lot* of detail here, which the novice {\ACE} Package user
20
won't want to know about. Please, despite the name of the first
21
section of this chapter, read the examples in Appendix~"Examples"
22
first.
23
24
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
25
\Section{Getting Started}
26
27
Each of the functions `ACECosetTableFromGensAndRels'
28
(see~"ACECosetTableFromGensAndRels"), `ACEStats' (see~"ACEStats" ---
29
non-interactive version) and `ACEStart' (see~"ACEStart"), may be
30
called with three arguments: <fgens> (the group generators), <rels>
31
(the group relators), and <sgens> (the subgroup generators). While it
32
is legal for the arguments <rels> and <sgens> to be empty lists, it is
33
always an error for <fgens> to be empty, e.g.
34
35
\beginexample
36
gap> ACEStats([],[],[]);
37
Error, fgens (arg[1]) must be a non-empty list of group generators ...
38
called from
39
CALL_ACE( "ACEStats", arg[1], arg[2], arg[3] ) called from
40
<function>( <arguments> ) called from read-eval-loop
41
Entering break read-eval-print loop ...
42
type: 'quit;' to quit to outer loop, or
43
type: 'fgens := <val>; return;' to assign <val> to fgens to continue.
44
brk> fgens := FreeGeneratorsOfFpGroup(FreeGroup("a"));
45
[ a ]
46
brk> return;
47
rec( index := 0, cputime := 13, cputimeUnits := "10^-2 seconds",
48
activecosets := 499998, maxcosets := 499998, totcosets := 499998 )
49
50
\endexample
51
52
The example shows that the {\ACE} package does allow you to recover
53
from the `break'-loop. However, the definition of `fgens' above is
54
local to the `break'-loop, and in any case we shall want two
55
generators for the examples we wish to consider and raise some other
56
points; so let us re-define `fgens' and start again:
57
58
\beginexample
59
gap> F := FreeGroup("a", "b");; fgens := FreeGeneratorsOfFpGroup(F);;
60
61
\endexample
62
63
\atindex{ACEStats}{@\noexpand`ACEStats'!example}
64
*An `ACEStats' example*
65
66
By default, the presentation is not echoed; use the `echo'
67
(see~"option echo") option if you want that. Also, by default, the
68
{\ACE} binary only prints a *results message*, but we won't see that
69
unless we set `InfoACE' to a level of at least 2
70
(see~"SetInfoACELevel"):
71
72
\beginexample
73
gap> SetInfoACELevel(2);
74
75
\endexample
76
77
Calling `ACEStats' with arguments `fgens', `[]', `[]', defines a free
78
froup with 2 generators, since the second argument defines an empty
79
relator list; and since the third argument is an empty list of
80
generators, the subgroup defined is trivial. So the enumeration
81
overflows:
82
83
\beginexample
84
gap> ACEStats(fgens, [], []);
85
#I OVERFLOW (a=249998 r=83333 h=83333 n=249999; l=337 c=0.10; m=249998 t=2499\
86
98)
87
rec( index := 0, cputime := 10, cputimeUnits := "10^-2 seconds",
88
activecosets := 249998, maxcosets := 249998, totcosets := 249998 )
89
90
\endexample
91
92
The line starting with ```\#I '''. is the `Info'-ed *results
93
message* from {\ACE}; see Appendix~"The Meanings of ACE's Output
94
Messages" for details on what it means. Observe that since the
95
enumeration overflowed, {\ACE}'s result message has been translated
96
into a {\GAP} record with `index' field 0.
97
98
To dump out the presentation and parameters associated with an
99
enumeration, {\ACE} provides the `sr' (see~"option sr") option.
100
However, you won't see output of this command, unless you set the
101
`InfoACELevel' to at least 3. Also, to ensure the reliability of the
102
output of the `sr' option, an enumeration should *precede* it; for
103
`ACEStats' (and `ACECosetTableFromGensAndRels') the directive `start'
104
(see~"option start") required to initiate an enumeration is inserted
105
(automatically) after all the user's options, except if the user
106
herself supplies an option that initiates an enumeration (namely, one
107
of `start' or `begin' (see~"option start"), `aep' (see~"option aep")
108
or `rep' (see~"option rep")). Interactively, the equivalent of the
109
`sr' command is `ACEParameters' (see~"ACEParameters"), which gives an
110
output record that is immediately {\GAP}-usable. With the above in
111
mind let's rerun the enumeration and get {\ACE}'s dump of the
112
presentation and parameters:
113
114
\beginexample
115
gap> SetInfoACELevel(3);
116
gap> ACEStats(fgens, [], [] : start, sr := 1);
117
#I ACE 3.001 Wed Oct 31 09:36:39 2001
118
#I =========================================
119
#I Host information:
120
#I name = rigel
121
#I OVERFLOW (a=249998 r=83333 h=83333 n=249999; l=337 c=0.09; m=249998 t=2499\
122
98)
123
#I #--- ACE 3.001: Run Parameters ---
124
#I Group Name: G;
125
#I Group Generators: ab;
126
#I Group Relators: ;
127
#I Subgroup Name: H;
128
#I Subgroup Generators: ;
129
#I Wo:1000000; Max:249998; Mess:0; Ti:-1; Ho:-1; Loop:0;
130
#I As:0; Path:0; Row:1; Mend:0; No:0; Look:0; Com:10;
131
#I C:0; R:0; Fi:7; PMod:3; PSiz:256; DMod:4; DSiz:1000;
132
#I #---------------------------------
133
rec( index := 0, cputime := 9, cputimeUnits := "10^-2 seconds",
134
activecosets := 249998, maxcosets := 249998, totcosets := 249998 )
135
136
\endexample
137
138
Observe that at `InfoACE' level 3, one also gets {\ACE}'s banner. We
139
could have printed out the first few lines of the coset table if we
140
had wished, using the `print' (see~"option print") option, but note as
141
with the `sr' option, an enumeration should *precede* it. Here's what
142
happens if you disregard this (recall, we still have the `InfoACE'
143
level set to 3):
144
145
\beginexample
146
gap> ACEStats(fgens, [], [] : print := [-1, 12]);
147
#I ACE 3.001 Wed Oct 31 09:37:37 2001
148
#I =========================================
149
#I Host information:
150
#I name = rigel
151
#I ** ERROR (continuing with next line)
152
#I no information in table
153
#I ***
154
#I ***
155
#I OVERFLOW (a=249998 r=83333 h=83333 n=249999; l=337 c=0.09; m=249998 t=2499\
156
98)
157
rec( index := 0, cputime := 9, cputimeUnits := "10^-2 seconds",
158
activecosets := 249998, maxcosets := 249998, totcosets := 249998 )
159
160
\endexample
161
162
Essentially, because {\ACE} had not done an enumeration prior to
163
getting the `print' directive, it complained with an ```** ERROR''',
164
recovered and went on with the `start' directive automatically
165
inserted by the `ACEStats' command: no ill effects at the {\GAP}
166
level, but also no table.
167
168
Now, let's do what we should have done (to get those first few lines
169
of the coset table), namely, insert the `start' option before the
170
`print' option (the `InfoACE' level is still 3):
171
172
\beginexample
173
gap> ACEStats(fgens, [], [] : start, print := [-1, 12]);
174
#I ACE 3.001 Wed Oct 31 09:38:28 2001
175
#I =========================================
176
#I Host information:
177
#I name = rigel
178
#I OVERFLOW (a=249998 r=83333 h=83333 n=249999; l=337 c=0.10; m=249998 t=2499\
179
98)
180
#I co: a=249998 r=83333 h=83333 n=249999; c=+0.00
181
#I coset || a A b B order rep've
182
#I -------+---------------------------------------------
183
#I 1 || 2 3 4 5
184
#I 2 || 6 1 7 8 0 a
185
#I 3 || 1 9 10 11 0 A
186
#I 4 || 12 13 14 1 0 b
187
#I 5 || 15 16 1 17 0 B
188
#I 6 || 18 2 19 20 0 aa
189
#I 7 || 21 22 23 2 0 ab
190
#I 8 || 24 25 2 26 0 aB
191
#I 9 || 3 27 28 29 0 AA
192
#I 10 || 30 31 32 3 0 Ab
193
#I 11 || 33 34 3 35 0 AB
194
#I 12 || 36 4 37 38 0 ba
195
#I ***
196
rec( index := 0, cputime := 10, cputimeUnits := "10^-2 seconds",
197
activecosets := 249998, maxcosets := 249998, totcosets := 249998 )
198
199
\endexample
200
201
The values we gave to the `print' option, told {\ACE} to print the
202
first 12 lines and include coset representatives. Note that, since
203
there are no relators, the table has separate columns for generator
204
inverses. So the default workspace of $1000000$ words allows a table
205
of $249998 = 1000000/4 - 2$ cosets. Since row `fill'ing (see~"option
206
fill") is on by default, the table is simply filled with cosets in
207
order. Note that a compaction phase is done before printing the table,
208
but that this does nothing here (the lowercase `co:' tag), since there
209
are no dead cosets. The coset representatives are simply all possible
210
freely reduced words, in length plus lexicographic (i.e. `lenlex'; see
211
Section~"Coset Table Standardisation Schemes") order.
212
213
\atindex{ACECosetTableFromGensAndRels}%
214
{@\noexpand`ACECosetTableFromGensAndRels'!example}
215
*Using `ACECosetTableFromGensAndRels'*
216
217
The essential difference between the functions `ACEStats' and
218
`ACECosetTableFromGensAndRels' is that `ACEStats' parses the *results
219
message* from the {\ACE} binary and outputs a {\GAP} record containing
220
statistics of the enumeration, and `ACECosetTableFromGensAndRels'
221
after parsing the *results message*, goes on to parse {\ACE}'s coset
222
table, if it can, and outputs a {\GAP} list of lists version of that
223
table. So, if we had used `ACECosetTableFromGensAndRels' instead of
224
`ACEStats' in our examples above, we would have observed similar
225
output, except that we would have ended up in a `break'-loop (because
226
the enumeration overflows) instead of obtaining a record containing
227
enumeration statistics. We have already seen an example of that in
228
Section~"Using ACE Directly to Generate a Coset Table". So, here we
229
will consider two options that prevent one entering a `break'-loop,
230
namely the `silent' (see~"option silent") and `incomplete'
231
(see~"option incomplete") options. Firstly, let's take the last
232
`ACEStats' example, but use `ACECosetTableFromGensAndRels' instead and
233
include the `silent' option. (We still have the `InfoACE' level set at
234
3.)
235
236
\beginexample
237
gap> ACECosetTableFromGensAndRels(fgens, [], [] : start, print := [-1, 12],
238
> silent);
239
#I ACE 3.001 Wed Oct 31 09:40:18 2001
240
#I =========================================
241
#I Host information:
242
#I name = rigel
243
#I OVERFLOW (a=249998 r=83333 h=83333 n=249999; l=337 c=0.09; m=249998 t=2499\
244
98)
245
#I co: a=249998 r=83333 h=83333 n=249999; c=+0.00
246
#I coset || a A b B order rep've
247
#I -------+---------------------------------------------
248
#I 1 || 2 3 4 5
249
#I 2 || 6 1 7 8 0 a
250
#I 3 || 1 9 10 11 0 A
251
#I 4 || 12 13 14 1 0 b
252
#I 5 || 15 16 1 17 0 B
253
#I 6 || 18 2 19 20 0 aa
254
#I 7 || 21 22 23 2 0 ab
255
#I 8 || 24 25 2 26 0 aB
256
#I 9 || 3 27 28 29 0 AA
257
#I 10 || 30 31 32 3 0 Ab
258
#I 11 || 33 34 3 35 0 AB
259
#I 12 || 36 4 37 38 0 ba
260
#I ***
261
fail
262
263
\endexample
264
265
Since, the enumeration overflowed and the `silent' option was set,
266
`ACECosetTableFromGensAndRels' simply returned `fail'. But hang on,
267
{\ACE} at least has a partial table; we should be able to obtain it in
268
{\GAP} format, in a situation like this. We can. We simply use the
269
`incomplete' option, instead of the `silent' option. However, if we
270
did that with the example above, the result would be an enormous table
271
(the number of *active cosets* is 249998); so let us also set the
272
`max' (see~"option max") option, in order that we should get a more
273
modestly sized partial table. Finally, we will use `print := -12'
274
since it is a shorter equivalent alternative to `print := [-1, 12]'.
275
Note that the output here was obtained with {\GAP} 4.3 (and is the
276
same with {\GAP} 4.4). With {\GAP} 4.2 the output was similar except
277
that the last `Info'-ed message (before the final output) states that
278
the coset table result is incomplete only, since no standardisation is
279
done. It turns out that the table displayed via the `print' option is
280
already in `lenlex' standard form; so despite the differences in the
281
{\GAP} versions, each version of {\GAP} since {\GAP} 4.2 has output
282
the same table.
283
284
*Note:* Sinec the order options are passed to {\ACE} behind the colon,
285
has not been honoured since {\GAP} 4.5 (at about the time {\ACE} 5.1
286
was released in 2012), the behaviour exhibited below is no longer
287
observed. To approximately get the behaviour below, omit the option
288
`start'. This option is inserted anyway, if a user omits it, and
289
importantly is inserted after the `max' option is put to the {\ACE}
290
binary.
291
292
\beginexample
293
gap> ACECosetTableFromGensAndRels(fgens, [], [] : max := 12,
294
> start, print := -12,
295
> incomplete);
296
#I ACE 3.001 Wed Oct 31 09:41:14 2001
297
#I =========================================
298
#I Host information:
299
#I name = rigel
300
#I OVERFLOW (a=12 r=4 h=4 n=13; l=5 c=0.00; m=12 t=12)
301
#I co: a=12 r=4 h=4 n=13; c=+0.00
302
#I coset || a A b B order rep've
303
#I -------+---------------------------------------------
304
#I 1 || 2 3 4 5
305
#I 2 || 6 1 7 8 0 a
306
#I 3 || 1 9 10 11 0 A
307
#I 4 || 12 0 0 1 0 b
308
#I 5 || 0 0 1 0 0 B
309
#I 6 || 0 2 0 0 0 aa
310
#I 7 || 0 0 0 2 0 ab
311
#I 8 || 0 0 2 0 0 aB
312
#I 9 || 3 0 0 0 0 AA
313
#I 10 || 0 0 0 3 0 Ab
314
#I 11 || 0 0 3 0 0 AB
315
#I 12 || 0 4 0 0 0 ba
316
#I ***
317
#I co: a=12 r=4 h=4 n=13; c=+0.00
318
#I coset || a A b B
319
#I -------+----------------------------
320
#I 1 || 2 3 4 5
321
#I 2 || 6 1 7 8
322
#I 3 || 1 9 10 11
323
#I 4 || 12 0 0 1
324
#I 5 || 0 0 1 0
325
#I 6 || 0 2 0 0
326
#I 7 || 0 0 0 2
327
#I 8 || 0 0 2 0
328
#I 9 || 3 0 0 0
329
#I 10 || 0 0 0 3
330
#I 11 || 0 0 3 0
331
#I 12 || 0 4 0 0
332
#I ACECosetTable: Coset table is incomplete, reduced & lenlex standardised.
333
[ [ 2, 6, 1, 12, 0, 0, 0, 0, 3, 0, 0, 0 ],
334
[ 3, 1, 9, 0, 0, 2, 0, 0, 0, 0, 0, 4 ],
335
[ 4, 7, 10, 0, 1, 0, 0, 2, 0, 0, 3, 0 ],
336
[ 5, 8, 11, 1, 0, 0, 2, 0, 0, 3, 0, 0 ] ]
337
338
\endexample
339
340
Observe, that despite the fact that {\ACE} is able to define coset
341
representatives for all 12 coset numbers defined, the body of the
342
coset table now contains a 0 at each place formerly occupied by a
343
coset number larger than 12 (0 essentially represents ``don't know'').
344
To get a table that is the same in the first 12 rows as before we
345
would have had to set `max' to 38, since that was the largest coset
346
number that appeared in the body of the 12-line table, previously.
347
Also, note that the `max' option *preceded* the `start' option; since
348
the interface respects the order in which options are put by the user,
349
the enumeration invoked by `start' would otherwise have only been
350
restricted by the size of `workspace' (see~"option workspace"). The
351
warning that the coset table is incomplete is emitted at `InfoACE' or
352
`InfoWarning' level 1, i.e.~by default, you will see it.
353
354
\atindex{ACEStart}{@\noexpand`ACEStart'!example}
355
*Using `ACEStart'*
356
357
The limitation of the functions `ACEStats' and
358
`ACECosetTableFromGensAndRels' (on three arguments) is that they do
359
not *interact* with {\ACE}; they call {\ACE} with user-defined input,
360
and collect and parse the output for either statistics or a coset
361
table. On the other hand, the `ACEStart' (see~"ACEStart") function
362
allows one to start up an {\ACE} process and maintain a dialogue with
363
it. Moreover, via the functions `ACEStats' and `ACECosetTable' (on 1
364
or no arguments), one is able to extract the same information that we
365
could with the non-interactive versions of these functions. However,
366
we can also do a lot more. Each {\ACE} option that provides output
367
that can be used from within {\GAP} has a corresponding interactive
368
interface function that parses and translates that output into a form
369
usable from within {\GAP}.
370
371
Now we emulate our (successful) `ACEStats' exchanges above, using
372
interactive {\ACE} interface functions. We could do this with:
373
`ACEStart(0, fgens, [], [] : start, sr := 1);' where the `0' first
374
argument tells `ACEStart' not to insert `start' after the options
375
explicitly listed. Alternatively, we may do the following (note that
376
the `InfoACE' level is still 3):
377
378
\beginexample
379
gap> ACEStart(fgens, [], []);
380
#I ACE 3.001 Wed Oct 31 09:42:49 2001
381
#I =========================================
382
#I Host information:
383
#I name = rigel
384
#I ***
385
#I OVERFLOW (a=249998 r=83333 h=83333 n=249999; l=337 c=0.10; m=249998 t=2499\
386
98)
387
1
388
gap> ACEParameters(1);
389
#I #--- ACE 3.001: Run Parameters ---
390
#I Group Name: G;
391
#I Group Generators: ab;
392
#I Group Relators: ;
393
#I Subgroup Name: H;
394
#I Subgroup Generators: ;
395
#I Wo:1000000; Max:249998; Mess:0; Ti:-1; Ho:-1; Loop:0;
396
#I As:0; Path:0; Row:1; Mend:0; No:0; Look:0; Com:10;
397
#I C:0; R:0; Fi:7; PMod:3; PSiz:256; DMod:4; DSiz:1000;
398
#I #---------------------------------
399
rec( enumeration := "G", subgroup := "H", workspace := 1000000,
400
max := 249998, messages := 0, time := -1, hole := -1, loop := 0, asis := 0,
401
path := 0, row := 1, mendelsohn := 0, no := 0, lookahead := 0,
402
compaction := 10, ct := 0, rt := 0, fill := 7, pmode := 3, psize := 256,
403
dmode := 4, dsize := 1000 )
404
405
\endexample
406
407
Observe that the `ACEStart' call returned an integer (1, here). All 8
408
forms of the `ACEStart' function, return an integer that identifies
409
the interactive {\ACE} interface function initiated or communicated
410
with. We may use this integer to tell any interactive {\ACE} interface
411
function which interactive {\ACE} process we wish to communicate with.
412
Above we passed `1' to the `ACEParameters' command which caused `sr :=
413
1' (see~"option sr") to be passed to the interactive {\ACE} process
414
indexed by 1 (the process we just started), and a record containing
415
the parameter options (see~"ACEParameterOptions") is returned. Note
416
that the ``Run Parameters'': `Group Generators', `Group Relators' and
417
`Subgroup Generators' are considered ``args'' (i.e.~arguments) and a
418
record containing these is returned by the `GetACEArgs'
419
(see~"GetACEArgs") command; or they may be obtained individually via
420
the commands: `ACEGroupGenerators' (see~"ACEGroupGenerators"),
421
`ACERelators' (see~"ACERelators"), or `ACESubgroupGenerators'
422
(see~"ACESubgroupGenerators").
423
424
We can obtain the enumeration statistics record, via the interactive
425
version of `ACEStats' (see~"ACEStats!interactive") :
426
427
\beginexample
428
gap> ACEStats(1); # The interactive version of ACEStats takes 1 or no arg'ts
429
rec( index := 0, cputime := 10, cputimeUnits := "10^-2 seconds",
430
activecosets := 249998, maxcosets := 249998, totcosets := 249998 )
431
432
\endexample
433
434
To display 12 lines of the coset table with coset representatives
435
without invoking a further enumeration we could do: `ACEStart(0, 1 :
436
print := [-1, 12]);'. Alternatively, we may use the
437
`ACEDisplayCosetTable' (see~"ACEDisplayCosetTable") (the table itself
438
is emitted at `InfoACE' level 1, since by default we presumably want
439
to see it):
440
441
\beginexample
442
gap> ACEDisplayCosetTable(1, [-1, 12]);
443
#I co: a=249998 r=83333 h=83333 n=249999; c=+0.00
444
#I coset || a A b B order rep've
445
#I -------+---------------------------------------------
446
#I 1 || 2 3 4 5
447
#I 2 || 6 1 7 8 0 a
448
#I 3 || 1 9 10 11 0 A
449
#I 4 || 12 13 14 1 0 b
450
#I 5 || 15 16 1 17 0 B
451
#I 6 || 18 2 19 20 0 aa
452
#I 7 || 21 22 23 2 0 ab
453
#I 8 || 24 25 2 26 0 aB
454
#I 9 || 3 27 28 29 0 AA
455
#I 10 || 30 31 32 3 0 Ab
456
#I 11 || 33 34 3 35 0 AB
457
#I 12 || 36 4 37 38 0 ba
458
#I ------------------------------------------------------------
459
460
\endexample
461
462
Still with the same interactive {\ACE} process we can now emulate the
463
`ACECosetTableFromGensAndRels' exchange that gave us an incomplete
464
coset table. Note that it is still necessary to invoke an enumeration
465
after setting the `max' (see~"option max") option. We could just call
466
`ACECosetTable' with the argument 1 and the same 4 options we used for
467
`ACECosetTableFromGensAndRels'. Alternatively, we can do the
468
equivalent of the 4 options one (or two) at a time, via their
469
equivalent interactive commands. Note that the `ACEStart' command
470
(without `0' as first argument) inserts a `start' directive after the
471
user option `max':
472
473
\beginexample
474
gap> ACEStart(1 : max := 12);
475
#I ***
476
#I OVERFLOW (a=12 r=4 h=4 n=13; l=5 c=0.00; m=12 t=12)
477
1
478
479
\endexample
480
481
Now the following `ACEDisplayCosetTable' command does the equivalent
482
of the `print := [-1, 12]' option.
483
484
\beginexample
485
gap> ACEDisplayCosetTable(1, [-1, 12]);
486
#I co: a=12 r=4 h=4 n=13; c=+0.00
487
#I coset || a A b B order rep've
488
#I -------+---------------------------------------------
489
#I 1 || 2 3 4 5
490
#I 2 || 6 1 7 8 0 a
491
#I 3 || 1 9 10 11 0 A
492
#I 4 || 12 0 0 1 0 b
493
#I 5 || 0 0 1 0 0 B
494
#I 6 || 0 2 0 0 0 aa
495
#I 7 || 0 0 0 2 0 ab
496
#I 8 || 0 0 2 0 0 aB
497
#I 9 || 3 0 0 0 0 AA
498
#I 10 || 0 0 0 3 0 Ab
499
#I 11 || 0 0 3 0 0 AB
500
#I 12 || 0 4 0 0 0 ba
501
#I ------------------------------------------------------------
502
503
\endexample
504
505
Finally, we call `ACECosetTable' with 1 argument (which invokes the
506
interactive version of `ACECosetTableFromGensAndRels') with the option
507
`incomplete'.
508
509
\beginexample
510
gap> ACECosetTable(1 : incomplete);
511
#I start = yes, continue = yes, redo = yes
512
#I ***
513
#I OVERFLOW (a=12 r=4 h=4 n=13; l=4 c=0.00; m=12 t=12)
514
#I co: a=12 r=4 h=4 n=13; c=+0.00
515
#I coset || a A b B
516
#I -------+----------------------------
517
#I 1 || 2 3 4 5
518
#I 2 || 6 1 7 8
519
#I 3 || 1 9 10 11
520
#I 4 || 12 0 0 1
521
#I 5 || 0 0 1 0
522
#I 6 || 0 2 0 0
523
#I 7 || 0 0 0 2
524
#I 8 || 0 0 2 0
525
#I 9 || 3 0 0 0
526
#I 10 || 0 0 0 3
527
#I 11 || 0 0 3 0
528
#I 12 || 0 4 0 0
529
#I ACECosetTable: Coset table is incomplete, reduced & lenlex standardised.
530
[ [ 2, 6, 1, 12, 0, 0, 0, 0, 3, 0, 0, 0 ],
531
[ 3, 1, 9, 0, 0, 2, 0, 0, 0, 0, 0, 4 ],
532
[ 4, 7, 10, 0, 1, 0, 0, 2, 0, 0, 3, 0 ],
533
[ 5, 8, 11, 1, 0, 0, 2, 0, 0, 3, 0, 0 ] ]
534
535
\endexample
536
537
Observe the line beginning ```\#I start = yes,''' (the first line in
538
the output of `ACECosetTable'). This line appears in response to the
539
option `mode' (see~"option mode") inserted by `ACECosetTable' after
540
any user options; it is inserted in order to check that no user
541
options (possibly made before the `ACECosetTable' call) have
542
invalidated {\ACE}'s coset table. Since the line also says `continue =
543
yes', the mode `continue' (the least expensive of the three modes;
544
see~"option continu") is directed at {\ACE} which evokes a *results
545
message*. Then `ACECosetTable' extracts the incomplete table via a
546
`print' (see "option print") directive. If you wish to see all the
547
options that are directed to {\ACE}, set the `InfoACE' level to 4
548
(then all such commands are `Info'-ed behind a ```ToACE> ''' prompt;
549
see~"SetInfoACELevel").
550
551
Following the standalone manual, we now set things up to do the
552
alternating group $A_5$, of order $60$. (We saw the group $A_5$ with
553
subgroup $C_5$ earlier in Section~"Example of Using ACE Interactively
554
(Using ACEStart)"; here we are concerned with observing and remarking
555
on the output from the {\ACE} binary.) We turn messaging on via the
556
`messages' (see~"option messages") option; setting `messages' to 1
557
tells {\ACE} to emit a *progress message* on each pass of its main
558
loop. In the example following we set `messages := 1000', which, for
559
our example, sets the interval between messages so high that we only
560
get the ``Run Parameters'' block (the same as that obtained with `sr
561
:= 1'), no progress messages and the final *results message*. Recall
562
`F' is the free group we defined on generators `fgens': `"a"' and
563
`"b"'. Here we will be interested in seeing what is transmitted to the
564
{\ACE} binary; so we will set the `InfoACE' level to 4 (what is
565
transmitted to {\ACE} will now appear behind a ```ToACE> ''' prompt,
566
and we will still see the messages *from* {\ACE}). Note, that when
567
{\GAP} prints `F.1' ($=$ `fgens[1]') it displays `a', but the
568
*variable* `a' is (at the moment) unassigned; so for convenience (in
569
defining relators, for example) we first assign the variable `a' to be
570
`F.1' (and `b' to be `F.2').
571
572
\beginexample
573
gap> SetInfoACELevel(4);
574
gap> a := F.1;; b := F.2;;
575
gap> # Enumerating A_5 = < a, b || a^2, b^3, (a*b)^5 >
576
gap> # over Id (trivial subgp)
577
gap> ACEStart(1, fgens, [a^2, b^3, (a*b)^5], []
578
> # 4th arg empty (to define Id)
579
> : enumeration := "A_5", # Define the Group Name
580
> subgroup := "Id", # Define the Subgroup Name
581
> max := 0, # Set `max' back to default (no limit)
582
> messages := 1000); # Progress messages every 1000 iter'ns
583
#I ToACE> group:ab;
584
#I ToACE> relators:a^2,b^3,a*b*a*b*a*b*a*b*a*b;
585
#I ToACE> generators;
586
#I ToACE> enumeration:A_5;
587
#I ToACE> subgroup:Id;
588
#I ToACE> max:0;
589
#I ToACE> messages:1000;
590
#I ToACE> text:***;
591
#I ***
592
#I ToACE> text:***;
593
#I ***
594
#I ToACE> Start;
595
#I #--- ACE 3.001: Run Parameters ---
596
#I Group Name: A_5;
597
#I Group Generators: ab;
598
#I Group Relators: (a)^2, (b)^3, (ab)^5;
599
#I Subgroup Name: Id;
600
#I Subgroup Generators: ;
601
#I Wo:1000000; Max:333331; Mess:1000; Ti:-1; Ho:-1; Loop:0;
602
#I As:0; Path:0; Row:1; Mend:0; No:3; Look:0; Com:10;
603
#I C:0; R:0; Fi:6; PMod:3; PSiz:256; DMod:4; DSiz:1000;
604
#I #---------------------------------
605
#I INDEX = 60 (a=60 r=77 h=1 n=77; l=3 c=0.00; m=66 t=76)
606
1
607
608
\endexample
609
610
Observe that the `fgens' and subgroup generators (the empty list)
611
arguments are transmitted to {\ACE} via the {\ACE} binary's `group'
612
and `generators' options, respectively. Observe also, that the relator
613
`(a*b)^5' is expanded by {\GAP} to `a*b*a*b*a*b*a*b*a*b' when
614
transmitted to {\ACE} and then {\ACE} correctly deduces that it's
615
`(a*b)^5'.
616
617
Since we did not specify a strategy the `default' (see~"option
618
default") strategy was followed and hence coset number definitions
619
were R (i.e.~HLT) style, and a total of $76$ coset numbers (`t=76')
620
were defined (if we had tried `felsch' we would have achieved the best
621
possible: `t=60'). Note, that {\ACE} already ``knew'' the group
622
generators and subgroup generators; so, we could have avoided
623
re-transmitting that information by using the `relators' (see~"option
624
relators") option:
625
626
\beginexample
627
gap> ACEStart(1 : relators := ToACEWords(fgens, [a^2, b^3, (a*b)^5]),
628
> enumeration := "A_5",
629
> subgroup := "Id",
630
> max := 0,
631
> messages := 1000);
632
#I Detected usage of a synonym of one (or more) of the options:
633
#I `group', `relators', `generators'.
634
#I Discarding current values of args.
635
#I (The new args will be extracted from ACE, later).
636
#I ToACE> relators:a^2,b^3,a*b*a*b*a*b*a*b*a*b;
637
#I ToACE> enumeration:A_5;
638
#I ToACE> subgroup:Id;
639
#I ToACE> max:0;
640
#I ToACE> messages:1000;
641
#I No group generators saved. Setting value(s) from ACE ...
642
#I ToACE> sr:1;
643
#I #--- ACE 3.001: Run Parameters ---
644
#I Group Name: A_5;
645
#I Group Generators: ab;
646
#I Group Relators: (a)^2, bbb, ababababab;
647
#I Subgroup Name: Id;
648
#I Subgroup Generators: ;
649
#I Wo:1000000; Max:333331; Mess:1000; Ti:-1; Ho:-1; Loop:0;
650
#I As:0; Path:0; Row:1; Mend:0; No:3; Look:0; Com:10;
651
#I C:0; R:0; Fi:6; PMod:3; PSiz:256; DMod:4; DSiz:1000;
652
#I #---------------------------------
653
#I ToACE> text:***;
654
#I ***
655
#I ToACE> Start;
656
#I #--- ACE 3.001: Run Parameters ---
657
#I Group Name: A_5;
658
#I Group Generators: ab;
659
#I Group Relators: (a)^2, (b)^3, (ab)^5;
660
#I Subgroup Name: Id;
661
#I Subgroup Generators: ;
662
#I Wo:1000000; Max:333331; Mess:1000; Ti:-1; Ho:-1; Loop:0;
663
#I As:0; Path:0; Row:1; Mend:0; No:3; Look:0; Com:10;
664
#I C:0; R:0; Fi:6; PMod:3; PSiz:256; DMod:4; DSiz:1000;
665
#I #---------------------------------
666
#I INDEX = 60 (a=60 r=77 h=1 n=77; l=3 c=0.00; m=66 t=76)
667
1
668
669
\endexample
670
671
Note the usage of `ToACEWords' (see~"ToACEWords") to provide the
672
appropriate string value of the `relators' option. Also, observe the
673
`Info'-ed warning of the action triggered by using the `relators'
674
option, that says that the current values of the ``args'' (i.e.~what
675
would be returned by `GetACEArgs'; see~"GetACEArgs") were discarded,
676
which immediately triggered the action of reinstantiating the value of
677
`ACEData.io[1].args' (which is what the `Info':
678
679
\begintt
680
#I No group generators saved. Setting value(s) from ACE ...
681
\endtt
682
683
was all about). Also observe that the ``Run Parameters'' block was
684
`Info'-ed twice; the first time was due to `ACEStart' emitting `sr'
685
with value `1' to {\ACE}, the response of which is used to
686
re-instantiate `ACEData.io[1].args', and the second is in response to
687
transmitting `Start' to {\ACE}.
688
689
690
In particular, {\GAP} no longer thinks `fgens' are the group
691
generators:
692
693
\beginexample
694
gap> ACEGroupGenerators(1) = fgens;
695
false
696
697
\endexample
698
699
Groan! We will just have to re-instantiate everything:
700
701
\beginexample
702
gap> fgens := ACEGroupGenerators(1);;
703
gap> F := GroupWithGenerators(fgens);; a := F.1;; b := F.2;;
704
705
\endexample
706
707
We now define a non-trivial subgroup, of small enough index, to make
708
the observation of all progress messages, by setting `messages := 1',
709
a not too onerous proposition. As for defining the relators, we could
710
use the 1-argument version of `ACEStart', in which case we would use
711
the `subgroup' (see~"option subgroup") option with the value
712
`ToACEWords(fgens, [ a*b ])'. However, as we saw, in the end we don't
713
save anything by doing this, since afterwards the variables `fgens',
714
`a', `b' and `F' would no longer be associated with `ACEStart' process
715
1. Instead, we will use the more convenient 4-argument form, and also
716
switch the `InfoACELevel' back to 3:
717
718
\beginexample
719
gap> SetInfoACELevel(3);
720
gap> ACEStart(1, ACEGroupGenerators(1), ACERelators(1), [ a*b ]
721
> : messages := 1);
722
#I ***
723
#I ***
724
#I #--- ACE 3.001: Run Parameters ---
725
#I Group Name: A_5;
726
#I Group Generators: ab;
727
#I Group Relators: (a)^2, (b)^3, (ab)^5;
728
#I Subgroup Name: Id;
729
#I Subgroup Generators: ab;
730
#I Wo:1000000; Max:333331; Mess:1; Ti:-1; Ho:-1; Loop:0;
731
#I As:0; Path:0; Row:1; Mend:0; No:3; Look:0; Com:10;
732
#I C:0; R:0; Fi:6; PMod:3; PSiz:256; DMod:4; DSiz:1000;
733
#I #---------------------------------
734
#I AD: a=2 r=1 h=1 n=3; l=1 c=+0.00; m=2 t=2
735
#I SG: a=2 r=1 h=1 n=3; l=1 c=+0.00; m=2 t=2
736
#I RD: a=3 r=1 h=1 n=4; l=2 c=+0.00; m=3 t=3
737
#I RD: a=4 r=2 h=1 n=5; l=2 c=+0.00; m=4 t=4
738
#I RD: a=5 r=2 h=1 n=6; l=2 c=+0.00; m=5 t=5
739
#I RD: a=6 r=2 h=1 n=7; l=2 c=+0.00; m=6 t=6
740
#I RD: a=7 r=2 h=1 n=8; l=2 c=+0.00; m=7 t=7
741
#I RD: a=8 r=2 h=1 n=9; l=2 c=+0.00; m=8 t=8
742
#I RD: a=9 r=2 h=1 n=10; l=2 c=+0.00; m=9 t=9
743
#I CC: a=8 r=2 h=1 n=10; l=2 c=+0.00; d=0
744
#I RD: a=9 r=5 h=1 n=11; l=2 c=+0.00; m=9 t=10
745
#I RD: a=10 r=5 h=1 n=12; l=2 c=+0.00; m=10 t=11
746
#I RD: a=11 r=5 h=1 n=13; l=2 c=+0.00; m=11 t=12
747
#I RD: a=12 r=5 h=1 n=14; l=2 c=+0.00; m=12 t=13
748
#I RD: a=13 r=5 h=1 n=15; l=2 c=+0.00; m=13 t=14
749
#I RD: a=14 r=5 h=1 n=16; l=2 c=+0.00; m=14 t=15
750
#I CC: a=13 r=6 h=1 n=16; l=2 c=+0.00; d=0
751
#I CC: a=12 r=6 h=1 n=16; l=2 c=+0.00; d=0
752
#I INDEX = 12 (a=12 r=16 h=1 n=16; l=3 c=0.00; m=14 t=15)
753
1
754
755
\endexample
756
757
Observe that we used `ACERelators(1)' (see~"ACERelators") to grab the
758
value of the relators we had defined earlier. We also used
759
`ACEGroupGenerators(1)' (see~"ACEGroupGenerators") to get the group
760
generators.
761
762
The run ended with 12 active (see Section~"Coset Statistics
763
Terminology") coset numbers (`a=12') after defining a total number of
764
15 coset numbers (`t=15'); the definitions occurred at the steps with
765
progress messages tagged by `AD:' (coset 1 application definition) and
766
`SG:' (subgroup generator phase), and the 13 tagged by `RD:' (R style
767
definition). So there must have been 3 coincidences: observe that
768
there were 3 progress messages with a `CC:' tag. (See Appendix~"The
769
Meanings of ACE's Output Messages".)
770
771
We can dump out the statistics accumulated during the run, using
772
`ACEDumpStatistics' (see~"ACEDumpStatistics"), which `Info's the
773
{\ACE} output of the `statistics' (see~"option statistics") at
774
`InfoACE' level 1.
775
776
\beginexample
777
gap> ACEDumpStatistics();
778
#I #- ACE 3.001: Level 0 Statistics -
779
#I cdcoinc=0 rdcoinc=2 apcoinc=0 rlcoinc=0 clcoinc=0
780
#I xcoinc=2 xcols12=4 qcoinc=3
781
#I xsave12=0 s12dup=0 s12new=0
782
#I xcrep=6 crepred=0 crepwrk=0 xcomp=0 compwrk=0
783
#I xsaved=0 sdmax=0 sdoflow=0
784
#I xapply=1 apdedn=1 apdefn=1
785
#I rldedn=0 cldedn=0
786
#I xrdefn=1 rddedn=5 rddefn=13 rdfill=0
787
#I xcdefn=0 cddproc=0 cdddedn=0 cddedn=0
788
#I cdgap=0 cdidefn=0 cdidedn=0 cdpdl=0 cdpof=0
789
#I cdpdead=0 cdpdefn=0 cddefn=0
790
#I #---------------------------------
791
792
\endexample
793
794
The statistic `qcoinc=3' states what we had already observed, namely,
795
that there were three coincidences. Of these, two were primary
796
coincidences (`rdcoinc=2'). Since `t=15', there were fourteen
797
non-trivial coset number definitions; one was during the application
798
of coset 1 to the subgroup generator (`apdefn=1'), and the remainder
799
occurred during applications of the coset numbers to the relators
800
(`rddefn=13'). For more details on the meanings of the variables you
801
will need to read the C code comments.
802
803
Now let us display all 12 lines of the coset table with coset
804
representatives.
805
806
\beginexample
807
gap> ACEDisplayCosetTable([-12]);
808
#I CO: a=12 r=13 h=1 n=13; c=+0.00
809
#I coset || b B a order rep've
810
#I -------+--------------------------------------
811
#I 1 || 3 2 2
812
#I 2 || 1 3 1 3 B
813
#I 3 || 2 1 4 3 b
814
#I 4 || 8 5 3 5 ba
815
#I 5 || 4 8 6 2 baB
816
#I 6 || 9 7 5 5 baBa
817
#I 7 || 6 9 8 3 baBaB
818
#I 8 || 5 4 7 5 bab
819
#I 9 || 7 6 10 5 baBab
820
#I 10 || 12 11 9 3 baBaba
821
#I 11 || 10 12 12 2 baBabaB
822
#I 12 || 11 10 11 3 baBabab
823
#I ------------------------------------------------------------
824
825
\endexample
826
827
Note how the pre-printout compaction phase now does some work
828
(indicated by the upper-case `CO:' tag), since there were
829
coincidences, and hence dead coset numbers. Note how `b' and `B' head
830
the first two columns, since {\ACE} requires that the first two
831
columns be occupied by a generator/inverse pair or a pair of
832
involutions. The `a' column is also the `A' column, as `a' is an
833
involution.
834
835
We now use `ACEStandardCosetNumbering' to produce a `lenlex' standard
836
table within {\ACE}, but note that this is only `lenlex' with respect
837
to the ordering `b, a' of the generators. Then we call
838
`ACEDisplayCosetTable' again to see it. Observe that at both the
839
standardisation and coset table display steps a compaction phase is
840
invoked but on both occasions the lowercase `co:' tag indicates that
841
nothing is done (all the recovery of dead coset numbers that could be
842
done was done earlier).
843
844
\beginexample
845
gap> ACEStandardCosetNumbering();
846
#I co/ST: a=12 r=13 h=1 n=13; c=+0.00
847
gap> ACEDisplayCosetTable([-12]);
848
#I co: a=12 r=13 h=1 n=13; c=+0.00
849
#I coset || b B a order rep've
850
#I -------+--------------------------------------
851
#I 1 || 2 3 3
852
#I 2 || 3 1 4 3 b
853
#I 3 || 1 2 1 3 B
854
#I 4 || 5 6 2 5 ba
855
#I 5 || 6 4 7 5 bab
856
#I 6 || 4 5 8 2 baB
857
#I 7 || 8 9 5 5 baba
858
#I 8 || 9 7 6 5 baBa
859
#I 9 || 7 8 10 3 babaB
860
#I 10 || 11 12 9 3 babaBa
861
#I 11 || 12 10 12 3 babaBab
862
#I 12 || 10 11 11 2 babaBaB
863
#I ------------------------------------------------------------
864
865
\endexample
866
867
Of course, the table above is not `lenlex' with respect to the order
868
of the generators we had originally given to {\ACE}; to get that, we
869
would have needed to specify `lenlex' (see~"option lenlex") at the
870
enumeration stage. The effect of the `lenlex' option at the
871
enumeration stage is the following: behind the scenes it ensures that
872
the relator `a^2' is passed to {\ACE} as `aa' and then it sets the
873
option `asis' to 1; this bit of skulduggery stops {\ACE} treating `a'
874
as an involution, allowing `a' and `A' (the inverse of `a') to take up
875
the first two columns of the coset table, effectively stopping {\ACE}
876
from reordering the generators. To see what is passed to {\ACE}, at
877
the enumeration stage, we set the `InfoACELevel' to 4, but since we
878
don't really want to see messages this time we set `messages := 0'.
879
880
\beginexample
881
gap> SetInfoACELevel(4);
882
gap> ACEStart(1, ACEGroupGenerators(1), ACERelators(1), [ a*b ]
883
> : messages := 0, lenlex);
884
#I ToACE> group:ab;
885
#I ToACE> relators:aa, b^3,a*b*a*b*a*b*a*b*a*b;
886
#I ToACE> generators:a*b;
887
#I ToACE> asis:1;
888
#I ToACE> messages:0;
889
#I ToACE> text:***;
890
#I ***
891
#I ToACE> text:***;
892
#I ***
893
#I ToACE> Start;
894
#I INDEX = 12 (a=12 r=17 h=1 n=17; l=3 c=0.00; m=15 t=16)
895
1
896
gap> ACEStandardCosetNumbering();
897
#I ToACE> standard;
898
#I CO/ST: a=12 r=13 h=1 n=13; c=+0.00
899
gap> # The capitalised `CO' indicates space was recovered during compaction
900
gap> ACEDisplayCosetTable([-12]);
901
#I ToACE> print:-12;
902
#I ToACE> text:------------------------------------------------------------;
903
#I co: a=12 r=13 h=1 n=13; c=+0.00
904
#I coset || a A b B order rep've
905
#I -------+---------------------------------------------
906
#I 1 || 2 2 3 2
907
#I 2 || 1 1 1 3 2 a
908
#I 3 || 4 4 2 1 3 b
909
#I 4 || 3 3 5 6 5 ba
910
#I 5 || 7 7 6 4 5 bab
911
#I 6 || 8 8 4 5 2 baB
912
#I 7 || 5 5 8 9 5 baba
913
#I 8 || 6 6 9 7 5 baBa
914
#I 9 || 10 10 7 8 3 babaB
915
#I 10 || 9 9 11 12 3 babaBa
916
#I 11 || 12 12 12 10 3 babaBab
917
#I 12 || 11 11 10 11 2 babaBaB
918
#I ------------------------------------------------------------
919
920
\endexample
921
922
You may have noticed the use of {\ACE}'s `text' option several times
923
above; this just tells {\ACE} to print the argument given to `text'
924
(as a comment). This is used by the {\GAP} interface as a sentinel;
925
when the string appears in the {\ACE} output, the {\GAP} interface
926
knows not to expect anything else.
927
928
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
929
\Section{Emulating Sims}
930
931
Here we consider the various `sims' strategies (see~"option sims"),
932
with respect to duplicating Sims' example statistics of his strategies
933
given in Section 5.5 of \cite{Sim94}, and giving approximations of his
934
even-numbered strategies.
935
936
In order to duplicate Sims' maximum active coset numbers and total
937
coset numbers statistics, one needs to work with the formal inverses
938
of the relators and subgroup generators from \cite{Sim94}, since
939
definitions are made from the front in Sims' routines and from the
940
rear in {\ACE}. Also, in instances where
941
`IsACEGeneratorsInPreferredOrder(<gens>, <rels>)' returns `false', for
942
group generators <fgens> and relators <rels>, one will need to apply
943
the `lenlex' option to stop {\ACE} from re-ordering the generators and
944
relators (see~"IsACEGeneratorsInPreferredOrder" and~"option lenlex").
945
In general, we can match Sims' values for the `sims := 1' and `sims :=
946
3' strategies (the R style and R\* style Sims strategies with
947
`mendelsohn' off) and for the `sims := 9' (C style) strategy, but
948
sometimes we may not exactly match Sims' statistics for the `sims :=
949
5' and `sims := 7' strategies (the R style and R\* style Sims
950
strategies with `mendelsohn' on); Sims does not specify an order for
951
the (Mendelsohn) processing of cycled relators and evidently {\ACE}'s
952
processing order is different to the one Sims used in his CHLT
953
algorithm to get his statistics (see~"option mendelsohn").
954
955
*Note:*
956
HLT as it appears in Table 5.5.1 of \cite{Sim94} is achieved in {\ACE}
957
with the sequence ```hlt, lookahead := 0''' and CHLT is (nearly)
958
equivalent to ```hlt, lookahead := 0, mendelsohn'''; also Sims'
959
`<save> = false' equates to R style (`rt' positive, `ct := 0') in
960
{\ACE}, and `<save> = true', for Sims' HLT and CHLT, equates to R\*
961
style (`rt' negative, `ct := 0') in {\ACE}. Sims' Felsch strategy
962
coincides with {\ACE}'s `felsch := 0' strategy, i.e.~`sims := 9' is
963
identical to `felsch := 0'. (See the options~"option hlt", "option
964
lookahead", "option mendelsohn", "option ct", "option rt" and~"option
965
felsch".)
966
967
The following duplicates the ``Total'' (`totcosets' in {\ACE}) and
968
``Max.~Active'' (`maxcosets' in {\ACE}) statistics for Example~5.2 of
969
\cite{Sim94}, found in Sims' Table~5.5.3, for the `sims := 3'
970
strategy.
971
972
\beginexample
973
gap> SetInfoACELevel(1); # No behind-the-scenes info. please
974
gap> F := FreeGroup("r", "s", "t");; r := F.1;; s := F.2;; t := F.3;;
975
gap> ACEStats([r, s, t], [(r^t*r^-2)^-1, (s^r*s^-2)^-1, (t^s*t^-2)^-1], []
976
> : sims := 3);
977
rec( index := 1, cputime := 0, cputimeUnits := "10^-2 seconds",
978
activecosets := 1, maxcosets := 673, totcosets := 673 )
979
980
\endexample
981
982
By replacing `sims := 3' with `sims := <i>' for <i> equal to~1, 5, 7
983
or~9, one may verify that for <i> equal to~1 or~9, Sims' statistics
984
are again duplicated, and observe a slight variance with Sims'
985
statistics for <i> equal to~5 or~7.
986
987
Now, we show how one can approximate any one of Sims' even-numbered
988
strategies. Essentially, the idea is to start an interactive {\ACE}
989
process using `ACEStart' (see~"ACEStart") with `sims := <i>', for <i>
990
equal to~1, 3, 5, 7 or~9, and `max' set to some low value <maxstart>
991
so that the enumeration stops after only completing a few rows of the
992
coset table. Then, to approximate Sims' strategy `<i> + 1', one
993
alternately applies `ACEStandardCosetNumbering' and `ACEContinue',
994
progressively increasing the value of `max' by some value <maxstep>.
995
The general algorithm is provided by the `ACEEvenSims' function
996
following.
997
998
\beginexample
999
gap> ACEEvenSims := function(fgens, rels, sgens, i, maxstart, maxstep)
1000
> local j;
1001
> j := ACEStart(fgens, rels, sgens : sims := i, max := maxstart);
1002
> while ACEStats(j).index = 0 do
1003
> ACEStandardCosetNumbering(j);
1004
> ACEContinue(j : max := ACEParameters(j).max + maxstep);
1005
> od;
1006
> return ACEStats(j);
1007
> end;;
1008
1009
\endexample
1010
1011
It turns out that one can duplicate the Sims' strategy 4 statistics in
1012
Table~5.5.3 of \cite{Sim94}, with `<i> = 3' (so that `<i> + 1 = 4'),
1013
`<maxstart> = 14' and `<maxstep> = 50':
1014
1015
\beginexample
1016
gap> ACEEvenSims([r, s, t], [(r^t*r^-2)^-1, (s^r*s^-2)^-1, (t^s*t^-2)^-1],
1017
> [], 3, 14, 50);
1018
rec( index := 1, cputime := 0, cputimeUnits := "10^-2 seconds",
1019
activecosets := 1, maxcosets := 393, totcosets := 393 )
1020
1021
\endexample
1022
1023
Setting `<maxstep> = 60' (and leaving the other parameters the same)
1024
also gives Sims' statistics, but `<maxstart> = 64' with `<maxstep> =
1025
80' does better:
1026
1027
\beginexample
1028
gap> ACEEvenSims([r, s, t], [(r^t*r^-2)^-1, (s^r*s^-2)^-1, (t^s*t^-2)^-1],
1029
> [], 3, 64, 80);
1030
rec( index := 1, cputime := 0, cputimeUnits := "10^-2 seconds",
1031
activecosets := 1, maxcosets := 352, totcosets := 352 )
1032
1033
\endexample
1034
1035
Even though the (`lenlex') standardisation steps in the above examples
1036
produce a significant improvement over the `sims := 3' statistics,
1037
this does not happen universally. Sims \cite{Sim94} gives many
1038
examples where the even-numbered strategies fail to show any
1039
significant improvement over the odd-numbered strategies, and one
1040
example (see~Table~5.5.7) where `sims := 2' gives a performance that
1041
is very much worse than any of the other Sims strategies. As with any
1042
of the strategies, what works well for some groups may not work at all
1043
well with other groups. There are *no* general rules. It's a bit of a
1044
game. Let's hope you win most of the time.
1045
1046
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1047
%%
1048
%E
1049
1050