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 ________________________________________________________