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