Skip to content

Commit

Permalink
ENHANCE: If radical is elementary abelian, use subspace stabilizer code.
Browse files Browse the repository at this point in the history
ENHANCE: Declare `SpaceAndOrbitStabilizer'
  • Loading branch information
hulpke committed Nov 5, 2016
1 parent 2dcdf10 commit 07ebece
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 15 deletions.
41 changes: 28 additions & 13 deletions lib/autsr.gi
Original file line number Diff line number Diff line change
Expand Up @@ -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)<Size(r));
ind:=List(ind,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);
Expand Down
3 changes: 3 additions & 0 deletions lib/grppcaut.gd
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,15 @@
#Y Copyright (C) 2002 The GAP Group
##

DeclareGlobalFunction("SpaceAndOrbitStabilizer");

#############################################################################
##
#P IsFrattiniFree
##
DeclareProperty( "IsFrattiniFree", IsGroup );


DeclareGlobalFunction("AutomorphismGroupNilpotentGroup");
DeclareGlobalFunction("AutomorphismGroupSolvableGroup");
DeclareGlobalFunction("AutomorphismGroupFrattFreeGroup");
Expand Down
4 changes: 2 additions & 2 deletions lib/grppcaut.gi
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 07ebece

Please sign in to comment.