> < ^ Date: Wed, 15 May 1996 12:00:00 +0100 (MET)
> < ^ From: Martin Schoenert <martin.schoenert@math.rwth-aachen.de >
^ Subject: BUGFIX 09 (DANGEROUS problem in 'SylowSystem' for ag groups)

This mail contains a bugfix for a dangerous problem in GAP 3.4.3.
*You should apply this bugfix as soon as possible*. Note that
bugfix02 already provided a partial workaround for this problem.
The problem is that 'SylowSystem' for ag groups may return a system
of Sylow subgroups which do not commute. This affects 'Complement'
and 'Complementclasses' for ag groups, which use 'SylowSystem'.

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.

Note that bugfix02 already provided a partial workaround for this
problem. You have to apply 'bugfix02.dif' before using this patch.

Go to the GAP directory (the directory with the 'lib/' subdirectory),
name this mail 'bugfix09.dif', and issue the command:

patch -p0 < bugfix09.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 bugfix changes only the library. Thus you need not recompile
the GAP kernel.

VERSION

GAP 3.4.3.0

CORRECT BEHAVIOUR

gap> F9 := FreeGroup( 9 );;
gap> f1:=F9.1;; f2:=F9.2;; f3:=F9.3;;
gap> f4:=F9.4;; f5:=F9.5;; f6:=F9.6;;
gap> f7:=F9.7;; f8:=F9.8;; f9:=F9.9;;
gap> G := AgGroupFpGroup( F9 / [
> f1^3/(f2*f3^4*f5), f2^2/f5, f3^7, f4^2, f5^2, f6^2, f7^2, f8^2, f9^2,
> Comm(f2,f1)/(f3^5*f4*f5*f6*f7*f8), Comm(f3,f1)/(f3^4*f9),
> Comm(f4,f1)/f6, Comm(f5,f1)/(f5*f6*f7), Comm(f6,f1)/(f6*f8),
> Comm(f7,f1)/(f6*f7), Comm(f8,f1)/(f8*f9), Comm(f9,f1)/(f5*f6*f8),
> Comm(f3,f2)/(f3^5*f5*f6*f7*f9), Comm(f4,f2)/(f4*f5*f7),
> Comm(f6,f2)/f5, Comm(f7,f2)/(f4*f5*f7), Comm(f8,f2)/f9,
> Comm(f4,f3)/(f4*f5), Comm(f5,f3)/f7, Comm(f6,f3)/(f5*f8*f9),
> Comm(f7,f3)/(f5*f6*f7*f8), Comm(f8,f3)/f9, Comm(f9,f3)/(f4*f6*f9) ] );;
gap> SylowComplements( G );;
gap> s := SylowSystem( G ).sylowSubgroups;;
gap> Set(List(CartesianProduct(Elements(s[2]),Elements(s[3])),Product))
>  = Set(List(CartesianProduct(Elements(s[3]),Elements(s[2])),Product));
true

COMMENT

'SylowSystem' may return a system of Sylow subgroups that do not commute.
'SylowComplements' may return an incorrect system of Sylow complements.
This also affects 'Complement' and 'Complementclasses' for ag groups,
which use 'SylowSystem' (even though we cannot find an example where
'Complement' or 'Complementclasses' return an incorrect result).

The problem is that 'SylowSystem' and 'SylowComplements' assumed they can
use 'NormalIntersection(<U>,<V>)' respectively 'SumAgGroup(<U>,<V>)',
since <U> and <V> commute. But those functions require the stronger
condition that <V> must normalize <U>.

PATCH

Prereq: 3.20.1.1
--- lib/aghall.g        1995/05/04 11:16:44
+++ lib/aghall.g        1996/05/13 12:47:42
@@ -2,13 +2,16 @@
 ##
 #A  aghall.g                    GAP library                      Frank Celler
 ##
-#A  @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:18 felsch Exp $
+#A  @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:18 felsch Exp $
 ##
 #Y  Copyright 1990-1992,  Lehrstuhl D fuer Mathematik,  RWTH Aachen,  Germany
 ##
 ##  This files contains functions computing hall subgroups.
 ##
 #H  $Log: 1.html,v $
 #H  Revision 1.2  2004/04/21 15:06:18  felsch
 #H  Corrected links in the Forum Archive pages.   VF
 #H
 #H  Revision 1.1.1.1  2004/04/20 13:39:30  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.20.1.2  1996/05/13  09:23:21  fceller
+#H  fixed 'SylowComplements' and 'SylowSystem'
+#H
 #H  Revision 3.20.1.1  1995/05/04  11:16:44  fceller
 #H  fixed 'CoprimeComplementGS'
 #H
@@ -538,16 +541,16 @@
         com := sys.sylowComplements;
         L := [ U ];
         for i  in [ 2 .. Length( sys.primes ) ]  do
-            L[ i ] := NormalIntersection( L[ i - 1 ], com[ i - 1 ] );
+            L[ i ] := Intersection( L[ i - 1 ], com[ i - 1 ] );
         od;
         R := [];
         R[ Length( sys.primes ) ] := U;
         for i  in Reversed( [ 1 .. Length( sys.primes ) - 1 ] )  do
-            R[ i ] := NormalIntersection( R[ i + 1 ], com[ i + 1 ] );
+            R[ i ] := Intersection( R[ i + 1 ], com[ i + 1 ] );
         od;
         sys.sylowSubgroups := [];
         for i  in [ 1 .. Length( sys.primes ) ]  do
-            sys.sylowSubgroups[i] := NormalIntersection( L[i], R[i] );
+            sys.sylowSubgroups[i] := Intersection( L[i], R[i] );
         od;

     fi;
@@ -564,15 +567,14 @@
 AgGroupOps.SylowComplements := function( U )
     local   i, primes, p, com, syl, sys, K, L;

-    # Catch trivial case.
-    if U.generators = []  then
+    # catch the trivial case
+    if 0 = Length(U.generators)  then
         return rec( primes := [],
                     sylowSubgroups := [],
                     sylowComplements := [] );
     fi;

-    # If  you  already  know a complement system return it. If we know just a
-    # sylow system, return the products.
+    # if we know a system use it
     if IsBound( U.syslowSystem )  then
         if IsBound( U.syslowSystem.sylowComplements )  then
             return U.syslowSystem;
@@ -582,18 +584,18 @@
             primes := U.sylowSystem.primes;
             K := [];
             L := [];
-            K[ 1 ] := AgSubgroup( U, [], true );
-            for i  in [ 2 .. Length( primes ) ]  do
-                K[ i ] := SumAgGroup( K[ i - 1 ], syl[ i - 1 ] );
+            K[1] := AgSubgroup( U, [], true );
+            for i  in [ 2 .. Length(primes) ]  do
+                K[i] := Closure( K[i-1], syl[i-1] );
             od;
-            L[ Length( primes ) ] := AgSubgroup( U, [], true );
-            for i  in Reversed( [ 1 .. Length( primes ) - 1 ] )  do
-                L[ i ] := SumAgGroup( L[ i + 1 ], syl[ i + 1 ] );
+            L[Length(primes)] := AgSubgroup( U, [], true );
+            for i  in Reversed( [ 1 .. Length(primes)-1 ] )  do
+                L[ i ] := Closure( L[i+1], syl[i+1] );
             od;
-            for i  in [ 1 .. Length( primes ) ]  do
-                com[i] := SumAgGroup( K[ i ], L[ i ] );
+            for i  in [ 1 .. Length(primes) ]  do
+                com[i] := Closure( K[i], L[i] );
             od;
-            U.sylowSystem.sylowComplements:=com;
+            U.sylowSystem.sylowComplements := com;
             return U.sylowSystem;
         fi;
     fi;

Prereq: 3.11.1.2
--- lib/agcomple.g      1996/02/22 10:59:28
+++ lib/agcomple.g      1996/05/13 09:25:04
@@ -2,13 +2,16 @@
 ##
 #A  agcomple.g                  GAP library                      Frank Celler
 ##
-#A  @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:18 felsch Exp $
+#A  @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:18 felsch Exp $
 ##
 #Y  Copyright 1990-1992,  Lehrstuhl D fuer Mathematik,  RWTH Aachen,  Germany
 ##
 ##  This file contains all polymorph functions for groups.
 ##
 #H  $Log: 1.html,v $
 #H  Revision 1.2  2004/04/21 15:06:18  felsch
 #H  Corrected links in the Forum Archive pages.   VF
 #H
 #H  Revision 1.1.1.1  2004/04/20 13:39:30  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.11.1.3  1996/05/13  09:24:39  fceller
+#H  undid temporary fix 3.11.1.2, fixed coprime complement case
+#H
 #H  Revision 3.11.1.2  1996/02/22  10:59:28  ahulpke
 #H  disabled erraneous coprime case (only temporary fix)
 #H
@@ -651,7 +654,7 @@
         if IsBound( cor.relators )  then
             ocr.relators := cor.relators;
         fi;
-        ocr.complement := CoprimeComplement( K, M );
+        OneCocyclesOC( ocr, true );
         OneCoboundariesOC( ocr );
        if     IsBound( cor.normalComplements )
           and cor.normalComplements
@@ -904,18 +907,13 @@
        cor := rec();

     # otherwise we compute a hall system for <G>/<N>
-    elif false  then
-        InfoAgCo2( "#I  Complements: computing p prime sets\n" );
+    else
+       InfoAgCo2( "#I  Complements: computing p prime sets\n" );
         a   := NaturalHomomorphism( G, G / N );
         cor := PPrimeSetsOC( Image( a ) );
-        cor.generators := List( cor.generators, x ->
-                                PreImagesRepresentative( a, x ) );
-        cor.useCentralSK := true;
-
-    # use standard algorithm until CoprimeComplement is fixed
-    else
-        cor := rec();
-        cor.useCentralSK := true;
+        cor.generators := List( cor.generators, x ->
+                               PreImagesRepresentative( a, x ) );
+       cor.useCentralSK := true;
     fi;

# we want our nice elementary abelian series

END OF  bugfix09.dif ________________________________________________________

> < [top]