> < ^ Date: Mon, 30 Sep 1996 10:57:00 +0100 (MET)
> < ^ From: Martin Schoenert <martin.schoenert@math.rwth-aachen.de >
^ Subject: FIX 26 for DANGEROUS bug in GAP/lib 3.4.3.24 permutation groups

This mail contains a bugfix for a dangerous problem in GAP 3.4.3.
*You should apply this bugfix as soon as possible*.
The problem is in permutation group normalizer, centralizer, stabilizer,
and intersection. They produce correct results, but if one does further
computations with the results, one may get incorrect results.

ACKNOWLEDGEMENT

We thank Erzsebet Horvath (Budapest Technical University) for bringing
the problem to our attention via private communication in September 1996.

VERSION

GAP/lib 3.4.3.24
Before applying this fix you *must* already have applied fix24lib.

PRIORITY

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.

HOW TO APPLY

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

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

DESCRIPTION

The results of permutation group normalizer, centralizer, stabilizer,
and intersection computations may have a 'stabChain' component which
is identical to the group record. This may lead to problems in
following computations.

CORRECT BEHAVIOUR

gap> HS := Group(
>      (  2,  8, 13, 17, 20, 22,  7)(  3,  9, 14, 18, 21,  6, 12)
>      (  4, 10, 15, 19,  5, 11, 16)( 24, 77, 99, 72, 64, 82, 40)
>      ( 25, 92, 49, 88, 28, 65, 90)( 26, 41, 70, 98, 91, 38, 75)
>      ( 27, 55, 43, 78, 86, 87, 45)( 29, 69, 59, 79, 76, 35, 67)
>      ( 30, 39, 42, 81, 36, 57, 89)( 31, 93, 62, 44, 73, 71, 50)
>      ( 32, 53, 85, 60, 51, 96, 83)( 33, 37, 58, 46, 84,100, 56)
>      ( 34, 94, 80, 61, 97, 48, 68)( 47, 95, 66, 74, 52, 54, 63),
>      (  1, 35)(  3, 81)(  4, 92)(  6, 60)(  7, 59)(  8, 46)(  9, 70)
>      ( 10, 91)( 11, 18)( 12, 66)( 13, 55)( 14, 85)( 15, 90)( 17, 53)
>      ( 19, 45)( 20, 68)( 21, 69)( 23, 84)( 24, 34)( 25, 31)( 26, 32)
>      ( 37, 39)( 38, 42)( 40, 41)( 43, 44)( 49, 64)( 50, 63)( 51, 52)
>      ( 54, 95)( 56, 96)( 57,100)( 58, 97)( 61, 62)( 65, 82)( 67, 83)
>      ( 71, 98)( 72, 99)( 74, 77)( 76, 78)( 87, 89) );;  HS.name := "HS";;
gap> s5 := SylowSubgroup( HS, 5 );;
gap> cc := ConjugacyClassesSubgroups( s5 );;
gap> n5 := Normalizer( HS, cc[8].representative );;  n5.name := "n5";;
gap> CharTable( n5 );
CharTable( n5 )

COMMENT

The problem was that 'StabChain' mistook a group as a stabilizer chain
record. This fix changes 'StabChain' so that it correctly recognizes
whether a group or a stabilizer chain record is passed as argument.

DIFFS

Prereq: 3.13.1.4
--- lib/permstbc.g      Fri Sep 27 15:22:02 1996
+++ lib/permstbc.g      Fri Sep 27 14:42:13 1996
@@ -3,13 +3,16 @@
 #A  permstbc.g                  GAP library                         Udo Polis
 #A                                                              & Akos Seress
 ##
-#H  @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:19 felsch Exp $
+#H  @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:19 felsch Exp $
 ##
 #Y  Copyright (C)  1994,  Lehrstuhl D fuer Mathematik,  RWTH Aachen,  Germany
 ##
 ##  This file contains the functions to compute and change stabilizer chains.
 ##
 #H  $Log: 1.html,v $
 #H  Revision 1.2  2004/04/21 15:06:19  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.4  2003/06/12 19:20:34  gap
 #H  Further update. AH
 #H
 #H  Revision 1.3  1997/08/15 11:19:38  gap
 #H  New forum setup. AH
 #H
 #H  Revision 1.2  1997/04/24 15:33:16  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:07  gap
 #H  added forum archive and translation files.
 #H
+#H  Revision 3.13.1.5  1996/09/27 12:41:47  mschoene
+#H  fixed 'StabChain' from treating groups as stabchains
+#H
 #H  Revision 3.13.1.4  1996/09/17 12:28:56  mschoene
 #H  changed 'StabChain', it should not enter 'G.stabChainOptions.knownBase'
 #H
@@ -125,6 +128,12 @@
                          options.strongGenerators,
                          options.base );

+    # if it is a base change for a stabchain record (instead of a group)
+    elif not IsBound( grp.operations ) then
+        chain := PermGroupOps.StabChainChange(
+                         grp,
+                         options.base );
+
     # if it is base change
     elif IsBound( grp.stabChain )  then
         if IsBound( options.base )  then
@@ -135,18 +144,20 @@
             chain := grp.stabChain;
         fi;

-    # if grp itself is a stabChain record
-    elif IsBound( grp.stabilizer ) then
-
+    # if it is a base change but the group has no stabChain component
+    elif IsBound( grp.stabilizer )  then
+        #N  1996/09/30 M.Schoenert maybe we should signal an error
+        grp.stabChain := rec();
+        grp.stabChain.identity := ();
+        grp.stabChain.generators  := grp.generators;
+        grp.stabChain.orbit       := grp.orbit;
+        grp.stabChain.transversal := grp.transversal;
+        grp.stabChain.stabilizer  := grp.stabilizer;
         if IsBound( options.base )  then
-            #N akos 6/24/94 should be grp.operations when stabChain records
-            #N will have operations record
-            chain := PermGroupOps.StabChainChange(
-                             grp,
+            chain := grp.operations.StabChainChange(
+                             grp.stabChain,
                              options.base );
         else
-        # will give error for a perm group with stabilizer but not with
-        # stabChain (on purpose)
             chain := grp.stabChain;
         fi;

END OF  fix26lib.dif ________________________________________________________

> < [top]