diff --git a/lib/autsr.gi b/lib/autsr.gi index 6437e81c79..a9b4a71cca 100644 --- a/lib/autsr.gi +++ b/lib/autsr.gi @@ -597,19 +597,34 @@ local ff,r,d,ser,u,v,i,j,k,p,bd,e,gens,lhom,M,N,hom,Q,Mim,q,ocr,split,MPcgs, then if rada=fail then - ind:=IsomorphismPcGroup(r); - rada:=AutomorphismGroup(Image(ind,r):someCharacteristics:=fail,actbase:=fail); - # we only consider those homomorphism that stabilize the series we use - for k in List(ser,x->Image(ind,x)) do - if ForAny(GeneratorsOfGroup(rada),x->Image(x,k)<>k) then - Info(InfoMorph,3,"radical automorphism stabilizer"); - NiceMonomorphism(rada:autactbase:=fail,someCharacteristics:=fail); - rada:=Stabilizer(rada,k,asAutom); - fi; - od; - # move back to bad degree - rada:=Group(List(GeneratorsOfGroup(rada), - x-> InducedAutomorphism(InverseGeneralMapping(ind),x))); + if IsElementaryAbelian(r) and Size(r)>1 then + B:=Pcgs(r); + rf:=GF(RelativeOrders(B)[1]); + ind:=Filtered(ser,x->IsSubset(r,x) and Size(x)>1 and Size(x)List(GeneratorsOfGroup(x),y->ExponentsOfPcElement(B,y))); + ind:=List(ind,x->x*One(rf)); + ind:=SpaceAndOrbitStabilizer(Length(B),rf,ind,[]); + rada:=List(GeneratorsOfGroup(ind),x-> + GroupHomomorphismByImagesNC(r,r,B,List(x,y->PcElementByExponents(B,List(y,Int))))); + rada:=Group(rada); + SetIsGroupOfAutomorphismsFiniteGroup(rada,true); + NiceMonomorphism(rada:autactbase:=fail,someCharacteristics:=fail); + else + ind:=IsomorphismPcGroup(r); + rada:=AutomorphismGroup(Image(ind,r):someCharacteristics:=fail,actbase:=fail); + # we only consider those homomorphism that stabilize the series we use + for k in List(ser,x->Image(ind,x)) do + if ForAny(GeneratorsOfGroup(rada),x->Image(x,k)<>k) then + Info(InfoMorph,3,"radical automorphism stabilizer"); + NiceMonomorphism(rada:autactbase:=fail,someCharacteristics:=fail); + rada:=Stabilizer(rada,k,asAutom); + fi; + od; + # move back to bad degree + rada:=Group(List(GeneratorsOfGroup(rada), + x-> InducedAutomorphism(InverseGeneralMapping(ind),x))); + + fi; fi; rf:=Image(hom,r); diff --git a/lib/grppcaut.gd b/lib/grppcaut.gd index 9129fb20cb..ba7f64d34b 100644 --- a/lib/grppcaut.gd +++ b/lib/grppcaut.gd @@ -7,12 +7,15 @@ #Y Copyright (C) 2002 The GAP Group ## +DeclareGlobalFunction("SpaceAndOrbitStabilizer"); + ############################################################################# ## #P IsFrattiniFree ## DeclareProperty( "IsFrattiniFree", IsGroup ); + DeclareGlobalFunction("AutomorphismGroupNilpotentGroup"); DeclareGlobalFunction("AutomorphismGroupSolvableGroup"); DeclareGlobalFunction("AutomorphismGroupFrattFreeGroup"); diff --git a/lib/grppcaut.gi b/lib/grppcaut.gi index 3e42869ca8..c85068e225 100644 --- a/lib/grppcaut.gi +++ b/lib/grppcaut.gi @@ -1018,7 +1018,7 @@ local bas,n,one,new,a,b,g; return new; end; -SpaceAndOrbitStabilizer:=function(n,field,ospaces,osporb) +InstallGlobalFunction(SpaceAndOrbitStabilizer,function(n,field,ospaces,osporb) local spaceincl,outvecs,l,sub,yet,i,j,k,s,t,new,incl,min,rans,sofar,done, gens,one,spl,ngens,m,sz,a,sporb,notyet,canonicalform,doonedim,spaces; @@ -1226,7 +1226,7 @@ local spaceincl,outvecs,l,sub,yet,i,j,k,s,t,new,incl,min,rans,sofar,done, od; fi; return a; -end; +end); PcgsCharacteristicTails:=function(G,aut) local gens,ser,new,pcgs,f,mo,i,j,k,s;