GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1%%2%A influen.tex AutPGrp documentation Bettina Eick3%A Eamonn O'Brien4%%56%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%7\Chapter{Influencing the algorithm}89A number of choices can be made by the user to influence the performance10of `AutomorphismGroupPGroup'. Below we identify these choices11and their default values used in `AutomorphismGroup'. We use the optional12argument <flag> of `AutomorphismGroupPGroup' to invoke user-defined choices.13The possible values for <flag> are1415\beginitems16`<flag> = false' & the user-defined defaults are employed in the algorithm.17See below for a list of possibilities.1819`<flag> = true' & invokes the interactive version of the algorithm20as described in Section "An interactive version of21the algorithm".22\enditems2324In the next section we give a brief outline of the algorithm which is25necessary to understand the possible choices. Then we introduce the26choices the later sections of this chapter.2728%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%29\Section{Outline of the algorithm}3031The basic algorithm proceeds by induction32down the lower $p$-central series of a given $p$-group $G$; that is, it33successively computes $Aut(G_i)$ for the quotients $G_i = G / P_i(G)$ of34the descending sequence of subgroups defined by $P_1(G) = G$ and35$P_{i+1}(G)=[P_i(G),G] P_i(G)^p$ for $i\geq 1$. Hence, in the initial36step of the algorithm, $Aut(G_2) = GL(d,p)$ where $d$ is the rank of37the elementary abelian group $G_2$. In the inductive step it determines38$Aut(G_{i+1})$ from $Aut(G_i)$. For this purpose we introduce39an action of $Aut(G_i)$ on a certain elementary abelian $p$-group $M$40(the *$p$-multiplicator* of $G_i$). The main computation of the inductive41step is the determination of the stabiliser in $Aut(G_i)$ of a subgroup42$U$ of $M$ (the *allowable subgroup* for $G_{i+1}$). This stabiliser43calculation is the bottle-neck of the algorithm.4445Our package incorporates a number of refinements designed to simplify46this stabiliser computation. Some of these refinements incur overheads47and hence they are not always invoked. The features outlined below48allow the user to select them.4950Observe that the initial step of the algorithm returns $GL(d,p)$. But51$Aut(G)$ may induce on $G_2$ a proper subgroup, say $K$, of $GL(d,p)$.52Any intermediate subgroup of $GL(d,p)$ which contains $K$ suffices for53the algorithm and we supply two methods to construct a suitable subgroup:54these use characteristic subgroups or invariants of normal subgroups of $G$.55(See Section "The initialisation step".)5657In the inductive step an action of $Aut(G_i)$ on an elementary abelian58group $M$ is used. This action is computed as a matrix action on a vector59space. To simplify the orbit-stabiliser computation of the subspace $U$60of $M$, we can construct the stabiliser of $U$ by iteration over a sequence61of $Aut(G_i)$-invariant subspaces of $M$.62(See Section "Stabilisers in matrix groups".)6364Orbit-stabiliser computations in finite solvable groups given by a65polycyclic generating sequence are much more efficient than generic66computations of this type. Thus our algorithm makes use of a large67solvable normal subgroup $S$ of $Aut(G_i)$. Further, it is useful if68the generating set of $Aut(G_i)$ outside $S$ is as small as possible.69To achieve this we determine a permutation representation of $Aut(G_i)/S$70and use this to reduce the number of generators if possible. (See Section71"Searching for a small generating set".)7273%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%74\Section{The initialisation step}7576Assume we seek to compute the automorphism group of a $p$-group $G$77having Frattini rank $d$. We first determine as small as possible a78subgroup of $GL(d, p)$ whose extension can act on $G$.7980The user can choose the initialisation routine by assigning81`InitAutGroup' to any one of the following.8283\beginitems84`InitAutomorphismGroupOver' & to use the minimal overgroups;8586`InitAutomorphismGroupChar' & to use the characteristic subgroups;8788`InitAutomorphismGroupFull' & to use the full $GL(d,p)$.89\enditems9091*a) Minimal Overgroups*9293We determine the minimal over-groups of the Frattini subgroup of94$G$ and compute invariants of these which must be respected by the95automorphism group of $G$. We partition the minimal overgroups and96compute the stabiliser in $GL(d, p)$ of this partition.9798The partition of the minimal overgroups is computed using the99function `PGFingerprint( G, U )'. This is the time-consuming100part of this initialisation method. The user can101overwrite the function `PGFingerprint'.102103*b) Characteristic Subgroups*104105Compute a generating set for the stabiliser in $GL (d, p)$ of106a chain of characteristic subgroups of $G$. In practice, we construct107a characteristic chain by determining 2-step centralisers and omega108subgroups of factors of the lower $p$-central series.109110However, there are often other characteristic subgroups which are not111found by these approaches. The user can overwrite the function112`PGCharSubgroups( G )' to supply a set of characteristic subgroups.113114*c) Defaults*115116In the method for `AutomorphismGroup' we use a default strategy:117if the value $\frac{p^d-1}{p-1}$ is less than 1000, then we118use the minimal overgroup approach, otherwise the characteristic119subgroups are employed. An exception is made for homogeneous abelian120groups where we initialise the algorithm with the full group $GL(d,p)$.121122%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%123\Section{Stabilisers in matrix groups}124125Consider the $i$th inductive step of the algorithm. Here $A \leq126Aut(G_i)$ acts as matrix group on the elementary abelian $p$-group127$M$ and we want to determine the stabiliser of a subgroup $U \leq M$.128129We use the MeatAxe to compute a series of $A$-invariant subspaces130through $M$ such that each factor in the series is irreducible as131$A$-module. Then we use this series to break the computation132of $Stab_A(U)$ into several smaller orbit-stabiliser calculations.133134Note that a theoretic argument yields an $A$-invariant subspace135of $M$ a priori: the nucleus $N$. This is always used to split136the computation up. However, it may happen that $N = M$ and hence137results in no improvement.138139\>`CHOP_MULT' V140141The invariant series through $M$ is computed and used if the142global variable `CHOP_MULT' is set to `true'. Otherwise, the algorithm143tries to determine $Stab_A(U)$ in one step. By default, `CHOP_MULT'144is `true'.145146%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%147\Section{Searching for a small generating set}148149After each step of the computation, we attempt to find a nice generating150set for the automorphism group of the current factor.151152If the automorphism group is soluble, we store a polycyclic generating153set; otherwise, we store such a generating set for a large soluble154normal subgroup $S$ of the automorphism group $A$, and as few generators155outside as possible. If $S = A$ and a polycyclic generating set for156$S$ is known, many steps of the algorithm proceed more rapidly.157158\>`NICE_STAB' V159160It may be both time-consuming and difficult to reduce the number of161generators for $A$ outside $S$. Note that if the initialisation of the162algorithm is by `InitAutomorphismGroupOver', then we always know a163permutation representation for $A/S$. Occasionally the search for164a small generating set is expensive. If this is observed, one165could set the flag `NICE_STAB' to `false' and the algorithm no166longer invokes this search.167168%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%169\Section{An interactive version of the algorithm}170171The choice of initialisation and the choice of chopping of the172$p$-multiplicator can also be driven by an interactive version173of the algorithm. We give an example.174175\beginexample176gap> G := SmallGroup( 2^8, 1000 );;177gap> SetInfoLevel( InfoAutGrp, 3 );178179gap> AutomorphismGroupPGroup( G, true );180#I step 1: 2^3 -- init automorphisms181182choose initialisation (Over/Char/Full): # we choose Full183#I init automorphism group : Full184#I step 2: 2^3 -- aut grp has size 168185#I computing cover186#I computing matrix action187#I computing stabilizer of U188#I dim U = 3 dim N = 6 dim M = 6189190chop M/N and N: (y/n): # we choose n191#I induce autos and add central autos192#I step 3: 2^2 -- aut grp has size 12288193#I computing cover194#I computing matrix action195#I computing stabilizer of U196#I dim U = 6 dim N = 5 dim M = 8197198chop M/N and N: (y/n): # we choose y199#I induce autos and add central autos200#I final step: convert201rec(202glAutos := [ Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) -> [ f1, f2*f3, f3,203f4, f5, f6*f7, f7, f8 ],204Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->205[ f1*f3*f5*f6, f2*f3, f3, f4, f5*f8, f6*f7, f7, f8 ],206Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->207[ f1*f3, f2*f4, f3, f4*f7, f5*f7, f6*f7*f8, f7, f8 ] ], glOrder := 4,208agAutos :=209[ Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) -> [ f1*f4, f2, f3, f4*f8, f5,210f6, f7, f8 ], Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->211[ f1, f2*f4, f3, f4*f7, f5, f6*f7*f8, f7, f8 ],212Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->213[ f1*f5, f2, f3, f4, f5, f6, f7, f8 ],214Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->215[ f1, f2*f5, f3, f4, f5, f6, f7, f8 ],216Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->217[ f1, f2, f3*f5, f4, f5, f6, f7, f8 ],218Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->219[ f1*f6, f2, f3, f4, f5*f7*f8, f6, f7, f8 ],220Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->221[ f1, f2*f6, f3, f4*f7*f8, f5, f6, f7, f8 ],222Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->223[ f1*f8, f2, f3, f4, f5, f6, f7, f8 ],224Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->225[ f1, f2*f8, f3, f4, f5, f6, f7, f8 ],226Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->227[ f1, f2, f3*f8, f4, f5, f6, f7, f8 ],228Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->229[ f1*f7, f2, f3, f4, f5, f6, f7, f8 ],230Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->231[ f1, f2*f7, f3, f4, f5, f6, f7, f8 ],232Pcgs([ f1, f2, f3, f4, f5, f6, f7, f8 ]) ->233[ f1, f2, f3*f7, f4, f5, f6, f7, f8 ] ],234agOrder := [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 ],235one := IdentityMapping( <pc group of size 256 with 8 generators> ),236group := <pc group of size 256 with 8 generators>, size := 32768 )237\endexample238239Two points are worthy of comment.240First, the interactive version of the algorithm permits the user to241make a suitable choice in each step of the algorithm instead of making242one choice at the beginning. Secondly, the output of the `Info' function243shows the ranks of the $p$-multiplicator and allowable subgroup,244and thus allow the user to observe the scale of difficulty245of the computation.246247%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%248\Section{Acknowledgements}249250We thank Alexander Hulpke for helping us with efficiency251problems. Werner Nickel provided some functions from252the {\GAP} `PQuotient' which are used in this package.253254%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%255256257