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 Infrastructure
3
4
Most of the details in this chapter are of a technical nature; the user need
5
only skim over this chapter on a first reading. Mostly, it is enough to know
6
that
7
8
 you must do a LoadPackage("anupq"); before you can expect to use a
9
command defined by the ANUPQ package (details are in Section 'Loading
10
the ANUPQ Package');
11
12
 partial results of ANUPQ commands and some other data are stored in
13
the ANUPQData global variable (details are in Section 'The ANUPQData
14
Record');
15
16
 doing SetInfoLevel(InfoANUPQ, n); for n greater than the default value
17
1 will give progressively more information of what is going on behind
18
the scenes (details are in Section 'Setting the Verbosity of ANUPQ via
19
Info and InfoANUPQ');
20
21
 in Section 'Utility Functions' we describe some utility functions and
22
functions that run examples from the collection of examples of this
23
package;
24
25
 in Section 'Attributes and a Property for fp and pc p-groups' we
26
describe the attributes and property NuclearRank, MultiplicatorRank
27
and IsCapable; and
28
29
 in Section 'Hints and Warnings regarding the use of Options' we
30
describe some troubleshooting strategies. Also this section explains
31
the utility of setting ANUPQWarnOfOtherOptions := true; (particularly
32
for novice users) for detecting misspelt options and diagnosing other
33
option usage problems.
34
35
36
3.1 Loading the ANUPQ Package
37
38
To use the ANUPQ package, as with any GAP package, it must be requested
39
explicitly. This is done by calling
40
41
 Example 
42
gap> LoadPackage( "anupq" );
43
---------------------------------------------------------------------------
44
Loading ANUPQ (ANU p-Quotient) 3.1
45
GAP code by Greg Gamble <[email protected]> (address for
46
correspondence)
47
 Werner Nickel (http://www.mathematik.tu-darmstadt.de/~nickel/)
48
 [uses ANU pq binary (C code program) version: 1.9]
49
C code by Eamonn O'Brien (http://www.math.auckland.ac.nz/~obrien)
50
Co-maintained by Max Horn <[email protected]>
51

52
 For help, type: ?ANUPQ
53
---------------------------------------------------------------------------
54
true
55

56
57
Note that since the ANUPQ package uses the AutomorphimGroupPGroup function
58
of the AutPGrp package and, in any case, often needs other AutPGrp functions
59
when computing descendants, the user must ensure that the AutPGrp package is
60
also installed, at least version 1.5. If the AutPGrp package is not
61
installed, the ANUPQ package will fail to load.
62
63
Also, if GAP cannot find a working pq binary, the call to LoadPackage will
64
return fail.
65
66
If you want to load the ANUPQ package by default, you can put the
67
LoadPackage command into your gap.ini file (see Section Reference: The
68
gap.ini and gaprc files in the GAP Reference Manual). By the way, the novice
69
user of the ANUPQ package should probably also append the line
70
71
 Example 
72
ANUPQWarnOfOtherOptions := true;
73

74
75
to their gap.ini file, somewhere after the LoadPackage( "anupq" ); command
76
(see ANUPQWarnOfOtherOptions (3.6-1)).
77
78
79
3.2 The ANUPQData Record
80
81
This section contains fairly technical details which may be skipped on an
82
initial reading.
83
84
3.2-1 ANUPQData
85
86
ANUPQData global variable
87
88
is a GAP record in which the essential data for an ANUPQ session within GAP
89
is stored; its fields are:
90
91
binary
92
the path of the pq binary;
93
94
tmpdir
95
the path of the temporary directory used by the pq binary and GAP
96
(i.e. the directory in which all the pq's temporary files are created)
97
(also see ANUPQDirectoryTemporary (3.2-2) below);
98
99
outfile
100
the full path of the default pq output file;
101
102
SPimages
103
the full path of the file GAP_library to which the pq program writes
104
its Standard Presentation images;
105
106
version
107
the version of the current pq binary;
108
109
ni
110
a data record used by non-interactive functions (see below and
111
Chapter 'Non-interactive ANUPQ functions');
112
113
io
114
list of data records for PqStart (see below and PqStart (5.1-1))
115
processes;
116
117
topqlogfile
118
name of file logged to by ToPQLog (see ToPQLog (3.4-7)); and
119
120
logstream
121
stream of file logged to by ToPQLog (see ToPQLog (3.4-7)).
122
123
Each time an interactive ANUPQ process is initiated via PqStart (see PqStart
124
(5.1-1)), an identifying number ioIndex is generated for the interactive
125
process and a record ANUPQData.io[ioIndex] with some or all of the fields
126
listed below is created. Whenever a non-interactive function is called (see
127
Chapter 'Non-interactive ANUPQ functions'), the record ANUPQData.ni is
128
updated with fields that, if bound, have exactly the same purpose as for a
129
ANUPQData.io[ioIndex] record.
130
131
stream
132
the IOStream opened for interactive ANUPQ process ioIndex or
133
non-interactive ANUPQ function;
134
135
group
136
the group given as first argument to PqStart, Pq, PqEpimorphism,
137
PqDescendants or PqStandardPresentation (or any synonymous methods);
138
139
haspcp
140
is bound and set to true when a pc presentation is first set inside
141
the pq program (e.g. by PqPcPresentation or PqRestorePcPresentation or
142
a higher order function like Pq, PqEpimorphism, PqPCover,
143
PqDescendants or PqStandardPresentation that does a PqPcPresentation
144
operation, but not PqStart which only starts up an interactive ANUPQ
145
process);
146
147
gens
148
a list of the generators of the group group as strings (the same as
149
those passed to the pq program);
150
151
rels
152
a list of the relators of the group group as strings (the same as
153
those passed to the pq program);
154
155
name
156
the name of the group whose pc presentation is defined by a call to
157
the pq program (according to the pq program -- unless you have used
158
the GroupName option (see e.g. Pq (4.1-1)) or applied the function
159
SetName (see SetName (Reference: Name)) to the group, the generic name
160
"[grp]" is set as a default);
161
162
gpnum
163
if not a null string, the number (i.e. the unique label assigned by
164
the pq program) of the last descendant processed;
165
166
class
167
the largest lower exponent-p central class of a quotient group of the
168
group (usually group) found by a call to the pq program;
169
170
forder
171
the factored order of the quotient group of largest lower exponent-p
172
central class found for the group (usually group) by a call to the pq
173
program (this factored order is given as a list [p,n], indicating an
174
order of p^n);
175
176
pcoverclass
177
the lower exponent-p central class of the p-covering group of a
178
p-quotient of the group (usually group) found by a call to the pq
179
program;
180
181
workspace
182
the workspace set for the pq process (either given as a second
183
argument to PqStart, or set by default to 10000000);
184
185
menu
186
the current menu of the pq process (the pq program is managed by
187
various menus, the details of which the user shouldn't normally need
188
to know about -- the menu field remembers which menu the pq process is
189
currently in);
190
191
outfname
192
is the file to which pq output is directed, which is always
193
ANUPQData.outfile, except when option SetupFile is used with a
194
non-interactive function, in which case outfname is set to
195
"PQ_OUTPUT";
196
197
pQuotient
198
is set to the value returned by Pq (see Pq (4.1-1)) (the field pQepi
199
is also set at the same time);
200
201
pQepi
202
is set to the value returned by PqEpimorphism (see PqEpimorphism
203
(4.1-2)) (the field pQuotient is also set at the same time);
204
205
pCover
206
is set to the value returned by PqPCover (see PqPCover (4.1-3));
207
208
SP
209
is set to the value returned by PqStandardPresentation or
210
StandardPresentation (see PqStandardPresentation (5.3-4)) when called
211
interactively, for process i (the field SPepi is also set at the same
212
time);
213
214
SPepi
215
is set to the value returned by EpimorphismPqStandardPresentation or
216
EpimorphismStandardPresentation (see EpimorphismPqStandardPresentation
217
(5.3-5)) when called interactively, for process i (the field SP is
218
also set at the same time);
219
220
descendants
221
is set to the value returned by PqDescendants (see PqDescendants
222
(4.4-1));
223
224
treepos
225
if set by a call to PqDescendantsTreeCoclassOne
226
(see PqDescendantsTreeCoclassOne (A.4-1)), it contains a record with
227
fields class, node and ndes being the information that determines the
228
last descendant with a non-zero number of descendants processed;
229
230
xgapsheet
231
if set by a call to PqDescendantsTreeCoclassOne
232
(see PqDescendantsTreeCoclassOne (A.4-1)) during an XGAP session, it
233
contains the XGAP Sheet on which the descendants tree is displayed;
234
and
235
236
nextX
237
if set by a call to PqDescendantsTreeCoclassOne
238
(see PqDescendantsTreeCoclassOne (A.4-1)) during an XGAP session, it
239
contains a list of integers, the ith entry of which is the
240
x-coordinate of the next node (representing a descendant) for the ith
241
class.
242
243
3.2-2 ANUPQDirectoryTemporary
244
245
ANUPQDirectoryTemporary( dir )  function
246
247
calls the UNIX command mkdir to create dir, which must be a string, and if
248
successful a directory object for dir is both assigned to ANUPQData.tmpdir
249
and returned. The field ANUPQData.outfile is also set to be a file in
250
ANUPQData.tmpdir, and on exit from GAP dir is removed. Most users will never
251
need this command; by default, GAP typically chooses a random subdirectory
252
of /tmp for ANUPQData.tmpdir which may occasionally have limits on what may
253
be written there. ANUPQDirectoryTemporary permits the user to choose a
254
directory (object) where one is not so limited.
255
256
257
3.3 Setting the Verbosity of ANUPQ via Info and InfoANUPQ
258
259
3.3-1 InfoANUPQ
260
261
InfoANUPQ info class
262
263
The input to and the output from the pq program is, by default, not
264
displayed. However the user may choose to see some, or all, of this
265
input/output. This is done via the Info mechanism (see Section Reference:
266
Info Functions in the GAP Reference Manual). For this purpose, there is the
267
InfoClass InfoANUPQ. If the InfoLevel of InfoANUPQ is high enough each line
268
of pq input/output is directed to a call to Info and will be displayed for
269
the user to see. By default, the InfoLevel of InfoANUPQ is 1, and it is
270
recommended that you leave it at this level, or higher. Messages that the
271
user should presumably want to see and output from the pq program influenced
272
by the value of the option OutputLevel (see the options listed in Section Pq
273
(4.1-1)), other than timing and memory usage are directed to Info at
274
InfoANUPQ level 1.
275
276
To turn off all InfoANUPQ messaging, set the InfoANUPQ level to 0.
277
278
There are five other user-intended InfoANUPQ levels: 2, 3, 4, 5 and 6.
279
280
 Example 
281
gap> SetInfoLevel(InfoANUPQ, 2);
282

283
284
enables the display of most timing and memory usage data from the pq
285
program, and also the number of identity instances when the Identities
286
option is used. (Some timing and memory usage data, particularly when
287
profuse in quantity, is Info-ed at InfoANUPQ level 3 instead.) Note that the
288
the GAP functions time and Runtime (see Runtime (Reference: Runtime) in the
289
GAP Reference Manual) count the time spent by GAP and not the time spent by
290
the (external) pq program.
291
292
 Example 
293
gap> SetInfoLevel(InfoANUPQ, 3);
294

295
296
enables the display of output of the nature of the first two InfoANUPQ that
297
was not directly invoked by the user (e.g. some commands require GAP to
298
discover something about the current state known to the pq program). The
299
identity instances processed under the Identities option are also displayed
300
at this level. In some cases, the pq program produces a lot of output
301
despite the fact that the OutputLevel (see 6.2) is unset or is set to 0;
302
such output is also Info-ed at InfoANUPQ level 3.
303
304
 Example 
305
gap> SetInfoLevel(InfoANUPQ, 4);
306

307
308
enables the display of all the commands directed to the pq program, behind a
309
ToPQ>  prompt (so that you can distinguish it from the output from the pq
310
program). See Section 'Hints and Warnings regarding the use of Options' for
311
an example of how this can be a useful troubleshooting tool.
312
313
 Example 
314
gap> SetInfoLevel(InfoANUPQ, 5);
315

316
317
enables the display of the pq program's prompts for input. Finally,
318
319
 Example 
320
gap> SetInfoLevel(InfoANUPQ, 6);
321

322
323
enables the display of all other output from the pq program, namely the
324
banner and menus. However, the timing data printed when the pq program exits
325
can never be observed.
326
327
328
3.4 Utility Functions
329
330
3.4-1 PqLeftNormComm
331
332
PqLeftNormComm( elts )  function
333
334
returns for a list of elements of some group (e.g. elts may be a list of
335
words in the generators of a free or fp group) the left normed commutator of
336
elts, e.g. if w1, w2, w3 are such elements then PqLeftNormComm( [w1, w2, w3]
337
); is equivalent to Comm( Comm( w1, w2 ), w3 );.
338
339
Note: elts must contain at least two elements.
340
341
3.4-2 PqGAPRelators
342
343
PqGAPRelators( group, rels )  function
344
345
returns a list of words that GAP understands, given a list rels of strings
346
in the string representations of the generators of the fp group group
347
prepared as a list of relators for the pq program.
348
349
Note: The pq program does not use / to indicate multiplication by an inverse
350
and uses square brackets to represent (left normed) commutators. Also, even
351
though the pq program accepts relations, all elements of rels must be in
352
relator form, i.e. a relation of form w1 = w2 must be written as w1*(w2)^-1.
353
354
Here is an example:
355
356
 Example 
357
gap> F := FreeGroup("a", "b");
358
<free group on the generators [ a, b ]>
359
gap> PqGAPRelators(F, [ "a*b^2", "[a,b]^2*a", "([a,b,a,b,b]*a*b)^2*a" ]);
360
[ a*b^2, a^-1*b^-1*a*b*a^-1*b^-1*a*b*a, b^-1*a^-1*b^-1*a^-1*b*a*b^-1*a*b*a^
361
 -1*b*a^-1*b^-1*a*b*a*b^-1*a^-1*b^-1*a^-1*b*a*b^-1*a*b^-1*a^-1*b*a^-1*b^
362
 -1*a*b*a*b*a^-1*b*a*b^-1*a*b*a^-1*b*a^-1*b^-1*a*b*a*b^-1*a^-1*b^-1*a^
363
 -1*b*a*b^-1*a*b^-1*a^-1*b*a^-1*b^-1*a*b*a*b^2*a*b*a ]
364

365
366
3.4-3 PqParseWord
367
368
PqParseWord( word, n )  function
369
370
parses a word, a string representing a word in the pc generators x1,...,xn,
371
through GAP. This function is provided as a rough-and-ready check of word
372
for syntax errors. A syntax error will cause the entering of a break-loop,
373
in which the error message may or may not be meaningful (depending on
374
whether the syntax error gets caught at the GAP or kernel level).
375
376
Note: The reason the generators must be x1,...,xn is that these are the pc
377
generator names used by the pq program (as distinct from the generator names
378
for the group provided by the user to a function like Pq that invokes the pq
379
program).
380
381
3.4-4 PqExample
382
383
PqExample( )  function
384
PqExample( example[, PqStart][, Display] )  function
385
PqExample( example[, PqStart][, filename] )  function
386
387
With no arguments, or with single argument "index", or a string example that
388
is not the name of a file in the examples directory, an index of available
389
examples is displayed.
390
391
With just the one argument example that is the name of a file in the
392
examples directory, the example contained in that file is executed in its
393
simplest form. Some examples accept options which you may use to modify some
394
of the options used in the commands of the example. To find out which
395
options an example accepts, use one of the mechanisms for displaying the
396
example described below.
397
398
Some examples have both non-interactive and interactive forms; those that
399
are non-interactive only have a name ending in -ni; those that are
400
interactive only have a name ending in -i; examples with names ending in .g
401
also have only one form; all other examples have both non-interactive and
402
interactive forms and for these giving PqStart as second argument invokes
403
PqStart initially and makes the appropriate adjustments so that the example
404
is executed or displayed using interactive functions.
405
406
If PqExample is called with last (second or third) argument Display then the
407
example is displayed without being executed. If the last argument is a
408
non-empty string filename then the example is also displayed without being
409
executed but is also written to a file with that name. Passing an empty
410
string as last argument has the same effect as passing Display.
411
412
Note: The variables used in PqExample are local to the running of PqExample,
413
so there's no danger of having some of your variables over-written. However,
414
they are not completely lost either. They are saved to a record
415
ANUPQData.examples.vars, i.e. if F is a variable used in the example then
416
you will be able to access it after PqExample has finished as
417
ANUPQData.examples.vars.F.
418
419
3.4-5 AllPqExamples
420
421
AllPqExamples( )  function
422
423
returns a list of all currently available examples in default UNIX-listing
424
(i.e. alphabetic) order.
425
426
3.4-6 GrepPqExamples
427
428
GrepPqExamples( string )  function
429
430
runs the UNIX command grep string over the ANUPQ examples and returns the
431
list of examples for which there is a match. The actual matches are Info-ed
432
at InfoANUPQ level 2.
433
434
3.4-7 ToPQLog
435
436
ToPQLog( [filename] )  function
437
438
With string argument filename, ToPQLog opens the file with name filename for
439
logging; all commands written to the pq binary (that are Info-ed behind a
440
ToPQ>  prompt at InfoANUPQ level 4) are then also written to that file (but
441
without prompts). With no argument, ToPQLog stops logging to whatever file
442
was being logged to. If a file was already being logged to, that file is
443
closed and the file with name filename is opened for logging.
444
445
446
3.5 Attributes and a Property for fp and pc p-groups
447
448
3.5-1 NuclearRank
449
450
NuclearRank( G )  attribute
451
MultiplicatorRank( G )  attribute
452
IsCapable( G )  property
453
454
return the nuclear rank of G, p-multiplicator rank of G, and whether G is
455
capable (i.e. true if it is, or false if it is not), respectively.
456
457
These attributes and property are set automatically if G is one of the
458
following:
459
460
 an fp group returned by PqStandardPresentation or StandardPresentation
461
(see PqStandardPresentation (4.2-1));
462
463
 the image (fp group) of the epimorphism returned by an
464
EpimorphismPqStandardPresentation or EpimorphismStandardPresentation
465
call (see EpimorphismPqStandardPresentation (4.2-2)); or
466
467
 one of the pc groups of the list of descendants returned by
468
PqDescendants (see PqDescendants (4.4-1)).
469
470
If G is an fp group or a pc p-group and not one of the above and the
471
attribute or property has not otherwise been set for G, then
472
PqStandardPresentation is called to set all three of NuclearRank,
473
MultiplicatorRank and IsCapable, before returning the value of the attribute
474
or property actually called. Such a group G must know in advance that it is
475
a p-group; this is the case for the groups returned by the functions Pq and
476
PqPCover, and the image group of the epimorphism returned by PqEpimorphism.
477
Otherwise, if you know the group to be a p-group, then this can be set by
478
typing
479
480

481
SetIsPGroup( G, true );
482

483
484
or by invoking IsPGroup( G ). Note that for an fp group G, the latter may
485
result in a coset enumeration which might not terminate in a reasonable
486
time.
487
488
Note: For G such that HasNuclearRank(G) = true, IsCapable(G) is equivalent
489
to (the truth or falsity of) NuclearRank( G ) = 0.
490
491
492
3.6 Hints and Warnings regarding the use of Options
493
494
On a first reading we recommend you skip this section and come back to it if
495
and when you run into trouble.
496
497
Note: By options we refer to GAP options. The pq program also uses the term
498
option; to distinguish the two usages of option, in this manual we use the
499
term menu item to refer to what the pq program refers to as an option.
500
501
Options are passed to the ANUPQ interface functions in either of the two
502
usual mechanisms provided by GAP, namely:
503
504
 options may be set globally using the function PushOptions (see
505
Chapter Reference: Options Stack in the GAP Reference Manual); or
506
507
 options may be appended to the argument list of any function call,
508
separated by a colon from the argument list (see Chapter Reference:
509
Function Calls in the GAP Reference Manual), in which case they are
510
then passed on recursively to any subsequent inner function call,
511
which may in turn have options of their own.
512
513
Particularly, when one is using the interactive functions of
514
Chapter 'Interactive ANUPQ functions', one should, in general, avoid using
515
the global method of passing options. In fact, it is recommended that prior
516
to calling PqStart the OptionsStack be empty. The essential problem with
517
setting options globally using the function PushOptions is that options
518
pushed onto OptionsStack, in this way, (generally) remain there until an
519
explicit PopOptions() call is made.
520
521
In contrast, options passed in the usual way behind a colon following a
522
function's arguments (see Reference: Function Call With Options in the GAP
523
Reference Manual) are local, and disappear from OptionsStack after the
524
function has executed successfully. If the function does not execute
525
successfully, i.e. it runs into error and the user quits the resulting break
526
loop (see Section Reference: Break Loops in the Reference Manual) rather
527
than attempting to repair the problem and typing return; then, unless the
528
error at the kernel level, the OptionsStack is reset. If an error is
529
detected inside the kernel (hopefully, this should occur only rarely, if at
530
all) then the options of that function will not be cleared from
531
OptionsStack; in such cases:
532
533
 Example 
534
gap> ResetOptionsStack();
535
#I Options stack is already empty
536

537
538
is usually necessary (see Chapter ResetOptionsStack (Reference:
539
ResetOptionsStack) in the GAP Reference Manual), which recursively calls
540
PopOptions() until OptionsStack is empty, or as in the above case warns you
541
that the OptionsStack is already empty.
542
543
Note that a function, that is passed options after the colon, will also see
544
any global options or any options passed down recursively from functions
545
calling that function, unless those options are over-ridden by options
546
passed via the function. Also, note that duplication of option names for
547
different programs may lead to misinterpretations, and mis-spelled options
548
will not be seen.
549
550
The non-interactive functions of Chapter 'Non-interactive ANUPQ functions'
551
that have Pq somewhere in their name provide an alternative method of
552
passing options as additional arguments. This has the advantages that
553
options can be abbreviated and mis-spelled options will be trapped.
554
555
3.6-1 ANUPQWarnOfOtherOptions
556
557
ANUPQWarnOfOtherOptions global variable
558
559
is a global variable that is by default false. If it is set to true then any
560
function provided by the ANUPQ function that recognises at least one option,
561
will warn you of other options, i.e. options that the function does not
562
recognise. These warnings are emitted at InfoWarning or InfoANUPQ level 1.
563
This is useful for detecting mis-spelled options. Here is an example using
564
the function Pq (first described in Chapter 'Non-interactive ANUPQ
565
functions'):
566
567
 Example 
568
gap> SetInfoLevel(InfoANUPQ, 1); # Set InfoANUPQ to default level
569
gap> ANUPQWarnOfOtherOptions := true;;
570
gap> # The following makes entry into break loops very ``quiet'' ...
571
gap> OnBreak := function() Where(0); end;;
572
gap> F := FreeGroup( "a", "b" );
573
<free group on the generators [ a, b ]>
574
gap> Pq( F : Prime := 2, Classbound := 1 );
575
#I ANUPQ Warning: Options: [ "Classbound" ] ignored
576
#I (invalid for generic function: `Pq').
577
user interrupt at
578
moreOfline := ReadLine( iostream );
579
Entering break read-eval-print loop ...
580
you can 'quit;' to quit to outer loop, or
581
you can 'return;' to continue
582

583
584
Here we mistyped ClassBound as Classbound, and after seeing the Info-ed
585
warning that Classbound was ignored, we typed a control-C (that's the user
586
interrupt at message) which took us into a break loop. Since the Pq command
587
was not able to finish, the options Prime and Classbound, in particular,
588
will still be on the OptionsStack:
589
590
 Example 
591
brk> OptionsStack;
592
[ rec( Prime := 2, Classbound := 1 ), 
593
 rec( Prime := 2, Classbound := 1, PqEpiOrPCover := "pQuotient" ) ]
594

595
596
The option PqEpiOrPCover is a behind-the-scenes option that need not concern
597
the user. On quitting the break-loop the OptionsStack is reset and a warning
598
telling you this is emitted:
599
600
 Example 
601
brk> quit; # to get back to the `gap>' prompt
602
#I Options stack has been reset
603

604
605
Above, we altered OnBreak (see OnBreak (Reference: OnBreak) in the Reference
606
manual) to reduce the back-tracing on entry into a break loop. We now
607
restore OnBreak to its usual value.
608
609
 Example 
610
gap> OnBreak := Where;;
611

612
613
Notes
614
615
In cases where functions recursively call others with options (e.g. when
616
using PqExample with options), setting ANUPQWarnOfOtherOptions := true may
617
give rise to spurious other option detections.
618
619
It is recommended that the novice user set ANUPQWarnOfOtherOptions to true
620
in their gap.ini file (see Section 'Loading the ANUPQ Package').
621
622
Other Troubleshooting Strategies
623
624
There are some other strategies which may have helped us to see our error
625
above. The function Pq recognises the option OutputLevel (see 6.2); if this
626
option is set to at least 1, the pq program provides information on each
627
class quotient as it is generated:
628
629
 Example 
630
gap> ANUPQWarnOfOtherOptions := false;; # Set back to normal
631
gap> F := FreeGroup( "a", "b" );;
632
gap> Pq( F : Prime := 2, Classbound := 1, OutputLevel := 1 ); 
633
#I Lower exponent-2 central series for [grp]
634
#I Group: [grp] to lower exponent-2 central class 1 has order 2^2
635
#I Group: [grp] to lower exponent-2 central class 2 has order 2^5
636
#I Group: [grp] to lower exponent-2 central class 3 has order 2^10
637
#I Group: [grp] to lower exponent-2 central class 4 has order 2^18
638
#I Group: [grp] to lower exponent-2 central class 5 has order 2^32
639
#I Group: [grp] to lower exponent-2 central class 6 has order 2^55
640
#I Group: [grp] to lower exponent-2 central class 7 has order 2^96
641
#I Group: [grp] to lower exponent-2 central class 8 has order 2^167
642
#I Group: [grp] to lower exponent-2 central class 9 has order 2^294
643
#I Group: [grp] to lower exponent-2 central class 10 has order 2^520
644
#I Group: [grp] to lower exponent-2 central class 11 has order 2^932
645
#I Group: [grp] to lower exponent-2 central class 12 has order 2^1679
646
[... output truncated ...]
647

648
649
After seeing the information for the class 2 quotient we may have got the
650
idea that the Classbound option was not recognised and may have realised
651
that this was due to a mis-spelling. The above will ordinarily cause the
652
available space to be exhausted, necessitating user-intervention by typing
653
control-C and quit; (to escape the break loop); otherwise Pq terminates when
654
the class reaches 63 (the default value of ClassBound).
655
656
If you have some familiarity with keyword command input to the pq binary,
657
then setting the level of InfoANUPQ to 4 would also have indicated a
658
problem:
659
660
 Example 
661
gap> ResetOptionsStack(); # Necessary, if a break-loop was entered above
662
gap> SetInfoLevel(InfoANUPQ, 4);
663
gap> Pq( F : Prime := 2, Classbound := 1 );
664
#I ToPQ> 7 #to (Main) p-Quotient Menu
665
#I ToPQ> 1 #define group
666
#I ToPQ> name [grp]
667
#I ToPQ> prime 2
668
#I ToPQ> class 63
669
#I ToPQ> exponent 0
670
#I ToPQ> output 0
671
#I ToPQ> generators { a,b }
672
#I ToPQ> relators { };
673
[... output truncated ...]
674

675
676
Here the line #I ToPQ> class 63 indicates that a directive to set the
677
classbound to 63 was sent to the pq program.
678
679
680