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: 418346%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1%%2%W examples.tex ACE appendix - examples Alexander Hulpke3%W Joachim Neub"user4%W Greg Gamble5%%6%H $Id$7%%8%Y Copyright (C) 2000 Centre for Discrete Mathematics and Computing9%Y Department of Information Tech. & Electrical Eng.10%Y University of Queensland, Australia.11%%1213%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%14\Chapter{Examples}1516In this chapter we collect together a number of examples which17illustrate the various ways in which the {\ACE} Package may be used,18and give some interactions with the `ACEExample' function. In a number19of cases, we have set the `InfoLevel' of `InfoACE' to 3, so that all20output from {\ACE} is displayed, prepended by ```\#I '''. Recall that21to also see the commands directed *to* {\ACE} (behind a ```ToACE> '''22prompt), you will need to set the `InfoACE' level to 4. We have23omitted the line2425\beginexample26gap> LoadPackage("ace");27true2829\endexample3031which is, of course, required at the beginning of any session32requiring {\ACE}.3334%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%35\Section{Example where ACE is made the Standard Coset Enumerator}3637If {\ACE} is made the standard coset enumerator, one simply uses the38method of passing arguments normally used with those commands that39invoke `CosetTableFromGensAndRels', but one is able to use all options40available via the {\ACE} interface. As an example we use {\ACE} to41compute the permutation representation of a perfect group from the42data library ({\GAP}'s perfect group library stores for each group a43presentation together with generators of a subgroup as words in the44group generators such that the permutation representation on the45cosets of this subgroup will be a (nice) faithful permutation46representation for the perfect group). The example we have chosen is47an extension of a group of order 16 by the simple alternating group48$A_5$.4950\beginexample51gap> TCENUM:=ACETCENUM;; # Make ACE the standard coset enumerator52gap> G := PerfectGroup(IsPermGroup, 16*60, 1 # Arguments ... as per usual53> : max := 50, mess := 10 # ... but we use ACE options54> );55A5 2^456gap> GeneratorsOfGroup(G); # Just to show we indeed have a perm'n rep'n57[ (2,4)(3,5)(7,15)(8,14)(10,13)(12,16), (2,6,7)(3,11,12)(4,14,5)(8,9,13)(10,5815,16), (1,2)(3,8)(4,9)(5,10)(6,7)(11,15)(12,14)(13,16),59(1,3)(2,8)(4,13)(5,6)(7,10)(9,16)(11,12)(14,15),60(1,4)(2,9)(3,13)(5,14)(6,15)(7,11)(8,16)(10,12),61(1,5)(2,10)(3,6)(4,14)(7,8)(9,12)(11,16)(13,15) ]62gap> Order(G);639606465\endexample6667The call to `PerfectGroup' produced an output string that identifies68the group `G', but we didn't see how {\ACE} became involved here.69Let's redo that part of the above example after first setting the70`InfoLevel' of `InfoACE' to 3, so that we may get to glimpse what's71going on behind the scenes.7273\beginexample74gap> SetInfoACELevel(3); # Just to see what's going on behind the scenes75gap> # Recall that we did: TCENUM:=ACETCENUM;;76gap> G := PerfectGroup(IsPermGroup, 16*60, 1 # Arguments ... as per usual77> : max := 50, mess := 10 # ... but we use ACE options78> );79#I ACE 3.001 Sun Sep 30 22:08:11 200180#I =========================================81#I Host information:82#I name = rigel83#I ***84#I #--- ACE 3.001: Run Parameters ---85#I Group Name: G;86#I Group Generators: abstuv;87#I Group Relators: (a)^2, (s)^2, (t)^2, (u)^2, (v)^2, (b)^3, (st)^2, (uv)^2,88#I (su)^2, (sv)^2, (tu)^2, (tv)^2, asau, atav, auas, avat, Bvbu, Bsbvt,89#I Bubvu, Btbvuts, (ab)^5;90#I Subgroup Name: H;91#I Subgroup Generators: a, b;92#I Wo:1000000; Max:50; Mess:10; Ti:-1; Ho:-1; Loop:0;93#I As:0; Path:0; Row:1; Mend:0; No:21; Look:0; Com:10;94#I C:0; R:0; Fi:11; PMod:3; PSiz:256; DMod:4; DSiz:1000;95#I #---------------------------------96#I SG: a=1 r=1 h=1 n=2; l=1 c=+0.00; m=1 t=197#I RD: a=11 r=1 h=1 n=12; l=2 c=+0.00; m=11 t=1198#I RD: a=21 r=2 h=1 n=22; l=2 c=+0.00; m=21 t=2199#I CC: a=29 r=4 h=1 n=31; l=2 c=+0.00; d=0100#I CC: a=19 r=4 h=1 n=31; l=2 c=+0.00; d=0101#I CC: a=19 r=6 h=1 n=36; l=2 c=+0.00; d=0102#I INDEX = 16 (a=16 r=36 h=1 n=36; l=3 c=0.00; m=30 t=35)103#I CO: a=16 r=17 h=1 n=17; c=+0.00104#I coset || b B a s t u v105#I -------+-------------------------------------------------106#I 1 || 1 1 1 2 3 4 5107#I 2 || 11 14 4 1 6 8 9108#I 3 || 13 15 5 6 1 10 11109#I 4 || 7 5 2 8 10 1 7110#I 5 || 4 7 3 9 11 7 1111#I 6 || 8 10 7 3 2 12 14112#I 7 || 5 4 6 15 16 5 4113#I 8 || 10 6 8 4 12 2 15114#I 9 || 16 12 10 5 14 15 2115#I 10 || 6 8 9 12 4 3 16116#I 11 || 14 2 11 14 5 16 3117#I 12 || 9 16 15 10 8 6 13118#I 13 || 15 3 13 16 15 14 12119#I 14 || 2 11 16 11 9 13 6120#I 15 || 3 13 12 7 13 9 8121#I 16 || 12 9 14 13 7 11 10122A5 2^4123124\endexample125126%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%127\Section{Example of Using ACECosetTableFromGensAndRels}128129The following example calls {\ACE} for up to 800 coset numbers (`max130:= 800') using Mendelsohn style relator processing (`mendelsohn') and131sets progress messages to be printed every 500 iterations (`messages132:=500'); we do ```SetInfoACELevel(3);''' so that we may see these133messages. The value of `table', i.e.~the {\GAP} coset table,134immediately follows the last {\ACE} message (```\#I ''') line, but135both the coset table from {\ACE} and the {\GAP} coset table have been136abbreviated. A slightly modified version of this example, which137includes the `echo' option is available on-line via `table :=138ACEExample("perf602p5");'. You may wish to peruse the notes in the139`ACEExample' index first, however, by executing `ACEExample();'. (Note140that the final table output here is `lenlex' standardised (the case141since {\GAP} 4.3); with {\GAP} 4.2 the final table was `semilenlex'142standardised.)143144\beginexample145gap> SetInfoACELevel(3); # So we can see the progress messages146gap> G := PerfectGroup(2^5*60, 2);;# See previous example:147gap> # "Example where ACE is made the148gap> # Standard Coset Enumerator"149gap> fgens := FreeGeneratorsOfFpGroup(G);;150gap> table := ACECosetTableFromGensAndRels(151> # arguments152> fgens, RelatorsOfFpGroup(G), fgens{[1]}153> # options154> : mendelsohn, max:=800, mess:=500);155#I ACE 3.001 Sun Sep 30 22:10:10 2001156#I =========================================157#I Host information:158#I name = rigel159#I ***160#I #--- ACE 3.001: Run Parameters ---161#I Group Name: G;162#I Group Generators: abstuvd;163#I Group Relators: (s)^2, (t)^2, (u)^2, (v)^2, (d)^2, aad, (b)^3, (st)^2,164#I (uv)^2, (su)^2, (sv)^2, (tu)^2, (tv)^2, Asau, Atav, Auas, Avat, Bvbu,165#I dAda, dBdb, (ds)^2, (dt)^2, (du)^2, (dv)^2, Bubvu, Bsbdvt, Btbvuts,166#I (ab)^5;167#I Subgroup Name: H;168#I Subgroup Generators: a;169#I Wo:1000000; Max:800; Mess:500; Ti:-1; Ho:-1; Loop:0;170#I As:0; Path:0; Row:1; Mend:1; No:28; Look:0; Com:10;171#I C:0; R:0; Fi:13; PMod:3; PSiz:256; DMod:4; DSiz:1000;172#I #---------------------------------173#I SG: a=1 r=1 h=1 n=2; l=1 c=+0.00; m=1 t=1174#I RD: a=321 r=68 h=1 n=412; l=5 c=+0.00; m=327 t=411175#I CC: a=435 r=162 h=1 n=719; l=9 c=+0.00; d=0176#I CL: a=428 r=227 h=1 n=801; l=13 c=+0.00; m=473 t=800177#I DD: a=428 r=227 h=1 n=801; l=14 c=+0.00; d=33178#I CO: a=428 r=192 h=243 n=429; l=15 c=+0.00; m=473 t=800179#I INDEX = 480 (a=480 r=210 h=484 n=484; l=18 c=0.00; m=480 t=855)180#I CO: a=480 r=210 h=481 n=481; c=+0.00181#I coset || a A b B s t u v d182#I -------+---------------------------------------------------------------183#I 1 || 1 1 7 6 2 3 4 5 1184#I 2 || 4 4 22 36 1 8 10 11 2185... 476 lines omitted here ...186#I 479 || 479 479 384 383 475 468 470 471 479187#I 480 || 480 480 421 420 470 469 475 476 480188[ [ 1, 8, 13, 6, 7, 4, 5, 2, 34, 35, 32, 33, 3, 48, 49, 46, 47, 57, 59, 28,18921, 25, 62, 64, 22, 26, 66, 20, 67, 69, 74, 11, 12, 9, 10, 89, 65, 87,190... 30 lines omitted here ...191477, 438, 478, 446, 475, 479, 471, 473, 476, 469 ],192[ 1, 8, 13, 6, 7, 4, 5, 2, 34, 35, 32, 33, 3, 48, 49, 46, 47, 57, 59, 28,19321, 25, 62, 64, 22, 26, 66, 20, 67, 69, 74, 11, 12, 9, 10, 89, 65, 87,194... 30 lines omitted here ...195477, 438, 478, 446, 475, 479, 471, 473, 476, 469 ],196... 363 lines omitted here ...197[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,19821, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,199... 30 lines omitted here ...200472, 473, 474, 475, 476, 477, 478, 479, 480 ] ]201202\endexample203204%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%205\Section{Example of Using ACE Interactively (Using ACEStart)}206207Now we illustrate a simple interactive process, with an enumeration of208an index 12 subgroup (isomorphic to $C_5$) within $A_5$. Observe that209we have relied on the default level of messaging from {\ACE}210(`messages' = 0) which gives a result line (the ```\#I INDEX''' line211here) only, without parameter information. The result line is visible212in the `Info'-ed component of the output below because we set the213`InfoLevel' of `InfoACE' to a value of at least 2 (in fact we set it214to 3; doing ```SetInfoACELevel(2);''' would make *only* the result215line visible). We have however used the option `echo', so that we can216see how the interface handled the arguments and options. On-line try:217`SetInfoACELevel(3); ACEExample("A5-C5", ACEStart);' (this is nearly218equivalent to the sequence following, but the variables `F', `a', `b',219`G' are not accessible, being ``local'' to `ACEExample').220221\beginexample222gap> SetInfoACELevel(3); # So we can see output from ACE binary223gap> F := FreeGroup("a","b");; a := F.1;; b := F.2;;224gap> G := F / [a^2, b^3, (a*b)^5 ];225<fp group on the generators [ a, b ]>226gap> ACEStart(FreeGeneratorsOfFpGroup(G), RelatorsOfFpGroup(G), [a*b]227> # Options228> : echo, # Echo handled by GAP (not ACE)229> enum := "A_5", # Give the group G a meaningful name230> subg := "C_5"); # Give the subgroup a meaningful name231ACEStart called with the following arguments:232Group generators : [ a, b ]233Group relators : [ a^2, b^3, a*b*a*b*a*b*a*b*a*b ]234Subgroup generators : [ a*b ]235#I ACE 3.001 Sun Sep 30 22:11:42 2001236#I =========================================237#I Host information:238#I name = rigel239ACEStart called with the following options:240echo := true (not passed to ACE)241enum := A_5242subg := C_5243#I ***244#I INDEX = 12 (a=12 r=16 h=1 n=16; l=3 c=0.00; m=14 t=15)2451246247\endexample248249The return value on the last line is an ``index'' that identifies the250interactive process; we use this ``index'' with functions that need to251interact with the interactive {\ACE} process; we now demonstrate this252with the interactive version of `ACEStats':253254\beginexample255gap> ACEStats(1);256rec( index := 12, cputime := 0, cputimeUnits := "10^-2 seconds",257activecosets := 12, maxcosets := 14, totcosets := 15 )258gap> # Actually, we didn't need to pass an argument to ACEStats()259gap> # ... we could have relied on the default:260gap> ACEStats();261rec( index := 12, cputime := 0, cputimeUnits := "10^-2 seconds",262activecosets := 12, maxcosets := 14, totcosets := 15 )263264\endexample265266Similarly, we may use `ACECosetTable' with 0 or 1 arguments, which is267the interactive version of `ACECosetTableFromGensAndRels', and which268returns a standard table (since {\GAP} 4.3, a standard table is a269`lenlex' standard table; with {\GAP} 4.2, it was a `semilenlex'270standard table).271272\beginexample273gap> ACECosetTable(); # Interactive version of ACECosetTableFromGensAndRels()274#I CO: a=12 r=13 h=1 n=13; c=+0.00275#I coset || b B a276#I -------+---------------------277#I 1 || 3 2 2278#I 2 || 1 3 1279#I 3 || 2 1 4280#I 4 || 8 5 3281#I 5 || 4 8 6282#I 6 || 9 7 5283#I 7 || 6 9 8284#I 8 || 5 4 7285#I 9 || 7 6 10286#I 10 || 12 11 9287#I 11 || 10 12 12288#I 12 || 11 10 11289[ [ 2, 1, 4, 3, 7, 8, 5, 6, 10, 9, 12, 11 ],290[ 2, 1, 4, 3, 7, 8, 5, 6, 10, 9, 12, 11 ],291[ 3, 1, 2, 5, 6, 4, 8, 9, 7, 11, 12, 10 ],292[ 2, 3, 1, 6, 4, 5, 9, 7, 8, 12, 10, 11 ] ]293gap> # To terminate the interactive process we do:294gap> ACEQuit(1); # Again, we could have omitted the 1295gap> # If we had more than one interactive process we could have296gap> # terminated them all in one go with:297gap> ACEQuitAll();298299\endexample300301%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%302\Section{Fun with ACEExample}303304First let's see the `ACEExample' index (obtained with no argument,305with `"index"' as argument, or with a non-existent example as306argument):307308\beginexample309gap> ACEExample();310#I ACEExample Index (Table of Contents)311#I ------------------------------------312#I This table of possible examples is displayed when calling ACEExample313#I with no arguments, or with the argument: "index" (meant in the sense314#I of `list'), or with a non-existent example name.315#I316#I The following ACE examples are available (in each case, for a subgroup317#I H of a group G, the cosets of H in G are enumerated):318#I319#I Example G H strategy320#I ------- - - --------321#I "A5" A_5 Id default322#I "A5-C5" A_5 C_5 default323#I "C5-fel0" C_5 Id felsch := 0324#I "F27-purec" F(2,7) = C_29 Id purec325#I "F27-fel0" F(2,7) = C_29 Id felsch := 0326#I "F27-fel1" F(2,7) = C_29 Id felsch := 1327#I "M12-hlt" M_12 (Matthieu group) Id hlt328#I "M12-fel1" M_12 (Matthieu group) Id felsch := 1329#I "SL219-hard" SL(2,19) ||G : H|| = 180 hard330#I "perf602p5" PerfectGroup(60*2^5,2) ||G : H|| = 480 default331#I * "2p17-fel1" ||G|| = 2^17 Id felsch := 1332#I "2p17-fel1a" ||G|| = 2^17 ||G : H|| = 1 felsch := 1333#I "2p17-2p3-fel1" ||G|| = 2^17 ||G : H|| = 2^3 felsch := 1334#I "2p17-2p14-fel1" ||G|| = 2^17 ||G : H|| = 2^14 felsch := 1335#I "2p17-id-fel1" ||G|| = 2^17 Id felsch := 1336#I * "2p18-fel1" ||G|| = 2^18 ||G : H|| = 2 felsch := 1337#I * "big-fel1" ||G|| = 2^18.3 ||G : H|| = 6 felsch := 1338#I * "big-hard" ||G|| = 2^18.3 ||G : H|| = 6 hard339#I340#I Notes341#I -----342#I 1. The example (first) argument of ACEExample() is a string; each343#I example above is in double quotes to remind you to include them.344#I 2. By default, ACEExample applies ACEStats to the chosen example. You345#I may alter the ACE function used, by calling ACEExample with a 2nd346#I argument; choose from: ACECosetTableFromGensAndRels (or, equival-347#I ently ACECosetTable), or ACEStart, e.g. `ACEExample("A5", ACEStart);'348#I 3. You may call ACEExample with additional ACE options (entered after a349#I colon in the usual way for options), e.g. `ACEExample("A5" : hlt);'350#I 4. Try the *-ed examples to explore how to modify options when an351#I enumeration fails (just follow the instructions you get within the352#I break-loop, or see Notes 2. and 3.).353#I 5. Try `SetInfoACELevel(3);' before calling ACEExample, to see the354#I effect of setting the "mess" (= "messages") option.355#I 6. To suppress a long output, use a double semicolon (`;;') after the356#I ACEExample command. (However, this does not suppress Info-ed output.)357#I 7. Also, try `SetInfoACELevel(2);' or `SetInfoACELevel(4);' before358#I calling ACEExample.359gap>360361\endexample362363Notice that the example we first met in Section~"Using ACE Directly to364Generate a Coset Table", the Fibonacci group F(2,7), is available via365examples `"F27-purec"', `"F27-fel0"', and `"F27-fel1"' (with 2nd366argument `ACECosetTableFromGensAndRels' to produce a coset table),367except that each of these enumerate the cosets of its trivial subgroup368(of index 29). Let's experiment with the first of these F(2,7)369examples; since this example uses the `messages' option, we ought to370set the `InfoLevel' of `InfoACE' to 3, first, but since the coset371table is quite long, we will be content for the moment with applying372the default function `ACEStats' to the example.373374Before exhibiting the example we list a few observations that should375be made. Observe that the first group of `Info' lines list the376commands that are executed; these lines are followed by the result of377the `echo' option (see~"option echo"); which in turn are followed by378`Info' messages from {\ACE} courtesy of the non-zero value of the379`messages' option (and we see these because we first set the380`InfoLevel' of `InfoACE' to 3); and finally, we get the output381(record) of the `ACEStats' command.382383Observe also that {\ACE} uses the same generators as are input; this384will always occur if you stick to single lowercase letters for your385generator names. Note, also that capitalisation is used by {\ACE} as a386short-hand for inverses, e.g.~`C = c^-1' (see `Group Relators' in the387{\ACE} ``Run Parameters'' block).388389\beginexample390gap> SetInfoACELevel(3);391gap> ACEExample("F27-purec");392#I # ACEExample "F27-purec" : enumeration of cosets of H in G,393#I # where G = F(2,7) = C_29, H = Id, using purec strategy.394#I #395#I # F, G, a, b, c, d, e, x, y are local to ACEExample396#I # We define F(2,7) on 7 generators397#I F := FreeGroup("a","b","c","d","e", "x", "y");398#I a := F.1; b := F.2; c := F.3; d := F.4;399#I e := F.5; x := F.6; y := F.7;400#I G := F / [a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1,401#I e*x*y^-1, x*y*a^-1, y*a*b^-1];402#I ACEStats(403#I FreeGeneratorsOfFpGroup(G),404#I RelatorsOfFpGroup(G),405#I [] # Generators of identity subgroup (empty list)406#I # Options that don't affect the enumeration407#I : echo, enum := "F(2,7), aka C_29", subg := "Id",408#I # Other options409#I wo := "2M", mess := 25000, purec);410ACEStats called with the following arguments:411Group generators : [ a, b, c, d, e, x, y ]412Group relators : [ a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1, e*x*y^-1,413x*y*a^-1, y*a*b^-1 ]414Subgroup generators : [ ]415#I ACE 3.001 Sun Sep 30 22:16:08 2001416#I =========================================417#I Host information:418#I name = rigel419ACEStats called with the following options:420echo := true (not passed to ACE)421enum := F(2,7), aka C_29422subg := Id423wo := 2M424mess := 25000425purec (no value, passed to ACE via option: pure c)426#I ***427#I #--- ACE 3.001: Run Parameters ---428#I Group Name: F(2,7), aka C_29;429#I Group Generators: abcdexy;430#I Group Relators: abC, bcD, cdE, deX, exY, xyA, yaB;431#I Subgroup Name: Id;432#I Subgroup Generators: ;433#I Wo:2M; Max:142855; Mess:25000; Ti:-1; Ho:-1; Loop:0;434#I As:0; Path:0; Row:0; Mend:0; No:0; Look:0; Com:100;435#I C:1000; R:0; Fi:1; PMod:0; PSiz:256; DMod:4; DSiz:1000;436#I #---------------------------------437#I DD: a=5290 r=1 h=1050 n=5291; l=8 c=+0.00; d=2438#I CD: a=10410 r=1 h=2149 n=10411; l=13 c=+0.01; m=10410 t=10410439#I DD: a=15428 r=1 h=3267 n=15429; l=18 c=+0.01; d=0440#I DD: a=20430 r=1 h=4386 n=20431; l=23 c=+0.02; d=1441#I DD: a=25397 r=1 h=5519 n=25399; l=28 c=+0.01; d=1442#I CD: a=30313 r=1 h=6648 n=30316; l=33 c=+0.01; m=30313 t=30315443#I DS: a=32517 r=1 h=7326 n=33240; l=36 c=+0.01; s=2000 d=997 c=4444#I DS: a=31872 r=1 h=7326 n=33240; l=36 c=+0.00; s=4000 d=1948 c=53445#I DS: a=29077 r=1 h=7326 n=33240; l=36 c=+0.00; s=8000 d=3460 c=541446#I DS: a=23433 r=1 h=7326 n=33240; l=36 c=+0.01; s=16000 d=5940 c=2061447#I DS: a=4163 r=1 h=7326 n=33240; l=36 c=+0.03; s=32000 d=447 c=15554448#I INDEX = 29 (a=29 r=1 h=33240 n=33240; l=37 c=0.15; m=33237 t=33239)449rec( index := 29, cputime := 15, cputimeUnits := "10^-2 seconds",450activecosets := 29, maxcosets := 33237, totcosets := 33239 )451452\endexample453454Now let's see that we can add some new options, even ones that455over-ride the example's options; but first we'll reduce the output a456bit by setting the `InfoLevel' of `InfoACE' to 2 and since we are not457going to observe any progress messages from {\ACE} with that `InfoACE'458level we'll set `messages := 0'; also we'll use the function459`ACECosetTableFromGensAndRels' and so it's like our first encounter460with F(2,7) we'll add the subgroup generator `c' via `sg := ["c"]'461(see "option sg"). Observe that `"c"' is a string not a {\GAP} group462generator; to convert a list of {\GAP} words <sgens> in generators463<fgens>, suitable for an assignment of the `sg' option use the464construction: `ToACEWords(<fgens>, <sgens>)' (see~"ToACEWords"). Note465again that if only single lowercase letter strings are used to466identify the {\GAP} group generators, the same strings are used to467identify those generators in {\ACE}. (It's actually fortunate that we468could pass the value of `sg' as a string here, since the generators of469each `ACEExample' example are *local* variables and so are not470accessible, though we could call `ACEExample' with 2nd argument471`ACEStart' and use `ACEGroupGenerators' to get at them.) For good472measure, we also change the string identifying the subgroup (since it473will no longer be the trivial group), via the `subgroup' option (see474"option subgroup").475476In considering the example following, observe that in the `Info' block477all the original example options are listed along with our new options478`sg := [ "c" ], messages := 0' after the tag ```\# User Options'''.479Following the `Info' block there is a block due to `echo'; in its480listing of the options first up there is `aceexampleoptions' alerting481us that we passed some `ACEExample' options; observe also that in this482block `subg := Id' and `mess := 25000' disappear (they are over-ridden483by `subgroup := "\< c >", messages := 0', but the quotes for the value484of `subgroup' are not visible); note that we don't have to use the485same abbreviations for options to over-ride them. Also observe that486our new options are *last*.487488\beginexample489gap> SetInfoACELevel(2);490gap> ACEExample("F27-purec", ACECosetTableFromGensAndRels491> : sg := ["c"], subgroup := "< c >", messages := 0);492#I # ACEExample "F27-purec" : enumeration of cosets of H in G,493#I # where G = F(2,7) = C_29, H = Id, using purec strategy.494#I #495#I # F, G, a, b, c, d, e, x, y are local to ACEExample496#I # We define F(2,7) on 7 generators497#I F := FreeGroup("a","b","c","d","e", "x", "y");498#I a := F.1; b := F.2; c := F.3; d := F.4;499#I e := F.5; x := F.6; y := F.7;500#I G := F / [a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1,501#I e*x*y^-1, x*y*a^-1, y*a*b^-1];502#I ACECosetTableFromGensAndRels(503#I FreeGeneratorsOfFpGroup(G),504#I RelatorsOfFpGroup(G),505#I [] # Generators of identity subgroup (empty list)506#I # Options that don't affect the enumeration507#I : echo, enum := "F(2,7), aka C_29", subg := "Id",508#I # Other options509#I wo := "2M", mess := 25000, purec,510#I # User Options511#I sg := [ "c" ],512#I subgroup := "< c >",513#I messages := 0);514ACECosetTableFromGensAndRels called with the following arguments:515Group generators : [ a, b, c, d, e, x, y ]516Group relators : [ a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1, e*x*y^-1,517x*y*a^-1, y*a*b^-1 ]518Subgroup generators : [ ]519ACECosetTableFromGensAndRels called with the following options:520aceexampleoptions := true (inserted by ACEExample, not passed to ACE)521echo := true (not passed to ACE)522enum := F(2,7), aka C_29523wo := 2M524purec (no value, passed to ACE via option: pure c)525sg := [ "c" ] (brackets are not passed to ACE)526subgroup := < c >527messages := 0528#I INDEX = 1 (a=1 r=2 h=2 n=2; l=4 c=0.00; m=332 t=332)529[ [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ],530[ 1 ], [ 1 ], [ 1 ], [ 1 ] ]531532\endexample533534\atindex{break-loop}{@\noexpand`break'-loop}\indextt{OnBreak}535Now following on from our last example we shall demonstrate how one536can recover from a `break'-loop (see Section~"Using ACE Directly to537Generate a Coset Table"). To force the `break'-loop we pass `max := 2'538(see~"option max"), while using the {\ACE} interface function539`ACECosetTableFromGensAndRels' with `ACEExample'; in this way, {\ACE}540will not be able to complete the enumeration, and hence enters a541`break'-loop when it tries to provide a complete coset table. While542we're at it we'll pass the `hlt' (see~"option hlt") strategy option543(which will over-ride `purec'). (The `InfoACE' level is still 2.) To544avoid getting a trace-back during the `break'-loop (which can look a545little scary to the unitiated) we will set `OnBreak'546(see~"ref:OnBreak") as follows:547548\beginexample549gap> NormalOnBreak := OnBreak;; # Save the old value to restore it later550gap> OnBreak := function() Where(0); end;;551552\endexample553554Note that there are some ``user-input'' comments inserted at the555`brk>' prompt.556557\beginexample558gap> ACEExample("F27-purec", ACECosetTableFromGensAndRels559> : sg := ["c"], subgroup := "< c >", max := 2, hlt);560#I # ACEExample "F27-purec" : enumeration of cosets of H in G,561#I # where G = F(2,7) = C_29, H = Id, using purec strategy.562#I #563#I # F, G, a, b, c, d, e, x, y are local to ACEExample564#I # We define F(2,7) on 7 generators565#I F := FreeGroup("a","b","c","d","e", "x", "y");566#I a := F.1; b := F.2; c := F.3; d := F.4;567#I e := F.5; x := F.6; y := F.7;568#I G := F / [a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1,569#I e*x*y^-1, x*y*a^-1, y*a*b^-1];570#I ACECosetTableFromGensAndRels(571#I FreeGeneratorsOfFpGroup(G),572#I RelatorsOfFpGroup(G),573#I [] # Generators of identity subgroup (empty list)574#I # Options that don't affect the enumeration575#I : echo, enum := "F(2,7), aka C_29", subg := "Id",576#I # Other options577#I wo := "2M", mess := 25000, purec,578#I # User Options579#I sg := [ "c" ],580#I subgroup := "< c >",581#I max := 2,582#I hlt := true);583ACECosetTableFromGensAndRels called with the following arguments:584Group generators : [ a, b, c, d, e, x, y ]585Group relators : [ a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1, e*x*y^-1,586x*y*a^-1, y*a*b^-1 ]587Subgroup generators : [ ]588ACECosetTableFromGensAndRels called with the following options:589aceexampleoptions := true (inserted by ACEExample, not passed to ACE)590echo := true (not passed to ACE)591enum := F(2,7), aka C_29592wo := 2M593mess := 25000594purec (no value, passed to ACE via option: pure c)595sg := [ "c" ] (brackets are not passed to ACE)596subgroup := < c >597max := 2598hlt (no value)599#I OVERFLOW (a=2 r=1 h=1 n=3; l=4 c=0.00; m=2 t=2)600Error, no coset table ...601the `ACE' coset enumeration failed with the result:602OVERFLOW (a=2 r=1 h=1 n=3; l=4 c=0.00; m=2 t=2)603Entering break read-eval-print loop ...604try relaxing any restrictive options605e.g. try the `hard' strategy or increasing `workspace'606type: '?strategy options' for info on strategies607type: '?options for ACE' for info on options608type: 'DisplayACEOptions();' to see current ACE options;609type: 'SetACEOptions(:<option1> := <value1>, ...);'610to set <option1> to <value1> etc.611(i.e. pass options after the ':' in the usual way)612... and then, type: 'return;' to continue.613Otherwise, type: 'quit;' to quit to outer loop.614brk> # Let's give ACE enough coset numbers to work with ...615brk> # and while we're at it see the effect of 'echo := 2' :616brk> SetACEOptions(: max := 0, echo := 2);617brk> # Let's check what the options are now:618brk> DisplayACEOptions();619rec(620enum := "F(2,7), aka C_29",621wo := "2M",622mess := 25000,623purec := true,624sg := [ "c" ],625subgroup := "< c >",626hlt := true,627max := 0,628echo := 2 )629630brk> # That's ok ... so now we 'return;' to escape the break-loop631brk> return;632ACECosetTableFromGensAndRels called with the following arguments:633Group generators : [ a, b, c, d, e, x, y ]634Group relators : [ a*b*c^-1, b*c*d^-1, c*d*e^-1, d*e*x^-1, e*x*y^-1,635x*y*a^-1, y*a*b^-1 ]636Subgroup generators : [ ]637ACECosetTableFromGensAndRels called with the following options:638enum := F(2,7), aka C_29639wo := 2M640mess := 25000641purec (no value, passed to ACE via option: pure c)642sg := [ "c" ] (brackets are not passed to ACE)643subgroup := < c >644hlt (no value)645max := 0646echo := 2 (not passed to ACE)647Other options set via ACE defaults:648asis := 0649compaction := 10650ct := 0651dmode := 0652dsize := 1000653fill := 1654hole := -1655lookahead := 1656loop := 0657mendelsohn := 0658no := 0659path := 0660pmode := 0661psize := 256662row := 1663rt := 1000664time := -1665#I INDEX = 1 (a=1 r=2 h=2 n=2; l=3 c=0.00; m=2049 t=3127)666[ [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ],667[ 1 ], [ 1 ], [ 1 ], [ 1 ] ]668669\endexample670671Observe that `purec' did *not* disappear from the option list;672nevertheless, it *is* over-ridden by the `hlt' option (at the {\ACE}673level). Observe the ```Other options set via ACE defaults''' list of674options that has resulted from having the `echo := 2' option675(see~"option echo"). Observe, also, that `hlt' is nowhere near as676good, here, as `purec' (refer to Section~"Using ACE Directly to677Generate a Coset Table"): whereas `purec' completed the same678enumeration with a total number of coset numbers of 332, the `hlt'679strategy required 3127.680681Before we finish this section, let us say something about the examples682listed when one calls `ACEExample' with no arguments that have a `*'683beside them; these are examples for which the enumeration fails to684complete. The first such example listed is `"2p17-fel1"', where a685group of order $2^{17}$ is enumerated over the identity subgroup with686the `felsch := 1' strategy. The enumeration fails after defining a687total number of 416664 coset numbers. (In fact, the enumeration can be688made to succeed by simply increasing `workspace' to `"4700k"', but in689doing so a total of 783255 coset numbers are defined.) With the690example `"2p17-fel1a"' the same group is again enumerated, again with691the `felsch := 1' strategy, but this time over the group itself and692after tweaking a few options, to see how well we can do. The other693`"2p17-<XXX>"' examples are again enumerations of the same group but694over smaller and smaller subgroups, until we once again enumerate over695the identity subgroup but far more efficiently this time (only needing696to define a total of 550659 coset numbers, which can be achieved with697`workspace' set to `"3300k"').698699The other `*'-ed examples enumerate overgroups of the group of order700$2^{17}$ of the `"2p17-<XXX>"' examples. It's recommended that you try701these with second argument `ACECosetTableFromGensAndRels' so that you702enter a `break'-loop, where you can experiment with modifying the703options using `SetACEOptions'. The example `"2p18-fel1"' can be made704to succeed with `hard, mend, workspace := "10M"'; why don't you see if705you can do better! There are no hints for the other two `*'-ed706examples; they are exercises for you to try.707708Let's now restore the original value of `OnBreak':709710\beginexample711gap> OnBreak := NormalOnBreak;;712713\endexample714715Of course, running `ACEExample' with `ACEStart' as second argument716opens up far more flexibility. Try it! Have fun! Play with as many717options as you can.718719%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%720\Section{Using ACEReadResearchExample}721722\indextt{PGRelFind}723Without an argument, the function `ACEReadResearchExample' reads the724file `"pgrelfind.g"' in the `res-examples' directory which defines725{\GAP} functions such as `PGRelFind', that were used in \cite{CHHR01}726to show that the group $L_3(5)$ has deficiency 0.727%display{nonhtml}728%729%*Some background*730%enddisplay731732The *deficiency* of a finite presentation $\{X \mid R\}$ of a finite733group $G$ is $|R| - |X|$, and the *deficiency* of the group $G$ is the734minimum of the deficiencies of all finite presentations of $G$.735736%display{nonhtml}737%The following result (with a constructive proof) is Lemma 2.2 in738%\cite{CHHR01}.739%740%*Lemma*741%Let $G$ be a simple group with trivial Schur multiplier. Suppose $G$742%has a presentation of the form743%$$744%P = \{ a, b \mid a^2=1, b^p=1, w(a,b)=1\}745%$$746%with $p$ prime. Then $G$ has deficiency zero.747%748%Prior to the paper \cite{CHHR01} there remained just two simple groups749%with trivial Schur multiplier of order less than one million, namely750%$L_3(5)$ and $PSp_4(4)$, that had not been shown to have deficiency751%zero. Using `TranslatePresentation' and `PGRelFind' the question for752%$L_3(5)$ is now settled, but whether $PSp_4(4)$ has deficiency 0 is753%still open.754%755%We now sketch the method used in \cite{CHHR01} to show that a simple756%group $G$ with trivial Schur multiplier (in particular, $L_3(5)$) has757%deficiency 0. We start with a known two-generator presentation of the758%group $G$, on say $x$ and $y$. Then an invocation of759%`TranslatePresentation' (which uses Tietze transformations) translates760%the presentation into a presentation on two new generators $a$ and $b$761%say, having several relators but for which the first two relators are762%of form $a^2$ and $b^p$ for some prime $p$. Finally, `PGRelFind' is763%invoked to find a presentation on the generators $a$ and $b$ found by764%`TranslatePresentation' that contains $a^2$ and $b^p$ and just one765%more relator. If the search by `PGRelFind' is successful then the766%Lemma shows the group has deficiency zero.767%768%*Some details (what the file `pgrelfind.g' defines)*769%enddisplay770771Let us now invoke `ACEReadResearchExample' with no arguments:772773\beginexample774gap> ACEReadResearchExample();775#I The following are now defined:776#I777#I Functions:778#I PGRelFind, ClassesGenPairs, TranslatePresentation,779#I IsACEResExampleOK780#I Variables:781#I ACEResExample, ALLRELS, newrels, F, a, b, newF, x, y,782#I L2_8, L2_16, L3_3s, U3_3s, M11, M12, L2_32,783#I U3_4s, J1s, L3_5s, PSp4_4s, presentations784#I785#I Also:786#I787#I TCENUM = ACETCENUM (Todd-Coxeter Enumerator is now ACE)788#I789#I For an example of their application, you might like to try:790#I gap> ACEReadResearchExample("doL28.g" : optex := [1,2,4,5,8]);791#I (the output is 65 lines followed by a 'gap> ' prompt)792#I793#I For information type: ?Using ACEReadResearchExample794gap>795796\endexample797798%display{nontext}799The output (`Info'-ed at `InfoACELevel' 1) states that a number of new800functions are defined. During a {\GAP} session, you can find out801details of these functions by typing:802803\begintt804gap> ?Using ACEReadResearchExample805\endtt806807%enddisplay808%display{nonhtml}809%The output (`Info'-ed at `InfoACELevel' 1) states that a number of810%functions and variables have been defined, which we will now describe.811%812%\>PGRelFind( <fgens>, <rels>, <sgens> ) F813%814%For the perfect *simple* group $S = \langle <fgens> \mid <rels>815%\rangle$ with subgroup $\langle <sgens> \rangle$ where each element of816%the list <sgens> is a word in the generators <fgens>, `PGRelFind'817%tries to find a third relator such that together with the two818%order-defining relators of <fgens> a presentation on three relators is819%determined, and if successful returns a record with fields `fgens :=820%<fgens>', `rels' set to the new 3-relator list found, and `sgens :=821%<sgens>'. <fgens> should be a list of two generators of a free group,822%say `[<a>, <b>]'; <rels> should contain words in the generators823%<fgens>, the first of which should determine that <a> is an824%involution, and the second should determine that <b> is of order <p>825%for some prime <p>. The subgroup $\langle <sgens> \rangle$ should826%ideally be a maximal subgroup of $\langle <fgens> \mid <rels>827%\rangle$. It turns out that one only needs to test for relators that828%are the products of an odd number of bi-syllables of form $<a><b>^k$,829%for some integer $k$ in the range $1,\ldots,<p> - 1$. We will use the830%term *bi-syllabic length* to mean the number of bi-syllables of form831%$<a><b>^k$ in such a relator. Furthermore, each relator we test can be832%assumed to have the prefix (which we subsequently call the <head>)833%$<a><b><a><b><a><b>^{-1}$ if <p> is 3, or $<a><b>$ otherwise.834%835%Each relator tested is of form `<head> * <middle> * <tail>', where836%each of <head>, <middle>, <tail> is a word of integral bi-syllabic837%length. Moreover,838%839%\beginlist%unordered840%841%\item{--} <head> is fixed (as mentioned above);842%843%\item{--} all <tail>s of the opposite parity bi-syllabic length up to844%a maximum prescribed length are pre-computed (since <head> is845%generally of odd bi-syllabic length, <tail>s are generally of even846%bi-syllabic length); and847%848%\item{--} the bi-syllabic length of the <middle>s is always even,849%starting from an initial minimum <middle> length and increasing in850%steps of `<granularity> + 2', where <granularity> is defined to be the851%difference of the maximum and minimum bi-syllabic lengths of a <tail>852%(see below).853%854%\endlist855%856%Since the <tail>s in general are not all of the same length, it is857%possible when a search is successful that the first relator found is858%not the shortest. Hence searching continues until a relator of859%shortest length can be guaranteed.860%861%To provide some user control of the algorithm, `PGRelFind' has a862%number of options (entered after the arguments and after a colon in863%the usual way):864%865%\beginitems866%867%\quad`head := <head>' &868%Redefines <head> which by default is `<a>*<b>*<a>*<b>*<a>/<b>' if the869%order of <b> is 3, or `<a>*<b>' otherwise, where <a> and <b> are as870%defined above; <head> must be a word consisting of `<a>*<b>^<k>'871%bi-syllables for integers <k>.872%873%\quad`Nrandom := <nOrFunc>' &874%Sets the number of <middle>s to be generated for each length of a875%<middle>; <nOrFunc> may be a non-negative integer or a single-argument876%function that returns a positive integer.877%878%&879%Each <middle> may be generated sequentially or randomly. If `<nOrFunc>880%= 0' then <middle>s are generated sequentially (and hence881%exhaustively), as they are by default. If <nOrFunc> is a positive882%integer then, for each bi-syllabic length of a <middle>, <nOrFunc>883%``random'' <middle>s are generated. If <nOrFunc> is a single-argument884%function then for each bi-syllabic length <len> of a <middle>,885%`<nOrFunc>(<len>)' ``random'' <middle>s are generated.886%887%\quad`ACEworkspace := <workspace>' &888%Sets the option `workspace' used by {\ACE} to <workspace> when running889%the index check of the large subgroup. If the index is right, {\ACE}890%is set to use `2*<workspace>' to check the index of the cyclic891%subgroup $\langle <b> \rangle$. By default, <workspace> is set to892%`10^6', which is too small for many of the `do<XXX>.g' files (see893%below). Of course, groups for which {\ACE} overflows the workspace are894%indistinguishable from infinite groups, and one can't easily be sure895%whether a relator wasn't found because the workspace was too small or896%because there wasn't one to be found.897%898%\quad`Ntails := <Ntails>' &899%Sets the approximate number of <tail>s generated to <Ntails>; it is900%used to set `maxTailLength' (described next); <Ntails> must a positive901%integer. The default behaviour is given by `<Ntails> = 2048'.902%903%\quad`maxTailLength := <len>' &904%Sets the *intended* maximum bi-syllabic length of a <tail> to <len>;905%<len> must be a positive integer.906%907%&908%The default behaviour is given by `<len> = LogInt(<Ntails>, <orderb> -909%1)', where <orderb> is the order of <b>. The *actual* maximum910%bi-syllabic length of a <tail> may be set 1 less, in order that it has911%the same parity as the minimum bi-syllabic length of a <tail>.912%913%\quad`minMiddleLength := <len>' &914%Sets the minimum bi-syllabic length of a <middle> (which, by default915%is 0) to <len>; <len> should be a non-negative even integer.916%917%\quad`maxMiddleLength := <len>' &918%Sets the *intended* maximum bi-syllabic length of a <middle> to <len>;919%<len> should be a positive integer.920%921%&922%The default behaviour is given by `<len> = 30'. The *actual* maximum923%bi-syllabic length of a <middle> is adjusted downwards by the least924%amount necessary to ensure that the difference of the minimum and925%maximum bi-syllabic lengths of a <middle> is divisible by926%`<granularity> + 2'. (Recall that <granularity> is the difference of927%the maximum and minimum bi-syllabic lengths of a <tail>.)928%929%\enditems930%931%Please note that the relators tested are saved in the lists `ALLRELS'932%and `newrels' (see~"ALLRELS").933%934%\>ClassesGenPairs( <G>, <orderx>, <ordery> ) F935%936%finds, and returns as a list of 2-element lists, generator pairs of937%elements for the group <G> of orders <orderx> and <ordery>, where938%<orderx> and <ordery> are positive integers.939%940%\>TranslatePresentation( <fgens>, <rels>, <sgens>, <newgens> ) F941%942%finds a new presentation, in terms of the generators <newgens>, for943%the *simple* group $S = \langle <fgens> \mid <rels> \rangle$, with944%subgroup generated by <sgens>; <fgens> should be a *pair* of free945%group generators; <rels>, <sgens> and <newgens> should be lists of946%words in <fgens>. Furthermore, <newgens> should be a list of two947%words, the first of which should be of even order and the second of948%odd prime order in the group $S$. The idea is that, by using Tietze949%transformations, the variables `x' and `y' (see~"x") are assigned to950%the words of <newgens>, which make up the new <fgens>, and <rels> and951%<sgens> are written in terms of the new <fgens>,952%`TranslatePresentation' returns a record with fields `fgens', `rels'953%and `sgens' that are the new values of <fgens>, and <rels> and954%<sgens>, respectively.955%956%\>IsACEResExampleOK() F957%958%does a number of integrity checks and tries to give an accurate959%diagnosis if something is wrong, returning `true' if everything is960%``OK'' and `false' otherwise. It is called whenever961%`ACEReadResearchExample' is executed and is not intended for direct962%usage by users.963%964%\>`ACEResExample' V965%966%is initially set to a record with one field `filename' whenever967%`ACEReadResearchExample' is executed and the value set to that field968%is the name of the file read by `ACEReadResearchExample'; other fields969%are set as the need arises. Essentially, it is used as a temporary970%variable store when `ACEReadResearchExample' reads a `do<XXX>.g' file.971%972%\>`ALLRELS' V973%\>`newrels' V974%975%are initially set to null lists. Each time `PGRelFind' is executed976%these each ``third'' relator tested is appended to `ALLRELS' and each977%relator that is satisfied by the group defined by the <fgens> and978%<rels> arguments of `PGRelFind' (see~"PGRelFind") is appended to979%`newrels'. The user should normally reset these lists back to null980%lists between invocations of `PGRelFind'.981%982%\>`F' V983%\>`a' V984%\>`b' V985%986%are the free group `F' and its two generators `a' and `b', used in the987%presentations described below.988%989%\>`newF' V990%\>`x' V991%\>`y' V992%993%are the free group `newF' and its two generators `x' and `y'; the994%record field `fgens' returned by `TranslatePresentation' is the list995%`[x, y]' (see~"TranslatePresentation").996%997%\>`L2_8' V998%\>`L2_16' V999%\>`L3_3s' V1000%\>`U3_3s' V1001%\>`M11' V1002%\>`M12' V1003%\>`L2_32' V1004%\>`U3_4s' V1005%\>`J1s' V1006%\>`L3_5s' V1007%\>`PSp4_4s' V1008%1009%contain presentations for the perfect simple groups $L_2(8)$,1010%$L_2(16)$, $L_3(3)$, $U_3(3)$, $M_{11}$, $M_{12}$, $L_2(32)$, $U_3(4)$,1011%$J_1$, $L_3(5)$ and $PSp_4(4)$, respectively. Those with names ending1012%in `s'contain lists of records (the `s' is meant to suggest ``plural''),1013%and those with no `s' are just single records, where each record has the1014%following fields:1015%1016%\beginitems1017%1018%\quad`source' &1019%a citation giving the source from which the presentation was obtained,1020%where `CCN85', `CMY79' and `CR84' indicate \cite{CCN85}, \cite{CMY79}1021%and \cite{CR84}, respectively, and `Bray' indicates the website1022%\URL{http://www.cix.co.uk/~vicarage/};1023%1024%\quad`rels' &1025%the relators of the group in terms of the generators `a' and `b'1026%defined above (see~"a"); and1027%1028%\quad`sgens' &1029%the generators of a large (usually maximal) subgroup of the group, in1030%terms of the generators `a' and `b'.1031%1032%\enditems1033%1034%\>`presentations' V1035%1036%is a record whose fields are the names of the presentation variables1037%of~"M11", and whose values are the variables,1038%e.g.~`presentations.L2_16' is the same object as `L2_16'.1039%1040%*The `do<XXX>.g' files*1041%1042%Each `do<XXX>.g' file (other than the generic `doGrp.g') had a name1043%that is formed by taking one of the fields of `presentations',1044%removing any underscore or `s', prepending `"do"' and appending1045%`".g"'; also, each requires that you run1046%1047%\beginexample1048%gap> ACEReadResearchExample();1049%\endexample1050%1051%first to define the functions described above. If you forget, never1052%mind~\dots~you will be reminded.1053%1054%Many of the outputs are fairly lengthy and you may wish to use `LogTo'1055%(see~"ref:LogTo") in order to peruse the output at leisure, later.1056%Also, for many of the larger groups one needs to be able to set1057%`ACEworkspace' larger than `10^6', but how large? The investigation1058%showing that $L_3(5)$ has deficiency 0 was run on an SGI Origin 20001059%with 6.4 Gb of RAM and with `ACEworkspace' set to `10^8', to find a1060%``third'' relator of 23 bisyllables. It turns out however that one1061%need only set `ACEworkspace := 5 * 10^6' to find that1062%relator~\dots~one can be very knowledgeable in hindsight! In the list1063%below we give values for `ACEworkspace' that will succeed in finding1064%the shortest ``third'' relator that we found, when the method1065%succeeded. (Of course, `PGRelFind' runs a lot faster if the workspace1066%given to {\ACE} is kept small.)1067%1068%Recall `ACEReadResearchExample' expects a filename (i.e.~a string), or1069%no argument; here are the *filenames* of the `do<XXX>.g' provided:1070%1071%\beginitems1072%1073%\quad`"doGrp.g"' &1074%This allows the user to experiment with any of the groups that have1075%data in the `presentations' record. The user *must* supply a value for1076%the following option:1077%1078%\qquad`grp := <presField>' &1079%<presField> must be the name (i.e.~a string) of a field in the1080%`presentations' record (this selects the group to be investigated);1081%and, possibly one or both of the following options:1082%1083%\qquad`n := <n>' &1084%If <presField>, above, ends in `s' then the user *must* supply a1085%positive integer <n> for `n', which indicates that the <n>th record of1086%`presentations.(<presField>)' is desired.1087%1088%\qquad`newgens := <wordlist>' &1089%<wordlist> must be a list of two words in the generators `a' and `b'1090%which are to be the words used for the <newgens> argument of1091%`TranslatePresentation' (see~"TranslatePresentation" for the1092%conditions they must satisfy). If `newgens' is not supplied, it is1093%assumed that `TranslatePresentation' is not needed, i.e.~that the1094%generators `a' and `b' are already an involution and an element of odd1095%prime order, respectively, and that `PGRelFind' may be immediately1096%applied.1097%1098%&1099%The user may also supply `PGRelFind' options, though unlike `grp' and1100%`newgens', they will not be directly observable in the output.1101%An example using both sets of options is given below.1102%1103%\quad`"doL28.g"' &1104%This provides a nice small example. You may supply any `PGRelFind'1105%options you wish, and/or you may use the following option which has1106%been specifically designed to help you get acquainted with the1107%`PGRelFind' options (only the equivalent of the `optex' options will1108%be explicitly observable in the output).1109%1110%\qquad`optex := <val>' &1111%<val> may be an integer or a list of integers in the range1112%$1,\ldots,8$. The output of `ACEReadResearchExample();' suggests a1113%combination that is 65 lines long. Most of the possible choices for1114%`optex' give an output of the order of 100 to 200 lines, which isn't1115%too bad if you have say an `xterm' window with the capacity to scroll1116%back.1117%1118%\quad`"doL216.g"' &1119%As is the case with the remaining `do<XXX>.g' files, there are no1120%options other than those for `PGRelFind'. It is sufficient to set1121%`ACEworkspace := 2 * 10^4'.1122%1123%\quad`"doL33.g"' &1124%It is sufficient to set `ACEworkspace := 2 * 10^4'.1125%1126%\quad`"doU33.g"' &1127%Though $U_3(3)$ is known to have deficiency 0, the1128%`TranslatePresentation'-`PGRelFind' method does not appear to be able1129%to demonstrate it.1130%1131%\quad`"doM11.g"' &1132%`ACEworkspace' needs to be set to at least `6 * 10^6'.1133%1134%\quad`"doL232.g"' &1135%It is sufficient to set `ACEworkspace := 5 * 10^4'.1136%1137%\quad`"doU34.g"' &1138%It is sufficient to set `ACEworkspace := 5 * 10^4'.1139%1140%\quad`"doJ1.g"' &1141%`ACEworkspace' needs to be set to at least `5 * 10^6'.1142%1143%\quad`"doL35.g"' &1144%`ACEworkspace' needs to be set to at least `5 * 10^6'.1145%1146%\quad`"doPSp44.g"' &1147%We were unable to determine whether $PSp_4(4)$ has deficiency 0, via1148%the `TranslatePresentation'-`PGRelFind' method.1149%1150%\enditems1151%1152%The following example shows that you can use both the options peculiar1153%to the file `doGrp.g' and the options of `PGRelFind' when1154%`ACEReadResearchExample' is called with argument (filename)1155%`"doGrp.g"'.1156%1157%\beginexample1158%gap> ACEReadResearchExample("doGrp.g"1159%> : grp := "L2_8", newgens := [a^3*b, a^2*b],1160%> head := x*y*x*y*x*y^-1*x*y*x*y);1161%# IsACEResExampleOK() sets ACEResExample.grp from options grp, n1162%# ACEResExample.newgens from option newgens1163%gap> ACEResExample.G := TranslatePresentation([a, b],1164%> ACEResExample.grp.rels,1165%> ACEResExample.grp.sgens,1166%> ACEResExample.newgens);1167%#I there are 4 generators and 6 relators of total length 451168%#I there are 2 generators and 4 relators of total length 551169%rec(1170% fgens := [ x, y ],1171% rels := [ x^2, y^3, y^-1*x*y^-1*x*y^-1*x*y^-1*x*y^-1*x*y^-1*x*y^-1*x,1172% x*y^-1*x*y*x*y^-1*x*y*x*y^-1*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y*x*y^1173% -1*x*y*x*y^-1*x*y*x*y^-1*x*y*x*y ],1174% sgens := [ x*y^-1 ] )1175%gap> ACEResExample.Gn := PGRelFind(ACEResExample.G.fgens,1176%> ACEResExample.G.rels,1177%> ACEResExample.G.sgens);1178%GroupOrder=504 SubgroupIndex=721179%#bisyllables in head = 5 head: x*y*x*y*x*y^-1*x*y*x*y1180%Max #bisyllables in tail = 10 (granularity = 10)1181%#bisyllables in middle = 01182%Candidate relator: x*y*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y^-1*x*y*x*y*x*y*x*y^1183%-1*x*y^-1*x*y^-1*x*y*x*y^-11184% #bisyllables = 15 (#bisyllables in tail = 10) #words tested: 11185%ACEStats:1186% index=72 cputime=10 ms maxcosets=98 totcosets=1211187%Large subgroup index OK1188%ACEStats for cyclic subgroup:1189% index=168 cputime=10 ms maxcosets=170 totcosets=2321190%Cyclic subgroup index OK1191%Success! ... new relator:1192% x*y*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y^-1*x*y*x*y*x*y*x*y^-1*x*y^-1*x*y^1193%-1*x*y*x*y^-11194%... continuing (there may be a shorter relator).1195%Candidate relator: x*y*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y*x*y^-1*x*y^-1*x*y^1196%-1*x*y*x*y*x*y*x*y^-1*x*y^-11197% #bisyllables = 15 (#bisyllables in tail = 10) #words tested: 11198%ACEStats:1199% index=72 cputime=10 ms maxcosets=102 totcosets=1231200%Large subgroup index OK1201%ACEStats for cyclic subgroup:1202% index=168 cputime=0 ms maxcosets=170 totcosets=2361203%Cyclic subgroup index OK1204%Success! ... new relator:1205% x*y*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y*x*y^-1*x*y^-1*x*y^-1*x*y*x*y*x*y*x*y^1206%-1*x*y^-11207%... continuing (there may be a shorter relator).1208%Middles of length 0 exhausted.1209%Relator found of length 15, is shortest.1210%rec(1211% gens := [ x, y ],1212% rels :=1213% [ x^2, y^3, x*y*x*y*x*y^-1*x*y*x*y*x*y^-1*x*y*x*y^-1*x*y^-1*x*y^-1*x*y*x*y*\1214%x*y*x*y^-1*x*y^-1 ],1215% sgens := [ x*y^-1 ] )1216%gap>1217%\endexample1218%1219%The following1220%1221%\beginexample1222%gap> ACEReadResearchExample("doGrp.g" : grp := "L3_3s", n := 1);1223%\endexample1224%1225%is essentially equivalent to1226%1227%\beginexample1228%gap> ACEReadResearchExample("doL33.g");1229%\endexample1230%1231%Observe that the option `n' is needed because `grp' selects a list of1232%records (as indicated by the trailing `s' of `"L3_3s"'). Also, observe1233%that the `newgens' option was not used since we already have a1234%presentation where the generators `a' and `b' are an involution and of1235%odd prime order, respectively.1236%enddisplay12371238%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%1239%%1240%E124112421243