Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it

561421 views
1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2
%%
3
%A influen.tex AutPGrp documentation Bettina Eick
4
%A Eamonn O'Brien
5
%%
6
7
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
8
\Chapter{Influencing the algorithm}
9
10
A number of choices can be made by the user to influence the performance
11
of `AutomorphismGroupPGroup'. Below we identify these choices
12
and their default values used in `AutomorphismGroup'. We use the optional
13
argument <flag> of `AutomorphismGroupPGroup' to invoke user-defined choices.
14
The possible values for <flag> are
15
16
\beginitems
17
`<flag> = false' & the user-defined defaults are employed in the algorithm.
18
See below for a list of possibilities.
19
20
`<flag> = true' & invokes the interactive version of the algorithm
21
as described in Section "An interactive version of
22
the algorithm".
23
\enditems
24
25
In the next section we give a brief outline of the algorithm which is
26
necessary to understand the possible choices. Then we introduce the
27
choices the later sections of this chapter.
28
29
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
30
\Section{Outline of the algorithm}
31
32
The basic algorithm proceeds by induction
33
down the lower $p$-central series of a given $p$-group $G$; that is, it
34
successively computes $Aut(G_i)$ for the quotients $G_i = G / P_i(G)$ of
35
the descending sequence of subgroups defined by $P_1(G) = G$ and
36
$P_{i+1}(G)=[P_i(G),G] P_i(G)^p$ for $i\geq 1$. Hence, in the initial
37
step of the algorithm, $Aut(G_2) = GL(d,p)$ where $d$ is the rank of
38
the elementary abelian group $G_2$. In the inductive step it determines
39
$Aut(G_{i+1})$ from $Aut(G_i)$. For this purpose we introduce
40
an action of $Aut(G_i)$ on a certain elementary abelian $p$-group $M$
41
(the *$p$-multiplicator* of $G_i$). The main computation of the inductive
42
step is the determination of the stabiliser in $Aut(G_i)$ of a subgroup
43
$U$ of $M$ (the *allowable subgroup* for $G_{i+1}$). This stabiliser
44
calculation is the bottle-neck of the algorithm.
45
46
Our package incorporates a number of refinements designed to simplify
47
this stabiliser computation. Some of these refinements incur overheads
48
and hence they are not always invoked. The features outlined below
49
allow the user to select them.
50
51
Observe that the initial step of the algorithm returns $GL(d,p)$. But
52
$Aut(G)$ may induce on $G_2$ a proper subgroup, say $K$, of $GL(d,p)$.
53
Any intermediate subgroup of $GL(d,p)$ which contains $K$ suffices for
54
the algorithm and we supply two methods to construct a suitable subgroup:
55
these use characteristic subgroups or invariants of normal subgroups of $G$.
56
(See Section "The initialisation step".)
57
58
In the inductive step an action of $Aut(G_i)$ on an elementary abelian
59
group $M$ is used. This action is computed as a matrix action on a vector
60
space. To simplify the orbit-stabiliser computation of the subspace $U$
61
of $M$, we can construct the stabiliser of $U$ by iteration over a sequence
62
of $Aut(G_i)$-invariant subspaces of $M$.
63
(See Section "Stabilisers in matrix groups".)
64
65
Orbit-stabiliser computations in finite solvable groups given by a
66
polycyclic generating sequence are much more efficient than generic
67
computations of this type. Thus our algorithm makes use of a large
68
solvable normal subgroup $S$ of $Aut(G_i)$. Further, it is useful if
69
the generating set of $Aut(G_i)$ outside $S$ is as small as possible.
70
To achieve this we determine a permutation representation of $Aut(G_i)/S$
71
and use this to reduce the number of generators if possible. (See Section
72
"Searching for a small generating set".)
73
74
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
75
\Section{The initialisation step}
76
77
Assume we seek to compute the automorphism group of a $p$-group $G$
78
having Frattini rank $d$. We first determine as small as possible a
79
subgroup of $GL(d, p)$ whose extension can act on $G$.
80
81
The user can choose the initialisation routine by assigning
82
`InitAutGroup' to any one of the following.
83
84
\beginitems
85
`InitAutomorphismGroupOver' & to use the minimal overgroups;
86
87
`InitAutomorphismGroupChar' & to use the characteristic subgroups;
88
89
`InitAutomorphismGroupFull' & to use the full $GL(d,p)$.
90
\enditems
91
92
*a) Minimal Overgroups*
93
94
We determine the minimal over-groups of the Frattini subgroup of
95
$G$ and compute invariants of these which must be respected by the
96
automorphism group of $G$. We partition the minimal overgroups and
97
compute the stabiliser in $GL(d, p)$ of this partition.
98
99
The partition of the minimal overgroups is computed using the
100
function `PGFingerprint( G, U )'. This is the time-consuming
101
part of this initialisation method. The user can
102
overwrite the function `PGFingerprint'.
103
104
*b) Characteristic Subgroups*
105
106
Compute a generating set for the stabiliser in $GL (d, p)$ of
107
a chain of characteristic subgroups of $G$. In practice, we construct
108
a characteristic chain by determining 2-step centralisers and omega
109
subgroups of factors of the lower $p$-central series.
110
111
However, there are often other characteristic subgroups which are not
112
found by these approaches. The user can overwrite the function
113
`PGCharSubgroups( G )' to supply a set of characteristic subgroups.
114
115
*c) Defaults*
116
117
In the method for `AutomorphismGroup' we use a default strategy:
118
if the value $\frac{p^d-1}{p-1}$ is less than 1000, then we
119
use the minimal overgroup approach, otherwise the characteristic
120
subgroups are employed. An exception is made for homogeneous abelian
121
groups where we initialise the algorithm with the full group $GL(d,p)$.
122
123
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
124
\Section{Stabilisers in matrix groups}
125
126
Consider the $i$th inductive step of the algorithm. Here $A \leq
127
Aut(G_i)$ acts as matrix group on the elementary abelian $p$-group
128
$M$ and we want to determine the stabiliser of a subgroup $U \leq M$.
129
130
We use the MeatAxe to compute a series of $A$-invariant subspaces
131
through $M$ such that each factor in the series is irreducible as
132
$A$-module. Then we use this series to break the computation
133
of $Stab_A(U)$ into several smaller orbit-stabiliser calculations.
134
135
Note that a theoretic argument yields an $A$-invariant subspace
136
of $M$ a priori: the nucleus $N$. This is always used to split
137
the computation up. However, it may happen that $N = M$ and hence
138
results in no improvement.
139
140
\>`CHOP_MULT' V
141
142
The invariant series through $M$ is computed and used if the
143
global variable `CHOP_MULT' is set to `true'. Otherwise, the algorithm
144
tries to determine $Stab_A(U)$ in one step. By default, `CHOP_MULT'
145
is `true'.
146
147
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
148
\Section{Searching for a small generating set}
149
150
After each step of the computation, we attempt to find a nice generating
151
set for the automorphism group of the current factor.
152
153
If the automorphism group is soluble, we store a polycyclic generating
154
set; otherwise, we store such a generating set for a large soluble
155
normal subgroup $S$ of the automorphism group $A$, and as few generators
156
outside as possible. If $S = A$ and a polycyclic generating set for
157
$S$ is known, many steps of the algorithm proceed more rapidly.
158
159
\>`NICE_STAB' V
160
161
It may be both time-consuming and difficult to reduce the number of
162
generators for $A$ outside $S$. Note that if the initialisation of the
163
algorithm is by `InitAutomorphismGroupOver', then we always know a
164
permutation representation for $A/S$. Occasionally the search for
165
a small generating set is expensive. If this is observed, one
166
could set the flag `NICE_STAB' to `false' and the algorithm no
167
longer invokes this search.
168
169
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
170
\Section{An interactive version of the algorithm}
171
172
The choice of initialisation and the choice of chopping of the
173
$p$-multiplicator can also be driven by an interactive version
174
of the algorithm. We give an example.
175
176
\beginexample
177
gap> G := SmallGroup( 2^8, 1000 );;
178
gap> SetInfoLevel( InfoAutGrp, 3 );
179
180
gap> AutomorphismGroupPGroup( G, true );
181
#I step 1: 2^3 -- init automorphisms
182
183
choose initialisation (Over/Char/Full): # we choose Full
184
#I init automorphism group : Full
185
#I step 2: 2^3 -- aut grp has size 168
186
#I computing cover
187
#I computing matrix action
188
#I computing stabilizer of U
189
#I dim U = 3 dim N = 6 dim M = 6
190
191
chop M/N and N: (y/n): # we choose n
192
#I induce autos and add central autos
193
#I step 3: 2^2 -- aut grp has size 12288
194
#I computing cover
195
#I computing matrix action
196
#I computing stabilizer of U
197
#I dim U = 6 dim N = 5 dim M = 8
198
199
chop M/N and N: (y/n): # we choose y
200
#I induce autos and add central autos
201
#I final step: convert
202
rec(
203
glAutos := [ Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) -> [ f1, f2*f3, f3,
204
f4, f5, f6*f7, f7, f8 ],
205
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
206
[ f1*f3*f5*f6, f2*f3, f3, f4, f5*f8, f6*f7, f7, f8 ],
207
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
208
[ f1*f3, f2*f4, f3, f4*f7, f5*f7, f6*f7*f8, f7, f8 ] ], glOrder := 4,
209
agAutos :=
210
[ Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) -> [ f1*f4, f2, f3, f4*f8, f5,
211
f6, f7, f8 ], Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
212
[ f1, f2*f4, f3, f4*f7, f5, f6*f7*f8, f7, f8 ],
213
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
214
[ f1*f5, f2, f3, f4, f5, f6, f7, f8 ],
215
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
216
[ f1, f2*f5, f3, f4, f5, f6, f7, f8 ],
217
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
218
[ f1, f2, f3*f5, f4, f5, f6, f7, f8 ],
219
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
220
[ f1*f6, f2, f3, f4, f5*f7*f8, f6, f7, f8 ],
221
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
222
[ f1, f2*f6, f3, f4*f7*f8, f5, f6, f7, f8 ],
223
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
224
[ f1*f8, f2, f3, f4, f5, f6, f7, f8 ],
225
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
226
[ f1, f2*f8, f3, f4, f5, f6, f7, f8 ],
227
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
228
[ f1, f2, f3*f8, f4, f5, f6, f7, f8 ],
229
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
230
[ f1*f7, f2, f3, f4, f5, f6, f7, f8 ],
231
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
232
[ f1, f2*f7, f3, f4, f5, f6, f7, f8 ],
233
Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->
234
[ f1, f2, f3*f7, f4, f5, f6, f7, f8 ] ],
235
agOrder := [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ],
236
one := IdentityMapping( <pc group of size 256 with 8 generators> ),
237
group := <pc group of size 256 with 8 generators>, size := 32768 )
238
\endexample
239
240
Two points are worthy of comment.
241
First, the interactive version of the algorithm permits the user to
242
make a suitable choice in each step of the algorithm instead of making
243
one choice at the beginning. Secondly, the output of the `Info' function
244
shows the ranks of the $p$-multiplicator and allowable subgroup,
245
and thus allow the user to observe the scale of difficulty
246
of the computation.
247
248
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
249
\Section{Acknowledgements}
250
251
We thank Alexander Hulpke for helping us with efficiency
252
problems. Werner Nickel provided some functions from
253
the {\GAP} `PQuotient' which are used in this package.
254
255
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
256
257