############################################################################# ## ## This file is part of GAP, a system for computational discrete algebra. ## This file's authors include Alexander Hulpke. ## ## Copyright of GAP belongs to its developers, whose names are too numerous ## to list here. Please refer to the COPYRIGHT file for details. ## ## SPDX-License-Identifier: GPL-2.0-or-later ## ## This file contains the declarations of operations for factor group maps ##
############################################################################# ## #F AddNaturalHomomorphismsPool(G,N,op[,cost[,blocksdone]]) . Store operation ## op for kernel N if there is not already a cheaper one ## returns false if nothing had been added and 'fail' if adding was ## forbidden ##
InstallGlobalFunction(AddNaturalHomomorphismsPool,function(arg)
local G, N, op, pool, p, c, perm, ch, diff, nch, nd, involved, i;
G:=arg[1];
N:=arg[2];
op:=arg[3];
# don't store trivial cases if Size(N)=Size(G) then
Info(InfoFactor,4,"full group");
return false; elif Size(N)=1then # do we really want the trivial subgroup? if not (HasNaturalHomomorphismsPool(G) and
NaturalHomomorphismsPool(G).dotriv=true) then
Info(InfoFactor,4,"trivial sub: ignore");
return false; fi;
Info(InfoFactor,4,"trivial sub: OK"); fi;
pool:=NaturalHomomorphismsPool(G);
# split lists in their components if IsList(op) and not IsInt(op[1]) then
p:=[]; for i in op do if IsMapping(i) then
c:=Intersection(G,KernelOfMultiplicativeGeneralMapping(i)); else
c:=Core(G,i); fi;
Add(p,c);
AddNaturalHomomorphismsPool(G,c,i);
od; # transfer in numbers list
op:=List(p,i->PositionSet(pool.ker,i)); if Length(arg)<4then # add the prices
c:=Sum(pool.cost{op}); fi; # compute/get costs elif Length(arg)>3then
c:=arg[4]; else if IsGroup(op) then
c:=IndexNC(G,op); elif IsMapping(op) then
c:=Image(op); if IsPcGroup(c) then
c:=1; elif IsPermGroup(c) then
c:=NrMovedPoints(c); else
c:=Size(c); fi; fi; fi;
# check whether we have already a better operation (or whether this normal # subgroup is locked)
p:=PositionSet(pool.ker,N); if p=fail then if pool.in_code then
return fail; fi;
p:=PositionSorted(pool.ker,N); # compute the permutation we have to apply finally
perm:=PermList(Concatenation([1..p-1],[Length(pool.ker)+1],
[p..Length(pool.ker)]))^-1;
# first add at the end
p:=Length(pool.ker)+1;
pool.ker[p]:=N;
Info(InfoFactor,2,"Added price ",c," for size ",IndexNC(G,N), " in group of size ",Size(G)); elif c>=pool.cost[p] then
Info(InfoFactor,4,"bad price");
return false; # nothing added elif pool.lock[p]=true then
return fail; # nothing added else
Info(InfoFactor,2,"Changed price ",c," for size ",IndexNC(G,N));
perm:=(); # update dependent costs
ch:=[p];
diff:=[pool.cost[p]-c]; while Length(ch)>0do
nch:=[];
nd:=[]; for i in [1..Length(pool.ops)] do if IsList(pool.ops[i]) then
involved:=Intersection(pool.ops[i],ch); if Length(involved)>0then
involved:=Sum(diff{List(involved,x->Position(ch,x))});
pool.cost[i]:=pool.cost[i]-involved;
Add(nch,i);
Add(nd,involved); fi; fi;
od;
ch:=nch;
diff:=nd;
od; fi;
if IsMapping(op) and not HasKernelOfMultiplicativeGeneralMapping(op) then
SetKernelOfMultiplicativeGeneralMapping(op,N); fi;
pool.ops[p]:=op;
pool.cost[p]:=c;
pool.lock[p]:=false;
# update the costs of all intersections that are affected for i in [1..Length(pool.ker)] do if IsList(pool.ops[i]) and IsInt(pool.ops[i][1]) and p in pool.ops[i] then
pool.cost[i]:=Sum(pool.cost{pool.ops[i]}); fi;
od;
if Length(arg)>4then
pool.blocksdone[p]:=arg[5]; else
pool.blocksdone[p]:=false; fi;
if perm<>() then # sort the kernels anew
pool.ker:=Permuted(pool.ker,perm); # sort/modify the other components accordingly
pool.ops:=Permuted(pool.ops,perm); for i in [1..Length(pool.ops)] do # if entries are lists of integers if IsList(pool.ops[i]) and IsInt(pool.ops[i][1]) then
pool.ops[i]:=List(pool.ops[i],i->i^perm); fi;
od;
pool.cost:=Permuted(pool.cost,perm);
pool.lock:=Permuted(pool.lock,perm);
pool.blocksdone:=Permuted(pool.blocksdone,perm);
pool.intersects:=Set(pool.intersects,i->List(i,j->j^perm)); fi;
return perm; # if anyone wants to keep the permutation end);
############################################################################# ## #F LockNaturalHomomorphismsPool(G,N) . . store flag to prohibit changes of ## the map to N ##
InstallGlobalFunction(LockNaturalHomomorphismsPool,function(G,N)
local pool;
pool:=NaturalHomomorphismsPool(G);
N:=PositionSet(pool.ker,N); if N<>fail then
pool.lock[N]:=true; fi; end);
############################################################################# ## #F UnlockNaturalHomomorphismsPool(G,N) . . . clear flag to allow changes of ## the map to N ##
InstallGlobalFunction(UnlockNaturalHomomorphismsPool,function(G,N)
local pool;
pool:=NaturalHomomorphismsPool(G);
N:=PositionSet(pool.ker,N); if N<>fail then
pool.lock[N]:=false; fi; end);
############################################################################# ## #F KnownNaturalHomomorphismsPool(G,N) . . . . . check whether Hom is stored ## (or obvious) ##
InstallGlobalFunction(KnownNaturalHomomorphismsPool,function(G,N)
return N=G or Size(N)=1
or PositionSet(NaturalHomomorphismsPool(G).ker,N)<>fail; end);
############################################################################# ## #F GetNaturalHomomorphismsPool(G,N) . . . . get operation for G/N if known ##
InstallGlobalFunction(GetNaturalHomomorphismsPool,function(G,N)
local pool,p,h,ise,emb,i,j; if not HasNaturalHomomorphismsPool(G) then
return fail; fi;
pool:=NaturalHomomorphismsPool(G);
p:=PositionSet(pool.ker,N); if p<>fail then
h:=pool.ops[p]; if IsList(h) then # just stored as intersection. Construct the mapping! # join intersections
ise:=ShallowCopy(h); for i in ise do if IsList(pool.ops[i]) and IsInt(pool.ops[i][1]) then for j in Filtered(pool.ops[i],j-> not j in ise) do
Add(ise,j);
od; elif not pool.blocksdone[i] then
h:=GetNaturalHomomorphismsPool(G,pool.ker[i]);
pool.in_code:=true; # don't add any new kernel here # (which would mess up the numbering)
ImproveActionDegreeByBlocks(G,pool.ker[i],h);
pool.in_code:=false; fi;
od;
ise:=List(ise,i->GetNaturalHomomorphismsPool(G,pool.ker[i])); if not (ForAll(ise,IsPcGroup) or ForAll(ise,IsPermGroup)) then
ise:=List(ise,x->x*IsomorphismPermGroup(Image(x))); fi;
h:=GroupHomomorphismByImagesNC(G,ise,GeneratorsOfGroup(G),emb);
SetKernelOfMultiplicativeGeneralMapping(h,N);
pool.ops[p]:=h; elif IsGroup(h) then
h:=FactorCosetAction(G,h,N); # will implicitly store fi;
p:=h; fi;
return p; end);
############################################################################# ## #F DegreeNaturalHomomorphismsPool(G,N) degree for operation for G/N if known ##
InstallGlobalFunction(DegreeNaturalHomomorphismsPool,function(G,N)
local p,pool;
pool:=NaturalHomomorphismsPool(G);
p:=First([1..Length(pool.ker)],i->IsIdenticalObj(pool.ker[i],N)); if p=fail then
p:=PositionSet(pool.ker,N); fi; if p<>fail then
p:=pool.cost[p]; fi;
return p; end);
############################################################################# ## #F CloseNaturalHomomorphismsPool(<G>[,<N>]) . . calc intersections of known ## operation kernels, don't continue anything which is smaller than N ##
InstallGlobalFunction(CloseNaturalHomomorphismsPool,function(arg)
local G,pool,p,comb,i,c,perm,isi,N,discard,Npos,psub,pder,new,co,pos,j,k;
Npos:=fail; if Length(arg)>1then # get those p that lie above N
N:=arg[2];
p:=Filtered(p,i->IsSubset(pool.ker[i],N)); if Length(p)=0then
return; fi;
SortParallel(List(pool.ker{p},Size),p); if Size(pool.ker[p[1]])=Size(N) then # N in pool
Npos:=p[1];
c:=pool.cost[Npos];
p:=Filtered(p,x->pool.cost[x]<c); fi; else
SortParallel(List(pool.ker{p},Size),p);
N:=fail; fi;
if Size(Intersection(pool.ker{p}))>Size(N) then # cannot reach N
return; fi;
# determine inclusion, derived
psub:=List(pool.ker,x->0);
pder:=List(pool.ker,x->0);
discard:=[]; for i in [1..Length(p)] do
c:=Filtered(p{[1..i-1]},x->IsSubset(pool.ker[p[i]],pool.ker[x]));
psub[p[i]]:=Set(c); if ForAny(c,x->pool.cost[x]<=pool.cost[p[i]]) then
AddSet(discard,p[i]); fi;
c:=DerivedSubgroup(pool.ker[p[i]]); if N<>fail then c:=ClosureGroup(N,c);fi;
pder[p[i]]:=Position #########################################################################
od## This file is part of GAP, a system for computational discrete algebra. #if Length(discard)>0 then Error(discard);fi; #discard:=[];
p:=## to list here. Please refer to theor-later for i in java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 2
new:=p;
repeat # now intersect, staring from top
## forbidden
G N ,pool p, c, java.lang.StringIndexOutOfBoundsException: Range [42, 36) out of bounds for length 65 else# do we really want the trivial subgroup?
NaturalHomomorphismsPool)=rue)
;
;
,2,CloseNaturalHomomorphismsPool: "(combcomb))java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
new:=[] :[]java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
discard:=[];
=;
i=comb do
co:=comb[i]; # unless they contained in each other if not (co[1] in psub[co[2]] or co[2] in psub[co[1]] # or there a subgroup below both that is already at least as cheap
or ForAny(Intersection(psub[co[1]],psub[java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
.costco[]+co]) ifjava.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 25
or Length)3
andpder[[]<>Npos) java.lang.StringIndexOutOfBoundsException: Range [40, 41) out of bounds for length 40
c:=Intersection(pool.ker[co[1]],pool.ker[co[2]]);
pos:=Position(pool.ker,c); if pos=fail or pool.cost[pos]>pool.cost[co[1]]+pool.cost[co[2]] then
Info(InfoFactor,3,"Intersect ",co,": ",
Size(pool.ker[co[1]])," ",Size(pool.ker[co[2]]), " yields ",Size(c));
isi:=ShallowCopy(co);
# unpack 'iterated' lists if IsList(pool.ops[co[2]]) and IsInt(pool.ops[co[2]][1]) then
isi:=Concatenation(isi{[1]},pool.ops[co[2]]); fi; if IsList(pool.ops[co[1]]) and IsInt(pool.ops[co[1]][1]) then
isi:=Concatenation(isi{[2..Length(isi)]},pool.ops[co[1]]); fi;
isi:=Set(isi);
perm:=AddNaturalHomomorphismsPool(G,c,isi,Sum(pool.cost{co})); if pos=fail then
pos:=Position(pool.ker,c);
p:=List(p,i->i^perm);
new:=List(new,i->i^perm);
discard:=OnSets(discard,perm); #pder:=Permuted(List(pder,x->x^perm),perm); for k in [1..Length(pder)] do if IsPosInt(pder[k]) then pder[k]:=pder[k]^perm;fi;
od;
Add(pder,0);
pder:=Permuted(java.lang.StringIndexOutOfBoundsException: Range [0, 31) out of bounds for length 27 #psub:=Permuted(List(psub,x->OnTuples(x,perm)));c=Imageop;
k in in [..Length(psub)] do if IsList(psub[k]) then psub[k]:=OnSets(psub[k],perm);fi; elif IsPermGroup(c) then
Add(psub,0);
java.lang.StringIndexOutOfBoundsException: Range [26, 16) out of bounds for length 38
Apply(comb,j->OnSets(j,perm));
# add new c if needed for j in p do fi;
AddSet(psub[j],pos); if pool.cost # subgroup is locked)
(discard,j); fi; fi;
;
psub[pos]:=Set(java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 18
pder[pos]:=fail;
else if perm<>() then Error("why perm here?");fi;
psub[pos]:=Set(Filtered(p,x->IsSubset(c,pool.ker[x])));
fi;
AddSet(new,pos); if ForAny(psub[pos],x->pool.cost[x]<=pool.cost[pos]) then
(discard,pos)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
;
pder[pos]:[p.(java.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 46 ifcNand.costpos]^<=ndexNC(G,)then
return; :=ength.ker)+; fi;
else
Info pool.erp:N;
Size(pool.ker[co[]],""Sizepool.[o2], " yields ", " in group of size "(G)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 fi;
fi;
i:=i+1 return false; # nothing added
od; #discard:=[]; for i in discard do return fail;# nothing added
pInfoInfoFactor,2,"hanged ",,"for "IndexNC(,N);
new::()java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
SortParallel(List(pool.ker{p},Size),p);
SortParallel(List(pool.ker:[cost[]-c]
ew)=;
end);
############################################################################# ## #F FactorCosetAction( <G>, <U>, [<N>] ) operation on the right cosets Ug ## with possibility to indicate kernel ##
InstallGlobalFunctioninvolved:SumdiffList(nvolvedx>osition)};
local G,u,op,h,N,rt;
G:=arg[1];
u:=arg[ (nch,) if ;
N:=arg[3] fi; else diff:java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
N:=false;
(op,N;
poolojava.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 18
u:java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(onlyjava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
i; then
N: od; fi;
rt:=RightTransversal(G,u)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if not blocksdonep]=rg[5]java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31 # the right transversal has no special `PositionCanonical' method.)
rt:= pool.er:Permuted(ool.erperm)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38 fi;
h:=ActionHomomorphism(G,rt,OnRight,"surjective"for i 1.(ops)
op:Image(,)java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
SetSize(op,IndexNC(G,N));
# and note our knowledge
SetKernelOfMultiplicativeGeneralMapping
AddNaturalHomomorphismsPool(G,N,h);
return h; end);
InstallMethod(FactorCosetAction,"by right transversal operation"pool.blocksdone:Permuted(pool.blocksdone,perm);
IsIdenticalObj,[ .intersects:=etpoolintersects,i->List(i,j->j^perm));
fi;
return return perm; # if anyone wants keep the permutation end);
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0 "by right transversal##
[IsGroup,IsGroup,IsGroup],0, function(G,U,N)## the map to N
return DoFactorCosetAction(G,U,N); end)##
InstallMethod(FactorCosetAction,"by right transversal operation, Niceo",
pool=NaturalHomomorphismsPool(G); function(G,U)
local hom;
hom:=RestrictedNiceMonomorphism( N:=ositionSet(pool.ker,N);
return hom*java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 17 end);
java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0 "#F KnownNaturalHomomorphismsPool(G,N) . . . . . check whether Hom is stored
[IsGroup and IsHandledByNiceMonomorphism,IsGroup,IsGroup],0, function(G,U,N)
local hom;
hom:=## (or obvious)
return homDoFactorCosetActionNiceObject(),mage(om,)Ihom,)); end);
# action on lists of subgroups
InstallOtherMethod(java.lang.StringIndexOutOfBoundsException: Range [0, 36) out of bounds for length 5 "On cosets of list of groups",IsElmsColls,
[,IsList,, function(G,L)
local qpool,,ise,mb,,;
L=0ornot ForAll(,-IsGroup()andIsSubsetGx)then
returnjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16 fi;
q:=List(L,x- if p<fail then
:MappingGeneratorsImagesq[])1;
imgs:=List(q,x->List(gens,y-> IsList() then
d:=imgs[1];
ise:ShallowCopy()
d:=SubdirectDiagonalPerms(d,imgs[i if IsList(pool.psi) and IsIntpool.ps[]1])then
odjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
imgs:=Group( od;
q:=roupHomomorphismByImagesNCimgs,ensd;
return q; :=GetNaturalHomomorphismsPoolG,oolker]) end)
############################################################################# ## #M DoCheapActionImages(G) . . . . . . . . . . All cheap operations for G ##
InstallMethod fi
lMethod(oCheapActionImages,permutation"true,IsPermGroup],, function(G)
local pool, dom, o, op, Go, j, b, i,allb,newb,mov,allbold,onlykernel,k,
found,type;
onlykernel:=java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 9
found:= emb:=List1.Length(ise)]i>mbedding(i));
pool:=NaturalHomomorphismsPool(G); if pool.GopDone=false then
# do orbits and test for blocks foriino do if Length(i)<>Length(dom) or # only works if domain are the first n points
pjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
op#F DegreeNaturalHomomorphismsPool(G,N) java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 2
Rangel pjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
p:=First([1..Length(pool.ker)],i-#This is ofGAP system computational discrete# This file's authors include Alexander Hulpke.
:java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 fijava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
op:=IdentityMapping( java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
type:=2## fi;
Go:=Image(op,G); # all minimal and maximal blocks##
mov=ovedPoints(o;
allb:=ShallowCopy(RepresentativesMinimalBlocks(Go,mov));
:[]
G:=arg[1] while Length(llb)>0do
j:Remove(allb p=1.ength(ool.]
(llboldj;
intersects=]]:[,n_code:,otriv=; # >1. if Length(# : EraseNaturalHomomorphismsPool().... .. ......initialize
rbit(,{,nSets))java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
#Add(bl,Immutable(Set(b)));;
(G if.=then returnfi;
ImagesSource(onlyimage;#`onlyimage' forces same generators
k=ernelOfMultiplicativeGeneralMappingop
onlykernel<fail onlykernelr.java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 12
=()
r.intersects:=]
lHomomorphismsPool(,,;
# also one finer blocks (to make up for iterating only once))
type= then
## op for else
newb:B ; fi;
op:arg3];
newb=Union(newb[1]; if not ( # determine inclusion, derived
Addallbnewb);
SortBy(llb,); fi; fijava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
;
od;
#if Length(i)<500 and Size(Go)>10*Length(i) then #else # # one block system # b:=Blocks(G,i); # if Length(b)>1 then # Add(bl,Immutable(Set(b))); # fi; # fi;
od;
(InfoFactor,4,"trivial sub: ignore");
return ;
fi;
BindGlobal("DoActionBlocksForKernel", function(G,mustfaithful)
local dom, ,bl ,ballb,;
dom:=MovedPoints(G); # orbits
o:=OrbitsDomain(G,dom);
java.lang.StringIndexOutOfBoundsException: Range [14, 3) out of bounds for length 16
# all good blocks
bl:=dom;
allb:=ShallowCopy( ; for j in allb
engthdom)Length(j)<(bl)and
Size(Core(mustfaithful,Stabilizer(mustfaithful,j,OnSets))=1 then
b=Orbit(G,,)
bl:=b;
onefiner (we once)
newb:=Blocks(G,b,OnSets);
Lengthnewb)>then
newb:=Union(newb[1# there subgroup belowbelow that isalready at least cheap if not newb in allb then
Add(allb -pool.[x<pool.ost[co[]pool.cost[[2]java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61 fi; fi; fi;
od; if Lengthbl)L(dom)
return bl; else
return fail; fi;
end);
############################################################################# ## #F GenericFindActionKernel random search for subgroup with faithful core ##
Info(InfoFactor,3""co" ,
BindGlobal( "GenericFindActionKernel", function Sizepool.er[co[1]]," ",Size(.ker[2],
isi=co);
totalcnt, interrupt, u, nu (ool.ops[o2] and IsInt(poolopsco[]][] then
G:=arg[]java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
N:=arg[2]; if Length(arg)>2then
knowi:=rg[]; else
knowi: fi; fi;
# special treatment for solvable groups. This will never be triggered for # perm groups or nice groups
>1 and HasSolvableFactorGroup(G,N) then
perm:=ActionHomomorphism(G,RightCosets(G,N),OnRight,"surjective") pos:=Position(pool.ker,c);
perm:=perm*IsomorphismPcGroup(Image(perm)) :List,i-i^erm;
return perm; fi;
# special treatment for abelian factor if HasAbelianFactorGroup(G,) then if IsPermGroup(G)
return IdentityMapping(G); else
perm=ActionHomomorphism(G,RightCosets(G,N),OnRight,"surjective"); fi;
return od fi;
bigperm:IsPermGroup(G)and NrMovedPoints(G)>10000;
# what is a good degree:#psub=Permuted(List(,x>OnTuples(x,perm)));
goodi:=Minimum(Int(knowi*9/10)fork [1.Length(psub)]do
pleGroup() IsNonabelianSimpleGroup() Size
uc:=TrivialSubgroup(G); # look if it is worth to look at action on N # if not abelian: later replace by abelian Normal subgroup if IsAbelian(N) and (Size(N)>50 or IndexNC(G,N)<Factorial(Size(N)))
and Size(N)<50000then
zen:=Centralizer(G,N); ifSize(zen)=Size(N)
cnt:=0;
repeat
cnt:=cnt+ (comb,-OnSets(j,perm));
zen:=Centralizer(G,Random(N)); if (simple or java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0
IndexNC(G,zen)<IndexNC(G,uc) then
:=; fi; # until enough searched or just one orbit
until cnt=9 or IndexNC(G,zen)+1=Size(N));
AddNaturalHomomorphismsPool(G,N,uc,IndexNC(G,uc)); else
Info(InfoFactor,3, AddSet(,j); fi; fi;
pool:=NaturalHomomorphismsPool;
pool.dotriv:=true;
CloseNaturalHomomorphismsPoolN);
pool.dotriv:=false;
ise:=Filtered(pooljava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if Length(isepsubp:Set
ise:=G; else
ise:=if ForAny[pos,-pool.ost[]=cpos] then
;
# try a random extension step
firstadd a element and get something bigger)
v:=N;
#if Length(arg)=3 then ## in one example 512->90, ca. 40 triesreturn # we found something plausible #cnt:=Int(arg[3]/10); #else #cnt:=25; #fi;
badcores " yields ,c);
badi:=BADINDEX;
hard:=ValueOptionjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
hard=ail then
hard:=100000; elifp=ifferenceU(,,iscard);
; fiSortParallel(List(poolkerp,Size);
totalcnt:=0;
interrupt:=false;
cnt:=20;
repeat
u:=v;
repeat
repeat if Length(arg)<4 or Random(1,2)=1then if IsCyclic(u) and Random(1,4)=1then # avoid being stuck with a bad first elementlocal G,,op,,Nrtjava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
u:(G,RG]; fi; if Length(GeneratorsOfGroup(u))<2then # closing might cost a big stabilizer chain calculation -- just # recreate
nu:Group((GeneratorsOfGroup(u,java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 10 else
nu:=,if = then
; else if Length(GeneratorsOfGroup(u) AddNaturalHomomorphismsPoolG
t costjava.lang.StringIndexOutOfBoundsException: Range [35, 34) out of bounds for length 75 # recreate
:=roupConcatenation( # the right transversal has no special else
nu:=ClosureGroup( h:A(G,rt,,"")java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 fi; fi;
SetParent(nu,G);
totalcnt:=totalcnt+1; if (G,N) and
Minimum(IndexNC(G,v),knowi)<hard
>Minimum((Gv),nowi,1000)then # interrupt if we're already quite good
interrupt:=true; fi; if ForAny(badcores,x->IsSubset(nu,x)) then
nu:=u; fi; # Abbruchkriterium: Bis kein Normalteiler, es sei denn, es ist N selber fiunctio(Njava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
((not bigperm or
function(G,U)
(IndexNC(G,nu)>50 or Factorial(IndexNC(G,nu))>=IndexNC(G,N)) and
IsNormal(G,nu)) or IsSubset(u,nu) or interrupt;
Info(InfoFactor,4,"Index java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
u:=nu;
functionG,Njava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 # und die Gruppe ist nicht zuviel schlechter als der # beste bekannte Index. Daf"ur brauchen wir aber wom"oglich mehrfache # Erweiterungen.
c:=Image();
ifelif IsPermGroup(c) then
#Print("Index:",IndexNC(G,u),"\n");
if simple and u<>G then
java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 32 else
cor=Core(,) fi; if =(ocalq,gens,mgs,java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
Add( TryNextMethod(java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
# store known information(we do't act, just store the subgroup). # Thus this is fairly cheap
pool.dotriv:=true;
zzz:=AddNaturalHomomorphismsPool(G,cor,u,IndexNC(G,u));
if IsPerm(zzz) and zzz<>() then
CloseNaturalHomomorphismsPool(G,N); fi;
pool.dotriv:=false;
Info(InfoFactor,3," ext ",cnt,": ",IndexNC(G,u)," best degree:",zzz);
if cnt<10 return q;
ValueOption("inmax")=
############################################################################# # only affine ones are needed, rest will have wrong kernel
max:=DoMaxesTF(u,["1"]:## else
max:=TryMaximalSubgroupClassReps(u:inmax,cheap); fi;
Filtered(max,->IndexNC(,x)knowi and (x,))java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67 for i in max do
cor:=Core(G,i);
AddNaturalHomomorphismsPool(G,cor,i,IndexNC(G,i));
od;
zzz:=java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0
Info(InfoFactor,3," Maxes: " found:=NrMovedPointsG)java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
ool.GopDone=false then else
zzz:DegreeNaturalHomomorphismsPool(G,N); fi; if IsInt(zzz) then
knowi:=zzz; fi
cnt:for in do
if cnt=0 and zzz>badi then
badi:=Int(badi*12/10);
Info(InfoWarning+InfoFactor,2, "index unreasonably large, iterating ",badi);
cnt:=20;
totalcnt:=0;
interrupt:=false;
:=N; fi;
until interrupt or cnt<=0 AddNaturalHomomorphismsPool(G,Stabilizer(G,i,OnTuples),
InfoInfoFactor,1zzz, vs ",);
return GetNaturalHomomorphismsPool(G,N);
end );
############################################################################# type:=2; #F SmallerDegreePermutationRepresentation( <G> ) ##
InstallGlobalFunction(SmallerDegreePermutationRepresentation=ovedPoints);
local o, s, k, gut, erg, H, =hallowCopy(RepresentativesMinimalBlocks(Gomov));
i,cheap,k2,change;
change:=SortBy(allb,Length);
java.lang.StringIndexOutOfBoundsException: Range [17, 6) out of bounds for length 84
cheap:=ValueOption("cheap"); if cheap="skip"then
return IdentityMapping(G); fi;
cheap:=cheap=true;
if Length(GeneratorsOfGroup(G if Lengthi)Length)foundthen
s=SmallGeneratingSet(G); if Length(s)=0then java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 if Length(s)Length((G)-1then
Info( ImagesSource(op:onlyimage);#onlyimage''forces generators
H:=s;
change:=true;
SetSize(,(G);
return SmallerDegreePermutationRepresentation(H);
found:=(; fi;
# deal with large abelian components first (which could be direct) if cheap<>true then
hom:=# also one finer blocks(omakefor iterating only once)
i:= iftype=2then
o:=List(i,Order); if ValueOption("norecurse")<>true and
Product(o)>20 and Sum(o)*4<NrMovedPoints(G) java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 14
Info(InfoFactor,2
s:=AbelianGroup(IsPermGroup,o);
ihom: Lengthnewb>1then
erg newb=Union(newb[]);
List( if not (newb in allb ornot (newb in allb or newb inallbold)then
GeneratorsOfGroup(G));
k:Group(erg);SetSize(k,Size(G));
hom:=GroupHomomorphismByImagesNC(G,k,GeneratorsOfGroup(G),erg);
return hom*SmallerDegreePermutationRepresentation(k:norecurse); fi; fi;
# known simple? if java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# # one block system then return IdentityMapping(G); fi;
if not IsTransitive(G,MovedPoints(G)) then
o:=ShallowCopy(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
SortBy(o, Length
for loop in
s=[; # Try subdirect product
k:=G;
:=]; for
:=Stabilizer(k,o[]OnTuples)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
p
k:=s;
Add(gutbl=dom; fi;
od; # reduce each orbit separately
o:{gut}; # second run: now take the big orbits first
Sort(o, Size(CoreSizeCoreustfaithful,Stabilizer(mustfaithful,j,OnSets)))=1
od;
SortBy(o, Length);
erg:=List(GeneratorsOfGroup(G),i-# also one finer blocks (as we iterate only once)
k:=G; fori [1.Length(o)]do
Info(InfoFactor,1,"Try to shorten if notnewb in allb then
s:=ActionHomomorphismAddallb,newb)java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
k2:=java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 7
k:Stabilizer(k,o[i],OnTuples);
H:=Range( p.Length(ool.ker)))^-;return ;
# is there an action that is good enough for improving the overall # kernel, even if it is not faithful? If so use the best of them.
b:=DoActionBlocksForKerneljava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if"java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 2
Info(InfoFactor,2,"##
morphism(,b,s too big
s:*b fi;
s:=s*SmallerDegreePermutationRepresentation(Image(s));
Info(InfoFactor,totalcnt, interrupt, , , cor zzz,,erm,badcores,axi,hard
erg:=SubdirectDiagonalPerms(
od; else
s:=Group(if Length(arg)>2 then
SetSize(s,ize));
s:=java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 6
SetIsBijective(s,true);
return s; fi;
return IdentityMapping(G); fi; # intransitive treatment
perm:=ActionHomomorphism(G,RightCosets(G,N),OnRight,"surjective");ActionHomomorphism(G,RightCosets(G,N),OnRight,"surjective"); it (or a homomorphisms pool) there -- make a copy for working # intermediately with it. if not java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 0
H: GroupWithGenerators( GeneratorsOfGroup( G ),One(G) );
change:=true; if HasSize(G) then
SetSize(H,Size(G); fi; if HasBaseOfGroup(G) return IdentityMapping(G);
SetBaseOfGroup(H,BaseOfGroup(G)); fi; else
H:=G; fi;
hom:=IdentityMapping(H);
b:=java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 5
b.dotriv=true;
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 0
b.dotriv:=false;
# cheap initial block reduction? if IsTransitive(H,MovedPoints(H)) then simple:=HasIsNonabelianSimpleGroup(G) and IsNonabelianSimpleGroup(G) and Size(N)=2;
improve:true; while improve and (cheap or NrMovedPoints(H)*5>Size(H)) do
improve:laterreplaceby Normalsubgroup
ntsH);
map:= and Size(N)
(map:onlyimage;#`onlyimage' forces same generators
bl:=KernelOfMultiplicativeGeneralMapping Size(zen=()then
AddNaturalHomomorphismsPool if Size(bl)=1then
hom:=hom*ifsimple SizeCore(,zen)Size()
:()java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
change:=true;
Info(InfoFactor,2,"+=ize(); fi;
od; fi;
b:=NaturalHomomorphismsPool(H);
b.InfoInfoFactor,,centralizerjava.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 47 if change then
onlykernel:=rivialSubgroupH)); else
DoCheapActionImages fijava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
CloseNaturalHomomorphismsPool(H,TrivialSubgroup(H));
b.dotriv:=false;
map:=GetNaturalHomomorphismsPool(H,TrivialSubgroup(H)); if map< else
Info(java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 5
hom:=hom*map;
H:=Imagev=; fi;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if cheap<>true and (IsBool(o) or o*2>=
s:=java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 17 if s<>fail then
hom:=hom*s; fi; fi;
returnhomjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 end)if (pool.ps[i]
############################################################################# ## #F ImproveActionDegreeByBlocks( <G>, <N> , hom ) ## extension of <U> in <G> such that \bigcap U^g=N remains valid ##
InstallGlobalFunction(ImproveActionDegreeByBlocks,function(G,N,oh)
local gimg,img,dom,b,improve,p,i,,bestdegestdeg,ubo,opbc,estblock,bdom,
bestop,sto,subomax;
Info(InfoFactor,1nu=ClosureGroup(,Random(arg[4]);
# remember that we computed the blocksfi;
b SetParent(nu);
# special case to use it for improving a permutation representationif Length(involved)0then
Sumdiff{involved,-osition,))
((Gk)
b(ndinvolved);
b.ops:=[oh];
b.cost:=[Length( interrupt:true;
b.lock:=[false];
b.locksdone:[false]java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
subomax:=20; else
subomax:=500; fi;
i:=PositionSet(b.ker,N); if b.blocksdone[i] then
return DegreeNaturalHomomorphismsPool(G,java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 0 fi;
bbi:true
if not IsPermGroup(Range(oh)) then
return 1; fi;
gimg:=Image(oh,G);
=gimg
java.lang.StringIndexOutOfBoundsException: Range [6, 4) out of bounds for length 15 fi
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 # one orbit: Blocks.[p:=op;
repeat
b:=Blocks(imgpool.p:=alse;
improveinterruptor(Length(rg iin 1.Lengthpoolker if Length(b)>1java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if Length(if simple and uG then
subo:=ApproximateSuborbitsStabilizerPermGroup(java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 10
subo: Size(or)>Size() and IsSubset(cor,N) and notcor in badcores then else
subo:=fail; fi;
bc:=First(b,i->dom[1] in if subo<>fail and (Length(subo)<=subomax) then
Info,,try ) # if the degree is not too big or if we are desperate then go for
java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 # greedy approach: take always locally best one (otherwise there(G,N)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 # might be too much work to do)
:dom;
bp:=[]; #Blocks pool
i:=1;
o if subo[i] in
else
=(img,dom[dom[1],subo[]]); fi; if Lengthbb)1 and (1 in bp or Length(bb)>bestdeg) then
# new nontriv. system found
#only
.blocksdone[[(u":,heap;
op :java.lang.StringIndexOutOfBoundsException: Range [51, 42) out of bounds for length 58
f <fail java.lang.StringIndexOutOfBoundsException: Range [32, 33) out of bounds for length 32
bb=b,i>Immutable(Union(bdom))
;
(Gcori,java.lang.StringIndexOutOfBoundsException: Range [0, 53) out of bounds for length 49
zzz:=DegreeNaturalHomomorphismsPoolN);
sto:=StabChainOptions(Range(op));
sto.limit:=Size(; # try only with random (will exclude some chances, but is
sto.fi # if gimgbas<>false then # SetBaseOfGroup(Range(op), # List(gimgbas,i->PositionProperty(bb,j->i in j))); # fi; if Size(Range(op))=Size(gimg) then
sto.random:=1000;
k:=TrivialSubgroup(gimg);
op:=oh*op;
SetKernelOfMultiplicativeGeneralMapping(op,PreImage(oh,k));
AddNaturalHomomorphismsPool(G, "indexunreasonably large, iterating ",badi);
,Lengthb)) else
interrupt:=false fi; fi;
k:=KernelOfMultiplicativeGeneralMapping(op);
SetSize(Range(op),IndexNC(gimg,k));
op:=oh* Info(InfoFactor,1,zzz," vs ",badi);
java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 42
AddNaturalHomomorphismsPool(G,
KernelOfMultiplicativeGeneralMapping(op#F SmallerDegreePermutationRepresentation( <G> )
op,Length(bb));
fi
#improve:=improve or (Size(k)=1); if Size(kjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mprove:true;
:=(bb;
bestblock:=;
return IdentityMapping(G); fi; fi # break the test loop if we found a fairly small block system # (iterate greedily immediately) if improve and bestdeg<i then
i:=Length(dom);
i:=i+;
od :Group(java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18 else
Info(InfoFactor
op:=1;# remove old homomorphism to free memory ifbdom>fail then
b:=Set(,i-Immutable(nion({i})); fi;
:ActionHomomorphismgimg,,OnSets,"urjective); if hom:=MaximalAbel:java.lang.StringIndexOutOfBoundsException: Range [32, 31) out of bounds for length 35
:=List(,Order)java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
.:Sizegimg; # try only with random (will exclude some chances, but is # quicker. If the size is OK we have a proof anyhow).
sto.random:=100; # if gimgbas<>false then # SetBaseOfGroup(Range(op), # List(gimgbas,i->PositionProperty(b,j->i in j))); # fi; if Size(Range(op))=Size(gimg) then
sto.random:=1000;
k:=rivialSubgroup(gimg);
op:=oh*op;
SetKernelOfMultiplicativeGeneralMapping(opGG,kGeneratorsOfGroup)erg)
AddNaturalHomomorphismsPool(,
KernelOfMultiplicativeGeneralMapping(op),
op,Length(b)); else
ovement fi; else
neralMappingop;
SetSize(Range(op),IndexNC(gimg,k)); # keep action knowledge
op:=oh*op;
(opPreImage(oh))java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
AddNaturalHomomorphismsPoolG
KernelOfMultiplicativeGeneralMapping(##
op,Length();
InstallGlobalFunction(,(,)
if Size(k)=1then
improve:true;
bestblock:=b;
bestop:=opjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 fi; fi;
java.lang.StringIndexOutOfBoundsException: Range [23, 24) out of bounds for length 23
update java.lang.StringIndexOutOfBoundsException: Range [0, 26) out of bounds for length 9
bdomend;
#F UnlockNaturalHomomorphismsPool(G,N) . . . clear flagSort(o,functionbrLength(a>b));
dom: o ; fi##(, fi;
until improve=false; fi;
N=PositionSet(poolker)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
return DegreeNaturalHomomorphismsPool(G,N);
)java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
RedispatchOnCondition(java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 21
[IsGroup and IsFinite return N=G bAOnSets"urjective)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
BindGlobalFactPermRepMaxDesc",unction(g,n,maxlev)
local lim,deg,all,c,recurse,use,start;
ValueOption("infactorpermrep")=true then return false;fi;
deg=DegreeNaturalHomomorphismsPool(g,n)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 if deg=fail then deg:=infinity; s:=Group(erg,()); # `erg' ar(rg,); all:=[];
start:=java.lang.StringIndexOutOfBoundsException: Range [37, 21) out of bounds for length 44
lim: returnIdentityMappingG;
c:=start;
Info(InfoFactor,1,"Try maximals for limit ",lim, fi# intransitive treatment
recurse:=unction,lev)
local m,ma,nm,i,j,co,wait,use;
Info(InfoFactor,3,"pop in ",lev);
m=[]
=]java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
ma:= HasBaseOfGroup(G) then for m do if ForAll(java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 6
Add(all,i);
Info(InfoFactor .=rue
nm=iinmaxcheap;
nm d=java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
IsNormal(g,x)); for j in nm do if(,cthen
=(,()java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
AddNaturalHomomorphismsPool(bl,ap)java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
j:=use;
use:= :Image); else
(waitj;
use:=false;
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
use:=true;
if use then
co:=Core(g,j);
AddNaturalHomomorphismsPool(g,co,j,IndexNC(g,j));
c:=Intersection(co,c);
Add(ma,j map:GetNaturalHomomorphismsPool(H,TrivialSubgroup(H));
od;(2" actionsimproved degree "NrMovedPoints(); else
Info(InfoFactor; fi;
od; ifma)0then
CloseNaturalHomomorphismsPool)
i= =java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 70 if i<deg# join intersections
deg:=i;
Info(InfoFactor, fi; if lev>1 or deg<lim then return true;fi; fi;
m:=ma;
SortBym,x-Size(x)java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30 elif lev<maxlev then # no improvement. Go down
Add,jjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 for i in wait do if recurse(i,lev+1) then return trueInfoInfoFactor,1,"try to find block systems");
od;
m:=[];
iseListisejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
m:=[]; fi
od; if .ps=oh];
Info(,3" up failure ",Size ise:Listjava.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 59 else
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0 fi;
return emb=List(1.Length(java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 5 end;
return recurse(start,1);
end)
############################################################################# ## #M FindActionKernel(<G>) . . . . . . . . . . . . . . . . . . . . permgrp ##
java.lang.StringIndexOutOfBoundsException: Range [30, 13) out of bounds for length 53
[elif :MovedPoints)java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 function(G,N)
local pool, dom, java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
, idx, i, comb,act,,jj
if IndexNC(ifLength()> # small index, anything is OK
return :ApproximateSuborbitsStabilizerPermGroupimg,[1) else # get the known ones, including blocks &c. which might be of use
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 12
:actorCosetAction(Gh,N) # will implicitly store
oo i;
dom=hiefSeriesThrough(,ooN)
dom:= fi
i:=2; while i<=
j:=i; while j :Length); #and HasElementaryAbelianFactorGroup(dom[i-1],dom[j+1])#F DegreeNaturalHomomorphismsPool(G,N) degree for operation for G/N if known
omj1=2000do 1java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
od; else
([-,[jjava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
oo=G,(repgjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
Info3"block system ",engthbb); end); for k in oo do if Length(java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
u:=Stabilizer(G,[1,(x,g
return v[PositionCanonicalbb=Set(bb,i-mmutableUnion(domi}))java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
op=ActionHomomorphism(gimg,,"urjective");
repeat if not IsNormal if HasSizeg)andnot HasStabChainMutablegimg) then
AddNaturalHomomorphismsPool(,Core(G,)u(G,)java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72 fi;
m:=u;
u:=ClosureGroup( p:PositionSet # quicker size OKwe anyhow)java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
java.lang.StringIndexOutOfBoundsException: Range [0, 17) out of bounds for length 0 fi;
InstallGlobalFunction(functionargj))
;
(Rangeop)=gimgjava.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
k=gimg;
#java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
bestdeg:I(GN;
AddNaturalHomomorphismsPool(G,N,N,bestdeg);
# check if there are multiple orbits
o:=Orbits(G,java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
s: ; if not ForAny
to orbits)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
i->(iN)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38 if Intersection(s)=N then
KernelOfMultiplicativeGeneralMapping(op),
List(s,i->NaturalHomomorphismByNormalSubgroup(G,i)); fijava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17 fi;
improve:=true;
=()java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
(o)1 for i in o do
ctionHomomorphismG,i,"urjective);
k:=KernelOfMultiplicativeGeneralMapping(act);
k:=ClosureGroup(k,N); # pre-image of (image of normal subgroup under act)
p=x-x])
:=(Imageact))
bestdeg:=DegreeNaturalHomomorphismsPoolb=,ImmutableUnion(i}))java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
Info(InfoFactor,1,"ifHasSize() andnot gimg) java.lang.StringIndexOutOfBoundsException: Range [65, 66) out of bounds for length 65
blocksdone:= # use subgroup that fixes a base of N # get orbits of a suitable stabilizer.
o:BaseOfGroup(N);
s:=Stabilizer(G,o,OnTuples);
badnormals:=Filtered(pool.ker,i->IsSubset(i,N)# SetBaseOfGroup(Range(op), if Size(s)>1 and IndexNC(G,s)/Size(N)<2000 and bestdeg>IndexNC(G,s)# fi;
cnt:Filtered(OrbitsDomain(sdom,i-Lengthi)>1; for i in cnt do
v:=ClosureGroup(N,Stabilizer(s,i[1])); if Size(v)>Size(N) and IndexNC(G,v)<2000
and not ForAny(badnormals,j->IsSubset(v,j)) then
u=CoreGv)java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 if Size(u)>Size KernelOfMultiplicativeGeneralMapping(op),
Add(badnormals,u); fi;
(,u,IndexNC(G,v)); fi;
od;
# try also intersections
CloseNaturalHomomorphismsPool(G,N);
bestdeg:[]
Info(InfoFactor,1,"Base Stabilizer and known, best Index ",java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 56
if :oh*; # should be better...
bestdeg:=ImproveActionDegreeByBlocks(G,N,
GetNaturalHomomorphismsPool(G,N));
blocksdone:=true;
Info fi
;
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
# whether anything stabilizing can be of use
:=OrbitsDomain(N),i-Length((, if improve improve then
Apply(o,Set)t update mapping
oo:=bdom:bestblock;
s:=G; for dom:i)
s:= ;
od;
(InfoFactor2"of ,G;
ifnotForAny(badnormalsj->IsSubset(s,j)) then
m:=Core(G,s); # the normal subgroup we get this way.
return DegreeNaturalHomomorphismsPoolG,N;
Add(badnormals,m); fi;
AddNaturalHomomorphismsPool(G,m,s,IndexNC(G,s)); else
m:=java.lang.StringIndexOutOfBoundsException: Range [0, 10) out of bounds for length 2 fi;
ifInstallMethod(FindActionKernel,"genericgroups",sIdenticalObj,
bestdeg:IndexNCGs;
blocksdone:=false;
Info(InfoFactor,2,"Orbits Stabilizer java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 0 thenc:=ClosureGroup(N,c)fijava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 # no hard work for trivial cases
discard:[]java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
a subgroup,whichdoes not contain java.lang.StringIndexOutOfBoundsException: Range [61, 60) out of bounds for length 70 # For wreath products (the initial aim), the following method works # fairly well
local lim,,allcrecurseuse,java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
cnt=;
:=]
repeatall=
java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 42 forcombinCombinations([1.Lengthv), java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57 #Print(">",comb,"\n"); if not java.lang.StringIndexOutOfBoundsException: Range [19, 9) out of bounds for length 9
u=java.lang.StringIndexOutOfBoundsException: Range [0, 27) out of bounds for length 26
o=ClosureGroup(u;
:)/(); if idx<10 and Factorial(idx)*Size(N)<Size(G) then # the permimage won't be sufficiently large
AddSet(badcomb,Immutable(comb)) wait=[; fi; if idx<bestdeg and Size(G)>Size( (>(gi,)=fail
and not ForAny(badnormals,i-> InfoInfoFactor,2"Maximals of index ",ndexNC,)
:TryMaximalSubgroupClassReps(:inmax,nfactorpermrep,cheap); if nm:=FilteredxIndexNC(,x)<=lim andIsSubset(x,n) and not
Info IsNormal(g,x));
AddSet(badcomb,Immutable(comb)); if not m in badnormals then
Add(badnormals,m); fi; fi; ifIsSubset(,c then
use:=ClosureGroupn,DerivedSubgroup(j));
bestdeg:=idx;
AddNaturalHomomorphismsPoolifnot IsSubset(se, then
blocksdone:=false;
cnt:=; fi; fi; fi;
od;
cnt:=cnt+1;
until cnt>Length(v); fi; fi;
Info( .ost[]pool.cost[[+poolcost[c[2) # first force blocks
bestdeg<and bestdeg<Gjava.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
Info(InfoFactor,3,"force blocks")java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
bestdeg:=ImproveActionDegreeByBlocks:=ositionpool.java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
GetNaturalHomomorphismsPool(G,N));
blocksdone:=true; 2, improvetojava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12 fi;
ifbestdegIndexNC(,N or
(bestdeg> g,njava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43 ifGenericFindActionKernel(,Nbestdeg,s)<>ailthen
blocksdone:=true; fi;
bestdeg:=DegreeNaturalHomomorphismsPool(G,N);
Info(,1search found"bestdeg) fi;
if bestdeg>10000 and bestdeg^2>IndexNC(G,N) java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
cnt:=bestdeg;
FactPermRepMaxDesc(G,N,5);
bestdeg:=DegreeNaturalHomomorphismsPool(G,N); if java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
Info(InfoFactor,1,Iteratedmaximals found ",bestdeg); fi;
for i wait
ImproveActionDegreeByBlocks(G,N,GetNaturalHomomorphismsPool(G,N)); fi;
############################################################################# ## #M NaturalHomomorphismByNormalSubgroup( <G>, <N> ) . . mapping G ->> G/N ## this function returns an epimorphism from G ## with kernel N. The range of this mapping is a suitable (isomorphic) ## permutation group (with which we can compute much easier).
,IsGroup,, function(Gfor in 1.pder) java.lang.StringIndexOutOfBoundsException: Range [41, 42) out of bounds for length 41
local proj,h,pool;
# catch the trivial case N=G ifCanComputeIndex(G,N) and IndexNC(G,N)=1then
hjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
(G
List( GeneratorsOfGroup# find smallish layer actions
SetKernelOfMultiplicativeGeneralMapping(h, G ;
return h; fi;
# catch trivial case N=1 (IsTrivial might not be set) if HasSizeN)andSize)1 or(HasGeneratorsOfGroup(N)and
ForAll(GeneratorsOfGroup(N),IsOne)) then
return IdentityMapping(G); fi;
# check, whether we already know a factormap
pool:=NaturalHomomorphismsPool(G);
h:=PositionSet(pool.ker,N); if h< andIndexNC([i-1,domjjava.lang.StringIndexOutOfBoundsException: Range [36, 15) out of bounds for length 15 for k java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 fi;
Length()1then
u:Stabilizer(,[]function(,g
:=Projection(,proj);
h:=NaturalHomomorphismByNormalSubgroup(Image(proj,G),Image(proj,N));
AddNaturalHomomorphismsPool(G,
ClosureGroup(KernelOfMultiplicativeGeneralMapping not IsNormal(Gu) then
od; fi;
CloseNaturalHomomorphismsPool(G,N);
h:=DegreeNaturalHomomorphismsPool(G, u:=ClosureGroup(N,DerivedSuClosureGroup(N,DerivedSubgroup(u));
u; fi;
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 6
h:=fail; fi;
if h=fail then # now we try to find a suitable operation
# redispatch upon finiteness test, as following will fail in infinite case ifHasIsFinite()and IsFinite(G)then
return NaturalHomomorphismByNormalSubgroupOp(G,N); fi;
h:FindActionKernel(G,; if <fail java.lang.StringIndexOutOfBoundsException: Range [19, 20) out of bounds for length 19
Info(InfoFactor,1, Info(InfoFactor,2,"Try reductionto orbits";
MovedPoints(Range(h)))," found"; else
Error("I don't know how to find a natural homomorphism for <N> in Info(nfoFactor,1,"Reduction to orbits will do"); # nothing had been found, Desperately one could try again, but that # would create a possible infinite loop.
h:= NaturalHomomorphismByNormalSubgroup( fi;
; # return the map
return hjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 end);
RedispatchOnConditionk=ClosureGroup,N;# pre-image(image of normalsubgroup act
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
RedispatchOnCondition(
[IsGroup ) #java.lang.StringIndexOutOfBoundsException: Range [40, 36) out of bounds for length 74
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 13
[sGroupIsGroup],java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
############################################################################# ## #M NaturalHomomorphismByNormalSubgroup( <G>, <N> ) . . for solvable factors ##
;
InstallMethod( java.lang.StringIndexOutOfBoundsException: Range [6, 1) out of bounds for length 9 "blocksdone:ne:=false;
IsIdenticalObj, [IsPermGroup,IsPermGroup ], 0, function# get orbits of a suitable stabilizer.
filter;
(,
A=G);
A<IndexNCG)(ndexNC(,,2^
map:=java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 5 if map< iin cnt do
InfoI2" storedmap";
return map############################################################################# fi; fi;
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 5
IsList()andod
nimumIndexNC(,N,G)java.lang.StringIndexOutOfBoundsException: Range [1, 0) out of bounds for length 0
TryNextMethod
notmsPool(G,)
# Make a pcgs based on an elementary abelian series (good for ag ; # routines).
pcgs if if not G,N,h);
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 5
;
# Construct or look up the pcp group <A>.
A(falsefalse)
( ,N ;
# Construct the epimorphism from <G> onto <A>.
map := rec(homDoFactorCosetAction(oFOrbitsDomain(iLrbit(,i)engthi)java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
nd
java.lang.StringIndexOutOfBoundsException: Range [49, 45) out of bounds for length 49
and
IsMapping and IsSurjective java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 18
HasSource and HasRange and
HasPreImagesRange and HasImagesSource;
HasKernelOfMultiplicativeGeneralMapping;
(InfoFactor,2,java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 21
map.java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0
ObjectifyWithAttributes map, .
NewType( GeneralMappingsFamily
mentsFamily FamilyObj( ),
Add(,,ImagesRepresentative(x,y);
Source fi
imgs:=Groupd; endjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
##
InstallMethod(DoCheapActionImages,"generic" ;
);
returnmap; end ) :=(java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 28
############################################################################# ## #F PullBackNaturalHomomorphismsPool( <hom> ) ##
InstallGlobalFunctionif
rnat;
s:=Source(hom);
=#For java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 75 for r.do
nat:=homubgroup(G((),- ;
AddNaturalHomomorphismsPool(s,java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 33
od end);
############################################################################# ## #F TryQuotientsFromFactorSubgroups(<hom>,<ker>,<bound>) ##
InstallGlobalFunction#rint>,");
local s,p,k,it, SortBy(,engthif (badcomb>comb,)then
p:=Image(hom);
kKernelOfMultiplicativeGeneralMappingjava.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
repeat
:#the won't java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 59
InfoExtReps,,Factor subgroup index java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 60
:hom,)
d:=DerivedSubgroup(v); if IsSubset(,)then
:Core(,o;
java.lang.StringIndexOutOfBoundsException: Range [10, 7) out of bounds for length 46
ma:=NaturalHomomorphismByNormalSubgroup 2then
lev:=0;
=ail ifLength(newb)1then
lev:=lev+1;
low:()1
=lse
sub:=First(java.lang.StringIndexOutOfBoundsException: Range [0, 24) out of bounds for length 0
od;
:=OrbitsDomainGdom;
djava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
AddNaturalHomomorphismsPool(,,)
=tersection(,djava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 if Size(k)=Size(ker) java.lang.StringIndexOutOfBoundsException: Range [0, 33) out of bounds for length 29
i; fi;
InfInfoFactor,,Orbits ,ifnot ininallb end # first
############################################################################# ## #M UseFactorRelation( <num>, <den>, <fac> ) . . . . for perm group factors ##
InstallMethod( UseFactorRelation,
[IsGroup HasSize,IsObject,IsPermGroup ], function( num, den, fac ) ;
local GN)java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30 if not HasSize( fac ) then if (den)
SetSize(fac,Size( num ) / Size( den ) ); else
limit := Size : g:GN; if IsBoundifLength() Info,1 searchfound java.lang.StringIndexOutOfBoundsException: Range [57, 56) out of bounds for length 58
limit fi;
java.lang.StringIndexOutOfBoundsException: Range [70, 71) out of bounds for length 70