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
5 Interactive ANUPQ functions
3
4
Here we describe the interactive functions defined by the ANUPQ package,
5
i.e. the functions that manipulate and initiate interactive ANUPQ processes.
6
These are functions that extract information via a dialogue with a running
7
pq process (process used in the UNIX sense). Occasionally, a user needs the
8
next step; the functions provided in this chapter make use of data from
9
previous steps retained by the pq program, thus allowing the user to
10
interact with the pq program like one can when one uses the pq program as a
11
stand-alone (see guide.dvi in the standalone-doc directory).
12
13
An interactive ANUPQ process is initiated by PqStart and terminated via
14
PqQuit; these functions are described in ection 'Starting and Stopping
15
Interactive ANUPQ Processes'.
16
17
Each interactive ANUPQ function that manipulates an already started
18
interactive ANUPQ process, has a form where the first argument is the
19
integer i returned by the initiating PqStart command, and a second form with
20
one argument fewer (where the integer i is discovered by a default
21
mechanism, namely by determining the least integer i for which there is a
22
currently active interactive ANUPQ process). We will thus commonly say that
23
for the ith (or default) interactive ANUPQ process a certain function
24
performs a given action. In each case, it is an error if i is not the index
25
of an active interactive process, or there are no current active interactive
26
processes.
27
28
Notes: The global method of passing options (via PushOptions), should not be
29
used with any of the interactive functions. In fact, the OptionsStack should
30
be empty at the time any of the interactive functions is called.
31
32
On quitting GAP, PqQuitAll(); is executed, which terminates all active
33
interactive ANUPQ processes. If GAP is killed without quitting, before all
34
interactive ANUPQ processes are terminated, zombie processes (still living
35
child processes whose parents have died), may result. Since zombie processes
36
do consume resources, in such an event, the responsible computer user should
37
seek out and terminate those zombie processes (e.g. on Linux: ps xw | grep
38
pq gives you information on the pq processes corresponding to any
39
interactive ANUPQ processes started in a GAP session; you can then do kill N
40
for each number N appearing in the first column of this output).
41
42
43
5.1 Starting and Stopping Interactive ANUPQ Processes
44
45
5.1-1 PqStart
46
47
PqStart( G, workspace: options )  function
48
PqStart( G: options )  function
49
PqStart( workspace: options )  function
50
PqStart( : options )  function
51
52
activate an iostream for an interactive ANUPQ process (i.e. PqStart starts
53
up a pq process and opens a GAP iostream to talk to that process) and
54
returns an integer i that can be used to identify that process. The argument
55
G should be an fp group or pc group that the user intends to manipulate
56
using interactive ANUPQ functions. If the function is called without
57
specifying G, a group can be read in by using the function
58
PqRestorePcPresentation (see PqRestorePcPresentation (5.6-3)). If PqStart is
59
given an integer argument workspace, then the pq program is started up with
60
a workspace (an integer array) of size workspace (i.e. 4 × workspace bytes
61
in a 32-bit environment); otherwise, the pq program sets a default workspace
62
of 10000000.
63
64
The only options currently recognised by PqStart are Prime, Exponent and
65
Relators (see Chapter 'ANUPQ Options' for detailed descriptions of these
66
options) and if provided they are essentially global for the interactive
67
ANUPQ process, except that any interactive function interacting with the
68
process and passing new values for these options will over-ride the global
69
values.
70
71
5.1-2 PqQuit
72
73
PqQuit( i )  function
74
PqQuit( )  function
75
76
closes the stream of the ith or default interactive ANUPQ process and
77
unbinds its ANUPQData.io record.
78
79
Note: It can happen that the pq process, and hence the GAP iostream assigned
80
to communicate with it, can die, e.g. by the user typing a Ctrl-C while the
81
pq process is engaged in a long calculation. IsPqProcessAlive
82
(see IsPqProcessAlive (5.2-3)) is provided to check the status of the GAP
83
iostream (and hence the status of the pq process it was communicating with).
84
85
5.1-3 PqQuitAll
86
87
PqQuitAll( )  function
88
89
is provided as a convenience, to terminate all active interactive ANUPQ
90
processes with a single command. It is equivalent to executing PqQuit(i) for
91
all active interactive ANUPQ processes i (see PqQuit (5.1-2)).
92
93
94
5.2 Interactive ANUPQ Process Utility Functions
95
96
5.2-1 PqProcessIndex
97
98
PqProcessIndex( i )  function
99
PqProcessIndex( )  function
100
101
With argument i, which must be a positive integer, PqProcessIndex returns i
102
if it corresponds to an active interactive process, or raises an error. With
103
no arguments it returns the default active interactive process or returns
104
fail and emits a warning message to Info at InfoANUPQ or InfoWarning level
105
1.
106
107
Note: Essentially, an interactive ANUPQ process i is active if
108
ANUPQData.io[i] is bound (i.e. we still have some data telling us about it).
109
Also see PqStart (5.1-1).
110
111
5.2-2 PqProcessIndices
112
113
PqProcessIndices( )  function
114
115
returns the list of integer indices of all active interactive ANUPQ
116
processes (see PqProcessIndex (5.2-1) for the meaning of active).
117
118
5.2-3 IsPqProcessAlive
119
120
IsPqProcessAlive( i )  function
121
IsPqProcessAlive( )  function
122
123
return true if the GAP iostream of the ith (or default) interactive ANUPQ
124
process started by PqStart is alive (i.e. can still be written to), or
125
false, otherwise. (See the notes for PqStart (5.1-1) and PqQuit (5.1-2).)
126
127
If the user does not yet have a gap> prompt then usually the pq program is
128
still away doing something and an ANUPQ interface function is still waiting
129
for a reply. Typing a Ctrl-C (i.e. holding down the Ctrl key and typing c)
130
will stop the waiting and send GAP into a break-loop, from which one has no
131
option but to quit;. The typing of Ctrl-C, in such a circumstance, usually
132
causes the stream of the interactive ANUPQ process to die; to check this we
133
provide IsPqProcessAlive (see IsPqProcessAlive).
134
135
The GAP iostream of an interactive ANUPQ process will also die if the pq
136
program has a segmentation fault. We do hope that this never happens to you,
137
but if it does and the failure is reproducible, then it's a bug and we'd
138
like to know about it. Please read the README that comes with the ANUPQ
139
package to find out what to include in a bug report and who to email it to.
140
141
142
5.3 Interactive Versions of Non-interactive ANUPQ Functions
143
144
5.3-1 Pq
145
146
Pq( i: options )  function
147
Pq( : options )  function
148
149
return, for the fp or pc group (let us call it F), of the ith or default
150
interactive ANUPQ process, the p-quotient of F specified by options, as a pc
151
group; F must previously have been given (as first argument) to PqStart to
152
start the interactive ANUPQ process (see PqStart (5.1-1)) or restored from
153
file using the function PqRestorePcPresentation (see PqRestorePcPresentation
154
(5.6-3)). Following the colon options is a selection of the options listed
155
for the non-interactive Pq function (see Pq (4.1-1)), separated by commas
156
like record components (see Section Reference: Function Call With Options in
157
the GAP Reference Manual), except that the options SetupFile or PqWorkspace
158
are ignored by the interactive Pq, and RedoPcp is an option only recognised
159
by the interactive Pq i.e. the following options are recognised by the
160
interactive Pq function:
161
162
 Prime := p
163
164
 ClassBound := n
165
166
 Exponent := n
167
168
 Relators := rels
169
170
 Metabelian
171
172
 Identities := funcs
173
174
 GroupName := name
175
176
 OutputLevel := n
177
178
 RedoPcp
179
180
Detailed descriptions of the above options may be found in Chapter 'ANUPQ
181
Options'.
182
183
As a minimum the Pq function must have a value for the Prime option, though
184
Prime need not be passed again in the case it has previously been provided,
185
e.g. to PqStart (see PqStart (5.1-1)) when starting the interactive process.
186
187
The behaviour of the interactive Pq function depends on the current state of
188
the pc presentation stored by the pq program:
189
190
1 If no pc presentation has yet been computed (the case immediately
191
after the PqStart call initiating the process) then the quotient group
192
of the input group of the process of largest lower exponent-p class
193
bounded by the value of the ClassBound option (see 6.2) is returned.
194
195
2 If the current pc presentation of the process was determined by a
196
previous call to Pq or PqEpimorphism, and the current call has a
197
larger value ClassBound then the class is extended as much as is
198
possible and the quotient group of the input group of the process of
199
the new lower exponent-p class is returned.
200
201
3 If the current pc presentation of the process was determined by a
202
previous call to PqPCover then a consistent pc presentation of a
203
quotient for the current class is determined before proceeding as in
204
2.
205
206
4 If the RedoPcp option is supplied the current pc presentation is
207
scrapped, all options must be re-supplied (in particular, Prime must
208
be supplied) and then the Pq function proceeds as in 1.
209
210
See Section 'Attributes and a Property for fp and pc p-groups' for the
211
attributes and property NuclearRank, MultiplicatorRank and IsCapable which
212
may be applied to the group returned by Pq.
213
214
The following is one of the examples for the non-interactive Pq redone with
215
the interactive version. Also, we set the option OutputLevel to 1 (see 6.2),
216
in order to see the orders of the quotients of all the classes determined,
217
and we set the InfoANUPQ level to 2 (see InfoANUPQ (3.3-1)), so that we
218
catch the timing information.
219
220
 Example 
221
gap> F := FreeGroup("a", "b");; a := F.1;; b := F.2;;
222
gap> G := F / [a^4, b^4];
223
<fp group on the generators [ a, b ]>
224
gap> PqStart(G);
225
1
226
gap> SetInfoLevel(InfoANUPQ, 2); #To see timing information
227
gap> Pq(: Prime := 2, ClassBound := 3, OutputLevel := 1 );
228
#I Lower exponent-2 central series for [grp]
229
#I Group: [grp] to lower exponent-2 central class 1 has order 2^2
230
#I Group: [grp] to lower exponent-2 central class 2 has order 2^5
231
#I Group: [grp] to lower exponent-2 central class 3 has order 2^8
232
#I Computation of presentation took 0.00 seconds
233
<pc group of size 256 with 8 generators>
234

235
236
5.3-2 PqEpimorphism
237
238
PqEpimorphism( i: options )  function
239
PqEpimorphism( : options )  function
240
241
return, for the fp or pc group (let us call it F), of the ith or default
242
interactive ANUPQ process, an epimorphism from F onto the p-quotient of F
243
specified by options; F must previously have been given (as first argument)
244
to PqStart to start the interactive ANUPQ process (see PqStart (5.1-1)).
245
Since the underlying interactions with the pq program effected by the
246
interactive PqEpimorphism are identical to those effected by the interactive
247
Pq, everything said regarding the requirements and behaviour of the
248
interactive Pq function (see Pq (5.3-1)) is also the case for the
249
interactive PqEpimorphism.
250
251
Note: See Section 'Attributes and a Property for fp and pc p-groups' for the
252
attributes and property NuclearRank, MultiplicatorRank and IsCapable which
253
may be applied to the image group of the epimorphism returned by
254
PqEpimorphism.
255
256
5.3-3 PqPCover
257
258
PqPCover( i: options )  function
259
PqPCover( : options )  function
260
261
return, for the fp or pc group of the ith or default interactive ANUPQ
262
process, the p-covering group of the p-quotient Pq(i : options) or Pq(:
263
options), modulo the following:
264
265
1 If no pc presentation has yet been computed (the case immediately
266
after the PqStart call initiating the process) and the group F of the
267
process is already a p-group, in the sense that HasIsPGroup(F) and
268
IsPGroup(F) is true, then
269
270
Prime
271
defaults to PrimePGroup(F), if not supplied and
272
HasPrimePGroup(F) = true; and
273
274
ClassBound
275
defaults to PClassPGroup(F) if HasPClassPGroup(F) = true if not
276
supplied, or to the usual default of 63, otherwise.
277
278
2 If a pc presentation has been computed and none of options is RedoPcp
279
or if no pc presentation has yet been computed but 1. does not apply
280
then PqPCover(i : options); is equivalent to:
281
282
 
283
Pq(i : options);
284
PqPCover(i);
285

286
287
3 If the RedoPcp option is supplied the current pc presentation is
288
scrapped, and PqPCover proceeds as in 1. or 2. but without the RedoPcp
289
option.
290
291
5.3-4 PqStandardPresentation
292
293
PqStandardPresentation( [i]: options )  function
294
StandardPresentation( [i]: options )  function
295
296
return, for the ith or default interactive ANUPQ process, the p-quotient of
297
the group F of the process, specified by options, as an fp group which has a
298
standard presentation. Here options is a selection of the options from the
299
following list (see Chapter 'ANUPQ Options' for detailed descriptions); this
300
list is the same as for the non-interactive version of
301
PqStandardPresentation except for the omission of options SetupFile and
302
PqWorkspace (see PqStandardPresentation (4.2-1)).
303
304
 Prime := p
305
306
 pQuotient := Q
307
308
 ClassBound := n
309
310
 Exponent := n
311
312
 Metabelian
313
314
 GroupName := name
315
316
 OutputLevel := n
317
318
 StandardPresentationFile := filename
319
320
Unless F is a pc p-group, or the option Prime has been passed to a previous
321
interactive function for the process to compute a p-quotient for F, the user
322
must supply either the option Prime or the option pQuotient (if both Prime
323
and pQuotient are supplied, the prime p is determined by applying
324
PrimePGroup (see PrimePGroup (Reference: PrimePGroup) in the Reference
325
Manual) to the value of pQuotient).
326
327
Taking one of the examples for the non-interactive version of
328
StandardPresentation (see StandardPresentation (4.2-1)) that required two
329
separate calls to the pq program, we now show how it can be done by setting
330
up a dialogue with just the one pq process, using the interactive version of
331
StandardPresentation:
332
333
 Example 
334
gap> F4 := FreeGroup( "a", "b", "c", "d" );;
335
gap> a := F4.1;; b := F4.2;; c := F4.3;; d := F4.4;;
336
gap> G4 := F4 / [ b^4, b^2 / Comm(Comm (b, a), a), d^16,
337
>  a^16 / (c * d), b^8 / (d * c^4) ];
338
<fp group on the generators [ a, b, c, d ]>
339
gap> SetInfoLevel(InfoANUPQ, 1); #Only essential Info please
340
gap> PqStart(G4); #Start a new interactive process for a new group
341
2
342
gap> K := Pq( 2 : Prime := 2, ClassBound := 1 ); #`pq' process no. is 2
343
<pc group of size 4 with 2 generators>
344
gap> StandardPresentation( 2 : pQuotient := K, ClassBound := 14 );
345
<fp group with 53 generators>
346

347
348
Notes
349
350
In contrast to the function Pq (see Pq (4.1-1)) which returns a pc group,
351
PqStandardPresentation or StandardPresentation returns an fp group. This is
352
because the output is mainly used for isomorphism testing for which an fp
353
group is enough. However, the presentation is a polycyclic presentation and
354
if you need to do any further computation with this group (e.g. to find the
355
order) you can use the function PcGroupFpGroup (see PcGroupFpGroup
356
(Reference: PcGroupFpGroup) in the GAP Reference Manual) to form a pc group.
357
358
If the user does not supply a p-quotient Q via the pQuotient option, and the
359
prime p is either supplied, stored, or F is a pc p-group, then a p-quotient
360
Q is computed. (The value of the prime p is stored if passed initially to
361
PqStart or to a subsequent interactive process.) Note that a stored value
362
for pQuotient (from a prior call to Pq) does not have precedence over a
363
value for the prime p. If the user does supply a p-quotient Q via the
364
pQuotient option, the package AutPGrp is called to compute the automorphism
365
group of Q; an error will occur that asks the user to install the package
366
AutPGrp if the automorphism group cannot be computed.
367
368
If any of the interactive functions PqStandardPresentation,
369
StandardPresentation, EpimorphismPqStandardPresentation or
370
EpimorphismStandardPresentation has been called previously for an
371
interactive process, a subsequent call to any of these functions for the
372
same process returns the previously computed value. Note that all these
373
functions compute both an epimorphism and an fp group and store the results
374
in the SPepi and SP fields of the data record associated with the process.
375
See the example for the interactive EpimorphismStandardPresentation
376
(EpimorphismStandardPresentation (5.3-5)).
377
378
The attributes and property NuclearRank, MultiplicatorRank and IsCapable are
379
set for the group returned by PqStandardPresentation or StandardPresentation
380
(see Section 'Attributes and a Property for fp and pc p-groups').
381
382
5.3-5 EpimorphismPqStandardPresentation
383
384
EpimorphismPqStandardPresentation( [i]: options )  function
385
EpimorphismStandardPresentation( [i]: options )  method
386
387
Each of the above functions accepts the same arguments and options as the
388
interactive form of StandardPresentation (see StandardPresentation (5.3-4))
389
and returns an epimorphism from the fp or pc group F of the ith or default
390
interactive ANUPQ process onto the finitely presented group given by a
391
standard presentation, i.e. if S is the standard presentation computed for
392
the p-quotient of F by StandardPresentation then
393
EpimorphismStandardPresentation returns the epimorphism from F to the group
394
with presentation S. The group F must have been given (as first argument) to
395
PqStart to start the interactive ANUPQ process (see PqStart (5.1-1)).
396
397
Taking our earlier non-interactive example
398
(see EpimorphismPqStandardPresentation (4.2-2)) and modifying it a little,
399
we illustrate, as for the interactive StandardPresentation
400
(see StandardPresentation (5.3-4)), how something that required two separate
401
calls to the pq program can now be achieved with a dialogue with just one pq
402
process. Also, observe that calls to one of the standard presentation
403
functions (as mentioned in the notes of StandardPresentation (5.3-4))
404
computes and stores both an fp group with a standard presentation and an
405
epimorphism; subsequent calls to a standard presentation function for the
406
same process simply return the appropriate stored value.
407
408
 Example 
409
gap> F := FreeGroup(6, "F");;
410
gap> x := F.1;; y := F.2;; z := F.3;; w := F.4;; a := F.5;; b := F.6;;
411
gap> R := [x^3 / w, y^3 / w * a^2 * b^2, w^3 / b,
412
>  Comm (y, x) / z, Comm (z, x), Comm (z, y) / a, z^3 ];
413
[ F1^3*F4^-1, F2^3*F4^-1*F5^2*F6^2, F4^3*F6^-1, F2^-1*F1^-1*F2*F1*F3^-1, 
414
 F3^-1*F1^-1*F3*F1, F3^-1*F2^-1*F3*F2*F5^-1, F3^3 ]
415
gap> Q := F / R;
416
<fp group on the generators [ F1, F2, F3, F4, F5, F6 ]>
417
gap> PqStart( Q );
418
3
419
gap> G := Pq( 3 : Prime := 3, ClassBound := 3 );
420
<pc group of size 729 with 6 generators>
421
gap> lev := InfoLevel(InfoANUPQ);; # Save current InfoANUPQ level
422
gap> SetInfoLevel(InfoANUPQ, 2); # To see computation times
423
gap> # It is not necessary to pass the `Prime' option to
424
gap> # `EpimorphismStandardPresentation' since it was previously
425
gap> # passed to `Pq':
426
gap> phi := EpimorphismStandardPresentation( 3 : ClassBound := 3 );
427
#I Class 1 3-quotient and its 3-covering group computed in 0.00 seconds
428
#I Order of GL subgroup is 48
429
#I No. of soluble autos is 0
430
#I dim U = 1 dim N = 3 dim M = 3
431
#I nice stabilizer with perm rep
432
#I Computing standard presentation for class 2 took 0.00 seconds
433
#I Computing standard presentation for class 3 took 0.01 seconds
434
[ F1, F2, F3, F4, F5, F6 ] -> [ f1*f2^2*f3*f4^2*f5^2, f1*f2*f3*f5, f3^2, 
435
 f4*f6^2, f5, f6 ]
436
gap> # Image of phi should be isomorphic to G ...
437
gap> # let's check the order is correct:
438
gap> Size( Image(phi) );
439
729
440
gap> # `StandardPresentation' and `EpimorphismStandardPresentation'
441
gap> # behave like attributes, so no computation is done when
442
gap> # either is called again for the same process ...
443
gap> StandardPresentation( 3 : ClassBound := 3 );
444
<fp group of size 729 on the generators [ f1, f2, f3, f4, f5, f6 ]>
445
gap> # No timing data was Info-ed since no computation was done
446
gap> SetInfoLevel(InfoANUPQ, lev); # Restore previous InfoANUPQ level
447

448
449
A very similar (essential details are the same) example to the above may be
450
executed live, by typing: PqExample( "EpimorphismStandardPresentation-i" );.
451
452
Note: The notes for PqStandardPresentation or StandardPresentation
453
(see PqStandardPresentation (5.3-4)) apply also to
454
EpimorphismPqStandardPresentation or EpimorphismStandardPresentation except
455
that their return value is an epimorphism onto an fp group, i.e. one should
456
interpret the phrase returns an fp group as returns an epimorphism onto an
457
fp group etc.
458
459
5.3-6 PqDescendants
460
461
PqDescendants( i: options )  function
462
PqDescendants( : options )  function
463
464
return for the pc group G of the ith or default interactive ANUPQ process,
465
which must be of prime power order with a confluent pc presentation
466
(see IsConfluent (Reference: IsConfluent for pc groups) in the GAP Reference
467
Manual), a list of descendants (pc groups) of G. The group G is usually
468
given as first argument to PqStart when starting the interactive ANUPQ
469
process (see PqStart (5.1-1)). Alternatively, one may initiate the process
470
with an fp group, use Pq interactively (see Pq (5.3-1)) to create a pc group
471
and use PqSetPQuotientToGroup (see PqSetPQuotientToGroup (5.3-7)), which
472
involves no computation, to set the pc group returned by Pq as the group of
473
the process. Note that repeating a call to PqDescendants for the same
474
interactive ANUPQ process simply returns the list of descendants originally
475
calculated; a warning is emitted at InfoANUPQ level 1 reminding you of this
476
should you do this.
477
478
After the colon, options a selection of the options listed for the
479
non-interactive PqDescendants function (see PqDescendants (4.4-1)), should
480
be given, separated by commas like record components (see Section Reference:
481
Function Call With Options in the GAP Reference Manual), except that the
482
options SetupFile or PqWorkspace are ignored by the interactive
483
PqDescendants, i.e. the following options are recognised by the interactive
484
PqDescendants function:
485
486
 ClassBound := n
487
488
 Relators := rels
489
490
 OrderBound := n
491
492
 StepSize := n, StepSize := list
493
494
 RankInitialSegmentSubgroups := n
495
496
 SpaceEfficient
497
498
 CapableDescendants
499
500
 AllDescendants := false
501
502
 Exponent := n
503
504
 Metabelian
505
506
 GroupName := name
507
508
 SubList := sub
509
510
 BasicAlgorithm
511
512
 CustomiseOutput := rec
513
514
Notes: The function PqDescendants uses the automorphism group of G which it
515
computes via the package AutPGrp if the automorphism group of G is not
516
already present. If AutPGrp is not installed an error may be raised. If the
517
automorphism group of G is insoluble the pq program will call GAP together
518
with the AutPGrp package for certain orbit-stabilizer calculations.
519
520
The attributes and property NuclearRank, MultiplicatorRank and IsCapable are
521
set for each group of the list returned by PqDescendants (see
522
Section 'Attributes and a Property for fp and pc p-groups').
523
524
Let us now repeat the examples previously given for the non-interactive
525
PqDescendants, but this time with the interactive version of PqDescendants:
526
527
 Example 
528
gap> F := FreeGroup( "a", "b" );; a := F.1;; b := F.2;;
529
gap> G := PcGroupFpGroup( F / [ a^2, b^2, Comm(b, a) ] );
530
<pc group of size 4 with 2 generators>
531
gap> PqStart(G); #This will now be the 4th interactive process running
532
4
533
gap> des := PqDescendants( 4 : OrderBound := 6, ClassBound := 5 );;
534
gap> Length(des);
535
83
536
gap> List(des, Size);
537
[ 8, 8, 8, 16, 16, 16, 32, 16, 16, 16, 16, 16, 32, 32, 64, 64, 32, 32, 32, 
538
 32, 32, 32, 32, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 32, 32, 32, 32, 
539
 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 64, 64, 64, 
540
 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 
541
 64, 64, 64, 64, 64, 64, 64 ]
542
gap> List(des, d -> Length( PCentralSeries( d, 2 ) ) - 1 );
543
[ 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
544
 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 
545
 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
546
 4, 4, 4, 5, 5, 5, 5, 5 ]
547

548
549
In the second example we compute all capable descendants of order 27 of the
550
elementary abelian group of order 9.
551
552
 Example 
553
gap> F := FreeGroup( 2, "g" );;
554
gap> G := PcGroupFpGroup( F / [ F.1^3, F.2^3, Comm(F.1, F.2) ] );
555
<pc group of size 9 with 2 generators>
556
gap> PqStart(G); #This will now be the 5th interactive process running
557
5
558
gap> des := PqDescendants( 5 : OrderBound := 3, ClassBound := 2,
559
>  CapableDescendants );
560
[ <pc group of size 27 with 3 generators>, 
561
 <pc group of size 27 with 3 generators> ]
562
gap> List(des, d -> Length( PCentralSeries( d, 3 ) ) - 1 );
563
[ 2, 2 ]
564
gap> # For comparison let us now compute all descendants
565
gap> # (using the non-interactive Pq function)
566
gap> PqDescendants( G : OrderBound := 3, ClassBound := 2);
567
[ <pc group of size 27 with 3 generators>, 
568
 <pc group of size 27 with 3 generators>, 
569
 <pc group of size 27 with 3 generators> ]
570

571
572
In the third example, we compute all capable descendants of the elementary
573
abelian group of order 5^2 which have exponent-5 class at most 3, exponent
574
5, and are metabelian.
575
576
 Example 
577
gap> F := FreeGroup( 2, "g" );;
578
gap> G := PcGroupFpGroup( F / [ F.1^5, F.2^5, Comm(F.2, F.1) ] );
579
<pc group of size 25 with 2 generators>
580
gap> PqStart(G); #This will now be the 6th interactive process running
581
6
582
gap> des := PqDescendants( 6 : Metabelian, ClassBound := 3,
583
>  Exponent := 5, CapableDescendants );
584
[ <pc group of size 125 with 3 generators>, 
585
 <pc group of size 625 with 4 generators>, 
586
 <pc group of size 3125 with 5 generators> ]
587
gap> List(des, d -> Length( PCentralSeries( d, 5 ) ) - 1 );
588
[ 2, 3, 3 ]
589
gap> List(des, d -> Length( DerivedSeries( d ) ) );
590
[ 3, 3, 3 ]
591
gap> List(des, d -> Maximum( List( Elements(d), Order ) ) );
592
[ 5, 5, 5 ]
593

594
595
5.3-7 PqSetPQuotientToGroup
596
597
PqSetPQuotientToGroup( i )  function
598
PqSetPQuotientToGroup( )  function
599
600
for the ith or default interactive ANUPQ process, set the p-quotient
601
previously computed by the interactive Pq function (see Pq (5.3-1)) to be
602
the group of the process. This function is supplied to enable the
603
computation of descendants of a p-quotient that is already known to the pq
604
program, via the interactive PqDescendants function (see PqDescendants
605
(5.3-6)), thus avoiding the need to re-submit it and have the pq program
606
recompute it.
607
608
Note: See the function PqPGSetDescendantToPcp (PqPGSetDescendantToPcp
609
(5.9-4)) for a mechanism to make (the p-cover of) a particular descendants
610
the current group of the process.
611
612
The following example of the usage of PqSetPQuotientToGroup, which is
613
essentially equivalent to what is obtained by running
614
PqExample("PqDescendants-1-i");, redoes the first example of PqDescendants
615
(5.3-6) (which computes the descendants of the Klein four group).
616
617
 Example 
618
gap> F := FreeGroup( "a", "b" );
619
<free group on the generators [ a, b ]>
620
gap> procId := PqStart( F : Prime := 2 );
621
7
622
gap> Pq( procId : ClassBound := 1 );
623
<pc group of size 4 with 2 generators>
624
gap> PqSetPQuotientToGroup( procId );
625
gap> des := PqDescendants( procId : OrderBound := 6, ClassBound := 5 );;
626
gap> Length(des);
627
83
628
gap> List(des, Size);
629
[ 8, 8, 8, 16, 16, 16, 32, 16, 16, 16, 16, 16, 32, 32, 64, 64, 32, 32, 32, 
630
 32, 32, 32, 32, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 32, 32, 32, 32, 
631
 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 64, 64, 64, 
632
 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 
633
 64, 64, 64, 64, 64, 64, 64 ]
634
gap> List(des, d -> Length( PCentralSeries( d, 2 ) ) - 1 );
635
[ 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 
636
 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 
637
 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 
638
 4, 4, 4, 5, 5, 5, 5, 5 ]
639

640
641
642
5.4 Low-level Interactive ANUPQ functions based on menu items of the pq
643
program
644
645
The pq program has 5 menus, the details of which the reader will not
646
normally need to know, but if she wishes to know the details they may be
647
found in the standalone manual: guide.dvi. Both guide.dvi and the pq program
648
refer to the items of these 5 menus as options, which do not correspond in
649
any way to the options used by any of the GAP functions that interface with
650
the pq program.
651
652
Warning: The commands provided in this section are intended to provide
653
something like the interactive functionality one has when running the
654
standalone, from within GAP. The pq standalone (in particular, its advanced
655
menus) assumes some expertise of the user; doing the wrong thing can cause
656
the program to crash. While a number of safeguards have been provided in the
657
GAP interface to the pq program, these are not foolproof, and the user
658
should exercise care and ensure pre-requisites of the various commands are
659
met.
660
661
662
5.5 General commands
663
664
The following commands either use a menu item from whatever menu is current
665
for the pq program, or have general application and are not associated with
666
just one menu item of the pq program.
667
668
5.5-1 PqNrPcGenerators
669
670
PqNrPcGenerators( i )  function
671
PqNrPcGenerators( )  function
672
673
for the ith or default interactive ANUPQ process, return the number of pc
674
generators of the lower exponent p-class quotient of the group currently
675
determined by the process. This also applies if the pc presentation is not
676
consistent.
677
678
5.5-2 PqFactoredOrder
679
680
PqFactoredOrder( i )  function
681
PqFactoredOrder( )  function
682
683
for the ith or default interactive ANUPQ process, return an integer pair [p,
684
n] where p is a prime and n is the number of pc generators
685
(see PqNrPcGenerators (5.5-1)) in the pc presentation of the quotient group
686
currently determined by the process. If this presentation is consistent,
687
then p^n is the order of the quotient group. Otherwise (if tails have been
688
added but the necessary consistency checks, relation collections, exponent
689
law checks and redundant generator eliminations have not yet been done), p^n
690
is an upper bound for the order of the group.
691
692
5.5-3 PqOrder
693
694
PqOrder( i )  function
695
PqOrder( )  function
696
697
for the ith or default interactive ANUPQ process, return p^n where [p, n] is
698
the pair as returned by PqFactoredOrder (see PqFactoredOrder (5.5-2)).
699
700
5.5-4 PqPClass
701
702
PqPClass( i )  function
703
PqPClass( )  function
704
705
for the ith or default interactive ANUPQ process, return the lower exponent
706
p-class of the quotient group currently determined by the process.
707
708
5.5-5 PqWeight
709
710
PqWeight( i, j )  function
711
PqWeight( j )  function
712
713
for the ith or default interactive ANUPQ process, return the weight of the
714
jth pc generator of the lower exponent p-class quotient of the group
715
currently determined by the process, or fail if there is no such numbered pc
716
generator.
717
718
5.5-6 PqCurrentGroup
719
720
PqCurrentGroup( i )  function
721
PqCurrentGroup( )  function
722
723
for the ith or default interactive ANUPQ process, return the group whose pc
724
presentation is determined by the process as a GAP pc group (either a lower
725
exponent p-class quotient of the start group or the p-cover of such a
726
quotient).
727
728
Notes: See Section 'Attributes and a Property for fp and pc p-groups' for
729
the attributes and property NuclearRank, MultiplicatorRank and IsCapable
730
which may be applied to the group returned by PqCurrentGroup.
731
732
5.5-7 PqDisplayPcPresentation
733
734
PqDisplayPcPresentation( i: [OutputLevel := lev] )  function
735
PqDisplayPcPresentation( : [OutputLevel := lev] )  function
736
737
for the ith or default interactive ANUPQ process, direct the pq program to
738
display the pc presentation of the lower exponent p-class quotient of the
739
group currently determined by the process.
740
741
Except if the last command communicating with the pq program was a p-group
742
generation command (for which there is only a verbose output level), to set
743
the amount of information this command displays you may wish to call
744
PqSetOutputLevel first (see PqSetOutputLevel (5.5-8)), or equivalently pass
745
the option OutputLevel (see 6.2).
746
747
Note: For those familiar with the pq program, PqDisplayPcPresentation
748
performs menu item 4 of the current menu of the pq program.
749
750
5.5-8 PqSetOutputLevel
751
752
PqSetOutputLevel( i, lev )  function
753
PqSetOutputLevel( lev )  function
754
755
for the ith or default interactive ANUPQ process, direct the pq program to
756
set the output level of the pq program to lev.
757
758
Note: For those familiar with the pq program, PqSetOutputLevel performs menu
759
item 5 of the main (or advanced) p-Quotient menu, or the Standard
760
Presentation menu.
761
762
5.5-9 PqEvaluateIdentities
763
764
PqEvaluateIdentities( i: [Identities := funcs] )  function
765
PqEvaluateIdentities( : [Identities := funcs] )  function
766
767
for the ith or default interactive ANUPQ process, invoke the evaluation of
768
identities defined by the Identities option, and eliminate any redundant pc
769
generators formed. Since a previous value of Identities is saved in the data
770
record of the process, it is unnecessary to pass the Identities if set
771
previously.
772
773
Note: This function is mainly implemented at the GAP level. It does not
774
correspond to a menu item of the pq program.
775
776
777
5.6 Commands from the Main p-Quotient menu
778
779
5.6-1 PqPcPresentation
780
781
PqPcPresentation( i: options )  function
782
PqPcPresentation( : options )  function
783
784
for the ith or default interactive ANUPQ process, direct the pq program to
785
compute the pc presentation of the quotient (determined by options) of the
786
group of the process, which for process i is stored as
787
ANUPQData.io[i].group.
788
789
The possible options are the same as for the interactive Pq (see Pq (5.3-1))
790
function, except for RedoPcp (which, in any case, would be superfluous),
791
namely: Prime, ClassBound, Exponent, Relators, GroupName, Metabelian,
792
Identities and OutputLevel (see Chapter 'ANUPQ Options' for a detailed
793
description for these options). The option Prime is required unless already
794
provided to PqStart.
795
796
Notes
797
798
The pc presentation is held by the pq program. In contrast to Pq (see Pq
799
(5.3-1)), no GAP pc group is returned; see PqCurrentGroup (PqCurrentGroup
800
(5.5-6)) if you need the corresponding GAP pc group.
801
802
PqPcPresentation(i: options); is roughly equivalent to the following
803
sequence of low-level commands:
804
805

806
PqPcPresentation(i: opts); #class 1 call
807
for c in [2 .. class] do
808
 PqNextClass(i);
809
od;
810

811
812
where opts is options except with the ClassBound option set to 1, and class
813
is either the maximum class of a p-quotient of the group of the process or
814
the user-supplied value of the option ClassBound (whichever is smaller). If
815
the Identities option has been set, both the first PqPcPresentation class 1
816
call and the PqNextClass calls invoke PqEvaluateIdentities(i); as their
817
final step.
818
819
For those familiar with the pq program, PqPcPresentation performs menu item
820
1 of the main p-Quotient menu.
821
822
5.6-2 PqSavePcPresentation
823
824
PqSavePcPresentation( i, filename )  function
825
PqSavePcPresentation( filename )  function
826
827
for the ith or default interactive ANUPQ process, direct the pq program to
828
save the pc presentation previously computed for the quotient of the group
829
of that process to the file with name filename. If the first character of
830
the string filename is not /, filename is assumed to be the path of a
831
writable file relative to the directory in which GAP was started. A saved
832
file may be restored by PqRestorePcPresentation (see PqRestorePcPresentation
833
(5.6-3)).
834
835
Note: For those familiar with the pq program, PqSavePcPresentation performs
836
menu item 2 of the main p-Quotient menu.
837
838
5.6-3 PqRestorePcPresentation
839
840
PqRestorePcPresentation( i, filename )  function
841
PqRestorePcPresentation( filename )  function
842
843
for the ith or default interactive ANUPQ process, direct the pq program to
844
restore the pc presentation previously saved to filename, by
845
PqSavePcPresentation (see PqSavePcPresentation (5.6-2)). If the first
846
character of the string filename is not /, filename is assumed to be the
847
path of a readable file relative to the directory in which GAP was started.
848
849
Note: For those familiar with the pq program, PqRestorePcPresentation
850
performs menu item 3 of the main p-Quotient menu.
851
852
5.6-4 PqNextClass
853
854
PqNextClass( i: [QueueFactor] )  function
855
PqNextClass( : [QueueFactor] )  function
856
857
for the ith or default interactive ANUPQ process, direct the pq program to
858
calculate the next class of ANUPQData.io[i].group.
859
860
PqNextClass accepts the option QueueFactor (see also 6.2) which should be a
861
positive integer if automorphisms have been previously supplied. If the pq
862
program requires a queue factor and none is supplied via the option
863
QueueFactor a default of 15 is taken.
864
865
Notes
866
867
The single command: PqNextClass(i); is equivalent to executing
868
869

870
PqComputePCover(i);
871
PqCollectDefiningRelations(i);
872
PqDoExponentChecks(i);
873
PqEliminateRedundantGenerators(i);
874

875
876
If the Identities option is set the PqEliminateRedundantGenerators(i); step
877
is essentially replaced by PqEvaluateIdentities(i); (which invokes its own
878
elimination of redundant generators).
879
880
For those familiar with the pq program, PqNextClass performs menu item 6 of
881
the main p-Quotient menu.
882
883
5.6-5 PqComputePCover
884
885
PqComputePCover( i )  function
886
PqComputePCover( )  function
887
888
for the ith or default interactive ANUPQ processi, directi, the pq program
889
to compute the p-covering group of ANUPQData.io[i].group. In contrast to the
890
function PqPCover (see PqPCover (4.1-3)), this function does not return a
891
GAP pc group.
892
893
Notes
894
895
The single command: PqComputePCover(i); is equivalent to executing
896
897

898
PqSetupTablesForNextClass(i);
899
PqTails(i, 0);
900
PqDoConsistencyChecks(i, 0, 0);
901
PqEliminateRedundantGenerators(i);
902

903
904
For those familiar with the pq program, PqComputePCover performs menu item 7
905
of the main p-Quotient menu.
906
907
908
5.7 Commands from the Advanced p-Quotient menu
909
910
5.7-1 PqCollect
911
912
PqCollect( i, word )  function
913
PqCollect( word )  function
914
915
for the ith or default interactive ANUPQ process, instruct the pq program to
916
do a collection on word, a word in the current pc generators (the form of
917
word required is described below). PqCollect returns the resulting word of
918
the collection as a list of generator number, exponent pairs (the same form
919
as the second allowed input form of word; see below).
920
921
The argument word may be input in either of the following ways:
922
923
1 word may be a string, where the ith pc generator is represented by xi,
924
e.g. "x3*x2^2*x1". This way is quite versatile as parentheses and
925
left-normed commutators -- using square brackets, in the same way as
926
PqGAPRelators (see PqGAPRelators (3.4-2)) -- are permitted; word is
927
checked for correct syntax via PqParseWord (see PqParseWord (3.4-3)).
928
929
2 Otherwise, word must be a list of generator number, exponent pairs of
930
integers, i.e.  each pair represents a syllable so that [ [3, 1], [2,
931
2], [1, 1] ] represents the same word as that of the example given for
932
the first allowed form of word.
933
934
Note: For those familiar with the pq program, PqCollect performs menu item 1
935
of the Advanced p-Quotient menu.
936
937
5.7-2 PqSolveEquation
938
939
PqSolveEquation( i, a, b )  function
940
PqSolveEquation( a, b )  function
941
942
for the ith or default interactive ANUPQ process, direct the pq program to
943
solve a * x = b for x, where a and b are words in the pc generators. For the
944
representation of these words see the description of the function PqCollect
945
(PqCollect (5.7-1)).
946
947
Note: For those familiar with the pq program, PqSolveEquation performs menu
948
item 2 of the Advanced p-Quotient menu.
949
950
5.7-3 PqCommutator
951
952
PqCommutator( i, words, pow )  function
953
PqCommutator( words, pow )  function
954
955
for the ith or default interactive ANUPQ process, instruct the pq program to
956
compute the left normed commutator of the list words of words in the current
957
pc generators raised to the integer power pow, and return the resulting word
958
as a list of generator number, exponent pairs. The form required for each
959
word of words is the same as that required for the word argument of
960
PqCollect (see PqCollect (5.7-1)). The form of the output word is also the
961
same as for PqCollect.
962
963
Note: For those familiar with the pq program, PqCommutator performs menu
964
item 3 of the Advanced p-Quotient menu.
965
966
5.7-4 PqSetupTablesForNextClass
967
968
PqSetupTablesForNextClass( i )  function
969
PqSetupTablesForNextClass( )  function
970
971
for the ith or default interactive ANUPQ process, direct the pq program to
972
set up tables for the next class. As as side-effect, after
973
PqSetupTablesForNextClass(i) the value returned by PqPClass(i) will be one
974
more than it was previously.
975
976
Note: For those familiar with the pq program, PqSetupTablesForNextClass
977
performs menu item 6 of the Advanced p-Quotient menu.
978
979
5.7-5 PqTails
980
981
PqTails( i, weight )  function
982
PqTails( weight )  function
983
984
for the ith or default interactive ANUPQ process, direct the pq program to
985
compute and add tails of weight weight if weight is in the integer range [2
986
.. PqPClass(i)] (assuming i is the number of the process, even in the
987
default case) or for all weights if weight = 0.
988
989
If weight is non-zero, then tails that introduce new generators for only
990
weight weight are computed and added, and in this case and if weight <
991
PqPClass(i), it is assumed that the tails that introduce new generators for
992
each weight from PqPClass(i) down to weight weight + 1 have already been
993
added. You may wish to call PqSetMetabelian (see PqSetMetabelian (5.7-16))
994
prior to calling PqTails.
995
996
Notes
997
998
For its use in the context of finding the next class see PqNextClass
999
(5.6-4); in particular, a call to PqSetupTablesForNextClass
1000
(see PqSetupTablesForNextClass (5.7-4)) needs to have been made prior to
1001
calling PqTails.
1002
1003
The single command: PqTails(i, weight); is equivalent to
1004
1005

1006
PqComputeTails(i, weight);
1007
PqAddTails(i, weight);
1008

1009
1010
For those familiar with the pq program, PqTails uses menu item 7 of the
1011
Advanced p-Quotient menu.
1012
1013
5.7-6 PqComputeTails
1014
1015
PqComputeTails( i, weight )  function
1016
PqComputeTails( weight )  function
1017
1018
for the ith or default interactive ANUPQ process, direct the pq program to
1019
compute tails of weight weight if weight is in the integer range [2 ..
1020
PqPClass(i)] (assuming i is the number of the process, even in the default
1021
case) or for all weights if weight = 0. See PqTails (PqTails (5.7-5)) for
1022
more details.
1023
1024
Note: For those familiar with the pq program, PqComputeTails uses menu item
1025
7 of the Advanced p-Quotient menu.
1026
1027
5.7-7 PqAddTails
1028
1029
PqAddTails( i, weight )  function
1030
PqAddTails( weight )  function
1031
1032
for the ith or default interactive ANUPQ process, direct the pq program to
1033
add the tails of weight weight, previously computed by PqComputeTails
1034
(see PqComputeTails (5.7-6)), if weight is in the integer range [2 ..
1035
PqPClass(i)] (assuming i is the number of the process, even in the default
1036
case) or for all weights if weight = 0. See PqTails (PqTails (5.7-5)) for
1037
more details.
1038
1039
Note: For those familiar with the pq program, PqAddTails uses menu item 7 of
1040
the Advanced p-Quotient menu.
1041
1042
5.7-8 PqDoConsistencyChecks
1043
1044
PqDoConsistencyChecks( i, weight, type )  function
1045
PqDoConsistencyChecks( weight, type )  function
1046
1047
for the ith or default interactive ANUPQ process, do consistency checks for
1048
weight weight if weight is in the integer range [3 .. PqPClass(i)] (assuming
1049
i is the number of the process) or for all weights if weight = 0, and for
1050
type type if type is in the range [1, 2, 3] (see below) or for all types if
1051
type = 0. (For its use in the context of finding the next class see
1052
PqNextClass (5.6-4).)
1053
1054
The type of a consistency check is defined as follows.
1055
PqDoConsistencyChecks(i, weight, type) for weight in [3 .. PqPClass(i)] and
1056
the given value of type invokes the equivalent of the following
1057
PqDoConsistencyCheck calls (see PqDoConsistencyCheck (5.7-17)):
1058
1059
type = 1:
1060
PqDoConsistencyCheck(i, a, a, a) checks 2 * PqWeight(i, a) + 1 =
1061
weight, for pc generators of index a.
1062
1063
type = 2:
1064
PqDoConsistencyCheck(i, b, b, a) checks for pc generators of indices
1065
b, a satisfyingx both b > a and PqWeight(i, b) + PqWeight(i, a) + 1 =
1066
weight.
1067
1068
type = 3:
1069
PqDoConsistencyCheck(i, c, b, a) checks for pc generators of indices
1070
c, b, a satisfying c > b > a and the sum of the weights of these
1071
generators equals weight.
1072
1073
Notes
1074
1075
PqWeight(i, j) returns the weight of the jth pc generator, for process i
1076
(see PqWeight (5.5-5)).
1077
1078
It is assumed that tails for the given weight (or weights) have already been
1079
added (see PqTails (5.7-5)).
1080
1081
For those familiar with the pq program, PqDoConsistencyChecks performs menu
1082
item 8 of the Advanced p-Quotient menu.
1083
1084
5.7-9 PqCollectDefiningRelations
1085
1086
PqCollectDefiningRelations( i )  function
1087
PqCollectDefiningRelations( )  function
1088
1089
for the ith or default interactive ANUPQ process, direct the pq program to
1090
collect the images of the defining relations of the original fp group of the
1091
process, with respect to the current pc presentation, in the context of
1092
finding the next class (see PqNextClass (5.6-4)). If the tails operation is
1093
not complete then the relations may be evaluated incorrectly.
1094
1095
Note: For those familiar with the pq program, PqCollectDefiningRelations
1096
performs menu item 9 of the Advanced p-Quotient menu.
1097
1098
5.7-10 PqCollectWordInDefiningGenerators
1099
1100
PqCollectWordInDefiningGenerators( i, word )  function
1101
PqCollectWordInDefiningGenerators( word )  function
1102
1103
for the ith or default interactive ANUPQ process, take a user-defined word
1104
word in the defining generators of the original presentation of the fp or pc
1105
group of the process. Each generator is mapped into the current pc
1106
presentation, and the resulting word is collected with respect to the
1107
current pc presentation. The result of the collection is returned as a list
1108
of generator number, exponent pairs.
1109
1110
The word argument may be input in either of the two ways described for
1111
PqCollect (see PqCollect (5.7-1)).
1112
1113
Note: For those familiar with the pq program, PqCollectDefiningGenerators
1114
performs menu item 23 of the Advanced p-Quotient menu.
1115
1116
5.7-11 PqCommutatorDefiningGenerators
1117
1118
PqCommutatorDefiningGenerators( i, words, pow )  function
1119
PqCommutatorDefiningGenerators( words, pow )  function
1120
1121
for the ith or default interactive ANUPQ process, take a list words of
1122
user-defined words in the defining generators of the original presentation
1123
of the fp or pc group of the process, and an integer power pow. Each
1124
generator is mapped into the current pc presentation. The list words is
1125
interpreted as a left-normed commutator which is then raised to pow and
1126
collected with respect to the current pc presentation. The result of the
1127
collection is returned as a list of generator number, exponent pairs.
1128
1129
Note For those familiar with the pq program, PqCommutatorDefiningGenerators
1130
performs menu item 24 of the Advanced p-Quotient menu.
1131
1132
5.7-12 PqDoExponentChecks
1133
1134
PqDoExponentChecks( i: [Bounds := list] )  function
1135
PqDoExponentChecks( : [Bounds := list] )  function
1136
1137
for the ith or default interactive ANUPQ process, direct the pq program to
1138
do exponent checks for weights (inclusively) between the bounds of Bounds or
1139
for all weights if Bounds is not given. The value list of Bounds (assuming
1140
the interactive process is numbered i) should be a list of two integers low,
1141
high satisfying 1 le low le high le PqPClass(i) (see PqPClass (5.5-4)). If
1142
no exponent law has been specified, no exponent checks are performed.
1143
1144
Note: For those familiar with the pq program, PqDoExponentChecks performs
1145
menu item 10 of the Advanced p-Quotient menu.
1146
1147
5.7-13 PqEliminateRedundantGenerators
1148
1149
PqEliminateRedundantGenerators( i )  function
1150
PqEliminateRedundantGenerators( )  function
1151
1152
for the ith or default interactive ANUPQ process, direct the pq program to
1153
eliminate redundant generators of the current p-quotient.
1154
1155
Note: For those familiar with the pq program, PqEliminateRedundantGenerators
1156
performs menu item 11 of the Advanced p-Quotient menu.
1157
1158
5.7-14 PqRevertToPreviousClass
1159
1160
PqRevertToPreviousClass( i )  function
1161
PqRevertToPreviousClass( )  function
1162
1163
for the ith or default interactive ANUPQ process, direct the pq program to
1164
abandon the current class and revert to the previous class.
1165
1166
Note: For those familiar with the pq program, PqRevertToPreviousClass
1167
performs menu item 12 of the Advanced p-Quotient menu.
1168
1169
5.7-15 PqSetMaximalOccurrences
1170
1171
PqSetMaximalOccurrences( i, noccur )  function
1172
PqSetMaximalOccurrences( noccur )  function
1173
1174
for the ith or default interactive ANUPQ process, direct the pq program to
1175
set maximal occurrences of the weight 1 generators in the definitions of pcp
1176
generators of the group of the process. This can be used to avoid the
1177
definition of generators of which one knows for theoretical reasons that
1178
they would be eliminated later on.
1179
1180
The argument noccur must be a list of non-negative integers of length the
1181
number of weight 1 generators (i.e. the rank of the class 1 p-quotient of
1182
the group of the process). An entry of 0 for a particular generator
1183
indicates that there is no limit on the number of occurrences for the
1184
generator.
1185
1186
Note: For those familiar with the pq program, PqSetMaximalOccurrences
1187
performs menu item 13 of the Advanced p-Quotient menu.
1188
1189
5.7-16 PqSetMetabelian
1190
1191
PqSetMetabelian( i )  function
1192
PqSetMetabelian( )  function
1193
1194
for the ith or default interactive ANUPQ process, direct the pq program to
1195
enforce metabelian-ness.
1196
1197
Note: For those familiar with the pq program, PqSetMetabelian performs menu
1198
item 14 of the Advanced p-Quotient menu.
1199
1200
5.7-17 PqDoConsistencyCheck
1201
1202
PqDoConsistencyCheck( i, c, b, a )  function
1203
PqDoConsistencyCheck( c, b, a )  function
1204
PqJacobi( i, c, b, a )  function
1205
PqJacobi( c, b, a )  function
1206
1207
for the ith or default interactive ANUPQ process, direct the pq program to
1208
do the consistency check for the pc generators with indices c, b, a which
1209
should be non-increasing positive integers, i.e. c ge b ge a.
1210
1211
There are 3 types of consistency checks:
1212
1213
1214
\begin{array}{rclrl} (a^n)a &=& a(a^n) && {\rm (Type\ 1)} \\ (b^n)a &=&
1215
b^{(n-1)}(ba), b(a^n) = (ba)a^{(n-1)} && {\rm (Type\ 2)} \\ c(ba) &=& (cb)a
1216
&& {\rm (Type\ 3)} \\ \end{array}
1217
1218

1219
1220
The reason some people talk about Jacobi relations instead of consistency
1221
checks becomes clear when one looks at the consistency check of type 3:
1222
1223
1224
\begin{array}{rcl} c(ba) &=& a c[c,a] b[b,a] = acb [c,a][c,a,b][b,a] = \dots
1225
\\ (cb)a &=& b c[c,b] a = a b[b,a] c[c,a] [c,b][c,b,a] \\ &=& abc [b,a]
1226
[b,a,c] [c,a] [c,b] [c,b,a] = \dots \\ \end{array}
1227
1228

1229
1230
Each collection would normally carry on further. But one can see already
1231
that no other commutators of weight 3 will occur. After all terms of weight
1232
one and weight two have been moved to the left we end up with:
1233
1234
1235
\begin{array}{rcl} & &abc [b,a] [c,a] [c,b] [c,a,b] \dots \\ &=&abc [b,a]
1236
[c,a] [c,b] [c,b,a] [b,a,c] \dots \\ \end{array}
1237
1238

1239
1240
Modulo terms of weight 4 this is equivalent to
1241
1242
1243
[c,a,b] [b,c,a] [a,b,c] = 1
1244
1245

1246
1247
which is the Jacobi identity.
1248
1249
See also PqDoConsistencyChecks (PqDoConsistencyChecks (5.7-8)).
1250
1251
Note: For those familiar with the pq program, PqDoConsistencyCheck and
1252
PqJacobi perform menu item 15 of the Advanced p-Quotient menu.
1253
1254
5.7-18 PqCompact
1255
1256
PqCompact( i )  function
1257
PqCompact( )  function
1258
1259
for the ith or default interactive ANUPQ process, direct the pq program to
1260
do a compaction of its work space. This function is safe to perform only at
1261
certain points in time.
1262
1263
Note: For those familiar with the pq program, PqCompact performs menu item
1264
16 of the Advanced p-Quotient menu.
1265
1266
5.7-19 PqEchelonise
1267
1268
PqEchelonise( i )  function
1269
PqEchelonise( )  function
1270
1271
for the ith or default interactive ANUPQ process, direct the pq program to
1272
echelonise the word most recently collected by PqCollect or PqCommutator
1273
against the relations of the current pc presentation, and return the number
1274
of the generator made redundant or fail if no generator was made redundant.
1275
A call to PqCollect (see PqCollect (5.7-1)) or PqCommutator
1276
(see PqCommutator (5.7-3)) needs to be performed prior to using this
1277
command.
1278
1279
Note: For those familiar with the pq program, PqEchelonise performs menu
1280
item 17 of the Advanced p-Quotient menu.
1281
1282
5.7-20 PqSupplyAutomorphisms
1283
1284
PqSupplyAutomorphisms( i, mlist )  function
1285
PqSupplyAutomorphisms( mlist )  function
1286
1287
for the ith or default interactive ANUPQ process, supply the automorphism
1288
data provided by the list mlist of matrices with non-negative integer
1289
coefficients. Each matrix in mlist describes one automorphism in the
1290
following way.
1291
1292
 The rows of each matrix correspond to the pc generators of weight one.
1293
1294
 Each row is the exponent vector of the image of the corresponding
1295
weight one generator under the respective automorphism.
1296
1297
Note: For those familiar with the pq program, PqSupplyAutomorphisms uses
1298
menu item 18 of the Advanced p-Quotient menu.
1299
1300
5.7-21 PqExtendAutomorphisms
1301
1302
PqExtendAutomorphisms( i )  function
1303
PqExtendAutomorphisms( )  function
1304
1305
for the ith or default interactive ANUPQ process, direct the pq program to
1306
extend automorphisms of the p-quotient of the previous class to the
1307
p-quotient of the present class.
1308
1309
Note: For those familiar with the pq program, PqExtendAutomorphisms uses
1310
menu item 18 of the Advanced p-Quotient menu.
1311
1312
5.7-22 PqApplyAutomorphisms
1313
1314
PqApplyAutomorphisms( i, qfac )  function
1315
PqApplyAutomorphisms( qfac )  function
1316
1317
for the ith or default interactive ANUPQ process, direct the pq program to
1318
apply automorphisms; qfac is the queue factor e.g. 15.
1319
1320
Note: For those familiar with the pq program, PqCloseRelations performs menu
1321
item 19 of the Advanced p-Quotient menu.
1322
1323
5.7-23 PqDisplayStructure
1324
1325
PqDisplayStructure( i: [Bounds := list] )  function
1326
PqDisplayStructure( : [Bounds := list] )  function
1327
1328
for the ith or default interactive ANUPQ process, direct the pq program to
1329
display the structure for the pcp generators numbered (inclusively) between
1330
the bounds of Bounds or for all generators if Bounds is not given. The value
1331
list of Bounds (assuming the interactive process is numbered i) should be a
1332
list of two integers low, high satisfying 1 le low le high le
1333
PqNrPcGenerators(i) (see PqNrPcGenerators (5.5-1)). PqDisplayStructure also
1334
accepts the option OutputLevel (see 6.2).
1335
1336
Explanation of output
1337
1338
New generators are defined as commutators of previous generators and
1339
generators of class 1 or as p-th powers of generators that have themselves
1340
been defined as p-th powers. A generator is never defined as p-th power of a
1341
commutator.
1342
1343
Therefore, there are two cases: all the numbers on the righthand side are
1344
either the same or they differ. Below, gi refers to the ith defining
1345
generator.
1346
1347
 If the righthand side numbers are all the same, then the generator is
1348
a p-th power (of a p-th power of a p-th power, etc.). The number of
1349
repeated digits say how often a p-th power has to be taken.
1350
1351
In the following example, the generator number 31 is the eleventh
1352
power of generator 17 which in turn is an eleventh power and so on:
1353
1354
\begintt #I 31 is defined on 17^11 = 1 1 1 1 1 \endtt So generator 31
1355
is obtained by taking the eleventh power of generator 1 five times.
1356
1357
 If the numbers are not all the same, the generator is defined by a
1358
commutator. If the first two generator numbers differ, the generator
1359
is defined as a left-normed commutator of the weight one generators,
1360
e.g.
1361
1362
\begintt #I 19 is defined on [11, 1] = 2 1 1 1 1 \endtt Here,
1363
generator 19 is defined as the commutator of generator 11 and
1364
generator 1 which is the same as the left-normed commutator [x2, x1,
1365
x1, x1, x1]. One can check this by tracing back the definition of
1366
generator 11 until one gets to a generator of class 1.
1367
1368
 If the first two generator numbers are identical, then the left most
1369
component of the left-normed commutator is a p-th power, e.g.
1370
1371
\begintt #I 25 is defined on [14, 1] = 1 1 2 1 1 \endtt
1372
1373
In this example, generator 25 is defined as commutator of generator 14
1374
and generator 1. The left-normed commutator is
1375
1376
1377
 [(x1^{11})^{11}, x2, x1, x1]
1378
1379

1380
1381
Again, this can be verified by tracing back the definitions.
1382
1383
Note: For those familiar with the pq program, PqDisplayStructure performs
1384
menu item 20 of the Advanced p-Quotient menu.
1385
1386
5.7-24 PqDisplayAutomorphisms
1387
1388
PqDisplayAutomorphisms( i: [Bounds := list] )  function
1389
PqDisplayAutomorphisms( : [Bounds := list] )  function
1390
1391
for the ith or default interactive ANUPQ process, direct the pq program to
1392
display the automorphism actions on the pcp generators numbered
1393
(inclusively) between the bounds of Bounds or for all generators if Bounds
1394
is not given. The value list of Bounds (assuming the interactive process is
1395
numbered i) should be a list of two integers low, high satisfying 1 le low
1396
le high le PqNrPcGenerators(i) (see PqNrPcGenerators (5.5-1)).
1397
PqDisplayStructure also accepts the option OutputLevel (see 6.2).
1398
1399
Note: For those familiar with the pq program, PqDisplayAutomorphisms
1400
performs menu item 21 of the Advanced p-Quotient menu.
1401
1402
5.7-25 PqWritePcPresentation
1403
1404
PqWritePcPresentation( i, filename )  function
1405
PqWritePcPresentation( filename )  function
1406
1407
for the ith or default interactive ANUPQ process, direct the pq program to
1408
write a pc presentation of a previously-computed quotient of the group of
1409
that process, to the file with name filename. Here the group of a process is
1410
the one given as first argument when PqStart was called to initiate that
1411
process (for process i the group is stored as ANUPQData.io[i].group). If the
1412
first character of the string filename is not /, filename is assumed to be
1413
the path of a writable file relative to the directory in which GAP was
1414
started. If a pc presentation has not been previously computed by the pq
1415
program, then pq is called to compute it first, effectively invoking
1416
PqPcPresentation (see PqPcPresentation (5.6-1)).
1417
1418
Note: For those familiar with the pq program, PqPcWritePresentation performs
1419
menu item 25 of the Advanced p-Quotient menu.
1420
1421
1422
5.8 Commands from the Standard Presentation menu
1423
1424
5.8-1 PqSPComputePcpAndPCover
1425
1426
PqSPComputePcpAndPCover( i: options )  function
1427
PqSPComputePcpAndPCover( : options )  function
1428
1429
for the ith or default interactive ANUPQ process, directs the pq program to
1430
compute for the group of that process a pc presentation up to the p-quotient
1431
of maximum class or the value of the option ClassBound and the p-cover of
1432
that quotient, and sets up tabular information required for computation of a
1433
standard presentation. Here the group of a process is the one given as first
1434
argument when PqStart was called to initiate that process (for process i the
1435
group is stored as ANUPQData.io[i].group).
1436
1437
The possible options are Prime, ClassBound, Relators, Exponent, Metabelian
1438
and OutputLevel (see Chapter 'ANUPQ Options' for detailed descriptions of
1439
these options). The option Prime is normally determined via PrimePGroup, and
1440
so is not required unless the group doesn't know it's a p-group and
1441
HasPrimePGroup returns false.
1442
1443
Note: For those familiar with the pq program, PqSPComputePcpAndPCover
1444
performs option 1 of the Standard Presentation menu.
1445
1446
5.8-2 PqSPStandardPresentation
1447
1448
PqSPStandardPresentation( i[, mlist]: [options] )  function
1449
PqSPStandardPresentation( [mlist]: [options] )  function
1450
1451
for the ith or default interactive ANUPQ process, inputs data given by
1452
options to compute a standard presentation for the group of that process. If
1453
argument mlist is given it is assumed to be the automorphism group data
1454
required. Otherwise it is assumed that a call to either Pq (see Pq (5.3-1))
1455
or PqEpimorphism (see PqEpimorphism (5.3-2)) has generated a p-quotient and
1456
that GAP can compute its automorphism group from which the necessary
1457
automorphism group data can be derived. The group of the process is the one
1458
given as first argument when PqStart was called to initiate the process (for
1459
process i the group is stored as ANUPQData.io[i].group and the p-quotient if
1460
existent is stored as ANUPQData.io[i].pQuotient). If mlist is not given and
1461
a p-quotient of the group has not been previously computed a class 1
1462
p-quotient is computed.
1463
1464
PqSPStandardPresentation accepts three options, all optional:
1465
1466
 ClassBound := n
1467
1468
 PcgsAutomorphisms
1469
1470
 StandardPresentationFile := filename
1471
1472
If ClassBound is omitted it defaults to 63.
1473
1474
Detailed descriptions of the above options may be found in Chapter 'ANUPQ
1475
Options'.
1476
1477
Note: For those familiar with the pq program, PqSPPcPresentation performs
1478
menu item 2 of the Standard Presentation menu.
1479
1480
5.8-3 PqSPSavePresentation
1481
1482
PqSPSavePresentation( i, filename )  function
1483
PqSPSavePresentation( filename )  function
1484
1485
for the ith or default interactive ANUPQ process, directs the pq program to
1486
save the standard presentation previously computed for the group of that
1487
process to the file with name filename, where the group of a process is the
1488
one given as first argument when PqStart was called to initiate that
1489
process. If the first character of the string filename is not /, filename is
1490
assumed to be the path of a writable file relative to the directory in which
1491
GAP was started.
1492
1493
Note: For those familiar with the pq program, PqSPSavePresentation performs
1494
menu item 3 of the Standard Presentation menu.
1495
1496
5.8-4 PqSPCompareTwoFilePresentations
1497
1498
PqSPCompareTwoFilePresentations( i, f1, f2 )  function
1499
PqSPCompareTwoFilePresentations( f1, f2 )  function
1500
1501
for the ith or default interactive ANUPQ process, direct the pq program to
1502
compare the presentations in the files with names f1 and f2 and returns true
1503
if they are identical and false otherwise. For each of the strings f1 and
1504
f2, if the first character is not a / then it is assumed to be the path of a
1505
readable file relative to the directory in which GAP was started.
1506
1507
Notes
1508
1509
The presentations in files f1 and f2 must have been generated by the pq
1510
program but they do not need to be standard presentations. If If the
1511
presentations in files f1 and f2 have been generated by
1512
PqSPStandardPresentation (see PqSPStandardPresentation (5.8-2)) then a false
1513
response from PqSPCompareTwoFilePresentations says the groups defined by
1514
those presentations are not isomorphic.
1515
1516
For those familiar with the pq program, PqSPCompareTwoFilePresentations
1517
performs menu item 6 of the Standard Presentation menu.
1518
1519
5.8-5 PqSPIsomorphism
1520
1521
PqSPIsomorphism( i )  function
1522
PqSPIsomorphism( )  function
1523
1524
for the ith or default interactive ANUPQ process, direct the pq program to
1525
compute the isomorphism mapping from the p-group of the process to its
1526
standard presentation. This function provides a description only; for a GAP
1527
object, use EpimorphismStandardPresentation
1528
(see EpimorphismStandardPresentation (5.3-5)).
1529
1530
Note: For those familiar with the pq program, PqSPIsomorphism performs menu
1531
item 8 of the Standard Presentation menu.
1532
1533
1534
5.9 Commands from the Main p-Group Generation menu
1535
1536
Note that the p-group generation commands can only be applied once the pq
1537
program has produced a pc presentation of some quotient group of the group
1538
of the process.
1539
1540
5.9-1 PqPGSupplyAutomorphisms
1541
1542
PqPGSupplyAutomorphisms( i[, mlist]: options )  function
1543
PqPGSupplyAutomorphisms( [mlist]: options )  function
1544
1545
for the ith or default interactive ANUPQ process, supply the pq program with
1546
the automorphism group data needed for the current quotient of the group of
1547
that process (for process i the group is stored as ANUPQData.io[i].group).
1548
For a description of the format of mlist see PqSupplyAutomorphisms (5.7-20).
1549
The options possible are NumberOfSolubleAutomorphisms and RelativeOrders.
1550
(Detailed descriptions of these options may be found in Chapter 'ANUPQ
1551
Options'.)
1552
1553
If mlist is omitted, the automorphism data is determined from the group of
1554
the process which must have been a p-group in pc presentation.
1555
1556
Note: For those familiar with the pq program, PqPGSupplyAutomorphisms
1557
performs menu item 1 of the main p-Group Generation menu.
1558
1559
5.9-2 PqPGExtendAutomorphisms
1560
1561
PqPGExtendAutomorphisms( i )  function
1562
PqPGExtendAutomorphisms( )  function
1563
1564
for the ith or default interactive ANUPQ process, direct the pq program to
1565
compute the extensions of the automorphisms of the p-quotient of the
1566
previous class to the p-quotient of the current class. You may wish to set
1567
the InfoLevel of InfoANUPQ to 2 (or more) in order to see the output from
1568
the pq program (see InfoANUPQ (3.3-1)).
1569
1570
Note: For those familiar with the pq program, PqPGExtendAutomorphisms
1571
performs menu item 2 of the main or advanced p-Group Generation menu.
1572
1573
5.9-3 PqPGConstructDescendants
1574
1575
PqPGConstructDescendants( i: options )  function
1576
PqPGConstructDescendants( : options )  function
1577
1578
for the ith or default interactive ANUPQ process, direct the pq program to
1579
construct descendants prescribed by options, and return the number of
1580
descendants constructed (compare function PqDescendants (4.4-1) which
1581
returns the list of descendants). The options possible are ClassBound,
1582
OrderBound, StepSize, PcgsAutomorphisms, RankInitialSegmentSubgroups,
1583
SpaceEfficient, CapableDescendants, AllDescendants, Exponent, Metabelian,
1584
BasicAlgorithm, CustomiseOutput. (Detailed descriptions of these options may
1585
be found in Chapter 'ANUPQ Options'.)
1586
1587
PqPGConstructDescendants requires that the pq program has previously
1588
computed a pc presentation and a p-cover for a p-quotient of some class of
1589
the group of the process.
1590
1591
Note: For those familiar with the pq program, PqPGConstructDescendants
1592
performs menu item 5 of the main p-Group Generation menu.
1593
1594
5.9-4 PqPGSetDescendantToPcp
1595
1596
PqPGSetDescendantToPcp( i, cls, n )  function
1597
PqPGSetDescendantToPcp( cls, n )  function
1598
PqPGSetDescendantToPcp( i: [Filename := name] )  function
1599
PqPGSetDescendantToPcp( : [Filename := name] )  function
1600
PqPGRestoreDescendantFromFile( i, cls, n )  function
1601
PqPGRestoreDescendantFromFile( cls, n )  function
1602
PqPGRestoreDescendantFromFile( i: [Filename := name] )  function
1603
PqPGRestoreDescendantFromFile( : [Filename := name] )  function
1604
1605
for the ith or default interactive ANUPQ process, direct the pq program to
1606
restore group n of class cls from a temporary file, where cls and n are
1607
positive integers, or the group stored in name. PqPGSetDescendantToPcp and
1608
PqPGRestoreDescendantFromFile are synonyms; they make sense only after a
1609
prior call to construct descendants by say PqPGConstructDescendants
1610
(see PqPGConstructDescendants (5.9-3)) or the interactive PqDescendants
1611
(see PqDescendants (5.3-6)). In the Filename option forms, the option
1612
defaults to the last filename in which a presentation was stored by the pq
1613
program.
1614
1615
Notes
1616
1617
Since the PqPGSetDescendantToPcp and PqPGRestoreDescendantFromFile are
1618
intended to be used in calculation of further descendants the pq program
1619
computes the p-cover of the restored descendant. Hence, PqCurrentGroup used
1620
immediately after one of these commands returns the p-cover of the restored
1621
descendant rather than the descendant itself.
1622
1623
For those familiar with the pq program, PqPGSetDescendantToPcp and
1624
PqPGRestoreDescendantFromFile perform menu item 3 of the main or advanced
1625
p-Group Generation menu.
1626
1627
1628
5.10 Commands from the Advanced p-Group Generation menu
1629
1630
The functions below perform the component algorithms of
1631
PqPGConstructDescendants (see PqPGConstructDescendants (5.9-3)). You can get
1632
some idea of their usage by trying PqExample("Nott-APG-Rel-i");. You can get
1633
some idea of the breakdown of PqPGConstructDescendants into these functions
1634
by comparing the previous output with PqExample("Nott-PG-Rel-i");.
1635
1636
These functions are intended for use only by experts; please contact the
1637
authors of the package if you genuinely have a need for them and need any
1638
amplified descriptions.
1639
1640
5.10-1 PqAPGDegree
1641
1642
PqAPGDegree( i, step, rank: [Exponent := n] )  function
1643
PqAPGDegree( step, rank: [Exponent := n] )  function
1644
1645
for the ith or default interactive ANUPQ process, direct the pq program to
1646
invoke menu item 6 of the Advanced p-Group Generation menu. Here the
1647
step-size step and the rank rank are positive integers and are the arguments
1648
required by the pq program. See 6.2 for the one recognised option Exponent.
1649
1650
5.10-2 PqAPGPermutations
1651
1652
PqAPGPermutations( i: options )  function
1653
PqAPGPermutations( : options )  function
1654
1655
for the ith or default interactive ANUPQ process, direct the pq program to
1656
perform menu item 7 of the Advanced p-Group Generation menu. Here the
1657
options options recognised are PcgsAutomorphisms, SpaceEfficient,
1658
PrintAutomorphisms and PrintPermutations (see Chapter 'ANUPQ Options' for
1659
details).
1660
1661
5.10-3 PqAPGOrbits
1662
1663
PqAPGOrbits( i: options )  function
1664
PqAPGOrbits( : options )  function
1665
1666
for the ith or default interactive ANUPQ process, direct the pq to perform
1667
menu item 8 of the Advanced p-Group Generation menu.
1668
1669
Here the options options recognised are PcgsAutomorphisms, SpaceEfficient
1670
and CustomiseOutput (see Chapter 'ANUPQ Options' for details). For the
1671
CustomiseOutput option only the setting of the orbit is recognised (all
1672
other fields if set are ignored).
1673
1674
5.10-4 PqAPGOrbitRepresentatives
1675
1676
PqAPGOrbitRepresentatives( i: options )  function
1677
PqAPGOrbitRepresentatives( : options )  function
1678
1679
for the ith or default interactive ANUPQ process, direct the pq to perform
1680
item 9 of the Advanced p-Group Generation menu.
1681
1682
The options options may be any selection of the following:
1683
PcgsAutomorphisms, SpaceEfficient, Exponent, Metabelian, CapableDescendants
1684
(or AllDescendants), CustomiseOutput (where only the group and autgroup
1685
fields are recognised) and Filename (see Chapter 'ANUPQ Options' for
1686
details). If Filename is omitted the reduced p-cover is written to the file
1687
"redPCover" in the temporary directory whose name is stored in
1688
ANUPQData.tmpdir.
1689
1690
5.10-5 PqAPGSingleStage
1691
1692
PqAPGSingleStage( i: options )  function
1693
PqAPGSingleStage( : options )  function
1694
1695
for the ith or default interactive ANUPQ process, direct the pq to perform
1696
option 5 of the Advanced p-Group Generation menu.
1697
1698
The possible options are StepSize, PcgsAutomorphisms,
1699
RankInitialSegmentSubgroups, SpaceEfficient, CapableDescendants,
1700
AllDescendants, Exponent, Metabelian, BasicAlgorithm and CustomiseOutput.
1701
(Detailed descriptions of these options may be found in Chapter 'ANUPQ
1702
Options'.)
1703
1704
1705
5.11 Primitive Interactive ANUPQ Process Read/Write Functions
1706
1707
For those familiar with using the pq program as a standalone we provide
1708
primitive read/write tools to communicate directly with an interactive ANUPQ
1709
process, started via PqStart. For the most part, it is up to the user to
1710
translate the output strings from pq program into a form useful in GAP.
1711
1712
5.11-1 PqRead
1713
1714
PqRead( i )  function
1715
PqRead( )  function
1716
1717
read a complete line of ANUPQ output, from the ith or default interactive
1718
ANUPQ process, if there is output to be read and returns fail otherwise.
1719
When successful, the line is returned as a string complete with trailing
1720
newline, colon, or question-mark character. Please note that it is possible
1721
to be too quick (i.e. the return can be fail purely because the output from
1722
ANUPQ is not there yet), but if PqRead finds any output at all, it waits for
1723
a complete line. PqRead also writes the line read via Info at InfoANUPQ
1724
level 2. It doesn't try to distinguish banner and menu output from other
1725
output of the pq program.
1726
1727
5.11-2 PqReadAll
1728
1729
PqReadAll( i )  function
1730
PqReadAll( )  function
1731
1732
read and return as many complete lines of ANUPQ output, from the ith or
1733
default interactive ANUPQ process, as there are to be read, at the time of
1734
the call, as a list of strings with any trailing newlines removed and
1735
returns the empty list otherwise. PqReadAll also writes each line read via
1736
Info at InfoANUPQ level 2. It doesn't try to distinguish banner and menu
1737
output from other output of the pq program. Whenever PqReadAll finds only a
1738
partial line, it waits for the complete line, thus increasing the
1739
probability that it has captured all the output to be had from ANUPQ.
1740
1741
5.11-3 PqReadUntil
1742
1743
PqReadUntil( i, IsMyLine )  function
1744
PqReadUntil( IsMyLine )  function
1745
PqReadUntil( i, IsMyLine, Modify )  function
1746
PqReadUntil( IsMyLine, Modify )  function
1747
1748
read complete lines of ANUPQ output, from the ith or default interactive
1749
ANUPQ process, chomps them (i.e. removes any trailing newline character),
1750
emits them to Info at InfoANUPQ level 2 (without trying to distinguish
1751
banner and menu output from other output of the pq program), and applies the
1752
function Modify (where Modify is just the identity map/function for the
1753
first two forms) until a chomped line line for which IsMyLine( Modify(line)
1754
) is true. PqReadUntil returns the list of Modify-ed chomped lines read.
1755
1756
Notes: When provided by the user, Modify should be a function that accepts a
1757
single string argument.
1758
1759
IsMyLine should be a function that is able to accept the output of Modify
1760
(or take a single string argument when Modify is not provided) and should
1761
return a boolean.
1762
1763
If IsMyLine( Modify(line) ) is never true, PqReadUntil will wait
1764
indefinitely.
1765
1766
5.11-4 PqWrite
1767
1768
PqWrite( i, string )  function
1769
PqWrite( string )  function
1770
1771
write string to the ith or default interactive ANUPQ process; string must be
1772
in exactly the form the ANUPQ standalone expects. The command is echoed via
1773
Info at InfoANUPQ level 3 (with a ToPQ>  prompt); i.e. do
1774
SetInfoLevel(InfoANUPQ, 3); to see what is transmitted to the pq program.
1775
PqWrite returns true if successful in writing to the stream of the
1776
interactive ANUPQ process, and fail otherwise.
1777
1778
Note: If PqWrite returns fail it means that the ANUPQ process has died.
1779
1780
1781