Skip to content

Commit

Permalink
ENHANCE: New method for IntermediateSubgroups using maximal subgroups
Browse files Browse the repository at this point in the history
  • Loading branch information
hulpke committed Aug 19, 2016
1 parent aa5792d commit d0eb62e
Showing 1 changed file with 62 additions and 1 deletion.
63 changes: 62 additions & 1 deletion lib/grplatt.gi
Original file line number Diff line number Diff line change
Expand Up @@ -2306,9 +2306,70 @@ local rt,op,a,l,i,j,u,max,subs;
return rec(subgroups:=List(a,i->ClosureGroup(U,rt{i})),inclusions:=max);
end);

InstallMethod(IntermediateSubgroups,"blocks for coset operation",
IsIdenticalObj, [IsGroup,IsGroup],
1, # better than previous if index larger
function(G,U)
local uind,subs,incl,i,j,k,m,gens,t,c,p;
if (not IsFinite(G)) and Index(G,U)=infinity then
TryNextMethod();
fi;
uind:=IndexNC(G,U);
if uind<200 then
TryNextMethod();
fi;
subs:=[G]; #subgroups so far
incl:=[];
i:=1;
gens:=SmallGeneratingSet(U);
while i<=Length(subs) do
# find all maximals containing U
m:=MaximalSubgroupClassReps(subs[i]);
m:=Filtered(m,x->IndexNC(subs[i],U) mod IndexNC(subs[i],x)=0);
Info(InfoLattice,1,"Subgroup ",i,", Order ",Size(subs[i]),": ",Length(m),
" maxes");
for j in m do
t:=RightTransversal(subs[i],Normalizer(subs[i],j)); # conjugates
for k in t do
if ForAll(gens,x->k*x/k in j) then
# U is contained in j^k
c:=j^k;
Assert(1,IsSubset(c,U));
#is it U?
if uind=IndexNC(G,c) then
Add(incl,[0,i]);
else
# is it new?
p:=PositionProperty(subs,x->IndexNC(G,x)=IndexNC(G,c) and
ForAll(GeneratorsOfGroup(c),y->y in x));
if p<>fail then
Add(incl,[p,i]);
else
Add(subs,c);
Add(incl,[Length(subs),i]);
fi;
fi;
fi;
od;
od;
i:=i+1;
od;
# rearrange
c:=List(subs,x->IndexNC(x,U));
p:=Sortex(c);
subs:=Permuted(subs,p);
subs:=subs{[1..Length(subs)-1]}; # remove whole group
for i in incl do
if i[1]>0 then i[1]:=i[1]^p; fi;
if i[2]>0 then i[2]:=i[2]^p; fi;
od;
Sort(incl);
return rec(inclusions:=incl,subgroups:=subs);
end);

InstallMethod(IntermediateSubgroups,"normal case",
IsIdenticalObj, [IsGroup,IsGroup],
1,# better than the previous method
2,# better than the previous methods
function(G,N)
local hom,F,cl,cls,lcl,sub,sel,unsel,i,j,rmNonMax;
if not IsNormal(G,N) then
Expand Down

0 comments on commit d0eb62e

Please sign in to comment.