This mail contains a bugfix for a serious problem in GAP 3.4.3.12.
You should apply this bugfix soon if you are using homomorphisms.
The problem is in 'PreImage' and causes it to fail for non surjective
group homomorphisms.
HOW TO APPLY
The problem is a serious problem, because if may cause a computation to
fail. Thus the bugfix has medium priority, and we recommend that you
apply it soon if you are using homomorphisms.Before applying this bugfix you *must* already have applied bugfix12.
Go to the GAP directory (the directory with the 'lib/' subdirectory),
name this mail 'bugfix13.dif', and issue the command:patch -p0 < bugfix13.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.12
DESCRIPTION
If one creates a non surjective group homomorphisms, then 'PreImage'
may fail and signalError, <elm> must lie in the preimage of <hom> in
map.operations.ImagesRepresentative( map, elm ) called from
...
COMMENT
This bugfix actually fixes two problems.
In the case where this problem first occured, the preimage of the map in
question was already known from the beginning. However it was stored in
the homomorphism record as '<hom>.preimage', whereas 'PreImage' looks for
the component '<hom>.preImage'. This bugfix changes all references to
'<hom>.preimage' to references to '<hom>.preImage' (and there are lots).'PreImage' then calls 'PreImages' to compute the set of preimages of the
range. This fails because 'PreImages' tries to compute a preimage for
the generators of the range that are not in the image. This bugfix fixes
'PreImages' to intersect the images set with 'Image(<hom>)'.
CORRECT BEHAVIOUR
gap> G := Group( (1,2), (3,4) );; gap> H := Group( (1,2), (5,6) ); gap> h := GroupHomomorphismByImages( G, H, [G.1], [H.1] );; gap> PreImage( h ); Subgroup( Group( (1,2), (3,4) ), [ (1,2) ] ) PATCH Prereq: 3.31.1.4 --- lib/aghomomo.g 1995/12/21 15:29:50 +++ lib/aghomomo.g 1996/06/11 16:47:50 @@ -2,13 +2,16 @@ ## #A aghomomo.g GAP library Frank Celler ## -#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ +#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ ## #Y Copyright 1990-1992, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ## This file contains functions for homomorphisms of aggroups. ## #H $Log: 1.html,v $ #H Revision 1.2 2004/04/21 15:06:55 felsch #H Corrected links in the Forum Archive pages. VF #H #H Revision 1.1.1.1 2004/04/20 13:39:39 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.31.1.5 1996/06/11 14:47:26 mschoene +#H fixed '.preimage' to '.preImage' +#H #H Revision 3.31.1.4 1995/12/05 15:01:25 mschoene #H replaced 'Filtered( <list>, IsBound )' by 'Compacted( <list> )' #H @@ -664,7 +667,7 @@ prd := GroupHomomorphismByImages( b.source, a.range, gens, imgs ); prd.isMapping := true; prd.isHomomorphism := true; - prd.preimage := b.source; + prd.preImage := b.source; else prd := MappingOps.CompositionMapping( a, b ); fi; @@ -828,7 +831,7 @@ domain := Mappings, generators := gens, genimages := imgs, - preimage := D, + preImage := D, image := R.operations.Subgroup( Parent(R), imgs ), isGeneralMapping := true, operations := AgGroupHomomorphismByImagesOps ); Prereq: 3.0 --- lib/alghomom.g 1995/12/21 15:29:56 +++ lib/alghomom.g 1996/06/11 16:48:26 @@ -2,7 +2,7 @@ ## #A alghomom.g GAP library Thomas Breuer ? ## -#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ +#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ ## #Y Copyright 1990-1993, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## @@ -12,6 +12,9 @@ ## 'grphomom.g'. (Avoid this!) ## #H $Log: 1.html,v $ #H Revision 1.2 2004/04/21 15:06:55 felsch #H Corrected links in the Forum Archive pages. VF #H #H Revision 1.1.1.1 2004/04/20 13:39:39 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.0.1.1 1996/06/11 14:48:18 mschoene +#H fixed '.preimage' to '.preImage' +#H #H Revision 3.0 1994/05/19 13:20:43 sam #H Initial Revision under RCS #H @@ -570,9 +573,9 @@ # enter useful information (precious little) if IsEqualSet( gens, G.generators ) then - hom.preimage := G; + hom.preImage := G; else - hom.preimage := Parent(G).operations.Subalgebra( Parent(G), gens ); + hom.preImage := Parent(G).operations.Subalgebra( Parent(G), gens ); fi; if IsEqualSet( imgs, H.generators ) then hom.image := H; @@ -658,7 +661,7 @@ if not IsBound( hom.coKernel ) then hom.coKernel := hom.operations.CoKernel( hom ); fi; - return hom.source = hom.preimage + return hom.source = hom.preImage and IsTrivial( hom.coKernel ); end; @@ -694,8 +697,8 @@ AlgebraHomomorphismByImagesOps.ImagesSet := function( hom, elms ) if IsAlgebra( elms ) and IsSubset( hom.source, elms ) then - if hom.preimage <> hom.source then - elms := Intersection( hom.preimage, elms ); + if hom.preImage <> hom.source then + elms := Intersection( hom.preImage, elms ); fi; if not IsBound( hom.coKernel ) then hom.coKernel := hom.operations.CoKernel( hom ); @@ -778,7 +781,7 @@ # enter useful information prd.isMapping := true; prd.isHomomorphism := true; - prd.preimage := hom2.source; + prd.preImage := hom2.source; prd.elements := ShallowCopy( hom2.elements ); prd.images := List( [ 1 .. Length( prd.elements ) ], i -> hom1.images[ Prereq: 3.23.1.10 --- lib/fpgrp.g 1995/12/21 15:30:12 +++ lib/fpgrp.g 1996/06/11 16:48:47 @@ -2,13 +2,16 @@ ## #A fpgrp.g GAP library Martin Schoenert ## -#H @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ +#H @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ ## #Y Copyright 1990-1992, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ## This file contains the functions dealing with finitely presented groups. ## #H $Log: 1.html,v $ #H Revision 1.2 2004/04/21 15:06:55 felsch #H Corrected links in the Forum Archive pages. VF #H #H Revision 1.1.1.1 2004/04/20 13:39:39 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.23.1.11 1996/06/11 14:48:40 mschoene +#H fixed '.preimage' to '.preImage' +#H #H Revision 3.23.1.10 1995/11/25 22:42:44 mschoene #H allowed list of names as only argument of 'FreeGroup' (3.28 -> 3.29) #H @@ -1852,9 +1855,9 @@ # enter usefull information (precious little) if IsEqualSet( gens, G.generators ) then - hom.preimage := G; + hom.preImage := G; else - hom.preimage := Parent(G).operations.Subgroup( Parent(G), gens ); + hom.preImage := Parent(G).operations.Subgroup( Parent(G), gens ); fi; if IsSubsetSet( imgs, H.generators ) then hom.image := H; @@ -1883,7 +1886,7 @@ end; FpGroupHomomorphismByImagesOps.IsMapping := function ( hom ) - return hom.source = hom.preimage + return hom.source = hom.preImage and ForAll( hom.source.relators, rel -> MappedWord( rel, hom.generators, hom.genimages ) = hom.range.identity ); Prereq: 3.85.1.5 --- lib/group.g 1995/12/21 15:30:14 +++ lib/group.g 1996/06/11 16:51:33 @@ -2,7 +2,7 @@ ## #A group.g GAP library Frank Celler ## -#H @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ +#H @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ ## #Y Copyright 1990-1992, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## @@ -21,6 +21,9 @@ ## 'grphomom.g', 'grpprods.g' and 'operatio.g'. ## #H $Log: 1.html,v $ #H Revision 1.2 2004/04/21 15:06:55 felsch #H Corrected links in the Forum Archive pages. VF #H #H Revision 1.1.1.1 2004/04/20 13:39:39 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.85.1.6 1996/06/11 14:51:24 mschoene +#H fixed '.preimage' to '.preImage' +#H #H Revision 3.85.1.5 1995/03/02 14:31:48 vfelsch #H bug fixed in 'IsomorphismTypeFiniteSimpleGroup' #H @@ -3911,7 +3914,7 @@ P.bijection.isEpimorphism := true; P.bijection.isIsomorphism := true; P.bijection.image := G; - P.bijection.preimage := P; + P.bijection.preImage := P; P.bijection.kernel := TrivialSubgroup( P ); # return the permutation group Prereq: 3.33.1.4 --- lib/grphomom.g 1995/12/21 15:30:18 +++ lib/grphomom.g 1996/06/11 16:50:55 @@ -3,13 +3,22 @@ #A grphomom.g GAP library Frank Celler #A & Martin Schoenert ## -#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ +#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ ## #Y Copyright 1990-1992, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ## This file contains dispatcher and default functions for grp homomorphism. ## #H $Log: 1.html,v $ #H Revision 1.2 2004/04/21 15:06:55 felsch #H Corrected links in the Forum Archive pages. VF #H #H Revision 1.1.1.1 2004/04/20 13:39:39 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.33.1.7 1996/06/11 14:50:50 mschoene +#H fixed '.preimage' to '.preImage' +#H +#H Revision 3.33.1.6 1996/06/11 08:48:43 htheisse +#H 'GHO.ImagesSet' now looks at 'isMapping' before calling 'CoKernel' +#H +#H Revision 3.33.1.5 1996/06/10 13:33:40 mschoene +#H fixed 'GHO.ImagesSet' and 'GHO.PreImagesSet' to intersect +#H #H Revision 3.33.1.4 1995/12/11 11:03:19 mschoene #H changed 'CompositionGH' and 'IdentityGH' to inherit from 'GHOps' #H @@ -425,8 +434,21 @@ ## GroupHomomorphismOps.ImagesSet := function ( hom, elms ) if IsGroup( elms ) and IsSubset( hom.source, elms ) then - return Parent( hom.range ).operations.Subgroup( Parent( hom.range ), - List( elms.generators, gen -> Image( hom, gen ) ) ); + if PreImage(hom) <> hom.source then + elms := Intersection( PreImage(hom), elms ); + fi; + if not IsBound( hom.coKernel ) then + if IsBound( hom.isMapping ) and hom.isMapping then + hom.coKernel := TrivialSubgroup( hom.range ); + else + hom.coKernel := hom.operations.CoKernel( hom ); + fi; + fi; + return Closure( hom.coKernel, + Parent( hom.range ).operations.Subgroup( + Parent( hom.range ), + List( elms.generators, + gen -> ImagesRepresentative( hom, gen ) ) ) ); else return MappingOps.ImagesSet( hom, elms ); fi; @@ -449,6 +471,9 @@ ## GroupHomomorphismOps.PreImagesSet := function ( hom, elms ) if IsGroup( elms ) and IsSubset( hom.range, elms ) then + if Image(hom) <> hom.range then + elms := Intersection( Image(hom), elms ); + fi; return Closure( KernelGroupHomomorphism( hom ), Parent( hom.source ).operations.Subgroup( Parent( hom.source ), @@ -938,9 +963,9 @@ # enter usefull information (precious little) if IsEqualSet( Difference( gens, [ G.identity ] ), G.generators ) then - hom.preimage := G; + hom.preImage := G; else - hom.preimage := Parent(G).operations.Subgroup( Parent(G), gens ); + hom.preImage := Parent(G).operations.Subgroup( Parent(G), gens ); fi; if IsEqualSet( Difference( imgs, [ H.identity ] ), H.generators ) then hom.image := H; @@ -1030,7 +1055,7 @@ if not IsBound( hom.coKernel ) then hom.coKernel := hom.operations.CoKernel( hom ); fi; - return hom.source = hom.preimage + return hom.source = hom.preImage and IsTrivial( hom.coKernel ); end; @@ -1080,8 +1105,8 @@ GroupHomomorphismByImagesOps.ImagesSet := function ( hom, elms ) if IsGroup( elms ) and IsSubset( hom.source, elms ) then - if hom.preimage <> hom.source then - elms := Intersection( hom.preimage, elms ); + if hom.preImage <> hom.source then + elms := Intersection( hom.preImage, elms ); fi; if not IsBound( hom.coKernel ) then hom.coKernel := hom.operations.CoKernel( hom ); @@ -1160,7 +1185,7 @@ # enter useful information prd.isMapping := true; prd.isHomomorphism := true; - prd.preimage := hom2.source; + prd.preImage := hom2.source; # note the images only, if they were already neccessary for hom1 Prereq: 3.16.1.2 --- lib/mapping.g 1995/12/21 15:30:22 +++ lib/mapping.g 1996/06/11 16:50:28 @@ -3,13 +3,16 @@ #A mapping.g GAP library Martin Schoenert #A & Frank Celler ## -#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ +#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ ## #Y Copyright 1990-1992, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ## This file contains the functions that mainly deal with mappings. ## #H $Log: 1.html,v $ #H Revision 1.2 2004/04/21 15:06:55 felsch #H Corrected links in the Forum Archive pages. VF #H #H Revision 1.1.1.1 2004/04/20 13:39:39 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.16.1.3 1996/06/11 14:50:23 mschoene +#H fixed '.preimage' to '.preImage' +#H #H Revision 3.16.1.2 1995/12/11 12:03:58 mschoene #H allowed 'MappingByFunction' with inverse function #H @@ -937,10 +940,10 @@ inv.source := map.range; inv.range := map.source; if IsBound( map.image ) then - inv.preimge := map.image; + inv.preImage := map.image; fi; - if IsBound( map.preimage ) then - inv.image := map.preimage; + if IsBound( map.preImage ) then + inv.image := map.preImage; fi; # maybe we know that this mapping is single valued Prereq: 3.22.1.8 --- lib/permhomo.g 1996/06/11 16:23:33 +++ lib/permhomo.g 1996/06/11 16:49:41 @@ -3,13 +3,16 @@ #A permhomo.g GAP library Martin Schoenert #A & Udo Polis ## -#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ +#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ ## #Y Copyright 1990-1992, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## ## This file contains functions that implement homomorphisms for permgroups. ## #H $Log: 1.html,v $ #H Revision 1.2 2004/04/21 15:06:55 felsch #H Corrected links in the Forum Archive pages. VF #H #H Revision 1.1.1.1 2004/04/20 13:39:39 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.22.1.9 1996/06/11 14:49:34 mschoene +#H fixed '.preimage' to '.preImage' +#H #H Revision 3.22.1.8 1996/06/10 13:06:45 mschoene #H fixed 'PGHBIO.CoKernel', it is a normal subgroup of the image #H @@ -133,9 +136,9 @@ # enter useful information (precious little) if IsEqualSet( Difference(gens,[G.identity]), G.generators ) then - hom.preimage := G; + hom.preImage := G; else - hom.preimage := Parent(G).operations.Subgroup( Parent(G), gens ); + hom.preImage := Parent(G).operations.Subgroup( Parent(G), gens ); fi; if IsEqualSet( Difference(imgs,[H.identity]), H.generators ) then hom.image := H; @@ -227,7 +230,7 @@ size := Length( hom.orbit );
# create new elements until we have reached the size
- while size <> Size( hom.preimage ) do
+ while size <> Size( hom.preImage ) do
# make a new element from the generators elm := rnd[rni]; @@ -512,8 +515,8 @@ PermGroupHomomorphismByImagesOps.ImagesSet := function ( hom, elms ) if IsGroup( elms ) and IsSubset( hom.source, elms ) then - if hom.preimage <> hom.source then - elms := Intersection( hom.preimage, elms ); + if hom.preImage <> hom.source then + elms := Intersection( hom.preImage, elms ); fi; if not IsBound( hom.coKernel ) then hom.coKernel := hom.operations.CoKernel( hom ); @@ -599,7 +602,7 @@ # enter useful information prd.isMapping := true; prd.isHomomorphism := true; - prd.preimage := hom2.source; + prd.preImage := hom2.source; # copy the stabilizer chain and update the images of the sgs gens := [ prd.source.identity ]; @@ -698,10 +701,10 @@ fi;
# get the degree of the preimage and image
- if hom.preimage.generators = [] then
+ if hom.preImage.generators = [] then
sourcedeg := 0;
else
- sourcedeg := PermGroupOps.LargestMovedPoint( hom.preimage );
+ sourcedeg := PermGroupOps.LargestMovedPoint( hom.preImage );
fi;
if hom.image.generators = [] then
rangedeg := 0;
@@ -734,10 +737,10 @@
and IsBound( hom.source.stabChainOptions.random )
then
options.randomsource := hom.source.stabChainOptions.random;
- elif IsBound( hom.preimage.stabChainOptions )
- and IsBound( hom.preimage.stabChainOptions.random )
+ elif IsBound( hom.preImage.stabChainOptions )
+ and IsBound( hom.preImage.stabChainOptions.random )
then
- options.randomsource := hom.preimage.stabChainOptions.random;
+ options.randomsource := hom.preImage.stabChainOptions.random;
elif IsBound( StabChainOptions.random ) then
options.randomsource := StabChainOptions.random;
else
@@ -779,12 +782,12 @@
if IsBound( hom.source.size ) then options.size := hom.source.size; - elif IsBound( hom.preimage.size ) then - options.size := hom.preimage.size; + elif IsBound( hom.preImage.size ) then + options.size := hom.preImage.size; elif IsBound( hom.source.stabChain ) then options.size := Size( hom.source ); - elif IsBound( hom.preimage.stabChain ) then - options.size := Size( hom.preimage ); + elif IsBound( hom.preImage.stabChain ) then + options.size := Size( hom.preImage ); fi; if not IsBound( options.size ) then if IsBound( Parent(hom.source).size ) then @@ -797,14 +800,14 @@ and IsBound( hom.source.stabChainOptions.knownBase ) then options.knownBase := hom.source.stabChainOptions.knownBase; - elif IsBound( hom.preimage.stabChainOptions ) - and IsBound( hom.preimage.stabChainOptions.knownBase ) + elif IsBound( hom.preImage.stabChainOptions ) + and IsBound( hom.preImage.stabChainOptions.knownBase ) then - options.knownBase := hom.preimage.stabChainOptions.knownBase; + options.knownBase := hom.preImage.stabChainOptions.knownBase; elif IsBound( hom.source.stabChain ) then options.knownBase := Base( hom.source ); - elif IsBound( hom.preimage.stabChain ) then - options.knownBase := Base( hom.preimage ); + elif IsBound( hom.preImage.stabChain ) then + options.knownBase := Base( hom.preImage ); elif IsBound( Parent(hom.source).stabChainOptions ) and IsBound( Parent(hom.source).stabChainOptions.knownBase ) then @@ -818,14 +821,14 @@ if IsBound( hom.source.size ) then options.limitsource := hom.source.size; - elif IsBound( hom.preimage.size ) then - options.limitsource := hom.preimage.size; + elif IsBound( hom.preImage.size ) then + options.limitsource := hom.preImage.size; elif IsBound( Parent(hom.source).size ) then options.limitsource := Parent(hom.source).size; elif IsBound( hom.source.stabChain ) then options.limitsource := Size( hom.source ); - elif IsBound( hom.preimage.stabChain ) then - options.limitsource := Size( hom.preimage ); + elif IsBound( hom.preImage.stabChain ) then + options.limitsource := Size( hom.preImage ); elif IsBound( Parent(hom.source).stabChain ) then options.limitsource := Size( Parent(hom.source) ); fi; @@ -834,10 +837,10 @@ and IsBound( hom.source.stabChainOptions.knownBase ) then options.knownBasesource := hom.source.stabChainOptions.knownBase; - elif IsBound( hom.preimage.stabChainOptions ) - and IsBound( hom.preimage.stabChainOptions.knownBase ) + elif IsBound( hom.preImage.stabChainOptions ) + and IsBound( hom.preImage.stabChainOptions.knownBase ) then - options.knownBasesource := hom.preimage.stabChainOptions.knownBase; + options.knownBasesource := hom.preImage.stabChainOptions.knownBase; elif IsBound( Parent(hom.source).stabChainOptions ) and IsBound( Parent(hom.source).stabChainOptions.knownBase ) then @@ -845,8 +848,8 @@ := Parent(hom.source).stabChainOptions.knownBase; elif IsBound( hom.source.stabChain ) then options.knownBasesource := Base( hom.source ); - elif IsBound( hom.preimage.stabChain ) then - options.knownBasesource := Base( hom.preimage ); + elif IsBound( hom.preImage.stabChain ) then + options.knownBasesource := Base( hom.preImage ); elif IsBound( Parent(hom.source).stabChain ) then options.knownBasesource := Base( Parent(hom.source) ); fi; Prereq: 3.1.1.2 --- lib/sq.g 1995/12/21 15:30:42 +++ lib/sq.g 1996/06/11 16:50:12 @@ -3,7 +3,7 @@ #A sq.g GAP library Frank Celler #A Alexander Wegner ## -#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ +#A @(#)$Id: 1.html,v 1.2 2004/04/21 15:06:55 felsch Exp $ ## #Y Copyright 1990-1992, Lehrstuhl D fuer Mathematik, RWTH Aachen, Germany ## @@ -11,6 +11,9 @@ ## groups. ## #H $Log: 1.html,v $ #H Revision 1.2 2004/04/21 15:06:55 felsch #H Corrected links in the Forum Archive pages. VF #H #H Revision 1.1.1.1 2004/04/20 13:39:39 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.1.1.3 1996/06/11 14:50:08 mschoene +#H fixed '.preimage' to '.preImage' +#H #H Revision 3.1.1.2 1994/10/07 13:10:39 fceller #H added 'SQOps.AgGroup' #H @@ -126,7 +129,7 @@ a.naturalHomomorphism.isMapping := true; a.naturalHomomorphism.isSurjective := true; a.naturalHomomorphism.image := a; - a.naturalHomomorphism.preimage := Q.source; + a.naturalHomomorphism.preImage := Q.source; fi; a.sqSource := Q.source; return a; END OF bugfix13.dif ________________________________________________________