File: pcgs.xml

package info (click to toggle)
gap 4.15.1-1
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 110,212 kB
  • sloc: ansic: 97,261; xml: 48,343; cpp: 13,946; sh: 4,900; perl: 1,650; javascript: 255; makefile: 252; ruby: 9
file content (579 lines) | stat: -rw-r--r-- 25,374 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<!-- %% -->
<!-- %A  pcgs.xml                    GAP documentation            Alexander Hulpke -->
<!-- %A                                                               Bettina Eick -->
<!-- %% -->
<!-- %% -->
<!-- %Y  (C) 1998 School Math and Comp. Sci., University of St Andrews, Scotland -->
<!-- %Y  Copyright (C) 2002 The GAP Group -->
<!-- %% -->
<Chapter Label="Polycyclic Groups">
<Heading>Polycyclic Groups</Heading>

A group <A>G</A> is <E>polycyclic</E> if there exists a subnormal series
<M>G = C_1 > C_2 > \ldots > C_n > C_{{n+1}} = \{ 1 \}</M>
with cyclic factors. Such a series is called <E>pc series</E> of <A>G</A>.
<P/>
Every polycyclic group is solvable and every finite solvable group
is polycyclic. However, there are infinite solvable groups which
are not polycyclic.
<P/>
In &GAP; there exists a large number of methods for polycyclic groups
which are based upon the polycyclic structure of these groups. These
methods are usually very efficient, especially for groups which are
given by a pc-presentation (see chapter <Ref Chap="Pc Groups"/>), and can
be applied to many types of groups. Hence &GAP; tries to use them
whenever possible, for example, for permutation groups and matrix
groups over finite fields that are known to be polycyclic
(the only exception is the representation as finitely presented group
for which the polycyclic methods cannot be used in general).
<P/>
At the current state of implementations the &GAP; library contains
methods to compute with finite polycyclic groups, while the &GAP;
package <Package>Polycyclic</Package> by Bettina Eick and Werner Nickel
allows also computations with infinite polycyclic groups which are given
by a pc-presentation.
<P/>
<!-- %%  Most of the methods for polycyclic groups are due to Frank Celler, Bettina -->
<!-- %%  Eick, Alexander Hulpke and Werner Nickel. The methods to consider a solvable -->
<!-- %%  permutation group as a polycyclic group are due to Heiko Theißen. -->


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Polycyclic Generating Systems">
<Heading>Polycyclic Generating Systems</Heading>

Let <A>G</A> be a polycyclic group with a pc series as above.  A
<E>polycyclic generating sequence</E> (<E>pcgs</E> for short) of <A>G</A> is a
sequence <M>P := (g_1, \ldots, g_n)</M> of elements of <A>G</A> such that
<M>C_i = \langle C_{{i+1}}, g_i \rangle</M> for <M>1 \leq i \leq n</M>.
Note that each polycyclic group has a pcgs, but except for very
small groups, a pcgs is not unique.
<P/>
For each index <M>i</M> the subsequence of elements <M>(g_i, \ldots, g_n)</M>
forms a pcgs of the subgroup <M>C_i</M>. In particular, these <E>tails</E>
generate the subgroups of the pc series and hence we say that
the pc series is <E>determined</E> by <M>P</M>.
<P/>
Let <M>r_i</M> be the index of <M>C_{{i+1}}</M> in <M>C_i</M> which is either
a finite positive number or infinity. Then <M>r_i</M> is the order of
<M>g_i C_{{i+1}}</M> and we call the resulting list of indices the
<E>relative orders</E> of the pcgs <A>P</A>.
<P/>
Moreover, with respect to a given pcgs <M>(g_1, \ldots, g_n)</M> each
element <A>g</A> of <A>G</A> can be represented in a unique
way as a product <M>g = g_1^{{e_1}} \cdot g_2^{{e_2}} \cdots g_n^{{e_n}}</M>
with exponents <M>e_i \in \{0, \ldots, r_i-1\}</M>, if <M>r_i</M> is finite,
and <M>e_i \in &ZZ;</M> otherwise.
Words of this form are called <E>normal words</E> or <E>words in normal form</E>.
Then the integer vector <M>[ e_1, \ldots, e_n ]</M> is called the
<E>exponent vector</E> of the element <M>g</M>. Furthermore, the smallest
index <M>k</M> such that <M>e_k \neq 0</M> is called the <E>depth</E> of <A>g</A> and
<M>e_k</M> is the <E>leading exponent</E> of <A>g</A>.
<P/>
For many applications we have to assume that each of the relative orders
<M>r_i</M> is either a prime or infinity. This is equivalent to saying that
there are no trivial factors in the pc series and the finite factors of the
pc series are maximal refined.
Then we obtain that <M>r_i</M> is the order of <M>g C_{{i+1}}</M> for all
elements <M>g</M> in <M>C_i \setminus C_{{i+1}}</M> and we call
<M>r_i</M> the <E>relative order</E> of the element <M>g</M>.

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Computing a Pcgs">
<Heading>Computing a Pcgs</Heading>

Suppose a group <A>G</A> is given; for example, let <A>G</A> be a permutation
or matrix group. Then we can ask &GAP; to compute a pcgs of this group.
If <A>G</A> is not polycyclic, the result will be <K>fail</K>.
<P/>
Note that these methods can only be applied if <A>G</A> is not given
as finitely presented group. For finitely presented groups one
can try to compute a pcgs via the polycyclic quotient methods,
see <Ref Sect="Quotient Methods"/>.
<P/>
Note also that a pcgs behaves like a list.

<#Include Label="Pcgs">
<#Include Label="IsPcgs">
<#Include Label="CanEasilyComputePcgs">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Defining a Pcgs Yourself">
<Heading>Defining a Pcgs Yourself</Heading>

In a number of situations it might be useful to supply a pcgs to a group.
<P/>
Note that the elementary operations for such a pcgs might be rather
inefficient, since &GAP; has to use generic methods in this case.
It might be helpful to supply the relative orders of the self-defined
pcgs as well by <C>SetRelativeOrder</C>.
See also&nbsp;<Ref Prop="IsPrimeOrdersPcgs"/>.

<#Include Label="PcgsByPcSequence">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Elementary Operations for a Pcgs">
<Heading>Elementary Operations for a Pcgs</Heading>

<#Include Label="RelativeOrders:pcgs">
<#Include Label="IsFiniteOrdersPcgs">
<#Include Label="IsPrimeOrdersPcgs">
<#Include Label="PcSeries">
<#Include Label="GroupOfPcgs">
<#Include Label="OneOfPcgs">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Elementary Operations for a Pcgs and an Element">
<Heading>Elementary Operations for a Pcgs and an Element</Heading>

<#Include Label="RelativeOrderOfPcElement">
<#Include Label="ExponentOfPcElement">
<#Include Label="ExponentsOfPcElement">
<#Include Label="DepthOfPcElement">
<#Include Label="LeadingExponentOfPcElement">
<#Include Label="PcElementByExponents">
<#Include Label="LinearCombinationPcgs">
<#Include Label="SiftedPcElement">
<#Include Label="CanonicalPcElement">
<#Include Label="ReducedPcElement">
<#Include Label="CleanedTailPcElement">
<#Include Label="HeadPcElementByNumber">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Exponents of Special Products">
<Heading>Exponents of Special Products</Heading>

There are certain products of elements whose exponents are used often within
algorithms, and which might be obtained more easily than by computing the
product first and to obtain its exponents afterwards. The operations in this
section provide a way to obtain such exponent vectors directly.
<P/>
(The circumstances under which these operations give a speedup depend very
much on the pcgs and the representation of elements that is used. So the
following operations are not guaranteed to give a speedup in every case,
however the default methods are not slower than to compute the exponents of
a product and thus these operations should <E>always</E> be used if applicable.)
<P/>
The second class are exponents of products of the generators which make up
the pcgs.
If the pcgs used is a family pcgs (see <Ref Attr="FamilyPcgs"/>) then
these exponents can be looked up and do not need to be computed.

<#Include Label="ExponentsConjugateLayer">
<#Include Label="ExponentsOfRelativePower">
<#Include Label="ExponentsOfConjugate">
<#Include Label="ExponentsOfCommutator">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Subgroups of Polycyclic Groups - Induced Pcgs">
<Heading>Subgroups of Polycyclic Groups &ndash; Induced Pcgs</Heading>

Let <A>U</A> be a subgroup of <A>G</A> and let <A>P</A> be a pcgs of <A>G</A> as above such
that <A>P</A> determines the subnormal series
<M>G = C_1 > \ldots > C_{{n+1}} = \{ 1 \}</M>.
Then the series of subgroups <M>U \cap C_i</M> is a subnormal series
of <A>U</A> with cyclic or trivial factors. Hence, if we choose an element
<M>u_{{i_j}} \in (U \cap C_{{i_j}}) \setminus (U \cap C_{{i_j+1}})</M>
whenever this factor is non-trivial, then we obtain a pcgs
<M>Q = (u_{{i_1}}, \ldots, u_{{i_m}})</M> of <M>U</M>.
We say that <M>Q</M> is an <E>induced pcgs</E> with respect to <A>P</A>.
The pcgs <A>P</A> is the <E>parent pcgs</E> to the induced pcgs <A>Q</A>.
<P/>
Note that the pcgs <M>Q</M> is induced with respect to <A>P</A> if and only
if the matrix of exponent vectors of the elements <M>u_{{i_j}}</M> with
respect to <A>P</A> is in upper triangular form. Thus <M>Q</M> is not unique in
general.
<P/>
In particular, the elements of an induced pcgs do <E>not necessarily</E> have
leading coefficient 1 relative to the inducing pcgs. The attribute
<Ref Attr="LeadCoeffsIGS"/> holds the leading coefficients in case
they have to be renormed in an algorithm.
<P/>
Each induced pcgs is a pcgs and hence allows all elementary operations
for pcgs. On the other hand each pcgs could be transformed into an
induced pcgs for the group defined by the pcgs, but note that an
arbitrary pcgs is in general not an induced pcgs for technical reasons.
<P/>
An induced pcgs is <Q>compatible</Q> with its parent,
see <Ref Attr="ParentPcgs"/>.
<P/>
In <Cite Key="SOGOS"/> a <Q>non-commutative Gauss</Q> algorithm is
described to compute an induced pcgs of a subgroup <A>U</A>  from a
generating set of <A>U</A>.
For calling this in &GAP;, see <Ref Subsect="InducedPcgs"/> to
<Ref Subsect="ExtendedPcgs"/>.
<P/>
To create a subgroup generated by an induced pcgs such that the
induced pcgs gets stored automatically, use <Ref Oper="SubgroupByPcgs"/>.

<#Include Label="IsInducedPcgs">
<#Include Label="InducedPcgsByPcSequence">
<#Include Label="ParentPcgs">
<#Include Label="InducedPcgs">
<#Include Label="InducedPcgsByGenerators">
<#Include Label="InducedPcgsByPcSequenceAndGenerators">
<#Include Label="LeadCoeffsIGS">
<#Include Label="ExtendedPcgs">
<#Include Label="SubgroupByPcgs">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Subgroups of Polycyclic Groups - Canonical Pcgs">
<Heading>Subgroups of Polycyclic Groups &ndash; Canonical Pcgs</Heading>

The induced pcgs <A>Q</A> of <A>U</A> is called <E>canonical</E> if the matrix
of exponent vectors contains normed vectors only and above each
leading entry in the matrix there are 0's only.  The canonical pcgs
of <A>U</A> with respect to <A>P</A> is unique and hence such pcgs can be used
to compare subgroups.

<#Include Label="IsCanonicalPcgs">
<#Include Label="CanonicalPcgs">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Factor Groups of Polycyclic Groups - Modulo Pcgs">
<Heading>Factor Groups of Polycyclic Groups &ndash; Modulo Pcgs</Heading>

Let <A>N</A> be a normal subgroup of <A>G</A> such that <A>G/N</A> is polycyclic
with pcgs <M>(h_1 N, \ldots, h_r N)</M>. Then we call the sequence of
preimages <M>(h_1, \ldots h_r)</M> a <E>modulo pcgs</E> of <A>G/N</A>.
<A>G</A> is called the <E>numerator</E> of the modulo pcgs and <A>N</A> is the
<E>denominator</E> of the modulo pcgs.
<P/>
Modulo pcgs are often used to facilitate efficient computations with
factor groups, since they allow computations with factor groups without
formally defining the factor group at all.
<P/>
All elementary operations of pcgs,
see Sections <Ref Sect="Elementary Operations for a Pcgs"/> and
<Ref Sect="Elementary Operations for a Pcgs and an Element"/>,
apply to modulo pcgs as well. However, it is in general not possible to
compute induced pcgs with respect to a modulo pcgs.
<P/>
Two more elementary operations for modulo pcgs are
<Ref Attr="NumeratorOfModuloPcgs"/> and
<Ref Attr="DenominatorOfModuloPcgs"/>.

<#Include Label="ModuloPcgs">
<#Include Label="IsModuloPcgs">
<#Include Label="NumeratorOfModuloPcgs">
<#Include Label="DenominatorOfModuloPcgs">

<ManSection>
<Meth Name="\mod" Arg='P, I' Label="for two pcgs"/>

<Description>
Modulo Pcgs can also be built from compatible induced pcgs.
Let <M>G</M> be a group with pcgs <A>P</A> and let <A>I</A> be
an induced pcgs of a normal subgroup <M>N</M> of <M>G</M>.
(Respectively: <A>P</A> and <A>I</A> are both induced
with respect to the <E>same</E> Pcgs.)
Then we can compute a modulo pcgs of <M>G</M> mod <M>N</M> by
<P/>
<A>P</A> <K>mod</K> <A>I</A>
<P/>
Note that in this case we obtain the advantage that the values of
<Ref Attr="NumeratorOfModuloPcgs"/> and <Ref Attr="DenominatorOfModuloPcgs"/>
are just <A>P</A> and <A>I</A>, respectively, and hence are unique.
<P/>
The resulting modulo pcgs will consist of a subset of <A>P</A> and will be
<Q>compatible</Q> with <A>P</A> (or its parent).
<P/>
<Example><![CDATA[
gap> G := Group((1,2,3,4));;
gap> P := Pcgs(G);
Pcgs([ (1,2,3,4), (1,3)(2,4) ])
gap> I := InducedPcgsByGenerators(P, [(1,3)(2,4)]);
Pcgs([ (1,3)(2,4) ])
gap> M := P mod I;
[ (1,2,3,4) ]
gap> NumeratorOfModuloPcgs(M);
Pcgs([ (1,2,3,4), (1,3)(2,4) ])
gap> DenominatorOfModuloPcgs(M);
Pcgs([ (1,3)(2,4) ])
]]></Example>
</Description>
</ManSection>

<#Include Label="CorrespondingGeneratorsByModuloPcgs">
<#Include Label="CanonicalPcgsByGeneratorsWithImages">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Factor Groups of Polycyclic Groups in their Own Representation">
<Heading>Factor Groups of Polycyclic Groups in their Own Representation</Heading>

If substantial calculations are done in a factor it might be worth still to
construct the factor group in its own representation (for example by
calling <Ref Attr="PcGroupWithPcgs"/> on a modulo pcgs.
<P/>
<#Include Label="[1]{pcgs}">
<#Include Label="ProjectedPcElement">
<#Include Label="ProjectedInducedPcgs">
<#Include Label="LiftedPcElement">
<#Include Label="LiftedInducedPcgs">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Pcgs and Normal Series">
<Heading>Pcgs and Normal Series</Heading>

By definition, a pcgs determines a pc series of its underlying group.
However, in many applications it will be necessary that this pc series
refines a normal series with certain properties; for example, a normal
series with abelian factors.
<P/>
There are functions in &GAP; to compute a pcgs through a normal series
with elementary abelian factors, a central series or the lower p-central
series. See also Section <Ref Sect="Special Pcgs"/> for a more explicit possibility.

<#Include Label="IsPcgsElementaryAbelianSeries">
<#Include Label="PcgsElementaryAbelianSeries">
<#Include Label="IndicesEANormalSteps">
<#Include Label="EANormalSeriesByPcgs">
<#Include Label="IsPcgsCentralSeries">
<#Include Label="PcgsCentralSeries">
<#Include Label="IndicesCentralNormalSteps">
<#Include Label="CentralNormalSeriesByPcgs">
<#Include Label="IsPcgsPCentralSeriesPGroup">
<#Include Label="PcgsPCentralSeriesPGroup">
<#Include Label="IndicesPCentralNormalStepsPGroup">
<#Include Label="PCentralNormalSeriesByPcgsPGroup">
<#Include Label="IsPcgsChiefSeries">
<#Include Label="PcgsChiefSeries">
<#Include Label="IndicesChiefNormalSteps">
<#Include Label="ChiefNormalSeriesByPcgs">
<#Include Label="IndicesNormalSteps">
<#Include Label="NormalSeriesByPcgs">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Sum and Intersection of Pcgs">
<Heading>Sum and Intersection of Pcgs</Heading>

<!-- %eclaration{SumPcgs} -->
<!-- %eclaration{IntersectionSumPcgs} -->
<!-- %eclaration{NormalIntersectionPcgs} -->
<#Include Label="SumFactorizationFunctionPcgs">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Special Pcgs">
<Heading>Special Pcgs</Heading>

In short, a special pcgs is a pcgs which has particularly nice properties,
for example it always refines an elementary abelian series, for <M>p</M>-groups
it even refines a central series. These nice properties permit particularly
efficient algorithms.
<P/>
Let <A>G</A> be a finite polycyclic group. A <E>special pcgs</E> of <A>G</A> is a pcgs
which is closely related to a Hall system and the maximal subgroups of <A>G</A>.
These pcgs have been introduced by C. R. Leedham-Green who also gave an
algorithm to compute them. Improvements to this algorithm
<!-- %%  and the &GAP; implementation -->
are due to Bettina Eick.  For a more detailed account of
their definition the reader is referred to <Cite Key="Eick97"/>
<P/>
To introduce the definition of special pcgs we first need to define
the <E>LG-series</E> and <E>head complements</E> of a finite polycyclic group <A>G</A>.
Let <M>G = G_1 > G_2 > \ldots G_m > G_{{m+1}} = \{ 1 \}</M> be the lower
nilpotent series of <M>G</M>; that is, <M>G_i</M> is the smallest normal
subgroup of <M>G_{{i-1}}</M> with nilpotent factor. To obtain the LG-series
of <A>G</A> we need to refine this series.
Thus consider a factor <M>F_i := G_i / G_{{i+1}}</M>.
Since <M>F_i</M> is finite nilpotent, it is a direct
product of its Sylow subgroups <M>F_i = P_{{i,1}} \cdots P_{{i,r_i}}</M>.
For each Sylow <M>p_j</M>-subgroup <M>P_{{i,j}}</M> we can consider its
lower <M>p_j</M>-central series. To obtain a characteristic central series
with elementary abelian factors of <M>F_i</M> we loop over its Sylow subgroups.
Each time we consider <M>P_{{i,j}}</M> in this process we take the next step of
its lower <M>p_j</M>-central series into the series of <M>F_i</M>. If there
is no next step, then we just skip the consideration of <M>P_{{i,j}}</M>.
Note that the second term of the lower <M>p</M>-central series of a <M>p</M>-group
is in fact its Frattini subgroup. Thus the Frattini subgroup of <M>F_i</M>
is contained in the computed series of this group. We denote the
Frattini subgroup of <M>F_i = G_i / G_{{i+1}}</M> by <M>G_i^* / G_{{i+1}}</M>.
<P/>
The factors <M>G_i / G_i^*</M> are called the heads of <M>G</M>, while the
(possibly trivial) factors <M>G_i^* / G_{{i+1}}</M> are the tails of <M>G</M>.
A head complement of <M>G</M> is a subgroup <M>U</M> of <M>G</M> such that
<M>U / G_i^*</M>
is a complement to the head <M>G_i / G_i^*</M> in <M>G / G_i^*</M>
for some <M>i</M>.
<P/>
Now we are able to define a special pcgs of <A>G</A>. It is a pcgs of <A>G</A>
with three additional properties. First, the pc series determined
by the pcgs refines the LG-series of <A>G</A>. Second, a special pcgs
<E>exhibits</E> a Hall system of the group <A>G</A>; that is, for each set of
primes <M>\pi</M> the elements of the pcgs with relative order in <M>\pi</M>
form a pcgs of a Hall <M>\pi</M>-subgroup in a Hall system of <A>G</A>.
Third, a special pcgs exhibits a head complement for each head
of <A>G</A>.
<P/>
To record information about the LG-series with the special pcgs
we define the <E>LGWeights</E> of the special pcgs. These weights are
a list which contains a weight <M>w</M> for each elements <M>g</M> of the
special pcgs. Such a weight <M>w</M> represents the smallest subgroup of
the LG-series containing <M>g</M>.
<P/>
Since the LG-series is defined in terms of the lower nilpotent
series, Sylow subgroups of the factors and lower
<M>p</M>-central series of the Sylow subgroup, the weight <M>w</M> is a
triple. More precisely, <M>g</M> is contained in the <M>w[1]</M>th term
<M>U</M> of the lower nilpotent series of <A>G</A>, but not in the next smaller
one <M>V</M>. Then <M>w[3]</M> is a prime such that <M>g V</M> is contained in the
Sylow <M>w[3]</M>-subgroup <M>P/V</M> of <M>U/V</M>. Moreover, <M>gV</M> is contained in
the <M>w[2]</M>th term of the lower <M>p</M>-central series of <M>P/V</M>.
<P/>
There are two more attributes of a special pcgs containing
information about the LG-series: the list <E>LGLayers</E> and the
list <E>LGFirst</E>. The list of layers corresponds to the elements
of the special pcgs and denotes the layer of the LG-series in
which an element lies. The list LGFirst corresponds to the
LG-series and gives the number of the first element in the
special pcgs of the corresponding subgroup.

<#Include Label="IsSpecialPcgs">
<#Include Label="SpecialPcgs">
<#Include Label="LGWeights">
<#Include Label="LGLayers">
<#Include Label="LGFirst">
<#Include Label="LGLength">
<#Include Label="IsInducedPcgsWrtSpecialPcgs">
<#Include Label="InducedPcgsWrtSpecialPcgs">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Action on Subfactors Defined by a Pcgs">
<Heading>Action on Subfactors Defined by a Pcgs</Heading>

When working with a polycyclic group, one often needs to compute matrix
operations of the group on a factor of the group.
For this purpose there are the functions described in
<Ref Subsect="VectorSpaceByPcgsOfElementaryAbelianGroup"/> to
<Ref Subsect="LinearActionLayer"/>.
<P/>
In certain situations, for example within the computation of conjugacy
classes of finite soluble groups as described in <Cite Key="MeckyNeubueser89"/>,
affine actions of groups are required. For this purpose we introduce
the functions <Ref Oper="AffineAction"/> and
<Ref Func="AffineActionLayer"/>.

<#Include Label="VectorSpaceByPcgsOfElementaryAbelianGroup">
<#Include Label="LinearAction">
<#Include Label="LinearActionLayer">
<#Include Label="AffineAction">
<#Include Label="AffineActionLayer">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Orbit Stabilizer Methods for Polycyclic Groups">
<Heading>Orbit Stabilizer Methods for Polycyclic Groups</Heading>

If a pcgs <A>pcgs</A> is known for a group <A>G</A>, then orbits and stabilizers
can be computed by a special method which is particularly efficient.
Note that within this function only the elements in <A>pcgs</A> and the
relative orders of <A>pcgs</A> are needed. Hence this function works effectively
even if the elementary operations for <A>pcgs</A> are slow.

<#Include Label="StabilizerPcgs">

<#Include Label="Pcgs_OrbitStabilizer:pcgs">

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Operations which have Special Methods for Groups with Pcgs">
<Heading>Operations which have Special Methods for Groups with Pcgs</Heading>

<Index Key="IsNilpotent" Subkey="for groups with pcgs"><C>IsNilpotent</C></Index>
<Index Key="IsSupersolvable" Subkey="for groups with pcgs"><C>IsSupersolvable</C></Index>
<Index Key="Size" Subkey="for groups with pcgs"><C>Size</C></Index>
<Index Key="CompositionSeries" Subkey="for groups with pcgs"><C>CompositionSeries</C></Index>
<Index Key="ConjugacyClasses" Subkey="for groups with pcgs"><C>ConjugacyClasses</C></Index>
<Index Key="Centralizer" Subkey="for groups with pcgs"><C>Centralizer</C></Index>
<Index Key="FrattiniSubgroup" Subkey="for groups with pcgs"><C>FrattiniSubgroup</C></Index>
<Index Key="PrefrattiniSubgroup" Subkey="for groups with pcgs"><C>PrefrattiniSubgroup</C></Index>
<Index Key="MaximalSubgroups" Subkey="for groups with pcgs"><C>MaximalSubgroups</C></Index>
<Index Key="HallSystem" Subkey="for groups with pcgs"><C>HallSystem</C></Index>
<Index Key="MinimalGeneratingSet" Subkey="for groups with pcgs"><C>MinimalGeneratingSet</C></Index>
<Index Key="Centre" Subkey="for groups with pcgs"><C>Centre</C></Index>
<Index Key="Intersection" Subkey="for groups with pcgs"><C>Intersection</C></Index>
<Index Key="AutomorphismGroup" Subkey="for groups with pcgs"><C>AutomorphismGroup</C></Index>
<Index Key="IrreducibleModules" Subkey="for groups with pcgs"><C>IrreducibleModules</C></Index>
For the following operations there are special methods for groups with
pcgs installed:
<P/>
<Ref Prop="IsNilpotentGroup"/>,
<Ref Prop="IsSupersolvableGroup"/>,
<Ref Attr="Size"/>,
<Ref Attr="CompositionSeries"/>,
<Ref Attr="ConjugacyClasses" Label="attribute"/>,
<Ref Oper="Centralizer" Label="for a magma and an element"/>,
<Ref Attr="FrattiniSubgroup"/>,
<Ref Attr="PrefrattiniSubgroup"/>,
<Ref Attr="MaximalSubgroups"/> and related operations,
<Ref Attr="HallSystem"/> and related operations,
<Ref Attr="MinimalGeneratingSet"/>,
<Ref Attr="Centre"/>,
<Ref Func="Intersection" Label="for various collections"/>,
<Ref Attr="AutomorphismGroup"/>,
<Ref Oper="IrreducibleModules"/>.

</Section>


<!-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -->
<Section Label="Conjugacy Classes in Solvable Groups">
<Heading>Conjugacy Classes in Solvable Groups</Heading>

There are a variety of algorithms to compute conjugacy classes and
centralizers in solvable groups via epimorphic images
(<Cite Key="FelschNeubueser79"/>, <Cite Key="MeckyNeubueser89"/>,
<Cite Key="Theissen93"/>).
Usually these are only invoked as methods, but it is possible to access the
algorithm directly.
<P/>
<#Include Label="ClassesSolvableGroup">
<#Include Label="CentralizerSizeLimitConsiderFunction">

</Section>
</Chapter>