Skip to content

Commit

Permalink
Moved characteristic series in function
Browse files Browse the repository at this point in the history
So that it can be used in other place. (This is a particular characteristic
series used in automorphism group.)
  • Loading branch information
hulpke committed Dec 8, 2023
1 parent 6accf59 commit 25a58b0
Showing 1 changed file with 63 additions and 47 deletions.
110 changes: 63 additions & 47 deletions lib/autsr.gi
Original file line number Diff line number Diff line change
Expand Up @@ -695,6 +695,55 @@ local fp,n,pat,pools,i,sel;
return pools;
end);

# form a characterististic series through radical with elab factors
BindGlobal("AGSRCharacteristicSeries",function(G,r)
local somechar,d,i,j,u,v;
d:=Filtered(StructuralSeriesOfGroup(G),x->IsSubset(r,x));
# refine
d:=RefinedSubnormalSeries(d,Centre(G));
d:=RefinedSubnormalSeries(d,Centre(r));
somechar:=ValueOption("someCharacteristics");
if somechar<>fail then
if IsRecord(somechar) then
somechar:=somechar.subgroups;
fi;
for i in somechar do
d:=RefinedSubnormalSeries(d,i);
od;
fi;

for i in PrimeDivisors(Size(r)) do
u:=PCore(r,i);
if Size(u)>1 then
d:=RefinedSubnormalSeries(d,u);
j:=1;
repeat
v:=Agemo(u,i,j);
if Size(v)>1 then
d:=RefinedSubnormalSeries(d,v);
fi;
j:=j+1;
until Size(v)=1;
j:=1;
repeat
if Size(u)>=2^24 then
v:=u; # bail out as method for `Omega` will do so.
else
v:=Omega(u,i,j);
if Size(v)<Size(u) then
d:=RefinedSubnormalSeries(d,v);
fi;
j:=j+1;
fi;

until Size(v)=Size(u);
fi;

od;
Assert(1,ForAll([1..Length(d)-1],x->Size(d[x])<>Size(d[x+1])));
return d;
end);

# main automorphism method -- currently still using factor groups, but
# nevertheless faster..

Expand Down Expand Up @@ -814,64 +863,31 @@ local ff,r,d,ser,u,v,i,j,k,p,bd,e,gens,lhom,M,N,hom,Q,Mim,q,ocr,split,MPcgs,
ff:=FittingFreeLiftSetup(G);
r:=ff.radical;
rlgf:=LGFirst(SpecialPcgs(r));


# find series through r
somechar:=ValueOption("someCharacteristics");

# derived and then primes and then elementary abelian
d:=ValueOption("series");
if d=fail then
d:=Filtered(StructuralSeriesOfGroup(G),x->IsSubset(r,x));
# refine
d:=RefinedSubnormalSeries(d,Centre(G));
d:=RefinedSubnormalSeries(d,Centre(r));
scharorb:=fail;
somechar:=ValueOption("someCharacteristics");
if somechar<>fail then
if IsRecord(somechar) then
if IsBound(somechar.orbits) then
scharorb:=somechar.orbits;
fi;
somechar:=somechar.subgroups;
fi;
for i in somechar do
d:=RefinedSubnormalSeries(d,i);
od;
fi;
for i in PrimeDivisors(Size(r)) do
u:=PCore(r,i);
if Size(u)>1 then
d:=RefinedSubnormalSeries(d,u);
j:=1;
repeat
v:=Agemo(u,i,j);
if Size(v)>1 then
d:=RefinedSubnormalSeries(d,v);
fi;
j:=j+1;
until Size(v)=1;
j:=1;
repeat
if Size(u)>=2^24 then
v:=u; # bail out as method for `Omega` will do so.
else
v:=Omega(u,i,j);
if Size(v)<Size(u) then
d:=RefinedSubnormalSeries(d,v);
fi;
j:=j+1;
fi;

until Size(v)=Size(u);
fi;

od;
Assert(1,ForAll([1..Length(d)-1],x->Size(d[x])<>Size(d[x+1])));

d:=AGSRCharacteristicSeries(G,r:someCharacteristics:=somechar);
d:=Reversed(d);
else
d:=ShallowCopy(d);
SortBy(d,Size); # in case reversed order....
fi;

scharorb:=fail;
if somechar<>fail then
if IsRecord(somechar) then
if IsBound(somechar.orbits) then
scharorb:=somechar.orbits;
fi;
somechar:=somechar.subgroups;
fi;
fi;

# now go up in series if elementary abelian to avoid too many tiny steps
u:=1; # last group in the series to be used
i:=2;
Expand Down

0 comments on commit 25a58b0

Please sign in to comment.