Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
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
Project: cocalc-sagemath-dev-slelievre
Views: 4183461[1X4 [33X[0;0YNon-interactive ANUPQ functions[133X[101X23[33X[0;0YHere we describe all the non-interactive functions of the [5XANUPQ[105X package;4i.e. [21Xone-shot[121X functions that invoke the [10Xpq[110X program in such a way that once5[5XGAP[105X has got what it needs, the [10Xpq[110X program is allowed to exit. It is expected6that most of the time users will only need these functions. The functions7interface with three of the four algorithms (see Chapter [14X'[33X[0;0YIntroduction[133X'[114X)8provided by the ANU [10Xpq[110X C program, and are mainly grouped according to the9algorithm of the [10Xpq[110X program they relate to.[133X1011[33X[0;0YIn Section [14X'[33X[0;0YComputing p-Quotients[133X'[114X, we describe the functions that give12access to the [22Xp[122X-quotient algorithm.[133X1314[33X[0;0YSection [14X'[33X[0;0YComputing Standard Presentations[133X'[114X describe functions that give15access to the standard presentation algorithm.[133X1617[33X[0;0YSection [14X'[33X[0;0YTesting p-Groups for Isomorphism[133X'[114X describe functions that implement18an isomorphism test for [22Xp[122X-groups using the standard presentation algorithm.[133X1920[33X[0;0YIn Section [14X'[33X[0;0YComputing Descendants of a p-Group[133X'[114X, we describe functions that21give access to the [22Xp[122X-group generation algorithm.[133X2223[33X[0;0YTo use any of the functions one must have at some stage previously typed:[133X2425[4X[32X Example [32X[104X26[4X[25Xgap>[125X [27XLoadPackage("anupq");[127X[104X27[4X[32X[104X2829[33X[0;0Y(the response of which we have omitted; see [14X'[33X[0;0YLoading the ANUPQ Package[133X'[114X).[133X3031[33X[0;0YIt is strongly recommended that the user try the examples provided. To save32typing there is a [10XPqExample[110X equivalent for each manual example. We also33suggest that to start with you may find the examples more instructive if you34set the [10XInfoANUPQ[110X level to 2 (see [2XInfoANUPQ[102X ([14X3.3-1[114X)).[133X353637[1X4.1 [33X[0;0YComputing p-Quotients[133X[101X3839[1X4.1-1 Pq[101X4041[33X[1;0Y[29X[2XPq[102X( [3XF:[103X [3Xoptions[103X ) [32X function[133X4243[33X[0;0Yreturns for the fp or pc group [3XF[103X, the [22Xp[122X-quotient of [3XF[103X specified by [3Xoptions[103X,44as a pc group. Following the colon, [3Xoptions[103X is a selection of the options45from the following list, separated by commas like record components (see46Section [14XReference: Function Call With Options[114X in the [5XGAP[105X Reference Manual).47As a minimum the user [13Xmust[113X supply a value for the [10XPrime[110X option. Below we48list the options recognised by [10XPq[110X (see Chapter [14X'[33X[0;0YANUPQ Options[133X'[114X for detailed49descriptions).[133X5051[30X [33X[0;6Y[10XPrime := [3Xp[103X[10X[110X[133X5253[30X [33X[0;6Y[10XClassBound := [3Xn[103X[10X[110X[133X5455[30X [33X[0;6Y[10XExponent := [3Xn[103X[10X[110X[133X5657[30X [33X[0;6Y[10XRelators := [3Xrels[103X[10X[110X[133X5859[30X [33X[0;6Y[10XMetabelian[110X[133X6061[30X [33X[0;6Y[10XIdentities := [3Xfuncs[103X[10X[110X[133X6263[30X [33X[0;6Y[10XGroupName := [3Xname[103X[10X[110X[133X6465[30X [33X[0;6Y[10XOutputLevel := [3Xn[103X[10X[110X[133X6667[30X [33X[0;6Y[10XSetupFile := [3Xfilename[103X[10X[110X[133X6869[30X [33X[0;6Y[10XPqWorkspace := [3Xworkspace[103X[10X[110X[133X7071[33X[0;0Y[13XNotes:[113X [10XPq[110X may also be called with no arguments or one integer argument, in72which case it is being used interactively (see [2XPq[102X ([14X5.3-1[114X)); the same options73may be used, except that [10XSetupFile[110X and [10XPqWorkspace[110X are ignored by the74interactive [10XPq[110X function.[133X7576[33X[0;0YSee Section [14X'[33X[0;0YAttributes and a Property for fp and pc p-groups[133X'[114X for the77attributes and property [10XNuclearRank[110X, [10XMultiplicatorRank[110X and [10XIsCapable[110X which78may be applied to the group returned by [10XPq[110X.[133X7980[33X[0;0YSee also [10XPqEpimorphism[110X ([2XPqEpimorphism[102X ([14X4.1-2[114X)).[133X8182[33X[0;0YWe now give a few examples of the use of [10XPq[110X. Except for the addition of a83few comments and the non-suppression of output (by not using duplicated84semicolons) the next 3 examples may be run by typing: [10XPqExample( "Pq" );[110X85(see [2XPqExample[102X ([14X3.4-4[114X)).[133X8687[4X[32X Example [32X[104X88[4X[25Xgap>[125X [27XLoadPackage("anupq");; # does nothing if ANUPQ is already loaded[127X[104X89[4X[25Xgap>[125X [27X# First we get a p-quotient of a free group of rank 2[127X[104X90[4X[25Xgap>[125X [27XF := FreeGroup("a", "b");; a := F.1;; b := F.2;;[127X[104X91[4X[25Xgap>[125X [27XPq( F : Prime := 2, ClassBound := 3 ); [127X[104X92[4X[28X<pc group of size 1024 with 10 generators>[128X[104X93[4X[25Xgap>[125X [27X# Now let us get a p-quotient of an fp group[127X[104X94[4X[25Xgap>[125X [27XG := F / [a^4, b^4];[127X[104X95[4X[28X<fp group on the generators [ a, b ]>[128X[104X96[4X[25Xgap>[125X [27XPq( G : Prime := 2, ClassBound := 3 ); [127X[104X97[4X[28X<pc group of size 256 with 8 generators>[128X[104X98[4X[25Xgap>[125X [27X# Now let's get a different p-quotient of the same group[127X[104X99[4X[25Xgap>[125X [27XPq( G : Prime := 2, ClassBound := 3, Exponent := 4 ); [127X[104X100[4X[28X<pc group of size 128 with 7 generators>[128X[104X101[4X[25Xgap>[125X [27X# Now we'll get a p-quotient of another fp group[127X[104X102[4X[25Xgap>[125X [27X# which we will redo using the `Relators' option[127X[104X103[4X[25Xgap>[125X [27XR := [ a^25, Comm(Comm(b, a), a), b^5 ];[127X[104X104[4X[28X[ a^25, a^-1*b^-1*a*b*a^-1*b^-1*a^-1*b*a^2, b^5 ][128X[104X105[4X[25Xgap>[125X [27XH := F / R;[127X[104X106[4X[28X<fp group on the generators [ a, b ]>[128X[104X107[4X[25Xgap>[125X [27XPq( H : Prime := 5, ClassBound := 5, Metabelian );[127X[104X108[4X[28X<pc group of size 78125 with 7 generators>[128X[104X109[4X[32X[104X110111[33X[0;0YNow we redo the last example to show how one may use the [10XRelators[110X option.112Observe that [10XComm(Comm(b, a), a)[110X is a left normed commutator which must be113written in square bracket notation for the [10Xpq[110X program and embedded in a pair114of double quotes. The function [10XPqGAPRelators[110X (see [2XPqGAPRelators[102X ([14X3.4-2[114X)) can115be used to translate a list of strings prepared for the [10XRelators[110X option into116[5XGAP[105X format. Below we use it. Observe that the value of [10XR[110X is the same as117before.[133X118119[4X[32X Example [32X[104X120[4X[25Xgap>[125X [27XF := FreeGroup("a", "b");;[127X[104X121[4X[25Xgap>[125X [27X# `F' was defined for `Relators'. We use the same strings that GAP uses[127X[104X122[4X[25Xgap>[125X [27X# for printing the free group generators. It is *not* necessary to[127X[104X123[4X[25Xgap>[125X [27X# predefine: a := F.1; etc. (as it was above).[127X[104X124[4X[25Xgap>[125X [27Xrels := [ "a^25", "[b, a, a]", "b^5" ];[127X[104X125[4X[28X[ "a^25", "[b, a, a]", "b^5" ][128X[104X126[4X[25Xgap>[125X [27XR := PqGAPRelators(F, rels);[127X[104X127[4X[28X[ a^25, a^-1*b^-1*a*b*a^-1*b^-1*a^-1*b*a^2, b^5 ][128X[104X128[4X[25Xgap>[125X [27XH := F / R;[127X[104X129[4X[28X<fp group on the generators [ a, b ]>[128X[104X130[4X[25Xgap>[125X [27XPq( H : Prime := 5, ClassBound := 5, Metabelian, [127X[104X131[4X[25X>[125X [27X Relators := rels );[127X[104X132[4X[28X<pc group of size 78125 with 7 generators>[128X[104X133[4X[32X[104X134135[33X[0;0YIn fact, above we could have just passed [10XF[110X (rather than [10XH[110X), i.e. we could136have done:[133X137138[4X[32X Example [32X[104X139[4X[25Xgap>[125X [27XF := FreeGroup("a", "b");;[127X[104X140[4X[25Xgap>[125X [27Xrels := [ "a^25", "[b, a, a]", "b^5" ];[127X[104X141[4X[28X[ "a^25", "[b, a, a]", "b^5" ][128X[104X142[4X[25Xgap>[125X [27XPq( F : Prime := 5, ClassBound := 5, Metabelian, [127X[104X143[4X[25X>[125X [27X Relators := rels );[127X[104X144[4X[28X<pc group of size 78125 with 7 generators>[128X[104X145[4X[32X[104X146147[33X[0;0YThe non-interactive [10XPq[110X function also allows the options to be passed in two148other ways; these alternatives have been included for those familiar with149the [5XGAP[105X 3 version of the [5XANUPQ[105X package; the preferred method of passing150options is the one already described. Firstly, they may be passed in a151record as a second argument; note that any boolean options must be set152explicitly e.g.[133X153154[4X[32X Example [32X[104X155[4X[25Xgap>[125X [27XPq( H, rec( Prime := 5, ClassBound := 5, Metabelian := true ) );[127X[104X156[4X[28X<pc group of size 78125 with 7 generators>[128X[104X157[4X[32X[104X158159[33X[0;0YIt is also possible to pass them as extra arguments, where each option name160appears as a string followed immediately by its value (if not a boolean161option) e.g.[133X162163[4X[32X Example [32X[104X164[4X[25Xgap>[125X [27XPq( H, "Prime", 5, "ClassBound", 5, "Metabelian" );[127X[104X165[4X[28X<pc group of size 78125 with 7 generators>[128X[104X166[4X[32X[104X167168[33X[0;0YThe preceding two examples can be run from [5XGAP[105X via [10XPqExample( "Pq-ni" );[110X169(see [2XPqExample[102X ([14X3.4-4[114X)).[133X170171[33X[0;0YThis method of passing options permits abbreviation; the only restriction is172that the abbreviation must be unique. So [10X"Pr"[110X may be used for [10X"Prime"[110X,173[10X"Class"[110X or even just [10X"C"[110X for [10X"ClassBound"[110X, etc.[133X174175[33X[0;0YThe following example illustrates the use of the option [10XIdentities[110X. We176compute the largest finite Burnside group of exponent [22X5[122X that also satisfies177the [22X3[122X-Engel identity. Each identity is defined by a function whose arguments178correspond to the variables of the identity. The return value of each of179those functions is the identity evaluated on the arguments of the function.[133X180181[4X[32X Example [32X[104X182[4X[25Xgap>[125X [27XF := FreeGroup(2);[127X[104X183[4X[28X<free group on the generators [ f1, f2 ]>[128X[104X184[4X[25Xgap>[125X [27XBurnside5 := x->x^5;[127X[104X185[4X[28Xfunction( x ) ... end[128X[104X186[4X[25Xgap>[125X [27XEngel3 := function( x,y ) return PqLeftNormComm( [x,y,y,y] ); end;[127X[104X187[4X[28Xfunction( x, y ) ... end[128X[104X188[4X[25Xgap>[125X [27XPq( F : Prime := 5, Identities := [ Burnside5, Engel3 ] );[127X[104X189[4X[28X#I Class 1 with 2 generators.[128X[104X190[4X[28X#I Class 2 with 3 generators.[128X[104X191[4X[28X#I Class 3 with 5 generators.[128X[104X192[4X[28X#I Class 3 with 5 generators.[128X[104X193[4X[28X<pc group of size 3125 with 5 generators>[128X[104X194[4X[32X[104X195196[33X[0;0YThe above example can be run from [5XGAP[105X via [10XPqExample( "B5-5-Engel3-Id" );[110X197(see [2XPqExample[102X ([14X3.4-4[114X)).[133X198199[1X4.1-2 PqEpimorphism[101X200201[33X[1;0Y[29X[2XPqEpimorphism[102X( [3XF:[103X [3Xoptions[103X ) [32X function[133X202203[33X[0;0Yreturns for the fp or pc group [3XF[103X an epimorphism from [3XF[103X onto the [22Xp[122X-quotient204of [3XF[103X specified by [3Xoptions[103X; the possible options [3Xoptions[103X and [13Xrequired[113X option205([10X"Prime"[110X) are as for [10XPq[110X (see [2XPq[102X ([14X4.1-1[114X)). [10XPqEpimorphism[110X only differs from [10XPq[110X206in what it outputs; everything about what must/may be passed as input to207[10XPqEpimorphism[110X is the same as for [10XPq[110X. The same alternative methods of passing208options to the non-interactive [10XPq[110X function are available to the209non-interactive version of [10XPqEpimorphism[110X.[133X210211[33X[0;0Y[13XNotes:[113X [10XPqEpimorphism[110X may also be called with no arguments or one integer212argument, in which case it is being used interactively (see [2XPqEpimorphism[102X213([14X5.3-2[114X)), and the options [10XSetupFile[110X and [10XPqWorkspace[110X are ignored by the214interactive [10XPqEpimorphism[110X function.[133X215216[33X[0;0YSee Section [14X'[33X[0;0YAttributes and a Property for fp and pc p-groups[133X'[114X for the217attributes and property [10XNuclearRank[110X, [10XMultiplicatorRank[110X and [10XIsCapable[110X which218may be applied to the image group of the epimorphism returned by219[10XPqEpimorphism[110X.[133X220221[4X[32X Example [32X[104X222[4X[25Xgap>[125X [27XF := FreeGroup (2, "F");[127X[104X223[4X[28X<free group on the generators [ F1, F2 ]>[128X[104X224[4X[25Xgap>[125X [27Xphi := PqEpimorphism( F : Prime := 5, ClassBound := 2 );[127X[104X225[4X[28X[ F1, F2 ] -> [ f1, f2 ][128X[104X226[4X[25Xgap>[125X [27XImage( phi );[127X[104X227[4X[28X<pc group of size 3125 with 5 generators>[128X[104X228[4X[32X[104X229230[33X[0;0YTyping: [10XPqExample( "PqEpimorphism" );[110X runs the above example in [5XGAP[105X231(see [2XPqExample[102X ([14X3.4-4[114X)).[133X232233[1X4.1-3 PqPCover[101X234235[33X[1;0Y[29X[2XPqPCover[102X( [3XF:[103X [3Xoptions[103X ) [32X function[133X236237[33X[0;0Yreturns for the fp or pc group [3XF[103X, the [22Xp[122X-covering group of the [22Xp[122X-quotient of238[3XF[103X specified by [3Xoptions[103X, as a pc group, i.e. the [22Xp[122X-covering group of the239[22Xp[122X-quotient [10XPq( [3XF[103X[10X : [3Xoptions[103X[10X )[110X. Thus the options that [10XPqPCover[110X accepts are240exactly those expected for [10XPq[110X (and hence as a minimum the user [13Xmust[113X supply a241value for the [10XPrime[110X option; see [2XPq[102X ([14X4.1-1[114X) for more details), except in the242following special case.[133X243244[33X[0;0YIf [3XF[103X is already a [22Xp[122X-group, in the sense that [10XIsPGroup([3XF[103X[10X)[110X is [9Xtrue[109X, then[133X245246[8X[10XPrime[110X[8X[108X247[33X[0;6Ydefaults to [10XPrimePGroup([3XF[103X[10X)[110X, if not supplied and [10XHasPrimePGroup([3XF[103X[10X) =248true[110X; and[133X249250[8X[10XClassBound[110X[8X[108X251[33X[0;6Ydefaults to [10XPClassPGroup([3XF[103X[10X)[110X if [10XHasPClassPGroup([3XF[103X[10X) = true[110X if not252supplied, or to the usual default of 63, otherwise.[133X253254[33X[0;0YThe same alternative methods of passing options to the non-interactive [10XPq[110X255function are available to the non-interactive version of [10XPqPCover[110X.[133X256257[33X[0;0YWe now give a few examples of the use of [10XPqPCover[110X. These examples are just a258subset of the ones we gave for [10XPq[110X (see [2XPq[102X ([14X4.1-1[114X)), except that in each259instance the command [10XPq[110X has been replaced with [10XPqPCover[110X. Essentially the260same examples may be run by typing: [10XPqExample( "PqPCover" );[110X (see [2XPqExample[102X261([14X3.4-4[114X)).[133X262263[4X[32X Example [32X[104X264[4X[25Xgap>[125X [27XF := FreeGroup("a", "b");; a := F.1;; b := F.2;;[127X[104X265[4X[25Xgap>[125X [27XPqPCover( F : Prime := 2, ClassBound := 3 );[127X[104X266[4X[28X<pc group of size 262144 with 18 generators>[128X[104X267[4X[25Xgap>[125X [27X[127X[104X268[4X[25Xgap>[125X [27X# Now let's get a p-cover of a p-quotient of an fp group[127X[104X269[4X[25Xgap>[125X [27XG := F / [a^4, b^4];[127X[104X270[4X[28X<fp group on the generators [ a, b ]>[128X[104X271[4X[25Xgap>[125X [27XPqPCover( G : Prime := 2, ClassBound := 3 );[127X[104X272[4X[28X<pc group of size 16384 with 14 generators>[128X[104X273[4X[25Xgap>[125X [27X[127X[104X274[4X[25Xgap>[125X [27X# Now let's get a p-cover of a different p-quotient of the same group[127X[104X275[4X[25Xgap>[125X [27XPqPCover( G : Prime := 2, ClassBound := 3, Exponent := 4 );[127X[104X276[4X[28X<pc group of size 8192 with 13 generators>[128X[104X277[4X[25Xgap>[125X [27X[127X[104X278[4X[25Xgap>[125X [27X# Now we'll get a p-cover of a p-quotient of another fp group[127X[104X279[4X[25Xgap>[125X [27X# which we will redo using the `Relators' option[127X[104X280[4X[25Xgap>[125X [27XR := [ a^25, Comm(Comm(b, a), a), b^5 ];[127X[104X281[4X[28X[ a^25, a^-1*b^-1*a*b*a^-1*b^-1*a^-1*b*a^2, b^5 ][128X[104X282[4X[25Xgap>[125X [27XH := F / R;[127X[104X283[4X[28X<fp group on the generators [ a, b ]>[128X[104X284[4X[25Xgap>[125X [27XPqPCover( H : Prime := 5, ClassBound := 5, Metabelian );[127X[104X285[4X[28X<pc group of size 48828125 with 11 generators>[128X[104X286[4X[25Xgap>[125X [27X[127X[104X287[4X[25Xgap>[125X [27X# Now we redo the previous example using the `Relators' option[127X[104X288[4X[25Xgap>[125X [27XF := FreeGroup("a", "b");;[127X[104X289[4X[25Xgap>[125X [27Xrels := [ "a^25", "[b, a, a]", "b^5" ];[127X[104X290[4X[28X[ "a^25", "[b, a, a]", "b^5" ][128X[104X291[4X[25Xgap>[125X [27XPqPCover( F : Prime := 5, ClassBound := 5, Metabelian, [127X[104X292[4X[25X>[125X [27X Relators := rels );[127X[104X293[4X[28X<pc group of size 48828125 with 11 generators>[128X[104X294[4X[32X[104X295296297[1X4.2 [33X[0;0YComputing Standard Presentations[133X[101X298299[1X4.2-1 PqStandardPresentation[101X300301[33X[1;0Y[29X[2XPqStandardPresentation[102X( [3XF:[103X [3Xoptions[103X ) [32X function[133X302[33X[1;0Y[29X[2XStandardPresentation[102X( [3XF:[103X [3Xoptions[103X ) [32X method[133X303304[33X[0;0Yreturn the [3Xp[103X-quotient specified by [3Xoptions[103X of the fp or pc [22Xp[122X-group [3XF[103X, as an305[13Xfp group[113X which has a standard presentation. Here [3Xoptions[103X is a selection of306the options from the following list (see Chapter [14X'[33X[0;0YANUPQ Options[133X'[114X for307detailed descriptions). Section [14X'[33X[0;0YHints and Warnings regarding the use of308Options[133X'[114X gives some important hints and warnings regarding option usage, and309Section [14XReference: Function Call With Options[114X in the [5XGAP[105X Reference Manual310describes their [21Xrecord[121X-like syntax.[133X311312[30X [33X[0;6Y[10XPrime := [3Xp[103X[10X[110X[133X313314[30X [33X[0;6Y[10XpQuotient := [3XQ[103X[10X[110X[133X315316[30X [33X[0;6Y[10XClassBound := [3Xn[103X[10X[110X[133X317318[30X [33X[0;6Y[10XExponent := [3Xn[103X[10X[110X[133X319320[30X [33X[0;6Y[10XMetabelian[110X[133X321322[30X [33X[0;6Y[10XGroupName := [3Xname[103X[10X[110X[133X323324[30X [33X[0;6Y[10XOutputLevel := [3Xn[103X[10X[110X[133X325326[30X [33X[0;6Y[10XStandardPresentationFile := [3Xfilename[103X[10X[110X[133X327328[30X [33X[0;6Y[10XSetupFile := [3Xfilename[103X[10X[110X[133X329330[30X [33X[0;6Y[10XPqWorkspace := [3Xworkspace[103X[10X[110X[133X331332[33X[0;0YUnless [3XF[103X is a pc [3Xp[103X-group, the user [13Xmust[113X supply either the option [10XPrime[110X or333the option [10XpQuotient[110X (if both [10XPrime[110X and [10XpQuotient[110X are supplied, the prime [3Xp[103X334is determined by applying [10XPrimePGroup[110X (see [2XPrimePGroup[102X ([14XReference:335PrimePGroup[114X) in the Reference Manual) to the value of [10XpQuotient[110X).[133X336337[33X[0;0YThe options for [10XPqStandardPresentation[110X may also be passed in the two other338alternative ways described for [10XPq[110X (see [2XPq[102X ([14X4.1-1[114X)). [10XStandardPresentation[110X339does not provide these alternative ways of passing options.[133X340341[33X[0;0Y[13XNotes:[113X In contrast to the function [10XPq[110X (see [2XPq[102X ([14X4.1-1[114X)) which returns a pc342group, [10XPqStandardPresentation[110X or [10XStandardPresentation[110X returns an fp group.343This is because the output is mainly used for isomorphism testing for which344an fp group is enough. However, the presentation is a polycyclic345presentation and if you need to do any further computation with this group346(e.g. to find the order) you can use the function [10XPcGroupFpGroup[110X347(see [2XPcGroupFpGroup[102X ([14XReference: PcGroupFpGroup[114X) in the [5XGAP[105X Reference Manual)348to form a pc group.[133X349350[33X[0;0YIf the user does not supply a [3Xp[103X-quotient [3XQ[103X via the [10XpQuotient[110X option and the351prime [3Xp[103X is either supplied or [3XF[103X is a pc [3Xp[103X-group, then a [3Xp[103X-quotient [3XQ[103X is352computed. If the user does supply a [3Xp[103X-quotient [3XQ[103X via the [10XpQuotient[110X option,353the package [5XAutPGrp[105X is called to compute the automorphism group of [3XQ[103X; an354error will occur that asks the user to install the package [5XAutPGrp[105X if the355automorphism group cannot be computed.[133X356357[33X[0;0YThe attributes and property [10XNuclearRank[110X, [10XMultiplicatorRank[110X and [10XIsCapable[110X are358set for the group returned by [10XPqStandardPresentation[110X or [10XStandardPresentation[110X359(see Section [14X'[33X[0;0YAttributes and a Property for fp and pc p-groups[133X'[114X).[133X360361[33X[0;0YWe illustrate the method with the following examples.[133X362363[4X[32X Example [32X[104X364[4X[25Xgap>[125X [27XF := FreeGroup( "a", "b" );; a := F.1;; b := F.2;;[127X[104X365[4X[25Xgap>[125X [27XG := F / [a^25, Comm(Comm(b, a), a), b^5];[127X[104X366[4X[28X<fp group on the generators [ a, b ]>[128X[104X367[4X[25Xgap>[125X [27XS := StandardPresentation( G : Prime := 5, ClassBound := 10 );[127X[104X368[4X[28X<fp group on the generators [ f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, [128X[104X369[4X[28X f12, f13, f14, f15, f16, f17, f18, f19, f20, f21, f22, f23, f24, f25, f26 ]>[128X[104X370[4X[25Xgap>[125X [27XIsPcGroup( S );[127X[104X371[4X[28Xfalse[128X[104X372[4X[25Xgap>[125X [27X# if we need to compute with S we should convert it to a pc group[127X[104X373[4X[25Xgap>[125X [27XSpc := PcGroupFpGroup( S );[127X[104X374[4X[28X<pc group of size 1490116119384765625 with 26 generators>[128X[104X375[4X[25Xgap>[125X [27X[127X[104X376[4X[25Xgap>[125X [27XH := F / [ a^625, Comm(Comm(Comm(Comm(b, a), a), a), a)/Comm(b, a)^5,[127X[104X377[4X[25X>[125X [27X Comm(Comm(b, a), b), b^625 ];;[127X[104X378[4X[25Xgap>[125X [27XStandardPresentation( H : Prime := 5, ClassBound := 15, Metabelian );[127X[104X379[4X[28X<fp group on the generators [ f1, f2, f3, f4, f5, f6, f7, f8, f9, f10, f11, [128X[104X380[4X[28X f12, f13, f14, f15, f16, f17, f18, f19, f20 ]>[128X[104X381[4X[25Xgap>[125X [27X[127X[104X382[4X[25Xgap>[125X [27XF4 := FreeGroup( "a", "b", "c", "d" );;[127X[104X383[4X[25Xgap>[125X [27Xa := F4.1;; b := F4.2;; c := F4.3;; d := F4.4;;[127X[104X384[4X[25Xgap>[125X [27XG4 := F4 / [ b^4, b^2 / Comm(Comm (b, a), a), d^16,[127X[104X385[4X[25X>[125X [27X a^16 / (c * d), b^8 / (d * c^4) ];[127X[104X386[4X[28X<fp group on the generators [ a, b, c, d ]>[128X[104X387[4X[25Xgap>[125X [27XK := Pq( G4 : Prime := 2, ClassBound := 1 );[127X[104X388[4X[28X<pc group of size 4 with 2 generators>[128X[104X389[4X[25Xgap>[125X [27XStandardPresentation( G4 : pQuotient := K, ClassBound := 14 );[127X[104X390[4X[28X<fp group with 53 generators>[128X[104X391[4X[32X[104X392393[33X[0;0YTyping: [10XPqExample( "StandardPresentation" );[110X runs the above example in [5XGAP[105X394(see [2XPqExample[102X ([14X3.4-4[114X)).[133X395396[1X4.2-2 EpimorphismPqStandardPresentation[101X397398[33X[1;0Y[29X[2XEpimorphismPqStandardPresentation[102X( [3XF:[103X [3Xoptions[103X ) [32X function[133X399[33X[1;0Y[29X[2XEpimorphismStandardPresentation[102X( [3XF:[103X [3Xoptions[103X ) [32X method[133X400401[33X[0;0YEach of the above functions accepts the same arguments and options as the402function [10XStandardPresentation[110X (see [2XStandardPresentation[102X ([14X4.2-1[114X)) and returns403an epimorphism from the fp or pc group [3XF[103X onto the finitely presented group404given by a standard presentation, i.e. if [3XS[103X is the standard presentation405computed for the [22Xp[122X-quotient of [3XF[103X by [10XStandardPresentation[110X then406[10XEpimorphismStandardPresentation[110X returns the epimorphism from [3XF[103X to the group407with presentation [3XS[103X.[133X408409[33X[0;0Y[13XNote:[113X The attributes and property [10XNuclearRank[110X, [10XMultiplicatorRank[110X and410[10XIsCapable[110X are set for the image group of the epimorphism returned by411[10XEpimorphismPqStandardPresentation[110X or [10XEpimorphismStandardPresentation[110X (see412Section [14X'[33X[0;0YAttributes and a Property for fp and pc p-groups[133X'[114X).[133X413414[33X[0;0YWe illustrate the function with the following example.[133X415416[4X[32X Example [32X[104X417[4X[25Xgap>[125X [27XF := FreeGroup(6, "F");[127X[104X418[4X[28X<free group on the generators [ F1, F2, F3, F4, F5, F6 ]>[128X[104X419[4X[25Xgap>[125X [27X# For printing GAP uses the symbols F1, ... for the generators of F[127X[104X420[4X[25Xgap>[125X [27Xx := F.1;; y := F.2;; z := F.3;; w := F.4;; a := F.5;; b := F.6;;[127X[104X421[4X[25Xgap>[125X [27XR := [x^3 / w, y^3 / w * a^2 * b^2, w^3 / b,[127X[104X422[4X[25X>[125X [27X Comm (y, x) / z, Comm (z, x), Comm (z, y) / a, z^3 ];;[127X[104X423[4X[25Xgap>[125X [27XQ := F / R;[127X[104X424[4X[28X<fp group on the generators [ F1, F2, F3, F4, F5, F6 ]>[128X[104X425[4X[25Xgap>[125X [27X# For printing GAP also uses the symbols F1, ... for the generators of Q[127X[104X426[4X[25Xgap>[125X [27X# (the same as used for F) ... but the gen'rs of Q and F are different:[127X[104X427[4X[25Xgap>[125X [27XGeneratorsOfGroup(F) = GeneratorsOfGroup(Q);[127X[104X428[4X[28Xfalse[128X[104X429[4X[25Xgap>[125X [27XG := Pq( Q : Prime := 3, ClassBound := 3 );[127X[104X430[4X[28X<pc group of size 729 with 6 generators>[128X[104X431[4X[25Xgap>[125X [27Xphi := EpimorphismStandardPresentation( Q : Prime := 3,[127X[104X432[4X[25X>[125X [27X ClassBound := 3 );[127X[104X433[4X[28X[ F1, F2, F3, F4, F5, F6 ] -> [ f1*f2^2*f3*f4^2*f5^2, f1*f2*f3*f5, f3^2, [128X[104X434[4X[28X f4*f6^2, f5, f6 ][128X[104X435[4X[25Xgap>[125X [27XSource(phi); # This is the group Q (GAP uses F1, ... for gen'r symbols)[127X[104X436[4X[28X<fp group of size infinity on the generators [ F1, F2, F3, F4, F5, F6 ]>[128X[104X437[4X[25Xgap>[125X [27XRange(phi); # This is the group G (GAP uses f1, ... for gen'r symbols)[127X[104X438[4X[28X<fp group on the generators [ f1, f2, f3, f4, f5, f6 ]>[128X[104X439[4X[25Xgap>[125X [27XAssignGeneratorVariables(G);[127X[104X440[4X[28X#I Assigned the global variables [ f1, f2, f3, f4, f5, f6 ][128X[104X441[4X[25Xgap>[125X [27X# Just to see that the images of [F1, ..., F6] do generate G[127X[104X442[4X[25Xgap>[125X [27XGroup([ f1*f2^2*f3, f1*f2*f3*f4*f5^2*f6^2, f3^2, f4, f5, f6 ]) = G;[127X[104X443[4X[28Xtrue[128X[104X444[4X[25Xgap>[125X [27XSize( Image(phi) );[127X[104X445[4X[28X729[128X[104X446[4X[32X[104X447448[33X[0;0YTyping: [10XPqExample( "EpimorphismStandardPresentation" );[110X runs the above449example in [5XGAP[105X (see [2XPqExample[102X ([14X3.4-4[114X)). Note that [10XAssignGeneratorVariables[110X450(see [2XAssignGeneratorVariables[102X ([14XReference: AssignGeneratorVariables[114X)) has451only been available since [5XGAP[105X 4.3.[133X452453454[1X4.3 [33X[0;0YTesting p-Groups for Isomorphism[133X[101X455456[1X4.3-1 IsPqIsomorphicPGroup[101X457458[33X[1;0Y[29X[2XIsPqIsomorphicPGroup[102X( [3XG[103X, [3XH[103X ) [32X function[133X459[33X[1;0Y[29X[2XIsIsomorphicPGroup[102X( [3XG[103X, [3XH[103X ) [32X method[133X460461[33X[0;0Yeach return true if [3XG[103X is isomorphic to [3XH[103X, where both [3XG[103X and [3XH[103X must be pc462groups of prime power order. These functions compute and compare in [5XGAP[105X the463fp groups given by standard presentations for [3XG[103X and [3XH[103X (see464[2XStandardPresentation[102X ([14X4.2-1[114X)).[133X465466[4X[32X Example [32X[104X467[4X[25Xgap>[125X [27XG := Group( (1,2,3,4), (1,3) );[127X[104X468[4X[28XGroup([ (1,2,3,4), (1,3) ])[128X[104X469[4X[25Xgap>[125X [27XP1 := Image( IsomorphismPcGroup( G ) );[127X[104X470[4X[28XGroup([ f1, f2, f3 ])[128X[104X471[4X[25Xgap>[125X [27XP2 := SmallGroup( 8, 5 );[127X[104X472[4X[28X<pc group of size 8 with 3 generators>[128X[104X473[4X[25Xgap>[125X [27XIsIsomorphicPGroup( P1, P2 );[127X[104X474[4X[28Xfalse[128X[104X475[4X[25Xgap>[125X [27XP3 := SmallGroup( 8, 4 );[127X[104X476[4X[28X<pc group of size 8 with 3 generators>[128X[104X477[4X[25Xgap>[125X [27XIsIsomorphicPGroup( P1, P3 );[127X[104X478[4X[28Xfalse[128X[104X479[4X[25Xgap>[125X [27XP4 := SmallGroup( 8, 3 );[127X[104X480[4X[28X<pc group of size 8 with 3 generators>[128X[104X481[4X[25Xgap>[125X [27XIsIsomorphicPGroup( P1, P4 );[127X[104X482[4X[28Xtrue[128X[104X483[4X[32X[104X484485[33X[0;0YTyping: [10XPqExample( "IsIsomorphicPGroup" );[110X runs the above example in [5XGAP[105X486(see [2XPqExample[102X ([14X3.4-4[114X)).[133X487488489[1X4.4 [33X[0;0YComputing Descendants of a p-Group[133X[101X490491[1X4.4-1 PqDescendants[101X492493[33X[1;0Y[29X[2XPqDescendants[102X( [3XG:[103X [3Xoptions[103X ) [32X function[133X494495[33X[0;0Yreturns, for the pc group [3XG[103X which must be of prime power order with a496confluent pc presentation (see [2XIsConfluent[102X ([14XReference: IsConfluent for pc497groups[114X) in the [5XGAP[105X Reference Manual), a list of descendants (pc groups) of498[3XG[103X. Following the colon [3Xoptions[103X a selection of the options listed below499should be given, separated by commas like record components (see500Section [14XReference: Function Call With Options[114X in the [5XGAP[105X Reference Manual).501See Chapter [14X'[33X[0;0YANUPQ Options[133X'[114X for detailed descriptions of the options.[133X502503[33X[0;0YThe automorphism group of each descendant [3XD[103X is also computed via a call to504the [10XAutomorphismGroupPGroup[110X function of the [5XAutPGrp[105X package.[133X505506[30X [33X[0;6Y[10XClassBound := [3Xn[103X[10X[110X[133X507508[30X [33X[0;6Y[10XRelators := [3Xrels[103X[10X[110X[133X509510[30X [33X[0;6Y[10XOrderBound := [3Xn[103X[10X[110X[133X511512[30X [33X[0;6Y[10XStepSize := [3Xn[103X[10X[110X, [10XStepSize := [3Xlist[103X[10X[110X[133X513514[30X [33X[0;6Y[10XRankInitialSegmentSubgroups := [3Xn[103X[10X[110X[133X515516[30X [33X[0;6Y[10XSpaceEfficient[110X[133X517518[30X [33X[0;6Y[10XCapableDescendants[110X[133X519520[30X [33X[0;6Y[10XAllDescendants := false[110X[133X521522[30X [33X[0;6Y[10XExponent := [3Xn[103X[10X[110X[133X523524[30X [33X[0;6Y[10XMetabelian[110X[133X525526[30X [33X[0;6Y[10XGroupName := [3Xname[103X[10X[110X[133X527528[30X [33X[0;6Y[10XSubList := [3Xsub[103X[10X[110X[133X529530[30X [33X[0;6Y[10XBasicAlgorithm[110X[133X531532[30X [33X[0;6Y[10XCustomiseOutput := [3Xrec[103X[10X[110X[133X533534[30X [33X[0;6Y[10XSetupFile := [3Xfilename[103X[10X[110X[133X535536[30X [33X[0;6Y[10XPqWorkspace := [3Xworkspace[103X[10X[110X[133X537538[33X[0;0Y[13XNotes:[113X The function [10XPqDescendants[110X uses the automorphism group of [3XG[103X which it539computes via the package [5XAutPGrp[105X. If this package is not installed an error540may be raised. If the automorphism group of [3XG[103X is insoluble, the [10Xpq[110X program541will call [5XGAP[105X together with the [5XAutPGrp[105X package for certain orbit-stabilizer542calculations. (So, in any case, one should ensure the [5XAutPGrp[105X package is543installed.)[133X544545[33X[0;0YThe attributes and property [10XNuclearRank[110X, [10XMultiplicatorRank[110X and [10XIsCapable[110X are546set for each group of the list returned by [10XPqDescendants[110X (see547Section [14X'[33X[0;0YAttributes and a Property for fp and pc p-groups[133X'[114X).[133X548549[33X[0;0YThe options [3Xoptions[103X for [10XPqDescendants[110X may be passed in an alternative manner550to that already described, namely you can pass [10XPqDescendants[110X a record as an551argument, which contains as entries some (or all) of the above mentioned.552Those parameters which do not occur in the record are set to their default553values.[133X554555[33X[0;0YNote that you cannot set both [10XOrderBound[110X and [10XStepSize[110X.[133X556557[33X[0;0YIn the first example we compute all descendants of the Klein four group558which have exponent-2 class at most 5 and order at most [22X2^6[122X.[133X559560[4X[32X Example [32X[104X561[4X[25Xgap>[125X [27XF := FreeGroup( "a", "b" );; a := F.1;; b := F.2;;[127X[104X562[4X[25Xgap>[125X [27XG := PcGroupFpGroup( F / [ a^2, b^2, Comm(b, a) ] );[127X[104X563[4X[28X<pc group of size 4 with 2 generators>[128X[104X564[4X[25Xgap>[125X [27Xdes := PqDescendants( G : OrderBound := 6, ClassBound := 5 );;[127X[104X565[4X[25Xgap>[125X [27XLength(des);[127X[104X566[4X[28X83[128X[104X567[4X[25Xgap>[125X [27XList(des, Size); [127X[104X568[4X[28X[ 8, 8, 8, 16, 16, 16, 32, 16, 16, 16, 16, 16, 32, 32, 64, 64, 32, 32, 32, [128X[104X569[4X[28X 32, 32, 32, 32, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 32, 32, 32, 32, [128X[104X570[4X[28X 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 32, 32, 32, 32, 32, 64, 64, 64, [128X[104X571[4X[28X 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, [128X[104X572[4X[28X 64, 64, 64, 64, 64, 64, 64 ][128X[104X573[4X[25Xgap>[125X [27XList(des, d -> Length( PCentralSeries( d, 2 ) ) - 1 );[127X[104X574[4X[28X[ 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, [128X[104X575[4X[28X 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, [128X[104X576[4X[28X 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, [128X[104X577[4X[28X 4, 4, 4, 5, 5, 5, 5, 5 ][128X[104X578[4X[32X[104X579580[33X[0;0YBelow, we compute all capable descendants of order 27 of the elementary581abelian group of order 9.[133X582583[4X[32X Example [32X[104X584[4X[25Xgap>[125X [27XF := FreeGroup( 2, "g" );[127X[104X585[4X[28X<free group on the generators [ g1, g2 ]>[128X[104X586[4X[25Xgap>[125X [27XG := PcGroupFpGroup( F / [ F.1^3, F.2^3, Comm(F.1, F.2) ] );[127X[104X587[4X[28X<pc group of size 9 with 2 generators>[128X[104X588[4X[25Xgap>[125X [27Xdes := PqDescendants( G : OrderBound := 3, ClassBound := 2,[127X[104X589[4X[25X>[125X [27X CapableDescendants );[127X[104X590[4X[28X[ <pc group of size 27 with 3 generators>, [128X[104X591[4X[28X <pc group of size 27 with 3 generators> ][128X[104X592[4X[25Xgap>[125X [27XList(des, d -> Length( PCentralSeries( d, 3 ) ) - 1 );[127X[104X593[4X[28X[ 2, 2 ][128X[104X594[4X[25Xgap>[125X [27X# For comparison let us now compute all descendants[127X[104X595[4X[25Xgap>[125X [27XPqDescendants( G : OrderBound := 3, ClassBound := 2);[127X[104X596[4X[28X[ <pc group of size 27 with 3 generators>, [128X[104X597[4X[28X <pc group of size 27 with 3 generators>, [128X[104X598[4X[28X <pc group of size 27 with 3 generators> ][128X[104X599[4X[32X[104X600601[33X[0;0YIn the third example, we compute all capable descendants of the elementary602abelian group of order [22X5^2[122X which have exponent-[22X5[122X class at most [22X3[122X, exponent603[22X5[122X, and are metabelian.[133X604605[4X[32X Example [32X[104X606[4X[25Xgap>[125X [27XF := FreeGroup( 2, "g" );;[127X[104X607[4X[25Xgap>[125X [27XG := PcGroupFpGroup( F / [ F.1^5, F.2^5, Comm(F.2, F.1) ] );[127X[104X608[4X[28X<pc group of size 25 with 2 generators>[128X[104X609[4X[25Xgap>[125X [27Xdes := PqDescendants( G : Metabelian, ClassBound := 3,[127X[104X610[4X[25X>[125X [27X Exponent := 5, CapableDescendants );[127X[104X611[4X[28X[ <pc group of size 125 with 3 generators>, [128X[104X612[4X[28X <pc group of size 625 with 4 generators>, [128X[104X613[4X[28X <pc group of size 3125 with 5 generators> ][128X[104X614[4X[25Xgap>[125X [27XList(des, d -> Length( PCentralSeries( d, 5 ) ) - 1 );[127X[104X615[4X[28X[ 2, 3, 3 ][128X[104X616[4X[25Xgap>[125X [27XList(des, d -> Length( DerivedSeries( d ) ) );[127X[104X617[4X[28X[ 3, 3, 3 ][128X[104X618[4X[25Xgap>[125X [27XList(des, d -> Maximum( List( Elements(d), Order ) ) );[127X[104X619[4X[28X[ 5, 5, 5 ][128X[104X620[4X[32X[104X621622[33X[0;0YThe examples [10X"PqDescendants-1"[110X, [10X"PqDescendants-2"[110X and [10X"PqDescendants-3"[110X (in623order) are essentially the same as the above three examples (see [2XPqExample[102X624([14X3.4-4[114X)).[133X625626[1X4.4-2 PqSupplementInnerAutomorphisms[101X627628[33X[1;0Y[29X[2XPqSupplementInnerAutomorphisms[102X( [3XD[103X ) [32X function[133X629630[33X[0;0Yreturns a generating set for a supplement to the inner automorphisms of [3XD[103X,631in the form of a record with fields [10XagAutos[110X, [10XagOrder[110X and [10XglAutos[110X, as632provided by the [10Xpq[110X program. One should be very careful in using these633automorphisms for a descendant calculation.[133X634635[33X[0;0Y[13XNote:[113X In principle there must be a way to use those automorphisms in order636to compute descendants but there does not seem to be a way to hand back637these automorphisms properly to the [10Xpq[110X program.[133X638639[4X[32X Example [32X[104X640[4X[25Xgap>[125X [27XQ := Pq( FreeGroup(2) : Prime := 3, ClassBound := 1 );[127X[104X641[4X[28X<pc group of size 9 with 2 generators>[128X[104X642[4X[25Xgap>[125X [27Xdes := PqDescendants( Q : StepSize := 1 );[127X[104X643[4X[28X[ <pc group of size 27 with 3 generators>, [128X[104X644[4X[28X <pc group of size 27 with 3 generators>, [128X[104X645[4X[28X <pc group of size 27 with 3 generators> ][128X[104X646[4X[25Xgap>[125X [27XS := PqSupplementInnerAutomorphisms( des[3] );[127X[104X647[4X[28Xrec( agAutos := [ ], agOrder := [ 3, 2, 2, 2 ], [128X[104X648[4X[28X glAutos := [ Pcgs([ f1, f2, f3 ]) -> [ f1*f2^2, f2, f3 ], [128X[104X649[4X[28X Pcgs([ f1, f2, f3 ]) -> [ f1^2, f2, f3^2 ], [128X[104X650[4X[28X Pcgs([ f1, f2, f3 ]) -> [ f1^2, f2, f3^2 ] ] )[128X[104X651[4X[25Xgap>[125X [27XA := AutomorphismGroupPGroup( des[3] );[127X[104X652[4X[28Xrec( [128X[104X653[4X[28X agAutos := [ Pcgs([ f1, f2, f3 ]) -> [ f1^2, f2, f3^2 ], [128X[104X654[4X[28X Pcgs([ f1, f2, f3 ]) -> [ f1*f2^2, f2, f3 ], [128X[104X655[4X[28X Pcgs([ f1, f2, f3 ]) -> [ f1*f3, f2, f3 ], [128X[104X656[4X[28X Pcgs([ f1, f2, f3 ]) -> [ f1, f2*f3, f3 ] ], agOrder := [ 2, 3, 3, 3 ], [128X[104X657[4X[28X glAutos := [ ], glOper := [ ], glOrder := 1, [128X[104X658[4X[28X group := <pc group of size 27 with 3 generators>, [128X[104X659[4X[28X one := IdentityMapping( <pc group of size 27 with 3 generators> ), [128X[104X660[4X[28X size := 54 )[128X[104X661[4X[32X[104X662663[33X[0;0YTyping: [10XPqExample( "PqSupplementInnerAutomorphisms" );[110X runs the above664example in [5XGAP[105X (see [2XPqExample[102X ([14X3.4-4[114X)).[133X665666[33X[0;0YNote that by also including [10XPqStart[110X as a second argument to [10XPqExample[110X one667can see how it is possible, with the aid of [10XPqSetPQuotientToGroup[110X668(see [2XPqSetPQuotientToGroup[102X ([14X5.3-7[114X)), to do the equivalent computations with669the interactive versions of [10XPq[110X and [10XPqDescendants[110X and a single [10Xpq[110X process670(recall [10Xpq[110X is the name of the external C program).[133X671672[1X4.4-3 PqList[101X673674[33X[1;0Y[29X[2XPqList[102X( [3Xfilename:[103X [[3XSubList[103X [3X:=[103X [3Xsub[103X] ) [32X function[133X675676[33X[0;0Yreads a file with name [3Xfilename[103X (a string) and returns the list [3XL[103X of pc677groups (or with option [10XSubList[110X a sublist of [3XL[103X or a single pc group in [3XL[103X)678defined in that file. If the option [10XSubList[110X is passed and has the value [3Xsub[103X,679then it has the same meaning as for [10XPqDescendants[110X, i.e. if [3Xsub[103X is an integer680then [10XPqList[110X returns [10X[3XL[103X[10X[[3Xsub[103X[10X][110X; otherwise, if [3Xsub[103X is a list of integers [10XPqList[110X681returns [10XSublist([3XL[103X[10X, [3Xsub[103X[10X )[110X.[133X682683[33X[0;0YBoth [10XPqList[110X and [10XSavePqList[110X (see [2XSavePqList[102X ([14X4.4-4[114X)) can be used to save and684restore a list of descendants (see [2XPqDescendants[102X ([14X4.4-1[114X)).[133X685686[1X4.4-4 SavePqList[101X687688[33X[1;0Y[29X[2XSavePqList[102X( [3Xfilename[103X, [3Xlist[103X ) [32X function[133X689690[33X[0;0Ywrites a list of descendants [3Xlist[103X to a file with name [3Xfilename[103X (a string).[133X691692[33X[0;0Y[10XSavePqList[110X and [10XPqList[110X (see [2XPqList[102X ([14X4.4-3[114X)) can be used to save and restore,693respectively, the results of [10XPqDescendants[110X (see [2XPqDescendants[102X ([14X4.4-1[114X)).[133X694695696697