From b6ecbbea55d080881202c9af7067af9c09399b97 Mon Sep 17 00:00:00 2001 From: Alexander Hulpke Date: Sun, 30 Dec 2018 10:57:05 +0200 Subject: [PATCH 1/3] FIX: Fitting free data use in clashom If the group has been obtained as subgroup from a fitting free computation, the data will be inherited and might not guarantee that the factor group really is fitting free. Test/resolve this. This fixes #3139 --- lib/clashom.gi | 9 ++++++++- tst/testbugfix/2018-12-30-clashom.tst | 5 +++++ 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 tst/testbugfix/2018-12-30-clashom.tst diff --git a/lib/clashom.gi b/lib/clashom.gi index 2b0efc2f56..60bce20676 100644 --- a/lib/clashom.gi +++ b/lib/clashom.gi @@ -2398,8 +2398,15 @@ local r, #radical hom:=ser.factorhom; ntrihom:=true; f:=Image(hom); + # if lift setup is inherited, f might not be trivial-fitting + if Size(RadicalGroup(f))>1 then + # this is proper recursion + cl:=ConjugacyClasses(f:onlysizes:=false); + cl:=List(cl,x->[Representative(x),Centralizer(x)]); + else # we need centralizers - cl:=ConjugacyClassesFittingFreeGroup(f:onlysizes:=false); + cl:=ConjugacyClassesFittingFreeGroup(f:onlysizes:=false); + fi; fants:=Filtered(NormalSubgroups(f),x->Size(x)>1 and Size(x) wreathy := WreathProduct(SymmetricGroup(2),SymmetricGroup(5));; +gap> classes := ConjugacyClasses(wreathy);; +gap> badsubgroup := StabilizerOfExternalSet( classes[2] );; +gap> ConjugacyClasses( badsubgroup );; From ee00a7768f1a2799fde9e94d6a1189bb99d2a6a8 Mon Sep 17 00:00:00 2001 From: Alexander Hulpke Date: Tue, 1 Jan 2019 13:47:16 +0200 Subject: [PATCH 2/3] FIX: Only store induced FF setup as own, if it is I.e. do not store an FF setup if the factor has a radical -- code often assume that the given radical factor is indeed fitting free. Subsequent manual changes --- lib/fitfree.gi | 20 +++++++++++--------- lib/grp.gd | 9 +++++---- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/lib/fitfree.gi b/lib/fitfree.gi index 5c8047d55b..94357fb42b 100644 --- a/lib/fitfree.gi +++ b/lib/fitfree.gi @@ -191,15 +191,17 @@ local ffs,hom,U,rest,ker,r,p,l,i,depths; U!.cachedFFS:=[[ffs,r]]; - # FittingFreeLiftSetup for U - r:=rec(inducedfrom:=ffs, - pcgs:=ipcgs, - depths:=depths, - pcisom:=ffs.pcisom, - radical:=ker, - factorhom:=rest - ); - SetFittingFreeLiftSetup(U,r); + # FittingFreeLiftSetup for U, if correct + if Size(RadicalGroup(Image(rest,U)))=1 then + r:=rec(inducedfrom:=ffs, + pcgs:=ipcgs, + depths:=depths, + pcisom:=ffs.pcisom, + radical:=ker, + factorhom:=rest + ); + SetFittingFreeLiftSetup(U,r); + fi; return U; diff --git a/lib/grp.gd b/lib/grp.gd index 8f789025f7..baec2a59d3 100644 --- a/lib/grp.gd +++ b/lib/grp.gd @@ -1,7 +1,8 @@ ############################################################################# ## ## This file is part of GAP, a system for computational discrete algebra. -## This files's authors include Thomas Breuer, Frank Celler, Bettina Eick, Heiko Theißen. +## This files's authors include Thomas Breuer, Frank Celler, Bettina Eick, +## Heiko Theißen. ## ## Copyright of GAP belongs to its developers, whose names are too numerous ## to list here. Please refer to the COPYRIGHT file for details. @@ -1875,8 +1876,8 @@ DeclareAttribute( "MinimalNormalSubgroups", IsGroup ); ## returns a list of all normal subgroups of G. ## g:=SymmetricGroup(4);;NormalSubgroups(g); -## [ Sym( [ 1 .. 4 ] ), Alt( [ 1 .. 4 ] ), Group([ (1,4)(2,3), (1,2) -## (3,4) ]), Group(()) ] +## [ Sym( [ 1 .. 4 ] ), Alt( [ 1 .. 4 ] ), Group([ (1,4)(2,3), (1,3) +## (2,4) ]), Group(()) ] ## ]]> ##

## The algorithm for the computation of normal subgroups is described in @@ -3232,7 +3233,7 @@ DeclareOperation("CentralizerModulo", [IsGroup,IsGroup,IsObject]); ## [ , Group([ y3, y*y3 ]), Group([ y*y3 ]) ] ## gap> g:=SymmetricGroup(4);; ## gap> PCentralSeries(g,2); -## [ Sym( [ 1 .. 4 ] ), Group([ (1,2,3), (1,3,4) ]) ] +## [ Sym( [ 1 .. 4 ] ), Group([ (1,2,3), (2,3,4) ]) ] ## ]]> ## ## From 038098ed8c163b11f0535721ec37e4081743098d Mon Sep 17 00:00:00 2001 From: Alexander Hulpke Date: Sun, 30 Dec 2018 11:24:02 +0200 Subject: [PATCH 3/3] ENHANCE: Recode assertion to avoid recursion trap This fixes #3140 --- lib/fitfree.gi | 2 +- lib/matrix.gi | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/fitfree.gi b/lib/fitfree.gi index 94357fb42b..62203b7fef 100644 --- a/lib/fitfree.gi +++ b/lib/fitfree.gi @@ -138,7 +138,7 @@ local ffs,hom,U,rest,ker,r,p,l,i,depths; for i in U{[1..Length(U)-1]} do # last one is length+1 p:=PositionProperty(r,x->x>=i); if p<>fail and p<=Length(ipcgs) and not p in l then - Add(l,p); + Add(l,p); fi; od; Add(l,Length(ipcgs)+1); diff --git a/lib/matrix.gi b/lib/matrix.gi index 0403e4c0e1..4466d2284f 100644 --- a/lib/matrix.gi +++ b/lib/matrix.gi @@ -473,8 +473,16 @@ BindGlobal( "Matrix_CharacteristicPolynomialSameField", vec[i] := zero; fi; od; - Assert(3, IsZero(Value(cp,imat))); Assert(2, Length(CoefficientsOfUnivariatePolynomial(cp)) = n+1); + if AssertionLevel()>=3 then + # cannot use Value(cp,imat), as this uses characteristic polynomial + n:=Zero(imat); + one:=One(imat); + for i in Reversed(CoefficientsOfUnivariatePolynomial(cp)) do + n:=n*imat+(i*one); + od; + Assert(3,IsZero(n)); + fi; Info(InfoMatrix,1,"Characteristic Polynomial returns ", cp); return cp; end );