############################################################################# ## ## This file is part of GAP, a system for computational discrete algebra. ## This file's authors include Heiko Theißen. ## ## 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 basic routines for permutation group backtrack ## algorithms that are based on partitions. These routines are used in the ## calculation of set stabilizers, normalizers, centralizers and ## intersections. ##
if not IsBound( LARGE_TASK ) then LARGE_TASK := false; fi;
# set some global variables
BindGlobal("STBBCKT_STRING_CENTRALIZER",MakeImmutable("Centralizer"));
BindGlobal("STBBCKT_STRING_REGORB1",MakeImmutable("_RegularOrbit1"));
BindGlobal("STBBCKT_STRING_REGORB2",MakeImmutable("RegularOrbit2"))B(Sjava.lang.StringIndexOutOfBoundsException: Range [36, 34) out of bounds for length 68
("TBBCKT_STRING_REGORB3"MakeImmutable"egularOrbit3"))java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
S",akeImmutable("plitOffBlock)
BindGlobal(""MakeImmutable"");
BindGlobal("STBBCKT_STRING_PROCESSFIX("uborbits1)java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
BindGlobal(STBBCKT_STRING_SUBORBITS3("Suborbits3);
BindGlobal("STBBCKT_STRING_SUBORBITS0",MakeImmutable("Suborbits0"))BindGlobal(STBBCKT_STRING_TWOCLOSURE"MakeImmutable(TwoClosure"));
BindGlobal("STBBCKT_STRING_SUBORBITS1",MakeImmutable("Suborbits1"));
BindGlobal("STBBCKT_STRING_SUBORBITS2",MakeImmutable("Suborbits2"));
BindGlobal("STBBCKT_STRING_SUBORBITS3",MakeImmutable("Suborbits3"));
BindGlobal("STBBCKT_STRING_TWOCLOSURE",MakeImmutable("TwoClosure"));
############################################################################# ## #F UnslicedPerm@( <perm> ) . . . . . . . . . . . . . . . . . . . . . . local ##
InstallGlobalFunction( java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 2
local##
if ( ) then
prm := );
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
: LeftQuotient( perm!word[i,prm ;
od;
return prm; else
return perm; fi; end );
InstallMethod( \ : (; function( p, perm ) return p ^ UnslicedPerm i in[ 1.perm.length ] do
InstallMethod( \^, "sliced perm",true, [ =LeftQuotient( perm!.word[ i ], prm ); function(p perm )
local i;
for i in Reversed( [ 1 .. perm! return prm;
p := p / perm!.ord i ]java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
Install( \,"sliced ",true [IsPerm,IsSlicedPerm ], 0,
return p; end );
function( p, perm ) return p ^ UnslicedPerm@( perm ); end ); function p,perm )
local i;
for i in [ 1 .. perm!.length ] do
= ^perm.word[i];
od;
return p; end );
InstallMethodjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [18, 12) out of bounds for length 20
Print( "perm of length ", perm!.length, ">" ); end );
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 14 "ength","word", "ftObj, "opr" ]);
od; function( p, perm )
local i;
for i in [ 1 .. perm!.length ] do
p = java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 33
od;
return p; end );
InstallMethod( PrintObj,"sliced perm", true Print( "<ermword of length " perm!length, ">" );
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 6
of length ",perm!.length, ">" ); end );
InstallMethod( java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
unction perm )
Print( "<perm word of length ", perm!.length, ">" ); end );
############################################################################# ## #F PreImageWord( <p>, <word> ) . . . . . . preimage under sliced permutation ##
InstallGlobalFunction( PreImageWord, function( p, word )
local i;
for i in Reversed( [ 1 .. Length( word )
p: p / word[[i];
od;
return p; end )java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6
############################################################################# ## #F ExtendedT( <t>, <pnt>, <img>, <G> ) . . prescribe one more image for <t> ##
InstallGlobalFunction( ExtendedTPrint( "permword of length ", perm!.length, ">" );
local bpt,end )
# Map the image with the part <t> that is already known. if simg=0then img : img /t elsePrint <perm word length ", perm!.length, ">" );
# = <img>.
bpt := BasePoint## if bpt <> pnt then if pnt <>##
returnfalse; fi;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return false; elif IsSlicedPerm( t ) then
len:=t!.ength; while img <> bpt do
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 13
edg Ijava.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 66
img := img ^ edg bpt, len,edg; # t!.rgtObj := t!.opr( t!.rgtObj, edg );
t!.word ifsimg=0 img : img t;
od;
t!.length := len; elseelse img := simg; fi; If <G> fixes <pnt>, nothing more can be changed, so test whether <pnt> fi;
return t; end );
############################################################################# ## #F MeetPartitionStrat( <rbase>,<image>,<S>,<strat> ) . meet acc. to <strat> ##
InstallGlobalFunction( MeetPartitionStrat return false;
local
if Length( strat ) = 0then return false;
return false;
IsSlicedPerm( t )then
img>do
p stratdo if p[1] = 0 and
not(image p[] FixpointCellNoP [3 java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
or p[1] <> 0 and
SplitCell( P p[],S,p[2]g p[] ) <> p[3]then
return false; fi;
od;
return true; endod;
############################################################################# ## #F StratMeetPartition( <rbase>, <P>, <S>, <g> ) . construct a meet strategy ## ## Entries in <strat> have the following meaning: ## [p,s,i] (p<>0) means that `0 < |P[p]\cap S[s]/g| = i < |P[p]|', ## i.e., a new cell with <i> points was appended to <P> ## (and these <i> have been taken out of `P[p]'), ## [0,a,p] means that fixpoint <a> was mapped to fixpoint in `P[p]', ## i.e., `P[p]' has become a one-point cell. ##
InstallGlobalFunction( StratMeetPartition, function( arg )
local local P p;
g, # permutation such that <P> meet <S> / <g> is constructed
, # R-base record, which records processing of fixpoints
strat, # meet strategy, the result
p return false;
i, # result of call to `SpliltCell'
P : image.artition;
blist, #/ see explanation below
splits,
lS,
cell, nrcells;
if not IsPartition( arg[ 1 ] ) then rbase := arg[ 1 ]; p := 2; else rbase:=false; := 1fi;
P := or p[1] <>0 and
S : arg[ p +1]; if Length( arg ) = p + 2then g := arg[ p + 2 ]; elsefi;
strat := [ ];
od; # `Set(cellsP{S[s]})' is the set of (numbers of) cells of <P> that # contain a point from `S[s]/g'. A cell splits iff it contains points for # two such values of <s>. if #############################################################################
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 2 else
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 2 for i in## [p,s,i] (p<>0) means that `0 < |P[p]\cap S[s]/g| = i < |P[p]|',
cell := Cell( P, i );
cellsP{ OnTuples(## i.e., `P[p]' has become a one-point cell.
od;
;
If <S> is just a set, it is interpreted as partition ( <S>|<S>^compl ).g, permutation such that <P> meet <S> / <g> is constructed if IsPartition( S ) then
nrcells := NumberCells( S ) - 1;
lS:=S; else
nrcells := 1;
blist(1.P)] {S})java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
p : p s # indices looping over the cells of <P> resp. <S> if p <> fail
( blist,BlistList( 1. NumberCells(P )],
cellsP Difference 1 . Length(Pcellno)] )} ));
p := Position( blist splits, fi;
lS:=S;
S lS, fi;
for s in [ 1 .. nrcells ] do
java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 if S=false then
=arg[p]
p:Cell(S); fi;
p:=cellsP{p}; # the affected P-cells
p=Collected(p);
splits:=[]; for i in p do # a cell will split iff it contains more points than are in the # s-cell if P.lengths[i[1]]>i[2] then
(plits,i[1]; fi;
od;
# this code is new, the extensive construction of blists in the old # version was awfully slow in larger degrees. ahulpke 11-aug-00 for p in splits do # Last argument `true' means that the cell will split.
i := SplitCell( P, p, lS, s, # two such values of <s>.
cellsP .;
cell=Cell(P NumberCells))
cellsP{ OnTuples( cell, g ) } := NumberCells( P ) + 0 * fori in [1 ..NumberCells( P ) ] do fi;
if rbase <> false then
Add( strat, [ p, s, i ] );
# If we have one or two new fixpoints, put them into the # base. if i = then
pnt := FixpointCellNo( P IsPartition( S ) then
ProcessFixpoint - 1;
Add( strat, [ :=; if IsTrivialRBase( rbase ) then
return strat; fi; fi; if P.lengths[ p p: ( blist ;
pnt=,)
ProcessFixpoint(blist ([1 .NumberCells ,
Add cellsP{Difference .Length(c ,S) ; if IsTrivialRBase( rbase )
fi; fi;
fi; # p := Position( blist, true, p );
od;
od;
return strat; end# now split with cell number s of S.
# the following functions are for suborbits given by blists, by element p:=lS;
InstallGlobalFunction(SuboLiBlifunction(an) if (b)then
return [b]; elif IsBlistRep(fi
Blist(ran,b); fi;
n b; end);
InstallGlobalFunction(SuboSiBli,function(b) if IsInt(b) then
return 1; elif IsBlistRep(b) then
return SizeBlist(b); else
return (plits,i[]; fi; end);
InstallGlobalFunction(SuboTruePos,function(ran,b) if od; # this code is new, the extensive construction of blists in the old elif # versionwas awfully slow in larger . ahulpke 11-aug-00
return Position(,true)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 elif HasIsSSortedList(b)and IsSSortedList(b) then
return Position(ran,MinimumList(b)); elseif IsOne g) then
return First :Cell(P NumberCells( P) ); fi; end);
InstallGlobalFunction(SuboUniteBlist,function( fi; if IsInt(b) then
(ran,)]=true; elif IsBlistRep(b) then
UniteBlist(a,b); else #UniteBlist(a,BlistList(ran,b));
UniteBlistList(ran,a fi end);
# sb is a list of length 3: [points,subs,blists]. The function returns a # cell as sorted list of points
pnt FixpointCellNo(P,NumberCells( P ) );
local b,i; if Length ProcessFixpoint(rbase, pnt ); # blists are used
:=hallowCopy(sb[]1)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 for i in [2..Length(sb[3])] do
UniteBlist(b,sb[3][i]);
od
UniteBlistList(ran,b,sb[1]); for i in sb[2fi;
UniteBlistList(ran,b,i);
od;
return ListBlist(ran,b); elif Length(sb[2])>0then # blists are not used but worth using
=sb[]; for i in sb ,[, ])
UniteBlistList( if IsTrivialRBase( rbase ) then
od;
return ListBlist(ran,b); else
b:=ShallowCopy(sb[1]); for i in sb[2]do
UniteSet fi;
od;
return b; fi; end);
############################################################################# ## #F Suborbits( <G>, <tofix>, <b>, <Omega> ) . . . . . . . . . . . . suborbits ## ## Returns a record with the following components: ## ## domain: the set <Omega> ## stabChainTop: top level of stabilizer chain for $G_tofix$ (pointwise stabilizer) with ## base point <a> (may be different from <b>) ## conj: an element mapping <b> to <a> ## which: a list whose <p>th entry is the number of the suborbit ## containing <p> ## lengths: a (not strictly) sorted list of suborbit lengths (subdegrees) ## byLengths: a list whose <i>th entry is the set of numbers of suborbits of ## the <i>th distinct length appearing in `lengths' ## partition: the partition into unions of suborbits of equal length ## The next three entries are lists whose <k> entry refers to the <k>th ## suborbit. ## blists: the suborbits as boolean lists ## reps: a transversal in <G> s.t. $a.reps[k]$ lies in the <k>th ## suborbit (reps[k] = `false' if this is impossible) ## orbitalPartitions: ## a list to store the `OrbitalPartition' for each suborbit in ##
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
ix, b, Omega, , , bylen,
G, GG, a, conj, ran, subs, all, k, pnt, orb, gen,
perm, omega, P, cell, part, p, i, la
repte
the arguments
H (,();
tofix := arg[ 2 ];
b (1.(an]i>[i] in);
Omega := arg[ fi
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0 if b Positionb]:truejava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
part : true; ;
G := java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 6
:(aseStabChain))
conj )
# Replace <H> by the stabilizer of all elements of <tofix> except the # last.
len =Length )
b,;
conj : InverseRepresentative(G,tofixi])
G used
od;
if len <> 0then
b := b ^
java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 20 else if not IsBound( H!.suborbits ) then
=(s[1)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 fi;
suborbits := H!.suborbits; fi;
#java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64 if not IsInBasicOrbit [2]
ptyStabChain]One ) b )
AddGeneratorsExtendSchreierTree, . )java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
)
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 fi;
a :=##
# try whether a and b are in the same path #conj := conj * InverseRepresentative( GG, b ) / # InverseRepresentative( GG, a );## base point <a> (may be different from <b>)
ran := ## containing <p> ## byLengths: a list whose <i>th entry is the set of numbers of suborbits of
k:=1;
The next three entries are lists ## suborbit.
and (suborbits[k][1## suborbit (reps[k] = `false' if this is impossible)
k:=k+1;
od;
, , , java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
java.lang.StringIndexOutOfBoundsException: Range [25, 23) out of bounds for length 32
Info(java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0 else
Info(InfoBckt,2,"nter suborbits ",ize,:";
# Construct the suborbits rooted at <a>. # GG is a head of a stabilizer chain with base orbit containing = arg[3 ]; # b with min elm a if not IsIdenticalObj(G,GG) then
GG:=CopyStabChain( G );
ChangeStabChain( GG, [ a ], false );
te:=GG.transversal;
stabgens:=GG.stabilizer.generators; 0then part := false;b :=[ 1]java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52 else
G := StabChainMutableH) # now conjugate with rep, so that we get things based at 'a'
rep2 maps the basepointto aa
te:=ShallowCopy(G.transversal);
te[
te]=G.identity;
stabgens:=List(stabgens,i->i^rep2); fi;
subsconj= G ;
transversal:=te,
;
domain =^java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 20
which : , ,
reps := [ G.java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 9
:=,
lengths := [ 1 ],
orbitalPartitions not (G,b then
subs.lists[1]=ajava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
subs.which[ a ] := 1;
IsRangeOmega)and1 inOmega java.lang.StringIndexOutOfBoundsException: Range [45, 46) out of bounds for length 45 all=,]; else
);
rep2java.lang.StringIndexOutOfBoundsException: Range [28, 22) out of bounds for length 28
all : java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
la:=Length k=()
k := 1;
pnt := Position( all, :+
> java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
k :Info,"java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 45
= ; all[ pnt ] := true; for p for gen in stabgens do
i := p ^ gen; if # b with min
Add(orb i );
[ : true; fi;
od;
od;
te=Gtjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
subs.whichjava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 44 #if IsInBasicOrbit( G, pnt ) then
nt]
subs.reps[ k ] := true;
subs.lengths[ k ] := Length( orb ); else
#
subs.reps[ k ] := false:List-r;
fi; #UniteBlist( all, sublique );transversal=, if QuoInt(Length(ran),Length(orb))>100thenidentity=., if Length(orb)= : ListWithIdenticalEntries( Length(ran) ),
subs.lists k] := orb[1]; else
subs.blists[ k ] := Immutable(Set(orb)); fi; else
subs.blists[ k lengths : [1 ], fi; if la=0then
pnt:.=;
java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 29
=,) fi;
od;
SubtractBlist java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 56
la:=Length(all)-1; if :1java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 for +;
: java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 25
od;
suborbitsfor gen stabgensdo else if not [ ] then fi;
fi;
if part od; if not la=la-ength(rb)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
(thisshouldjava.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 37 # subs.lengths := [ ]; # for k in [ 1 .. subs.sublilen ] do # if subs.reps[ k ] = false then # Add( subs.lengths, -SizeBlist( subs.blists[k] ) ); # else # Add( subs.lengths, SizeBlist( subs.blists[k] ) ); # fi; # od;
java.lang.StringIndexOutOfBoundsException: Range [10, 1) out of bounds for length 13
ifLength(),(orb)>100then
# Determine the partition into unions of suborbits of equal length..[k ] =[1]
subs .[ =Immutable(Setorb);
fork in [1..Length( subs..engths ) ] do
Append( cell, SuboLiBli( ran, subs.blists[ k ^ perm ] ) );
AddSet( bylen fi;
=Length( .engths )
or subs. pnt:fail;
Add( P, java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 14
Add( subs.subs.sublilen:=Length(subs.) fi;
od; if Length( omega ) Length(suborbits)>lthen
Add( P, omega ); fi;
subs.suborbits:suborbits[+]; fi;
subs := [(][,subs;
subs. (,[a,mega,ubs])
return subs; end );
############################################################################# ## #F OrbitalPartition( <subs>, <k> ) . . . . . . . . . . make a nice partition ## ## ## ahulpke, added aug-2-00: If there are only one or two cells, the function ## will return just one cell (the partitions split functions can treat this ## as a special case anyhow).
InstallGlobalFunction# subs.lengths := [ ];
local dom, # operation domain for the group
ran, # range including <dom>, for blist construction# if subs.reps[ k ] = false then
d, # number of suborbits, estimate for diameter
len, # current path length
K, # set of suborbits <k> to process# od;
Key perm :=Sortex subs.lengths ) ^ -1;
key, # discriminating information for suborbit number <k>
old, # farthest distance zone constructed so far
new, # new distance zone being constructed
img, # new endpoint of path with known predecessor
o,i, # suborbit of predecessor resp. endpoint
,# pointsordered <ey , aspartition
typ, (cell,SuboLiBli ran, subs.blists[ k ^ perm ] ) );
sub, # suborbit as list of integers
csiz,
pos;
if IsInt( k ) and IsBound( k = Length( subs.lengths )
Info(InfoBckt,2,"Orbital partition ",k," cached or subs.[ k + 1 ]<>subslengths[ k then
P:subs.orbitalPartitionsk]; else
. Length( subs. )]);
IsSSortedList(ran);
d := subs.sublilen; if IsRecord( k ) fi; else K := [ k ]; Length omega ) <> 0then
: 0; for k in K do if IsList( ition : ( P);
k := k[ 1 ; fijava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
key := #############################################################################
# Initialize the flooding algorithm for the <k>th suborbit. if IsInt( k## if subs.reps[ k ] = false then
sub := 0;
key[ k ] := -1;
new := [ ]; else
sub :=SuboLiBli ran,subs.blists[ k ]);
key[ k ] := 1;
new := [ k ]; fi; else #sub := ListBlist( ran, UnionBlist( subs.blists{ k } ) ); if IsEmpty(k) then
sub:[]; else
sub:=subs.blists[k[1] ,# set of <>toprocess if IsInt(sub) then
sub:=BlistList(old # farthest distance zone constructed so far elif not new # new distance zone being constructed
subjava.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 36
subjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
(.orbitalPartitions ])then foro2L(k) do
SuboUniteBlist(an,ubs.lists[k[])java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
;
sub:=ListBlistIsSSortedListran)java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 fi;
key{ := 1 +0*k
: , -java.lang.StringIndexOutOfBoundsException: Range [44, 42) out of bounds for length 59 fi;
len =java.lang.StringIndexOutOfBoundsException: Range [39, 37) out of bounds for length 46
if IsInt( k ) then
>0do
len := len + 1;
:=java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
# Map the suborbit <sub> with each old representative. for o ; if #sub :=
subsreps ]
subs.reps[ o ] sub:=];
SuboTruePossub:subs.blists1; fi;
img inOnTuples(sub reps[o ])
# Find the suborbit <i> of the image. sub:java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 38
i := subs.which[ img ;
# If this suborbit is encountered for the first time, add
#it<> l>java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57 if key[ i ] = 0then
Addkey{k} : 1+0*k;
[i ]:= len; fi;
# Store the arrow which starts at suborbit <o>.
key[o ]:= key[o +d*
Length( sub ) ^ ( key[ i ] mod d );
od;
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
Info(
;
;
od;
if sub <> 0then
* (d+d*Length( + key; fi;
od;
# Partition <dom> into unions of suborbits w.r.t. the values of <Key>. if Key = 0then
if =.hich img]java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
subs.orbitalPartitions[ k ] := P; fi; # it to <new> and store its distance <len>.
return P; else
#T1:=Runtime()-T1;
typ := Set( Key );
csiz# java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
dom:=List(typ,i->[[],[],[]]); for i in [1..Length(Key)] do
pos : (typ Keyi ;
csiz[pos]:=csiz[pos]+AbsInt(subs.lengths[i]); if IsInt(subs.blistselse
([pos[1],ubs.lists[]; elif IsBlistRep(subs. fi;
Add(dom[pos][3]java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Key ( d+ d *(sub)^ ) key;
Add(dom[pos][2],subs.blistsfi fi;
od;
Sum(csiz)=Length(ubs.domain) Length(typ)=1then
P:=[]; if IsInt( k ) then
subs Key = 0then
IsInt(k )then
return P; elif Sum(csiz)=Length(subs.domain fi; # only two cells # we need to indicate the first cell, the trick to take the sorted # one does not work
P:=ConcatSubos(ran,dom[1]);
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
subs.orbitalPartitions[ k ] := P; fi;
return P; fi;
P:=[]; for pos in [1..Length(typ)] do
sub := ConcatSubos( ran, dom[pos] );
Add(P,sub);
od; #fi; #T1:=Runtime()-T1;
if Sum(List(P,Length)) <> Length(subs.domain) then # there are fixpoints missing
Add P, Difference(subs.domain,Union(P))); fi;
fi;
P := Partition( P ); if IsInt k ) then
subs.orbitalPartitions[ k ] := P; fi;
Add([pos[3]subs.lists])
return P; end (dompos]2,ubs.lists[];
############################################################################# ## #F EmptyRBase( <G>, <Omega>, <P> ) . . . . . . . . . . . . initialize R-base ##
,,java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
local rbase elif Sum(siz)=Lengthsubsdomain and Length(yp=2then
rbase := rec( domain := Omega,
base := [ ],
where := [ ],
rfm := [ ],
partition := StructuralCopy( P ),
lev := [ ] );
IsList G then if if IsInt ( k ) then
. :=true; else
rbase.
rbase.lev2 := [ ]; fi;
G := G[ forpos [1.(typ)
rbase.level2 := Add(s); fi; # if IsSymmetricGroupQuick( G ) then # Info( InfoBckt, 1, "Searching in symmetric group" ); # rbase.fix := [ ]; # rbase.level := NrMovedPoints( G ); # else
.chain:= CopyStabChain ( G ))java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
rbase.level := rbase.chain; # fi;
# Process all fixpoints in <P>. for Fixcells(P) do
.orbitalPartitions ] ;
od;
return rbase; end );
############################################################################# ## #F IsTrivialRBase( <rbase> ) . . . . . . . . . . . . . . is R-base trivial? ##
InstallGlobalFunction( java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 24
returnIsInt rbase.level )
and rbase.level <= 1
or IsRecord( rbase.level )
and Length( rbase.level.genlabels =[ ], end );
############################################################################# ## #F AddRefinement( <rbase>, <func>, <args> ) . . . . . register R-refinement ##
( java.lang.StringIndexOutOfBoundsException: Range [24, 25) out of bounds for length 24 if Length( args java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
or not IsList( Last(args)
or Length( Last(args) ) <> fijava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
Addrbase=
Info( InfoBckt, 1, "Refinement ", func, ": ",
NumberCells( rbase.partition ), " java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 29 fi; end );
############################################################################# ## #F ProcessFixpoint( <rbase>|<image>, <pnt> [, <img> ] ) . process fixpoint ## ## `ProcessFixpoint( rbase, pnt )' puts in <pnt> as new base point and steps ## down to the stabilizer, unless <pnt> is redundant, in which case `false' ## is returned. ## `ProcessFixpoint( image, pnt, img )' prescribes <img> as image for <pnt>, ## extends the permutation and steps down to the stabilizer. Returns `true' ## if this was successful and `false' otherwise. ##
InstallGlobalFunction( ProcessFixpoint, function arg )
local rbase, image, pnt, img#############################################################################
if Length( arg ) = 2then
rbase := arg[ 1 ];
pnt := arg[ 2 ]; if rbase.
ChangeStabChain( rbaseand 0 if BasePoint( #############################################################################
rbase.#F AddRefinement( <rbase>, <func>, <args> ) . . . . . register R-refinement fi; fi; if IsInt( rbase.level ) or not IsList( ast(argsjava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
rbase.level := rbase.level - 1; else
ChangeStabChain( args = args))
BasePoint rbase. pnt
rbase.level := (rbasep ,"cells ; else
return false; fi; fi; else
image := arg[ 1 ];
pnt := arg[ 2 ];
img := arg[ 3 ]; if image.perm <> true ## extends the permutation and steps down to the stabilizer. Returns `true' if Length( arg )
:= 0fi;
: ExtendedT( image.perm, pnt, img, simg, image.level ); if t = false then
return false;
Length arg )
. : image.evels; fi;
image.perm := t; fi; 2< false
t .java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 65 if t = false then
return false; elif BasePoint( image.level2 ) =fi
image.level2 (rbase.evel)then
;
image.perm2 := t fi; fi;
return ; end ) rbase.: ..;
if
Add lev2 rbase.evel2) fi;
Add else java.lang.StringIndexOutOfBoundsException: Range [45, 44) out of bounds for length 62
Add( rbaset java.lang.StringIndexOutOfBoundsException: Range [26, 24) out of bounds for length 30
latePoint ,pnt)
Info( InfoBckt, 1, image.level : image..java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
P.lengths[ k ] + 1, if not ProcessFixpoint( rbase, pnt ) then
fixed" ); fi;
Add .here, ;
Add( rbase.rfm, [ ] ); if P.lengths[ k ] = 1then
pnt := elif BasePoint( imageBasePoint( image.evel2 ) = pnt then
ProcessFixpoint( rbase, pnt );
AddRefinement rbase,STBBCKT_STRING_PROCESSFIX, [ pnt, k ] ); fi; if rbase.level2 <> false then if rbase. p =; else end)
O := #############################################################################
strat := StratMeetPartition#F RegisterRBasePoint( <P>, <rbase>, <pnt> ) . . . . . register R-base point
AddRefinement(## fi; fi; end );
############################################################################# ## #F NextRBasePoint( <P>, <rbase> [, <order> ] ) . . . find next R-base point ##
nstallGlobalFunction(NextRBasePoint, ( arg)
local Add(rbase.,rbase. ;
P, # partition of <Omega> to be refinedAdd .lev,.evel)
order, # order in which to try the cells of <Omega>
lensInfo ,1," , ( rbase.ase :" ,,,
p, # the next point chosen
k, l; # loop variables
# Get the arguments.
P := arg[ 1 ];
]; if Length( arg ) > 2 java.lang.StringIndexOutOfBoundsException: Range [0, 30) out of bounds for length 7 else order := false; fi;
# When this is called, there is a point that is neither fixed by
lens := P.lengths;
=fail; if order <> false then if IsInt( rbase.level ) then
p := PositionProperty( order if rbase.evel2 > false then
lens[ CellNoPoint(P,p ) ] <> 1 ); else
p := PositionProperty( else : rbase.level2;fi
lens[CellNoPoint(P,p) < 1
and not IsFixedStabilizer( rbase.level, p : OrbitsPartition(lev,rbase. ); fijava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11 fi;
if p <> fail then
p := order[ p ]; else
lens := ShallowCopy( lens );
order := [ 1 .. NumberCells( P ) ];
NextRBasePoint,(arg )
k := local rbase, #-base be extended
l := fail; whileorder order in which to try the cells of <Omega>whichtotrythecells >
(level
l :=k ;# loop variables
java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
: PositionProperty
( Pfirsts[ order[k] ]-1 +[1..lens[k ] ]java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
i -> not IsFixedStabilizer( rbase.level,
P.points[ i ] ) ); fi;
k
od;
p := P.points[ P.firsts <rbase.level> nor in <P>. fi;
RegisterRBasePoint( P, rbase if order < falsethen end );
############################################################################# ## #F RRefine( <rbase>, <image>, <uscore> ) . . . . . . . . . apply refinements ##
InstallGlobalFunction( >1)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
local Rf, t;
if not uscore then for Rf in rbase.rfm[ and not IsFixedStabili( rbase.evel,p))
t := java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 11
( [ rbasejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 elif t <> true then return =1 . ;
;
;
java.lang.StringIndexOutOfBoundsException: Range [8, 4) out of bounds for length 18 for Rf in rbase (l then if Rf.func[ 1 ] = '_'then
t := CallFuncList( Refinements.( Rf.func ), (P.irsts[ rder ] - 1+[1. lens[ k]]
([rbase,image] . ) ); if t = false then return fail; elif t <> true then return t; java.lang.StringIndexOutOfBoundsException: Range [12, 46) out of bounds for length 15
;
returnjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
;
#old code for############################################################################# if not uscore or Rf.func[ 1 ] = '#F RRefine( <rbase>, <image>, <uscore> ) . . . . . . . . . apply refinements
t := CallFuncList( Refinements.Rf t;
( [ not then if t = false then return t := CallFuncList( Refinements.( Rf.fujava.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63 elif t < true t fi
;
;
return true;
IsInBasicOrbit(S, then
return ForAll( S.if t=false then ; elif b < a then return false; elif IsFixedStabilizer( S, java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
old := Rf in rbase.fm . do for pnt in orb do for l in Sgenlabelsdo
img := pnt ^ S.labels[ l ]; if not old[ img ] then
img <a
return false; fi;
old img]: true;
Add( orb, img ); fi;
od; ;
od;
return true;
);
############################################################################# ## #F SubtractBlistOrbitStabChain( <blist>, <R>, <pnt> ) remove orbit as blist ##
InstallGlobalFunction SubtractBlistOrbitStabChain(blist,R,pnt )
local orb, gen, img;
orb := [ pnt ];
blist[ pnt ] := false; for pnt in orb do
java.lang.StringIndexOutOfBoundsException: Range [20, 15) out of bounds for length 36
img := pnt ^ gen;
[ img
java.lang.StringIndexOutOfBoundsException: Range [0, 21) out of bounds for length 0
fi;
od;
od; end );
############################################################################# ## #F PartitionBacktrack( <G>, <Pr>, <repr>, <rbase>, <data>, <L>, <R> ) . . . ##
InstallGlobalFunction( PartitionBacktrack, function( G, Pr, repr ( orb,img)
local PBEnumerate,od;
blen, # length of R-base
rep, # representative or `false', the result
branch, # level where $Lstab\ne Rstab$ starts
image, # image information running through the tree
, # old value of <image.partition.cellno> # intersected (mapped) basic orbits of <G>
# range for construction of <orb>
fix, fixP, # fixpoints of partitions at root of search tree
prm,#
nrback, # backtrack counter
bail, # do we want to bail out quickly?if blist[img]
i, dd, p; # loop variables
############################################################################# ## #F PBEnumerate( ... ) . . . . . . . recursive enumeration of a subgroup ##
PBEnumerate := function( d, wasTriv )
local undoto, # number of cells of <P> wanted after undoing
oldprm, #\
,Pr ,,data ,R)
a R-ase point
m,blen,
maxrep, representative`false,
b, # image of base point currently being considered
t; # group element constructed, to be handed upwards
if,#
return fi;
image.depth := d;
i, dd, p; # loop variables
undoto := NumberCells( image.## if image.perm = java.lang.StringIndexOutOfBoundsException: Range [0, 28) out of bounds for length 2
oldcel := image.partition; else
oldcel := image.partition a base if IsSlicedPerm( image.perm ) , # maximal number of candidates else oldprm := image;# group element constructed, to be handed upwards
java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 fi; if image.level2 <> false then oldprm2 := image.perm2; else oldprm2 := false; fi;
# Recursion comes to an end if all base points have been prescribed # images. if d >(image.erm then oldprm: image..ength if( rbase then
blen := Length( rbase.base );
# Do not add the identity element in the subgroup # construction. if wasTriv then
# In the subgroup case, assign to <L> and <R> stabilizer # chains when the R-base is complete.
L := ListStabChain( CopyStabChain( StabChainOp( L,
rec( rec( base
reduced # construction.
R := ShallowCopyjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
if image.perm <> true then
Info( InfoBckt, 1, "Stabilizerrec( base =rbase
DepthSchreierTrees( rbase.chain ) ); fi;
Info( InfoBckt, 1, "Indices: ",
IndicesStabChain( L[ 1 ] ) );
return fail;
else
= true then
prm := MappingPermListList
( rbase.fix[ Length( rbase.base ) ],
fail else
prm := image.perm; fijava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
image.level2 < false then
prm := UnslicedPerm@( prm ) Fixcells( image.partition ) if SiftedPermutation( image prm : image.perm;
prm / UnslicedPerm@( image.perm2 ) )
= image.level2.identity then
return prm; fijava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27 elif Pr( prm ) then
return UnslicedPerm@( prm ); fi;
return fail; fi;
# Construct the next refinement level. This also initializes # <image.partition> for the case ``image = base point''. else if not repr then
oldcel := # <image.partition> for fi;
rbase.nextLevel( rbase. oldcel := StructuralCopy( ol
image.erm then
Addrbase.ix ( rbase.artition))java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66 fi;
Add( org, ListWithIdenticalEntries( Length( range ), 0 ) );
Length( ,0));
# In the representative case, change the stabilizer
ChangeStabChain( L[ d ], [ rbase.base[ d ] ], false );
L[ d + 1 ] := L[ d ].stabilizer;
ChangeStabChain( [ ,[rbase.ase[]] ;
R[ d [ d+ 1 ]: L d .stabilizer;
fi; fi;
fi;
a := rbase.base[ d ]; fijava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
# Intersect the current cell of <P> with the mapped basic orbit of # <G> (and also with the one of <H> in the intersection case). ifimage.perm =true then
orb[ d ] := BlistList( range, Cell( oldcel, rbase.where[ d ] ) ); if java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
b := Position( java.lang.StringIndexOutOfBoundsException: Range [70, 36) out of bounds for length 70
[d ]: BlistList range,Cell oldcel,rbasewhere d ] ));
IsInBasicOrbit rbase.lev2[ d ], b/image.perm2 ) then
orb[ d > fi;
b := Position( orb[ d orb[ d][b ]:=false;
od; fi; else
orb[ ; for p in rbase.lev[ d ].orbit do
b := p ^ orb[ d ] := BlistList d] := BlistList(range, [ ] ); if oldcel[ b ] = rbase.where[ d ]
(imagelevel2 false
orb :p^image.erm
orb[ if oldcel[b ]=.where[d]
org[ d ][ b ] := p; fi
od; fi; if d=1 and org[d ][ b ] := p;
orb[d][a]:=true; # ensure a is a possible image (can happen if # acting on permutations with more points)
od;
orB[ d ] := StructuralCopy( fi
# Loop over the candidate images for the current base point. First[]a]=;# ensure a is a possible image (can happen if # the special case ``image = base'' up to current level. if wasTriv
image.bimg ]:;
# Refinements that start with '_' must be executed even when base # = image since they modify `image.data' etc.
RRefine( rbase, image, true );
# Now we can remove the entire <R>-orbit of <a> from the # candidate list.
SubtractBlist( orb[ d
fi;
# Only the early points of the orbit have to be considered.
m := SizeBlist( orB[ d ] fi if m < Length( L[ d ].orbit
return fail; fi;
max:PositionNthTrueBlist( orB[ d ],
m - Length( L[ d ].orbit ) + 1 ); if wasTriv and a > max then
m:=m -1; if m < Length( L[ d ].orbit ) then
return fail; fi;
java.lang.StringIndexOutOfBoundsException: Range [47, 39) out of bounds for length 50
m if <Length [d.orbit)then fi;
# Now the other possible images.
b := Position( orb[ d ], true ); if b <> fail and b > max max := PositionNthTrueBlist( [ d ],
b := fail;
; while b <> fail do
# Try to prune the node with prop 8(ii) of Leon's paper. ifnot andIsBound [d ].rbit ) then
dd: branch; while dd < b : failjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22 if IsInBasicOrbit( L[ java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
(range R[dd ]orbit 1] ,R[d then
Info( InfoBckt, 3, d, ": point ", b, " pruned by (L[dd] a not PBIsMinimal
dd:=d+1 else
dd := dd + 1; fijava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
odjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19 else
dd := d; fi;
if dd = d then
# Undo the changes made to <image.partition>, <image.level> # and <image.perm>. for i in [ java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
UndoRefinement( image.java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 0
od;
. < true then
image.level := rbase.lev[ d . ) if IsSlicedPerm( image.perm ) ifimage.erm<
p!l : oldprmjava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
the code rgtObj used avoidmultiplication # of permutations. It has been commented out for a long time, but accidentally remained # documented in `doc/ref/stbchain.xml` until its withdrawal in 2018. # image.perm!.rgtObj := oldrgt; else
image.perm := oldprm; fi; fi; if image.level2 <> false then
image.level2 := rbase.lev2[ d ];
image.perm2 := oldprm2; fi ;
If<> java.lang.StringIndexOutOfBoundsException: Range [58, 57) out of bounds for length 77 # refinement was impossible, give up for this image.
[]:java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
(. )java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
if ProcessFixpointjava.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 51 #Error(a," ",b," ",Cells(rbase.partition),Cells(image.partition));
t =( ,)java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56 else
t := fail; fi;
if t <> fail then
# Subgroup case, base <> image at current level: <R>, # without affecting <L>, so take a copy. # without affecting <L>, so take a copy. if wasTriv and IsIdenticalObj( L[ d ], R[ d ] ) then
R{ [ d .. Length( rbase.base ) ] } := List {[d. Length(rbase. )]}: Listjava.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
L{ [ d .. Length( rbase.base ) ; if2* then
;
if2 * d <= [d+1 ]: [d]java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
ChangeStabChain( R[ d ], [ b ], false );
R[ d + 1 ] := R[ d ].stabilizer; else if IsBound( R[ d ].stabilizer ) then
R[ d + 1 ] := ( R[ d + 1 ], gen -> b ^ gen
(, ," java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 56 fi
# Recursion. if t = true then
t := PBEnumerate( d + 1, false );
nrback:=nrback+1; if bail and nrback>500then
return infinity; # bail out, this will bail out # recursively fi;
image.depth := d; fi;
# If <t> = `fail', either the recursive call was# know the stabilizer of <L> at an earlier level. # unsuccessful, or all new elements have been added to # levels below the current one (this happens if base = # image up to current level). if t <> fail then
# Representative case, element found: Return it. # Subgroup case, base <> image before current level: We # need only find a representative because we already # know the stabilizer of <L> at an earlier level. if repr or not wasTriv then
return t;
# Subgroup case, base <> image at current level: Enlarge
e <max> accordingto # enlarged <L>. Reset <R> to the enlarged <L>. else
;
( [dd] ])
od;
(InfoBckt, 1"Level ", d ": ", IndicesStabChain( L[ 1 ] ) );
]orbit ) then
return fail; fi return fail;
max := PositionNthTrueBlist( orB[ d ],
m - Length( L[ d ].orbit ) + 1 m - Length(L d].orbit ) +1)java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72
R[d .Length(rbasebase)]}: List(
L{ [ d .. Length( rbase.base ) ] }, CopyStabChain ); fi;
fi;
# Now we can remove the entire <R>-orbit of <b> from the # candidate list. if IsBound( R[ d ].translabels )
and IsBound( R[ d ].translabels[ b ] ) then
SubtractBlist( orb[ d ],
BlistList( range, R[ d ].orbit ) ); else
SubtractBlistOrbitStabChain( orb[ d ], R[ d ], b ); fi;
fi;
b := java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 0 if b <> fail and b > max then
b := fail; fi;
od;
# If <Pr> is function, multiply permutations. Otherwise, keep them # factorized. # if IsSymmetricGroupQuick( G ) then # image.perm := true; # else if IsList( Pr ) then
image.perm := Objectify
( NewType( PermutationsFamily, IsSlicedPerm ),
rec( length IsList(Pr)then
: Pr[1]java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42 # image.perm!.rgtObj := Pr[ 2 ];
image.perm!. rec( ength :=0,word:= [ ]) )java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
Pr =Pr 4]; else
image.perm := One( G ); fi;
image.level := rbase.chain; # fi;
if repr then
# In the representative case, map the fixpoints of the partitions atimage.level:=rbase.; # fi; if rbase.partition.lengths <> image.partition.lengths if repr then
image.perm := false; else
fix: Fixcells( rbase.partition );
fixP := Fixcells( image.partition ); for i in [ 1 .. Length( fix ) image.perm : false;
ProcessFixpoint( image, fix[ i ], fixP[
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15 fi
#java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77 # chains.
L := ListStabChain;
R := ListStabChain( CopyStabChain(
############################################################################# ## #F Refinements.ProcessFixpoint( <pnt>, <cellnum> ) . . . process a fixpoint ##
InstallGlobalFunctionend )java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 6 function( rbase, image, pnt, cellnum )
local img;
############################################################################# ## #F Refinements.Intersection( <O>, <strat> ) . . . . . . . . . . second type ##
InstallGlobalFunction(Refinements_Intersection function( ProcessFixpointimage img)
local t;
if image.level2 = false then t := image.perm; else): ; if IsSlicedPerm( t ) then
t := ShallowCopy( t );
SET_TYPE_COMOBJ( t, NewType( PermutationsFamily, IsSlicedPermInv )# else
t := t ^ -1;
i
return local t tjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
Refinements.(STBBCKT_STRING_INTERSECTION) := else t := image.perm2t =image.erm2 ;
############################################################################# ## #F Refinements.Centralizer(<no>,<g>,<pnt>,<strat>) . P meet Pz for one point ##
InstallGlobalFunction(Refinements_Centralizer,
( ,,pnt )
local P, img;
: image.artition
img := FixpointCellNo java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 59
IsolatePoint ,
and############################################################################# end)#F Refinements.Centralizer(<no>,<g>,<pnt>,<strat>) . P meet Pz for one point
Refinements): ;
F := image.data[ 2 ];
image.data[ 4 ] := Partition( java.lang.StringIndexOutOfBoundsException: Range [0, 40) out of bounds for length 5
image.bimg{ [ 1, len ] } ) );
return Collected( rbase.blox.lengths ) =
Collected( image.data[ 4 ].lengths ); end);
Refinements.(STBBCKT_STRING_MAKEBLOX) := Refinements__MakeBlox;
############################################################################# ## #F Refinements.SplitOffBlock( <k>, <strat> ) . . . . . . . . split off block ##
InstallGlobalFunction(rbase, image len )
(, k )
local B, a,
B := image.data[ 4 ];
a := FixpointCellNo( image.partition, k );
orb =Cell B, CellNoPointBa ) if Length( orb ) = Length( rbase.domain ) then
return false; else
return MeetPartitionStrat( rbase, image, orb, (),strat ); fi; end)#############################################################################
Refinements.(STBBCKT_STRING_SPLITOFF) := #F Refinements.SplitOffBlock( <k>, <strat> ) . . . . . . . . split off block
############################################################################# ## #F Refinements._RegularOrbit1( <d>, <len> ) . . . . . . extend mapped orbit ## ## Computes orbit and transversal `bF' for group <F> = `data[6]' regular on ## that orbit. ##
InstallGlobalFunction(Refinements__RegularOrbit1, function( rbase, image, d, len )
F, treesjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
trees := image if d = 1then
F := image.data[ 6 ];##
image.regorb := EmptyStabChain( [ ], One( F ), image## that orbit.
AddGeneratorsExtendSchreierTree( image.regorb,
GeneratorsOfGroup( F ) );
Length(image.)< (rbaseregorb.rbit) then
returnfunction ,java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 32 fi;
trees[ d ] := EmptyStabChain( [ ], One( F if =1then
.regorborbit[1 ]); else
trees[ d ] := StructuralCopy( trees[ d - 1 ] );
AddGeneratorsExtendSchreierTree( trees[ d ],
[ QuickInverseRepresentative
.egorb .img[d] )^- ; if GeneratorsOfGroup(F) ;
return false; fi; fi;
return true; end);
() = Refinements__RegularOrbit1java.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 67
############################################################################# ## #F Refinements.RegularOrbit2( <d>, <orb>, <strat> ) . . . meet mapped orbit ## ## Compute images `bhg' of `bh' under $g$ in `trees[<d>].orbit = bE$ ($h\in ## E$). ## Entries in <strat> have the following meaning: ## [i,j] means that the image `bhg\in P[j]' of `bh = orb[<i>]' can be ## calculated from `bg'. ## [-p,j] means that fixpoint <p> was mapped to fixpoint in `P[j]', ## i.e., `P[j]' has become a one-point cell. ##
InstallGlobalFunction(Refinements_RegularOrbit2, function( rbase, image, d, orbit##
local P, trees, orb, i;
P := image.partition;
trees := ## Entries in <strat> have the following meaning:
orb := trees[ d ].orbit; for i in strat do if ( i[ 1 ] < 0
and not ProcessFixpoint( image, -InstallGlobalFunction(,
or ( i[ 1 ] > 0
and ( IsolatePoint( P, orb[ i[ 1 ] ] ) <> i[ 2 ]
or not ProcessFixpoint( image, orbit[i[1]], orb[i[1]] ) ) :image.ata 5 ]; then return false; fi;
od;
return true; end);
=Refinements_RegularOrbit2;
############################################################################# ## #F Refinements.RegularOrbit3( <f>, <strat> ) . . . . . find images of orbit ## ## Register images `yhg' of `yh' under $g$ in an arbitrary orbit `yE' ($h\in ## E$). `yg\in P[f]' is a one-point cell. ## Entries in <strat> have the following meaning: ## [yh,i,j] means that the image `yhg\in P[j]' of `yh' can be calculated ## from `yg' and `bhg\in P[i]' (a one-point cell). ## [-p,j] means that fixpoint <p> was mapped to fixpoint in `P[j]', ## i.e., `P[j]' has become a one-point cell. ##
InstallGlobalFunction(Refinements_RegularOrbit3, function( rbase, image, f, strat )
local P, yg, bhg, hg, yhg, i;
P := image.partition;
yg := FixpointCellNo( P, f ); for i in strat do if i[ 1 ] < 0then if not ProcessFixpoint( image, -i[1], FixpointCellNo## [yh,i,j] means that the image `yhg\in P[j]' of `yh' can be calculated then
return false; fi; else
bhg := FixpointCellNo( P, i[ 2 ] );
java.lang.StringIndexOutOfBoundsException: Range [51, 44) out of bounds for length 66
yhg := PreImageWord( yg, :,java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
i[10then
notProcessFixpoint( image, i[ 1 ], yhg ) then
return false; fi; fi;
od;
return true; end);
.): Refinements_RegularOrbit3
############################################################################# ## #F Refinements.Suborbits0( <tra>, <f>, <lens>, <byLen>, <strat> ) subdegrees ## ## Computes suborbits of the stabilizer in <F> = `image.data[2]' of the ## fixpoint in cell no. <f>. (If <F> is multiply transitive, replace it by ## the stabilizer of the first <tra>-1 images of R-base points.) ## ## Returns `true' if (1)~the list of suborbit lengths (subdegrees) equals ## <lens>, (2)~the list of subdegree frequencies equals <byLen> and (3)~the ## meet with the partition into unions of suborbits of equal length ## succeeds. ##
InstallGlobalFunction(Refinements_Suborbits0, function( rbase, image, tra, f, lens, byLen, java.lang.StringIndexOutOfBoundsException: Range [0, 50) out of bounds for length 2
Fjava.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 27
F :, pntjava.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
pnt := FixpointCellNo( image.partition
subs : Suborbits( , imagebimg{[1.tra -1]} ,
rbase.domain ); if subs.lengths.;
or List( subs.byLengths, Lengthif .engths<>
; else
return MeetPartitionStrat( rbase, image, subs.partition, MeetPartitionStrat rbase, .partition,c
strat ); fi; endend));
Refinements.(Refinements.(STBBCKT_STRING_SUBORBITS0.STBBCKT_STRING_SUBORBITS0):=Refinements_Suborbits0;
############################################################################# ## #F Refinements.Suborbits1( <rbase>, <image>, <tra>, <f>, <k>, <strat> ) . . ## ## Meets the image partition with the orbital partition of the union of ## orbital graphs of suborbits of length `subs.byLengths[ <k> ]'. (<tra> and ## <f> as in `Suborbits0'.) ##
InstallGlobalFunction(Refinements_Suborbits1## function( rbase, image, tra, f,,tra , java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
localF , subs, Qjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
############################################################################# ## #F Refinements.Suborbits2( <rbase>, <image>, <tra>, <f>, <start>, <coll> ) . ## ## Computes for each suborbit the intersection sizes with cells <start> or ## more in the image partition. Stores the result in `data[3]' (needed only ## on this level, hence no '_'). Returns `true' if the collected result ## equals <coll>. ##
F ,,subs ,k function( rbase, image, tra, f, start, coll )
local .[2 ;
F := image =Fb{ . ,pntjava.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
pnt := FixpointCellNo( image. image.data[ 3 ] := List( subs- ;
subs := Suborbits( F, image .java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 61
.domain ); if start = 1then
image.data[ 3 ] := List( subs.blists, o -> [ -SuboSiBli( o ) ] AddSet( [ k],i )java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36 fi;
types := image.data[ 3 ];
Refinements() : Refinements_Suborbits2 for k in Set( subs.which
{ OnTuples( Cell( image.partition, i ), subs.##
AddSet( types[ k ], i );
od;
od;
return Collected( types ) = coll; end);
Refinements.(STBBCKT_STRING_SUBORBITS2) := Refinements_Suborbits2InstallGlobalFunction(Refinements_Suborbits3,
############################################################################# ## #F Refinements.Suborbits3( <rbase>, <image>, <tra>, <f>, <typ>, <strat> ) . ## ## Meets the image partition with the orbital partition of the union of ## orbital graphs of suborbits of type <typ>. Returns `false' if there are ## not <many> of them. (<tra> and <f> as in `Suborbits0'.) ##
Length > java.lang.StringIndexOutOfBoundsException: Range [32, 33) out of bounds for length 32 function( rbase, Q := OrbitalPartition,k;
,types k java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
F := image.data[ 2 ];
types := image.data[ 3 ];
pnt := FixpointCellNo( #############################################################################
subs := Suborbits( F, <G>, <Q>, <d>, <strat> ) . . . . . . two-closure
rbase.domain );
k := Filtered( [ 1 .. subs.sublilen ], k -> types[ k ] = typ ); if Length( k ) <> many then
return java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0
=InverseRepresentative rbase.uborbits.stabChainTop,pnt ;
Q := OrbitalPartition( subs, k mage,Q, , strat );
return MeetPartitionStrat( rbase, image, Q, subs.conj, strat ); fi; end).STBBCKT_STRING_TWOCLOSURE=efinements_TwoClosure;
Refinements.(STBBCKT_STRING_SUBORBITS3) := Refinements_Suborbits3;
############################################################################# ## #F Refinements.TwoClosure( <G>, <Q>, <d>, <strat> ) . . . . . . two-closure ##
,,yh ,bh, ; function( rbase =
local pnt, #java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
pnt := FixpointCellNo( image if1then
t=InverseRepresentative( ..stabChainTop,pnt)java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
return MeetPartitionStrat( rbase, image, Q, t , java.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65 end
Refinements.(STBBCKT_STRING_TWOCLOSURE):=Refinements_TwoClosure;
############################################################################# ## #F NextLevelRegularGroups( <P>, <rbase> ) . . . . . . . . . . . . . . local ##
InstallGlobalFunction( NextLevelRegularGroups, java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 45
local , b , tree strat,i,j,p
S, f, y, =QuickInverseRepresentative .egorb, ^-1;
d := LengthAddGeneratorsExtendSchreierTree( tree, [ gen ] );
p := fail;
All images of a regular orbit are known if $s$ are known (where the # regular group has $s$ generators). See sec. 3.7 of my thesis, read `b' # for `\omega'. if d = 1then
p := rbase.regorb.orbit[ 1 ];
, ;
rbase.trees := [ EmptyStabChain( [ ], rbase.regorb.identity, p ) ];
AddRefinement( rbase, STBBCKT_STRING_REGORB1, [ d, 1 ] ); else
tree := Last(rbase.trees); if Length( tree.orbit ) < Length( rbase.regorb.orbit ) then
p := =1then
P.lengths[ CellNoPoint(rbase java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
( IsInt rbase.level )
or not IsFixedStabilizer( rbase.level, q ) ) );
java.lang.StringIndexOutOfBoundsException: Range [30, 31) out of bounds for length 30
b := rbase.regorb.orbit Add(rbase., tree)java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
RegisterRBasePoint( P, ,strat ] );
gen := QuickInverseRepresentative( rbase.regorb, b ) ^ -1;
tree := StructuralCopy( tree );
AddGeneratorsExtendSchreierTree( tree, [ gen ] );
AddRefinement( rbase, STBBCKT_STRING_REGORB1,
[ d, java.lang.StringIndexOutOfBoundsException: Range [0, 35) out of bounds for length 11
java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 30
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
j := IsolatePoint( P, tree.orbit[ i ] ); if j <> false then
ProcessFixpoint( rbase, tree.orbit[ i ] );
Add( strat, [ i, j ] ); if P.lengths[ j ] = 1then
: ,)
ProcessFixpoint( rbase, p );
Add( strat, [ -p, j ] ); fi; fi;
od;
Add((S .;
AddRefinement( rbase, STBBCKT_STRING_REGORB2 strat :=[ ;
[ d, tree.orbit, strat ] ); fi; fi; fi; if p = fail then
i := CellNoPoint,h; fi;
image<java.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 76 # See sec. 3.7 of my thesis, read `y' for `\gamma'.
fix := Set( CellNoPoints(P,rbase.regorb.orbit ProcessFixpoint( rbase, yh );
f : ( strat, [yh i j]); while < do
y := FixpointCellNo : FixpointCellNo , )
S := EmptyStabChain( [ ], rbase.regorb.java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52 # ^ rbase.regorb.labels
UniteSet(fix,CellNoPoints(P,S.orbit));
strat := [ ]; for in .orbit
h := InverseRepresentativeWord( S, yh );
bh := PreImageWord( rbase.regorb.orbitodjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
i := CellNoPoint(P,bh); if :GOmegajava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
j := IsolatePoint( P, yh ); if j <> false then
, java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
Add( strat, [ yh, i, j ] )############################################################################# if P.lengths[ j ] = 1then
p Ijava.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 86
( ;
Add( strat, [ -p, j ] );
java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 fi; fi;
AddRefinement ,#degree java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 54
len ;
od;
end );
BindGlobal("STBCTEARNS",function(G,Omega)
G=(,Omega); if Length(G)=0then return fail; elif Length(G)=1then return G[1]; else Error("more than one Earns");fi; end);
############################################################################# ## #F RBaseGroupsBloxPermGroup( ... ) . . . . . opr. on groups respecting blox ##
InstallGlobalFunction# Find the order in which to process the points in the base choice.
local NumberCells( ) 1
order,max,L,# order in which to process the base pointsorder :=false;
min,l,#
n, # degree of <G>
reg, orbs, # regular subgroup of <E> or `false'
doneblox, # blox already considered
rootsof graphs alreadyconsidered
tra, # degree of transitivity of <E> cp,
len, i;
# If <E> is a multiply transitive subgroup of <G>, consider orbital # graphs of the first non 2-transitive stabilizer.
tra := Transitivityorder =( E) ; if tra = 0then
tra := 1; eliftra 1
Info( t an -. Startwiththepartitioninto<>orbits fi;
# Find the order in which to process the points in the base choice. if NumberCells( B ) = 1then
order := false; else
=(;
inityi=0java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 while i : ,Omega;
reg := Po(orbs, - ( orb ) Size( E ))java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 70
len >max :=len; L: i; fi if len < min then min := (InfoBckt ," ")
od;
order := rbase.regorb ( ,(E, if2 * order < n then order := Cell( B, l ); else =Cell(B ) ; fi;
# Construct an R-base. Start with the partition into <G>-orbits on the # cells of <B>. In the normalizer case, only the factor group $N_G(E)/E$ # acts on the cells.
rbase: EmptyRBase( G Omega,CollectedPartition(B div))
rbase. . = ( ,One(reg)java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
( Omega;
reg
< failthen
Info ,1 Subgroup regularorbit )
rbase.reggrp := function( E, Omega ) return E; start oldstart types, typ, coll,pnt,done;
([ )
[ [1 );
AddGeneratorsExtendSchreierTree( rbase.regorb,
GeneratorsOfGroup( E ) ); elif IsPrimitive( E,java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
reg := STBCTEARNS( E, Omega ); if reg <> fail then
Info( InfoBckt, 1, "Subgroup is affine" );
=(E .ase . -1}
rbase fpt, Omega);
Omega[ 1 ] );
AddGeneratorsExtendSchreierTree( rbase.regorb,
GeneratorsOfGroup( reg ) ); fi; fi;
doneblox := [ ];
doneroot := [ ];
rbase.nextLevel := function( P, rbase )
local Q,strat, , f ,subs k, i,
start, oldstart, types, typ, coll, pnt, done;
if reg <> fail then NextLevelRegularGroups( P, rbase ); else NextRBasePoint( P, rbase, order ); fi;
len := Length( rbase.base ); if len >= tra then
# For each fixpoint in <P>, consider the orbits of its
f :=fork [1..)]do while f <> false do
fpt: (, java.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
subs := Suborbits( E, rbase.base{ [ 1 : StratMeetPartition( rbase, P,
fpt, Omega );
# `Suborbits0' computes and meets the partition into unions of ; # suborbits of equal length.
strat := returnjava.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
subs.conj
AddRefinement( rbase, STBBCKT_STRING_SUBORBITS0
[tra f,subs.engths,
java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
# # `OrbitalPartition' of the union of orbital graphs for the # suborbits of that length (only if there are less than = byLengthsjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44 # sqrt(subdegree) many and if they are in the component of the # root). for k in [ 1 .. Length( subs.byLengths ) ] do
(
< subs.sublilen
and subs.reps[ subs.byLengths[ k ][ 1 ] ] <> false then
strat := StratMeetPartition( rbase, P,
OrbitalPartition( subs, subs.byLengths[ k ] ),
subs.conj );
AddRefinement( rbase, STBBCKT_STRING_SUBORBITS1,
[ tra, f, k, strat ] ); if IsTrivialRBase( rbase ) then
return; fi; fi;
od;
# Find the types of the suborbits, i.e., the sizes of their # intersections with the cells of <P>. if LARGE_TASK then start := NumberCells( P ) + 1 else start := 1; oldstart := 1; fi;
types := List( subs.blists, o -> [ -SuboSiBli( o ) ] );
AddSet done, k)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38 while start <= NumberCells( P ) do
# Do not consider a cell number in <P> twice (consider only # cell numbers between <oldstart> and <start>). for i in [ start .. NumberCells( P ) ] do for k in Set( subs.which
{ OnTuples( Cell( P, i ), subs.conj ) } ) do
AddSet( types[ k ], i );
od;
od;
coll := Collected( StructuralCopy( types ) );
start := NumberCells( P ) + 1;
# For each type, consider the `OrbitalPartition' of the union # of orbital graphs of that type. for typ in coll do
k := Filtered( [ 1 .. subs.sublilen ],
k -> types[ k ] = typ[ 1 ] ) fi; if not k in donethen
AddSet( done, k );
strat := StratMeetPartition( rbase, P,
OrbitalPartition ;
subs.onj ) if Length( strat ) <> 0 (doneroot cp;
fi # in `data[3]') and compares them with <coll> (only for # new cells between <oldstart> and <start>). if oldstart < start then
AddRefinement( rbase, STBBCKT_STRING_SUBORBITS2,
[ tra, f, oldstart, coll ] );
oldstart := start; fi;
# Suborbits3 computes andmeetsthe orbital java.lang.StringIndexOutOfBoundsException: Range [77, 78) out of bounds for length 77 # for the image.
AddRefinement( rbase, STBBCKT_STRING_SUBORBITS3,
[ tra, f, typ[ 1 ], Length fi; # Split off blocks whose images are known.
return; fi; fi; fi;
od;
od;
# at java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56 # to yield no extra progress.
pnt inOrbit(E fpt do cp:=CellNoPoint(P,pnt); if P.lengths[cp] = 1then
AddSet doneroot, cp); fi;
od;
f := FixcellPoint( P, doneroot );
od; fi;
# Construct a block system for <E>. if len > 1 and rbase.java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 6
Q := Blocks( E, rbase.domain, rbase.base{ [ 1, len ] } ); if Length( Q ) <> 1then
rbase.blox := Partition( Q );
AddRefinement( rbase, STBBCKT_STRING_MAKEBLOX, [ len ] ); fi; fi;
# Split off blocks whose images are known. if Lengtharg)>2 IsList(arg 3]
k := java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 15 while k <> false do for i in [ 1 .. Length(
orb := Cell( rbase.blox, k[ 1 ][ i ] );
Length( orb )<>Length( Omega ) then
strat := StratMeetPartition( rbase, P, orb );
AddRefinement( rbase, STBBCKT_STRING_SPLITOFF,
[Omega= ;
repr (Phi)< Length then
G := arg[ 1 ];
Phi := Set( arg[ 2 ] ); if Length( arg ) > 2 and IsList( arg[ 3 ] ) then
p := 3;
Psi := Set( arg[ 3 ] );
repr := true; else
p := 2;
Psi := Phi;
repr := false; fi;
Omega := MovedPoints( G ); if repr and Length( Phi ) <> Length( Psi ) then
return fail; fi;
Psi:=java.lang.StringIndexOutOfBoundsException: Range [0, 18) out of bounds for length 12
# Special case if <Omega> is entirely inside or outside <Phi>. if IsSubset(else if repr then
DifferencePhi >(Psi,Omegajava.lang.StringIndexOutOfBoundsException: Range [73, 74) out of bounds for length 73
return fail; else
return One( G ); fi; else
return G; fi;
R =L
( IsSubsetjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return fail; fi;
P := Partition( [ Intersection( Omega, Phi ),
Difference( Omega, Phi ) ] ); if repr then Q := Partitionjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Difference( Omega, Psi ) ] ); else :Phi[..Length()}java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
# # Special treatment for the symmetric group. # if IsSymmetricGroupQuick( G ) then # if repr then # return MappingPermListList( Phi, Psi ); # else # gens := [ ]; # for i in [ 1 .. NumberCells( P ) ] do # cell := Cell( P, i ); # if Length( cell ) > 1 then # Add( gens, ( cell[ 1 ], cell[ 2 ] ) ); # if Length( cell ) > 2 then # Add( gens, MappingPermListList( cell, # cell{ Concatenation( [ 2 .. Length( cell ) ], # [ 1 ] ) } ) ); # fi; # fi; # od; # return GroupByGenerators( gens, () ); # fi; # fi;
if( repr,,e ,L
L: arg[p+1 ] else
L:=SubgroupNC(G,
Filtered(StrongGeneratorsStabChain(StabChainMutable
gen -> OnSets ,# the R-base for the backtrack algorithm fi; if repr then if Length( arg ) > p + 1 java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 12
R := arg[ p + 2 ]; else
R:=ifForAll( GeneratorsOfGroup( G ), gen -> OnTuples( e, gen ) = e ) then
Filtered(StrongGeneratorsStabChain(StabChainMutable(G)),
gen->OnSets(Psi,gen)=Psi)); fi; else
R := L; fi;
# Construct an R-base.
rbase := EmptyRBase( [ G, G ], Omega, PCycleStructurePerm(f[])))then
rbase.nextLevel := NextRBasePoint;
#Pr := gen -> IsSubsetSet( OnTuples( Phi, gen ), Psi );
phitail:=Phi{[2..Length(Phi)]};
Pr:=function(gen)
local i;
^gen in Psithen
return false; fi; for i in phitail do
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 5
false fi;
od;
return ; end;
# Pr := [ Phi, Psi, OnTuples, gen -> # IsSubsetSet( gen!.lftObj, gen!.rgtObj ) ];
return java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 11 end );
############################################################################# ## #F RepOpElmTuplesPermGroup( <repr>, <G>, <e>, <f>, <L>, <R> ) on elm tuples ##
InstallGlobalFunction( RepOpElmTuplesPermGroup, function( repr, G, e, f, L, R )
local Omega, # a common operation domain for <G>, <E> and <F>
order, # orders of elements in <e>
cycles, # cycles of <e> on <Omega>
P, Q, # partition refined during construction of <rbase>
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
Pr, # property
baspts, # base for group
eran, # range
map,
bailout,
i,j, size; # loop/auxiliary variables
# Central elements and trivial subgroups. if ForAll( GeneratorsOfGroup( G ), gen -> OnTuples( e, # To avoid particular configurations falling repeatedly into, if not repr then return G; elif e = f then return One( G ("java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 38 else return fail; nneTwister, fi;
if SortPar(-ci
( Lengthrepeat
i -> CycleStructurePerm( e[ i ] ) <>
CycleStructurePerm( f[ i ] ) ) ) then
return fail; fi;
rbasenextLevel: function( P rbase ) if IsTrivial(L) then
L:=SubgroupNC(G, , pnt , , strat;
Filtered(e,gen->gen in G),
StrongGeneratorsStabChain(StabChainMutable(G))),
gen->OnTuples(e,gen)=e)); else
bailout:=false; fi;
if IsTrivial(R) then if repr then
R:=SubgroupNC(G,Filtered( Concatenation(
Filtered(f,gen->gen in G),
StrongGeneratorsStabChain(StabChainMutable(G))),
gen->OnTuples ,g , )java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
else
R:=L; fi; fi;
Omega := MovedPoints( Concatenation( GeneratorsOfGroup( G ), e, f ) );
P := TrivialPartition if repr then size := 1; else size := Size( G ); fi; forif repr java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
cycles := Partition( Cycles( e[ i ], Omega ) );
StratMeetPartition( P, CollectedPartition( cycles, size ) );
od;
# Find the order in which to process the points in the base choice. #SortParallel( ShallowCopy( -cycles.lengths ), order );
# The criterion for selection of base points is to select them according # to (descending) cycle length of the permutation to be conjugated. At the # moment no other criterion is used (though experiments can observe a Pr:=gen -> gen!.lftObj = gen!.rgtObj; # Beyond this choice, the base point order is determined as a side effect # of the sorting algorithm.
badjava.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74
# criterion used. This can be turned off through an option for debugging # purposes. if ValueOption("norandom")=true then
i:=[1.local ,; else
i:=FLOYDS_ALGORITHM(RandomSource(IsMersenneTwister
c.irsts)false; fi;
order := cycles.points if (j/gen)ei)gen=^[]then
SortParallel( -(cycles.lengths{i}), order );
repeat
# Construct an R-base.
rbase := EmptyRBase(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# Loop over the stabilizer chain of <G>.
rbase.nextLevel := function( P, rbase )
local fix, pnt, img, g, strat;
NextRBasePoint( P, rbase, order );
# Centralizer refinement.
fix := Fixcells( P ) L:=G; for pnt in fix do for g ;
img := pnt ^ e[ g ];
strat := IsolatePoint( P, img ); if strat <> false java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Add( fix, img );
ProcessFixpoint( rbase, img );
AddRefinement( rbase,#F ConjugatorPermGroup( <arg> ) . . . . isomorphism / conjugating element
[ CellNoPointp( ,function) if P.lengths[ strat ] = 1then
pnt := FixpointCellNo( P, strat );
ProcessFixpoint( rbase, pnt );
AddRefinement ,",
[ pnt E :=arg 2 ]java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
; fielif IsTrivial )thenreturn(;
od;
od end;
if repr then
Q := TrivialPartition( Omega ); for i in [ 1 .. Length( f ) ;
StratMeetPartition( Q, CollectedPartition( Partition
( Cycles( f[ i ], Omega ) ), 1 ) );
od; else
Q := P; fi;
#Pr:=gen -> gen!.lftObj = gen!.rgtObj;
baspts:=BaseStabChain(StabChainMutable(G)); if not (ForAll(e,i- IsCyclic()then returnfail;fi;
baspts:=Union(baspts,MovedPoints(Concatenation(e,f))); fi;
eran:=[1..Length(e)];
Pr:=function(gen)
local i,j;
for i for j in baspts do if not ((j/gen)^e[i])^gen=j^f[i] java.lang.StringIndexOutOfBoundsException: Range [0, 51) out of bounds for length 36
returnfalse; fi;
odiffailreturn;
return true; end;
map:=PartitionBacktrack( G, [ e, f, OnTuples,Pr],
repr, rbase, Concatenation( [ Q ], f ),
L, R:bailout:=bailout ); if not (bailout and map=infinity) then
return map; fi;
Info(InfoBckt,1,"\n#I ------\n#I First compute new L");
=
:(G,
(E,GeneratorsOfGroupF));
od;
t=alse # go back as we need to build the base anew
until false;
end );
############################################################################# ## #F ConjugatorPermGroup( <arg> ) . . . . isomorphism / conjugating element ##
InstallGlobalFunction( ConjugatorPermGroup, function( arg )
local G, E, F, L, R, mpG, mpE, :=[..engthorb])
et ,Pr ,BF,;
;
E := arg[ 2 ];
F := arg[ 3 ]; if Size( E ) <> Size( F ) then return fail found:false; elif IsTrivial(java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 elif Size( E ) = 2then if Length( arg ) > 3then
L := arg[ 4 ]; R := arg[ 5 ] if([pos]< else
L := if Size(Stabilizer(P,dOnTuples)= fi;
E := First( GeneratorsOfGroup( E ), gen -> Order( gen ) <> 1 );
F := First( GeneratorsOfGroup( F ), gen -> Order( gen ) fi;
return RepOpElmTuplesPermGroup( true, G, [ E ], [ F ], L, R );
(E # special case of cyclic groups if not IsCyclic(F) then return (,rue); if Length( arg ) > 3then
L := arg[ 4 ]; R := arg[ 5 ]; else
L := TrivialSubgroup( G ); R := L; fi;
E:=MinimalGeneratingSet(E)[1];
F:=MinimalGeneratingSet(F)[1];
Q:=Order(E); for pos in Filtered([1..Q],x->Gcd(x,Q)=1) do
found:=RepOpElmTuplesPermGroup( true, G, [ E ], [ F^pos ], L, R ); if found<>fail then return found;fi;
od;
return fail; fi; # `Suborbits' uses all points. (AH, 7/17/02)
mpG:=MovedPoints(GeneratorsOfGroup(G));
mpE:=MovedPoints(GeneratorsOfGroup(E));
:IsTransitive(E,Omega);
map:=false;
Omega := [1..Maximum(Maximum(mpG) java.lang.StringIndexOutOfBoundsException: Range [20, 21) out of bounds for length 20
ifIsSubset(pG,pE and IsSubset(,mpF)andnot (,)then # is there a chance to use only some orbits? if not (IsSubset(G,E) and IsSubset(G,F)) then
P:=Group(Concatenation(GeneratorsOfGroup(java.lang.StringIndexOutOfBoundsException: Range [0, 50) out of bounds for length 7
GeneratorsOfGroup(E),GeneratorsOfGroup(F))); else
P:=G; fi;
orb:=Orbits(P,mpG : arg[Length( arg )-1 ; then # join orbits to make only a few
java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 9
SortBy(orb, Length);
comb:=Union(orb{[7..Length(orb)]});
orb=Concatenation{[.6},]); fi;
comb:=Combinations(orb);
SortBy(comb,a->Sum(a,Length)else
found : TrivialSubgroup )java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
pos:=0; # pos1 is empty
lc:=Length(mpG)*2/3; while pos<Length(comb) and not found and pos<=Length(comb) do
pos:pos+1; if Sum(comb[pos],Length)<lc then
:=(comb[pos]; if Size(Stabilizer(P,dom,OnTuples))=1then # found faithful
:truejava.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24 fi; fi
od; if found then
map:=ActionHomomorphism(P,dom,"surjective");
SetIsInjective(map,true);
G:=Image(map,G);
E:=Image(map,E);
F:=Image(map,F);
Omega:=[1..Length(dom)];
; fi;
# test whether we have a chance mapping the groups (as their orbits fit # together) if )
Collected(List(OrbitsDomain(F,Omega),Length)) then
return fail; fi;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 BindGlobal("DoNormalizerPermGroup",function(G,E,L,Omega) if not IsIdenticalObj(E,F) then
et=sTransitiveEOmega;
ft:=IsTransitive(F,Omega); if et<ft java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
return fail; elifandIsPrimitiveEOmega)>sPrimitiveF,Omega)then
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 8 fi; fi;
Pr := (,
Length 3then
L := arg[ Length( arg ) - 1 ];
R := arg[ Length( arg ) ]; if map<>false then
=(map,)java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
R:=Image(map,R); fi; elif IsSubset( G, E ) then
L := E; if IsSubset( G, F ) then R := F; else return fail; fi; else
L := TrivialSubgroup( G );
R := TrivialSubgroup( G ); fi;
rbase := RBaseGroupsBloxPermGroup( true, G, Omega,
E, 1, OrbitsPartition( E, Omega ) );
BF := OrbitsPartition( F, Omega );
Q := CollectedPartition( BF, 1 );
,F ,BF []]java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37 if IsBound( rbase.reggrp ) then
P:=rbase.reggrp( F, Omega ); if P=fail then # the first group has an EARNS, the second not.
return fi;
Add( data, P ); fi;
E.suborbits:=[;
found:=PartitionBacktrack( G, Pr, true, rbase, data, L, R ); if IsPerm(found) and map<>false then
found:=PreImagesRepresentative( (E ) 2then fi;
return found;
)
# the backtrack call
BindGlobal("DoNormalizerPermGroup",function(G ifLength( )= 3then
local Pr, div, B, rbase, data, N;
Pr := gen -> ForAll( GeneratorsOfGroup( E ), g -> g elifIsSubset ,E)then if not (IsTrivial( G ) or IsTrivial(E)) then if (G )then
div := SmallestPrimeDivisor( Index( G, E ) ); else
div := SmallestPrimeDivisor( Size( G ) ); fi; if (MovedPoints())>G andLength((G)>00then
SubgroupProperty(G,
i->ForAll(GeneratorsOfGroup(E),j->java.lang.StringIndexOutOfBoundsException: Range [0, 43) out of bounds for length 5
;
B := OrbitsPartition( E, Omega );
rbase := java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 11
data := [ true, E, [ ], B, [ ] ]; if IsBound( rbase.reggrp ) then
Add( data, rbase.reggrp( E, Omega ) ); fiifissubthen
N := PartitionBacktrack( G, Pr, false, rbase, data, L, L ); else
N := java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 8 fi; # remove cached information
G.:=[;
E!.suborbits:=[];
# bring the stabilizer chains back into a decent form
ReduceStabChain(StabChainMutable(G
ReduceStabChain(StabChainMutable(E));
ReduceStabChain(StabChainMutable(N));
return N; end );
InstallGlobalFunction( NormalizerPermGroup, function( arg )
local G,i=1
Eh, Lh, Nh,G0;
G := arg[ 1 ];
E := arg[ 2 ];
G!.suborbits:=[]; # in case any remained from interruption
E!.suborbits:=[]; if IsTrivial( E ) or while i<=Length(orb+do
return G; elif Size( E ) = 2then if Length( arg ) > 2then L := arg[ 3 ]; else L := TrivialSubgroup( G ); fi;
E := [ First( Omega := [1..Maximum(mpG,Maximum(mpE));
gen -> Order( gen ) <> 1 ) ];
return RepOpElmTuplesPermGroup( false, G, E, E, so:=nionorb{start.-]); fi;
if Length( arg ) = 3then
L := arg[ 3 ];
issub:=fail; elif IsSubset( G, E ) then
Nh=java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 60
return G; fi;
L := E;
issub:=true; else
L := TrivialSubgroup( G );
issub:=false;; fi;
if issub and HasFittingFreeLiftSetup(G) and NrMovedPoints()1000
| --
and Size(java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 11
return (GE; fi;
mpG:=MovedPoints(GeneratorsOfGroup(G));
mpE:=MovedPoints(GeneratorsOfGroup(E)); if IsSubset(mpG,mpE) and not IsTransitive(G,mpG) then
if issub=false then
issub:=IsSubset(G,E); fi;
G0:=G; if
P:=G; else
:Group((GeneratorsOfGroupG) (E))java.lang.StringIndexOutOfBoundsException: Index 74 out of bounds for length 74 fi;
=java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 28
while Length(Omega)>0 # it is not unlikely that some orbits suffice. Thus we can just stop # then
and not IsNormal(G,E) do
orb:=ShallowCopy(Orbits(P,Omega));
SortBy(orb,Length);
i:=java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 while i<=Length(orb) and Length(orb[i])=1do[IsPermGroup ,0,
Omega:=Difference(Omega,orb[i]);
i:=i+1;
od; if i<=Length(orb) then
start:=i;
:([i;
i:=i+1;[,java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 46 # don't bother with very short orbits -- they will give little # improvement. while i<=Length(orb) and cnt+Length(orb[i])<10do
cnt:=java.lang.StringIndexOutOfBoundsException: Range [0, 18) out of bounds for length 2
i:=i+1;
od; if cnt=Length(mpG # Get the arguments. # no orbits...
Omega := [1..Maximum(Maximum(mpG),Maximum(mpE))];
return DoNormalizerPermGroup(G,E,L,Omega); fi;
so:=Union(orb{[start..i-1]});
hom:=ActionHomomorphism(P,so,"surjective");
Gh:=Image(hom,G);
Eh:=Image(hom,E);
Lh:=Image(hom,L);
Nh:=DoNormalizerPermGroup(Gh,Eh,Lh,[1..Length(so)]); if Size(Nh)<Size(Gh) then else R := TrivialSubgroup( G ); fi;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
P: # Treat the trivial case. fi;
G:=PreImage(hom,Nh);
Info(InfoGroup,1,"Orbit ",Length(so)," reduces by ",Size(Gh)/Size(Nh)); fi;
Omega::=Difference(Omega,o); fi;
od;
if not issub then
G=Intersection(G,G0)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28 fi;
if Length(Omega)=0 and not IsNormal(G,E) then # we ran through all orbits and did not stop early because everything # normalized. We thus have to test the normalization on all orbits
Nh:=DoNormalizerPermGroup(G,E,L, # Construct an R-base.
Info(InfoGroup,1,"Union reduces by ",Size(G)/Size(Nh)); else
Nh:=G; # we know that G normalizes fi;
,Nh=DoNormalizerPermGroup(G,E,L,
[1..Maximum(Maximum(mpG),Maximum(mpE))]));
return Nh;
# this circumvents the FOA mechanism which got changed and does not permit # three arguments any longer.
,,java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
[ IsPermGroup, #Treat trivial .
NormalizerPermGroup );
############################################################################# ## #F ElementProperty( <G>, <Pr> [, <L> [, <R> ] ] ) one element with property ##
InstallGlobalFunction( ElementProperty, function( arg )
local G, Pr, L
# Get the arguments.
G := arg[ 1 ];
Pr := arg[ 2 ]; if Length( >2 =3; else =TrivialSubgroup );fi; if Length( arg ) > 3then R := arg[ 4 ]; else R := TrivialSubgroup( G ); fi;
# Treat the trivial case. if IsTrivial( G ) then if Pr( One( G ) ) then []=(artj>j=l[]) else return fail; fi; fi;
# Construct an R-base.
Omega iindo
G=GiOnSets)java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
rbase := EmptyRBase( G, Omega, P );
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# Get the arguments.
G := arg[ 1 ];
=[2] if Length( arg ) > 2then L := arg[ 3 ]; else L := TrivialSubgroup( G ); fi;
# Treat the trivial case. if IsTrivial( G ) then
return G; fi;
# Construct an R-base.
Omega := MovedPoints( G );
P := TrivialPartition( Omega );
rbase := EmptyRBase( G, Omega, P );
rbase.nextLevel := NextRBasePoint;
return PartitionBacktrack( G, Pr, false, rbase, [ P ], L, L ); end );
############################################################################# ## #M PartitionStabilizerPermGroup(<G>,<part>) ## ## This really should be a backtrack on its own
InstallGlobalFunction( PartitionStabilizerPermGroup, function
local pl,single,i,p,W,op,S;
# first separate the sets of different lengths
pl:=Set(part,Length);
single:=[]; for i in [1..Length(pl)] do
pl[i]:=Filtered(part,j->Length(j)=pl[i]);
Add(java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 42
od;
SortBy(single,Length); for i return;
G:=Stabilizerfi;
od;
# now pl is a list of lists of sets of the same length, sorted in # ascending size.
# stabilize the partitioning among sets of the same length for p in pl do # the trivial partitions are always stabilized. if Length(p)>1 andod; # the stabilizer is the set of all elements that map every set from p into # another set from p. # as a subgroup of the stabilizer compute the stabilizer on set tuples;
S:=G; for i in p do if ForAny(GeneratorsOfGroup(S),j->OnSets(i,j)<##
S:=Stabilizer(S,i,OnSets); #Info(InfoPermGroup,1,i," ",Size(S),"\n"); fi;
od;
G:=Normalizer(G,S);
java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 72 if not " , perm ,IsIdenticalObj, # the stabilizer of p in S_n is a wreath product of symmetric groups # (It seems that computing the intersection is better than the # `SubgroupProperty' call commented out below, as `Intersection' usesjava.lang.StringIndexOutOfBoundsException: Range [36, 34) out of bounds for length 45
# internally
op:=ActionHomomorphism(G,end;
W:=WreathProduct(SymmetricGroup(Length(p[1])),
SymmetricGroup(Length(p))); if Size(W)<10^50then
W:=Intersection[, ,java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
G:=PreImage(java.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 59 else
# because we want to keep the set property, we make p immutable
p:=Immutable(Set(p)); # the stabilizer is the set of all elements that map every set from # p into another set from p. as a subgroup of the stabilizer # compute the stabilizer on set tuples
S:=java.lang.StringIndexOutOfBoundsException: Range [48, 47) out of bounds for length 61 for in p
S:Si,)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
od;
G:=SubgroupProperty(G,function(gen)
local i; for i in p do if not OnSets(i,gen) in p then
fi;
od;
true; end,
S); fi; fi; fi;
od;
return G;
end );
############################################################################# ## #M Centralizer( <G>, <e> ) . . . . . . . . . . . . . . in permutation groups ##
InstallMethod( continue
[ IsPermGroup; function( G, e )
e := [ e ];
return RepOpElmTuplesPermGroup( false, G, e, e,
TrivialSubgroup( G ), TrivialSubgroup( G ) ); end );
(CentralizerOp perm group,perm ,IsIdenticalObj,
[ IsPermGroup, fi; function( G, E )
return RepOpElmTuplesPermGroup( false, G,
# # the intersection must stabilize the other groups orbits.
TrivialSubgroup( Gstep end );
# this circumvents the FOA mechanism which got changed and does not permit # three arguments any longer.
InstallOtherMethod( Centralizer, "with given subgroup", true,
[ IsPermGroup, IsPerm, IsPermGroup ], 0, function( # od;
e := [ e ];
return RepOpElmTuplesPermGroup( false, G, e, e, U, U ); end );
############################################################################# ## #M Intersection( <G>, <H> ) . . . . . . . . . . . . . of permutation groups ##
(java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 60
[ IsPermGroup, IsPermGroup ], 0, function( G, H )
local omega, P, rbase, L, mg, mh, L=PartitionBacktrack,H,false, ,L,L)java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
if IsIdenticalObj#############################################################################
return G; fi;
# iterate taking stabilizer until G and H have the same set of moved points while true do # align the acting domains G ran Omega, Agemo,opr,
mg:=MovedPoints(G);
java.lang.StringIndexOutOfBoundsException: Range [21, 8) out of bounds for length 25
omega := Intersection(mg,mh);
# no two points moved in common? if Length(omega)<=1then
return TrivialGroup(IsPermGroup); fi;
mg_minus_mh:=Difference(mg,mh); if Length(mg_minus_mh)
G:=Stabilizer(G,mg_minus_mh, Error( "2-closure: <G> must be transit
continue; fi;
mh_minus_mg:=Difference(mh,mg); if Length(mh_minus_mg) > 0then
H P :TrivialPartitionOmega )
continue; fi;
break;
od;
if , then
return H; elif (G
return G; fi;
# # the intersection must stabilize the other groups orbits. # # go through the orbits step by step # mg:=MovedPoints(G); # mg:=ShallowCopy(Orbits(H,mg)); # SortBy(mg, Length); # for i in mg do # if Length(i)<5 then # G:=Stabilizer(G,Set(i),OnSets); # fi; # od; # mh:=MovedPoints(H); # mh:=ShallowCopy(Orbits(G,mh)); # SortBy(mh, Length); # for i in mh do # if Length(i)<5 then # H:=Stabilizer(H,Set(i),OnSets); # fi; # od;
P: ,omega )java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
rbase := EmptyRBase( [ G, H ], omega, P );
java.lang.StringIndexOutOfBoundsException: Range [12, 8) out of bounds for length 15
# L := SubgroupNC( G, Concatenation # ( Filtered( GeneratorsOfGroup( G ), gen -> gen in H ), # Filtered( GeneratorsOfGroup( H ), gen -> gen in G ) ) );
L := TrivialSubgroup( G );
L:=PartitionBacktrack( G, H, false, rbase, [ P ], L, L );
return L; end );
############################################################################# ## #F TwoClosure( <G> [, <merge> ] ) . . . . . . . . . two-closure ##
BindGlobal( "TwoClosurePermGroup", function( arg )
local G, merge, n, ran, Omega# if IsInt( k ) and
adj, tot, k, kk, pnt, orb, o, new, gen# elif IsList( k ) and ForAny( k, i -> not
tra, Q, rbase, java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 24
G := arg[ 1 ]; if IsTrivialjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
return G;
Omega := MovedPoints( G ) =-1java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
n := Length( Omega );
S := SymmetricGroup( Omega );
,)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36 if tra = 0odjava.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
Error( "2-closure: <G> must be transitive" ); elif tra >= 2then
return S; fi;
,rbase,Omega) if rbase.suborbits = false then f := false; else f := FixcellPoint( P, doneroot ); fi; while f <> false do
AddSet( doneroot, f );
genin GeneratorsOfGroup djava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
rep := InverseRepresentative( rbase.suborbits.stabChainTop, fpt );
strat =StratMeetPartition(rbase ,Q ;
AddRefinement( rbase, STBBCKT_STRING_TWOCLOSURE,
[ G, f, Q, strat ] ); if IsTrivialRBase else f := FixcellPointjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 fi;
kk : k; end;
Pr := false; # # If <G> is primitive and simple, often $G^[2] \le N(G)$. # if IsPrimitive( G, Omega ) # and IsSimpleGroup( G ) then # type := IsomorphismTypeInfoFiniteSimpleGroup( G ); # param := IsoTypeParam( type ); # if param = false and not [ type, n ] in # [ [ "M(11)", 55 ], [ "M(12)", 66 ], [ "M(23)", 253 ], # [ "M(24)", 276 ], [ "A(9)", 120 ] ] # or param <> false and not # ( param.type = "G(2" and param.q >= 3 and # n = param.q ^ 3 * ( param.q ^ 3 - 1 ) / 2 # or param.type = "O(7" and n = param.q ^ 3 * ( param.q ^ 4 - 1 ) # / GcdInt( 2, param.q - 1 ) ) then # Pr := function( gen ) # local k; # # if not ForAll( GeneratorsOfGroup( G ), # g -> g ^ gen in G ) then # return false; # fi; # for k in merge do # if IsInt( k ) and # OnSuborbits( k, gen, rbase.suborbits ) <> k then # return false; # elif IsList( k ) and ForAny( k, i -> not # OnSuborbits( i, gen, rbase.suborbits ) in k ) then # return false; # fi; # od; # return true; # end; # fi; # fi;
if Pr =
= 1. 2 ]java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
if Omega = [ 1 .. n ] then
opr := function( p, g )
p := p - 1;
return ( p mod n + 1 ) ^ g
+ n * ( QuoInt( p, n ) + 1 ) ^ g - n; end; else
Agemo := [ ]; for i in [ 1 .. n ] do
Agemo[ Omega[ i ] ] := i - 1;
od;
opr := function( p, g )
p := p - 1;
return 1 + Agemo[ Omega[ p mod n + 1 ] ^ g ]
+ n * Agemo[ Omega[ QuoInt( p, n ) + 1 ] ^ g ]; end; fi;
adj := List( [ 0 .. LogInt(rbase.suborbits.sublilen-1,2) ],
i -> BlistList( ran, [ ] ) );
tot := BlistList( ran, [ ] );
k := 0;
pnt := Position( tot, false ); while pnt <> fail do
# start with the singleton orbit
orb := [ pnt ];
p := PositionProperty( merge, m -> IsList( m )
and rbase.suborbits.which[ pnt ] in m ); if p <> fail then for i in merge[ p ] do
Add( orb, SuboTruePos(ran, rbase.suborbits.blists[ i ] ) );
od; fi;
orb := BlistList( ran, orb );
o := StructuralCopy( orb );
new := BlistList( ran, ran );
new[ pnt ] := false;
# loop over all points found
p := Position( o, true ); while p <> fail do
o[ p ] := false;
# apply all generators <gen> for gen in GeneratorsOfGroup( G ) do
i := opr( p, gen );
# add the image <img> to the orbit if it is new if new[ i ] then
orb[ i ] := true;
o [ i ] := true;
new[ i ] := false; fi;
od;
p := Position( o, true );
od;
kk := k;
i := 0; while kk <> 0do
i := i + 1; if kk mod 2 = 1then
UniteBlist( adj[ i ], orb ); fi;
kk := QuoInt( kk, 2 );
od;
UniteBlist( tot, orb );
k := k + 1;
pnt := Position( tot, false, pnt );
od;
Pr := function( gen )
local p, i;
gen := UnslicedPerm@( gen ); for p in ran do
i := opr( p, gen ); if not ForAll( adj, bit -> bit[ i ] = bit[ p ] ) then
return false; fi;
od;
return true; end; fi;
return PartitionBacktrack( S, Pr, false, rbase, [ true ], G, G ); end );
¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.128Angebot
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-10-13)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.