> < ^ Date: Thu, 27 Jun 1996 12:09:40 +0200
> < ^ From: Alexander Hulpke <hulpke@math.colostate.edu >
^ Subject: BUGFIX #18

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.dif

If '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 ________________________________________________________

> < [top]