Dear GAP-Forum,
This mail contains a bugfix for a dangerous problems in GAP 3.4.3.
*You should apply this bugfix as soon as possible if you are using
the solvable groups library.* The problem is in 'AllSolvableGroups',
and causes it to miss the last group of size 100.
HOW TO APPLY
The problem is a dangerous problem, because it may cause a computation to
produce incorrect results without a warning. Thus the bugfix has high
priority, and we recommend that you apply it as soon as possible.Go to the GAP directory (the directory with the 'grp/' subdirectory),
name this mail 'bugfix18.dif', and issue the command:patch -p0 < bugfix18.difIf 'patch' writes "I can't seem to find a patch in there" try 'patch -v'.
If 'patch -v' gives an error message or reports a version older than 2.1,
get 2.1 from 'ftp://FTP.Math.RWTH-Aachen.DE/pub/gap/utils/patch2_1.zoo'.This fix changes only the groups library.
Thus you need not recompile the GAP kernel.
VERSION
3.4.3.0
DESCRIPTION
'AllSolvableGroups' misses the last group of size 100.
CORRECT BEHAVIOUR
gap> AllSolvableGroups(Size,100); [ 10^2, 50x2, 5x20, c100, 10xD10, 5x10.2, 5x5:4, 2x5^2:2, (5^2x2).2, D100, 50.2, D10^2, grp_100_13, grp_100_14, grp_100_15, 25:4 ]
COMMENT
The list was corrected at one point to add a missing group of size 96.
Unfortunately, this fix did not note, that the number of groups was
hard-coded in the selection functions.
PATCH
Prereq: 3.5 --- grp/solvable.grp Thu Dec 21 15:25:52 1995 +++ grp/solvable.grp Wed Jun 26 17:07:47 1996 @@ -2,7 +2,7 @@ ## #A solvable.grp GAP group library Hans Ulrich Besche ## -#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:04:26 felsch Exp $ +#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:04:26 felsch Exp $ ## #Y Copyright 1990-1992, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## @@ -13,6 +13,16 @@ ## Aachen 1982 and all the other groups are from J. Neubuesser, Kiel 1967. ## #H $Log: 1.html,v $ #H Revision 1.2 2004/04/21 15:04:26 felsch #H Corrected links in the Forum Archive pages. VF #H #H Revision 1.1.1.1 2004/04/20 13:39:35 felsch #H The final GAP-Forum archive until 2003. #H #H Revision 1.5 2003/06/12 19:20:33 gap #H Further update. AH #H #H Revision 1.4 2003/06/12 17:28:25 gap #H Address updates by JN. AH #H #H Revision 1.3 1997/08/15 11:19:33 gap #H New forum setup. AH #H #H Revision 1.2 1997/04/24 15:32:47 gap #H These files were replaced by the versions in WWW. The content is basically the #H same but the formatting has been much more friendly towards the HTML-Converter. #H AH #H #H Revision 1.1 1996/10/30 13:07:04 gap #H added forum archive and translation files. #H +#H Revision 3.5.1.3 1996/06/24 09:32:06 ahulpke +#H fixed number of groups +#H +#H Revision 3.5.1.2 1995/07/03 13:04:12 sam +#H fixed 'SolvableGroup' +#H (for some strange reason the operator {} behaves differently in GAP-3.4) +#H +#H Revision 3.5.1.1 1994/09/27 14:42:25 sam +#H replaced 'Coefficients' call by call of 'CoefficientsInt' +#H #H Revision 3.5 1993/06/24 17:26:22 fceller #H added missing group of order 96 #H @@ -1249,14 +1259,14 @@ AGGroup := function ( nr ) local gens, rels, g, j, l, ind, d, c, i, f, o, p; - f := Factors(AGTable[nr][1]); - i := Maximum(f)+1; + f := FactorsInt( AGTable[nr][1] ); + i := Maximum( f ) + 1; # length of composition series - l := Length(f); + l := Length( f ); # indices of composition series - ind := Coefficients( List([1..l]*0+i,x->x), AGTable[nr][4] ); + ind := CoefficientsInt( [ 1 .. l ] * 0 + i, AGTable[nr][4] ); g := ["a","b","c","d","e","f"]; gens := []; rels := []; @@ -1269,10 +1279,10 @@ # fetch non-canonical relations for i in [5..Length(AGTable[nr])] do - d := Coefficients( [l+1,l,AGTable[nr][1]], AGTable[nr][i] ); + d := CoefficientsInt( [l+1,l,AGTable[nr][1]], AGTable[nr][i] ); # fetch the value of a nontrivial relation - c := Coefficients( ind, d[3] ); + c := CoefficientsInt( ind, d[3] ); g := gens[1]^0; for j in [1..l] do if c[j]> 0 then @@ -1321,7 +1331,7 @@ # <name> = "grp_1234" name := arg[1]; digits := "0123456789"; - if name{[1..4]} = "grp_" then + if 3 < Length( name ) and name{[1..4]} = "grp_" then ord := 0; p := 5; i := Position( digits, name[p] ); @@ -1439,7 +1449,7 @@ fi; # initialize allgrps:=[]; - for i in [1..1045] do + for i in [1..Length(AGTable)] do flag:=AGTable[i][1] in sizes; if flag and tAbel then flag:=(QuoInt(AGTable[i][3],100) mod 10=1)=vAbel; @@ -1502,7 +1512,7 @@ else sizes:=arg[pSize+1]; arg[pSize]:=x->true; arg[pSize+1]:=[true]; fi; - for i in [1..1045] do + for i in [1..Length(AGTable)] do flag:=AGTable[i][1] in sizes; if flag and tAbel then flag:=(QuoInt(AGTable[i][3],100) mod 10=1)=vAbel; END OF bugfix18.dif ________________________________________________________