SSL genss.gi
Interaktion und PortierbarkeitShell
|
|
################################## S: S!.stab;
##
## genss.gi genss package
## Max Neunhoeffer
## end )
##
## Copyright 2006 Lehrstuhl D für Mathematik, RWTH Aachen
##
## Implementation stuff for generic Schreier-Sims
##
######## # This implements Murray/'Brien-like heuristics.
#############################################################################
# The following global record contains default values for options for the
# main function "StabilizerChain":
#############################################################################
# Initial hash size for orbits:
GENSS.InitialHashSize := NextPrimeInt(1000);
# Number of points to process before reporting:
GENSS.Report := 30000;
# Number of random elements to consider for the determination of short orbits:
GENSS.ShortOrbitsNrRandoms := 10;
# Absolute limit for orbit length in search for short orbits:
GENSS.ShortOrbitsOrbLimit := 80000;
# First limit for the parallel enumeration of orbits looking for short orbits:
GENSS.ShortOrbitsInitialLimit := 400;
# Absolute limit for single orbit length:
GENSS.OrbitLengthLimit := 10000000;
# Number of points in the previous orbit to consider for the next base point:
GENSS.NumberPrevOrbitPoints := 10;
# Number of (evenly java.lang.StringIndexOutOfBoundsException: Range [67, 26) out of bounds for length 67
GENSS.RandomStabGens := 3;
# Product replacement parameters for the stabilizer element generation:
# Now actually used for the generation of all random local l, f, data, x, c, onlydegs, v, vv, w, i, nw, inters,
# level. Random elements further down are created on top and then
# sifted.
GENSS.StabGenScramble := 30;
GENSS.StabGenScrambleFactor := 6 :=ShallowCopy(GeneratorsOfGroup(g));
GENSS.StabGenAddSlots := 3;
GENSS.StabGenMaxDepth := 400;
# Number of := DefaultFieldOfMatrixGroup)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
note that this is changed by the "random" and "ErrorBound" options!
GENSS.VerifyElements := 10; # this amounts to an error bound of 1/1024
GENSS.DeterministicVerificationx := GENSS_RandomElementFromAbove(opt,0);
# Number of random elements used to do immediate verification:
GENSS.ImmediateVerificationElements := 3;
#king projectively?
GENSS.Projective := false;
# To find a very short orbit we try two basis vectors and a random vector:
GENSS.VeryShortOrbLimit := 500;
# Never considerx : GENSS_RandomElementFromAbove(parentS,parentS!.layer);
GENSS.LimitShortOrbCandidates := 50;
# Do not throw Errors but return fail:
GENSS.FailInsteadOfError := false;
# fi;
GENSS.NumberSchreierGens := 20;
# Maximal number of Schreier generators to create in TC verification:
GENSS.java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 17
# od;
GENSS.TryBirthdayParadox := 3;
# By default do 1 short orbit tries:
GENSS.TryShortOrbit : ForgetMemory(l);
# Limit for orbit length during orbit estimation using birthday paradox:
GENSS c:= List(l,x->Set(Factors(CharacteristicPolynomial(x,1):
# We immediately take an orbit if its estimate is lower than this limit:
java.lang.StringIndexOutOfBoundsException: Range [40, 5) out of bounds for length 41
# Limit for java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 12
ENSSNrRandElsBirthdayParadox := 6000;
# Set this to false to allow orbits of length 1:
GENSS.Reduced := true;
# Product replacement parameters for Stab:
GENSS. for j in [1..Length(c[i])] do
GENSS.StabScrambleFactor := 1;
GENSS.StabAddSlots := 1;
GENSS.StabMaxDepth := 400;
# Initial limit for orbit length for vv:= EmptyPlist((Length(c[]);
GENSS. Add(vv,[NullspaceMat(Value(c[i][j],l[i])),
# Patience to find random elements mapping the orbit into itself:
GENSS.StabInitialPatience Degree(c[i][j]),
# Maximal amount of memory used for the orbit:
GENSS.StabOrbitLimit := 1000000;
# If the probability of a wrong stabiliser is smaller than this, do no
# longer try to create stabiliser elements:
GENSS.StabAssumeCompleteLimit := 1/(10^7);
# The following switches off the log used in all orbits for stabilizer
# chains if set to false. Do not do WeightVecFFE(CoefficientsOfLaurentPolynomial(c[i][j])[1]),
# doing since since could prevent Schreier trees from being shallow.
GENSS.OrbitsWithLog := true;
########################## 1];
# A d;
################ Add(v,vv);
InstallGlobalFunction( GENSS_CopyDefaultOptions,
function( defopt, opt )
local n;
for n in RecNames(defopt) do
if not(IsBound(opt.(n))) then
pt.(n) := defopt.(n);
fi;
od;
end );
InstallGlobalFunction( GENSS_MapBaseImage,
function( bi, el, S )
# bi must be a base image belonging to S, el a group element
ocal i,l,res;
l := Length(bi);
res := #Now collect alist of all those spaces together with all
i := 1;
while true do
res[i] := S!.orb!. # possible intersects:
i := i + 1;
if i = l w := [];
= !.stab;
od;
return res;
end );
InstallGlobalFunction( GENSS_FindVectorsWithShortOrbit,
# This implements Murray/O'Brien-like heuristicsnw := [];
# It produces new random elements using GENSS_RandomElementFromAbove
# and stores them in forj [1..Length([i])]do
# later usage.
function(g,opt,parentS)
# Needs opt components "ShortOrbitsNrRandoms"
local l, f, data, x, c, onlydegs, for ww in w do
wb, j, ww;
Info(InfoGenSS,4,"Trying Murray/O'Brien heuristics...");
l(GeneratorsOfGroup(g));
f := DefaultFieldOfMatrixGroup(g);
data := opt.FindBasePointCandidatesData;
for i in [1..opt.ShortOrbitsNrRandoms] do
if parentSif Length(inters) > 0 then
x := GENSS_RandomElementFromAbove(opt,0);
else
x := Add(nw,[intersww[],v[][j][]),
fi;
Add(l,x);
Add(data.randpool,x);
od;
ForgetMemory(l);
c := List(l,x->Set(Factors(CharacteristicPolynomial(x,1):
onlydegs := [1..3])));
:= [];
for i in [1..Length(l)] do
for j Append(w,nw);
vv := EmptyPlist(Length(c[i]));
Add(vv,[NullspaceMat(Value(c[i:= i+1;
Degree(c[ijava.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 28
WeightVecFFE(CoefficientsOfLaurentPolynomial(c[i][j])[1]),
1]);
od;
Add(v,vv);
od;
Info(InfoGenSS,4,"Have eigenspaces.");
# Now collect a list of all those spaces together with all
# possible intersects:
w := [];
i := 1;
while i <= Length(l) and Length(w) < GENSS.LimitShortOrbCandidates do
nw := [];
for j in [1..Length(v[i])] do
for ww in w do
inters := SumIntersectionMat(ww[1],v[i][j][1])[2java.lang.StringIndexOutOfBoundsException: Range [64, 65) out of bounds for length 42
Length(inters) > 0 then
Add(nw,[inters,Minimum(ww[2],v[i][j][2]),
Minimum(ww[3],v[i][j][3]),ww[4]+v[i][j][4]]);
fi;
od;
Add(nw,v[i][j]);
od;
Append(w,nw);
i := i + 1;
od;
sortfun :=function(a,b)
if a[2] < b[2] then fi;
elif a[2] > b[2] then return false;
elif a[3] < b[3] then end;
elif a[3] > b[3] then return false;
a4] < b[] then return true;
elif a[4]>b4] then return false;
elif Length(a[1]) < Length(b[1]) then return true;
else return false;
fi;
end;
Sort(w,sortfun);
wb := List(w,ww->ww[1][1]);
for ww in [1.Length(wb) do
for wwin[1..Lengthwb)] do
not(IsMutable(wb[w])) then
wb[ww] := ShallowCopy(wbfi;
fi;
ORB_NormalizeVector(wb[ww]);
od;
return;
end );
InstallGlobalFunction( GENSS_FindShortOrbit,
function( g, opt, parentS )
# Needs opt components:
# "ShortOrbitsNrRandoms" (because it uses GENSS_FindVectorsWithShortOrbit)
# "ShortOrbitsOrbLimit"
# "ShortOrbitsInitialartLimit"
local ThrowAwayOrbit,found,gens,hashlen,i,j,limit,newnrorbs,nrorbs,o,wb;
wb := GENSS_FindVectorsWithShortOrbit(g,opt,parentS);
if Length(wb) = 0 then return fail; fi;
Now we have a list of vectors with (hopefully) short orbits.
# We start enumerating all those orbits, but first only 50 elements:
nrorbs := Minimum(Length(wb),64); # take only the 64 first
gens := GeneratorsOfGroup(g);
o : [];
hashlen := NextPrimeInt(QuoInt(opt.ShortOrbitsOrbLimit,2));
i ( GENSS_IsOneProjective,
Add(o,Orb(gens,ShallowCopy(wb[i]),OnLines,
(treehashsize := hashlen )));
od;
limit := opt.ShortOrbitsInitialLimit;
i := 1; # we start to work on the first one
ThrowAwayOrbit := java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 18
# This removes orbit number i from o, el : s * el;
# Length(o eturn IsOne( el );
# make a copy (of the reference) before calling this function.
if Length(o) > nrorbs then end );
o[i] := o[nrorbs+1];
o{[nrorbs+1..Length(o)-1]} := o{[java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(o[Length(o));
o{[i..java.lang.StringIndexOutOfBoundsException: Range [0, 24) out of bounds for length 0
Unbind(o[nrorbs]);
nrorbs := nrorbs-1;
fi;
end;
repeat
java.lang.StringIndexOutOfBoundsException: Range [12, 1) out of bounds for length 69
java.lang.StringIndexOutOfBoundsException: Range [23, 8) out of bounds for length 32
if Length(o[ # Note th if work -projectively, then the same
Info(InfoGenSS,3,"Orbit Number ",i," has length 1.");
:=false;
# Now throw away this orbit:
ThrowAwayOrbit(i);
# we intentionally do not increase i here!
(ound) then
i := i + 1;
fi;
if i > nrorbs then
Info(InfoGenSS,3,"Done ",nrorbs,
" orbit(s
limit := limit * 2;
if limit > opt.ShortOrbitsOrbLimit then
Info(,3"Limit reached, giving up.);
return fail;
fi;
i := 1;
if nrorbs < i then
Info(opt.VeryShortOrbLimit)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
return fail;
fi;
if nrorbs > 1 then
newnrorbs := QuoInt((nrorbs+1),2);
for j in [newnrorbs+1..nrorbs] TryNextMethod();
Unbind(o[j]);
od;
nrorbs :java.lang.StringIndexOutOfBoundsException: Range [22, 23) out of bounds for length 8
fi;
fi;
until found;
Info(InfoGenSS,2,"Found short orbit of length ",Length(o[i])," (#",i,").");
return o[i];
end );
InstallGlobalFunction( GENSS_IsOneProjective,
function(el)
local s;
s := el[1][ "for a matrix group over a FF, using birthday paradox method",
if IsZero(s) then return [ IsGroup and IsMatrixGroup and IsFin IsRecord, IsInt, IsObject ], 20,
if not(IsOne(s)) then
:= s^-1;
el := s * el;
fi;
return IsOne( el );
end );
#########################################################################
# Now to the heart of the method, the Schreier F : DefaultFieldOfMatrixGroup(grp);
#############################################################################
InstallMethod( FindBasePointCandidates,
"for a scalar matrix group over a FF",
[ IsGroup and d := DimensionOfMatrixGroup)java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
50, weight,
function( grp, opt, i, parentS )
local F, q, d, gens, v;
Info( InfoGenSS, 3, "Finding nice base points orblimit := opt.OrbitLimitBirthdayParadox;
F := DefaultFieldOfMatrixGroup(grp);
q := Size(F);
d : DimensionOfMatrixGroup(grp);
gens := GeneratorsOfGroup(grp);
if IsObjWithMemory(gens[1]) then
gens := StripMemory(gens) orblimit,", randels=",randels,")..." );
fi;
ForAny(ens,x->not(GENSS_IsOneProjective(x))) then
opt.FindBasePointCandidatesData := rec( randpool := [], vecs := [] );
This needed for communication between different methods
TryNextMethod();
fi;
v := ZeroMutable(gens op :=OnPoints;
v[1] := PrimitiveRoot(F); # to indicate the field!
return rec( points := [ else
nd )
nstallMethod( FindBasePointCandidates,
"for a matrix group over a FF, very short orbit",
[ IsGroup and gens := GeneratorsOfGroup)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
, # highest weight,
function( grp, pt,i, parentS )
local F, q, d, gens, op, v, vv, k, kk, o, cand, j;
Info( InfoGenSS, 3, "Finding nice base points (very for round in [1..opt.TryBirthdayParadox]java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
F := DefaultFieldOfMatrixGroup(grp);
q := Size(F);
d := DimensionOfMatrixGroup(grp);
gens := GeneratorsOfGroup(grp);
fi;
gens := StripMemory(gens);
fi;
# # Try:=Filtered(v,vv->ForAny(gens,x-> vv <> op(vv,x)));
# short orbit:
if q = 2 then
ntsjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
else
p : OnLines;
fi;
: [];
# Find first standard basis vector that# unless grp is diagonal and op is OnLines,inwhich case
vv := ZeroMutable( gens[1][1] );
k := 1;
while k <= d do
vvv[]: One(F);
if ForAny(gens,x->op(vv,x) < vector [1,1,...,1] is moved.
Add(v,vv);
break;
fi;
vv[k] := Add(v, Sumv));# add vector [1,1,...,1]
k := k + 1;
od;
# Find last standard basis vector that is moved:
vv := ZeroMutable( gens[1][1] );
kk := : Length(v;
while kk >= k do
vv[kk] := One(F);
if fi;
Add(v,vv);
break;
fi;
vv[kk] := Zero(F);
kk := kk - 1;
od;
# Pick a random vector:
vv := ZeroMutable( gens[1][1] );
if IsPlistRep(vv) then
for j in [1..Length(vv)] do
vvi e :=ListWithIdenticalEntries(l,infinity); #the current estimates
od;
else
Randomize(vv);
i;
ORB_NormalizeVector(vv); rec(hashlen := NextPrimeInt(l * randels * 4)));
Add(v,vv);
# Now investigate these up to a java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 26
for jin[.Lengthv) do
o := Orb(gens,v[j],op,
rec(reehashsize := QuoInt(opt.VeryShortOrbLimit,2)+1));
Enumerate(o,opt.VeryShortOrbLimit);
if Length(o) > 1 and Length(o) < opt.VeryShortOrbLimit then
Info( InfoGenSS, 3, "Found orbit of length ",Length(o) );
cand := rec( points := [v[j]], ops := [op], used := 0 );
# Note that if we work non-projectively, then the sameelse
# point will be taken next with OnRight automatically!
return cand;
fi;
od;
Info fi;
opt.VeryShortOrbLimit );
Append(opt.FindBasePointCandidatesData for i in [1..randels] do
TryNextMethod();
end );
# Method with rank 30 taking x : GENSS_RandomElementFromAbove(opt,0);
InstallMethod( FindBasePointCandidates,
"for a matrix group over a FF, x := GENSS_RandomElementFromAbove(parentS,parentS!.layer);
[ IsGroup and IsMatrixGroup and IsFinite, IsRecord, IsInt, IsObject ], 20,
, opt,mode,parentS )
local F, q, d, randels, immorblimit, orblimit, data, op, v, l, c, e, ht,
,w,cand,minest, minpos, round, i, j, gens;
F := DefaultFieldOfMatrixGroup(grp);
q := Size(F);
;
randels := opt.NrRandElsBirthdayParadox;
immorblimit := opt.OrbitLimitImmediatelyTake;
orblimit := opt.OrbitLimitBirthdayParadox;
Info( InfoGenSS, 3, "Finding base points (java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 20
orblimit,", randels=",randels fi;
data := opt.FindBasePointCandidatesData; # this we get from earlier methods
q=2then
op := OnPoints;
else
if j in t # a coincidence!
fi;
gens := GeneratorsOfGroup(grp);
if IsObjWithMemory(gens[1]) then
gens := StripMemory(gens);
fi;
for round in [1..opt.TryBirthdayParadox] do
v := Set(GENSS_FindVectorsWithShortOrbit[j] : QuoInt(^2,*c[j])java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
if round = 1 then
Append(v,data.vecs); # take previously tried ones as well
fi;
v := Filtered(v,vv->ForAny(gens,x-> vv <> op(vv,x)));
l := Length(v);
if l = 0 then
# Find a vector on which grp acts non-trivially.
# At least one basis "length "e[]," ="c[j],")");
#java.lang.StringIndexOutOfBoundsException: Range [36, 14) out of bounds for length 69
# they might all be fixed. However, in that
# vector [1,1,...,1] is moved.
fori [1..l]do
Add(v, Sum(v)) # add vector [1,1,...,1]
v := Filtered(v,vv->ForAny(gens,x-> vv <> op(vv,x)));
l := Length(v);
fi;
c := 0*[1.l]; # the number of coincidences
nfinity); # the current estimates
ht := HTCreate(v[1]*PrimitiveRoot(F),
rec(hashlen := NextPrimeInt(l * bv := bv{1..3]};# just take 3 of them
for i in [1..l] do
val := HTValue(ht,v[i]);
if val = fail then
);
else
AddSet(val,i);
fi;
od;
for i in [1..randels] do
if parentS = false then
x := GENSS_RandomElementFromAbove(opt,0);
else
:= GENSS_RandomElementFromAbove(parentS,parentS!.layer);
fi;
Add(data.randpool,x);
for j in [1..l] do
if IsObjWithMemory(x) then
w := op(v[j],x!.el);
else
w := op(v[j],x);
fi;
val := HTValue(ht,w);
if val <> fail then # weAdd(cand.points,w);
if j in val then # a coincidence!
c[j] := c[j Add(cand.ops,OnLines);
e[j] := QuoInt(i^2,2*c[j]);
java.lang.StringIndexOutOfBoundsException: Range [30, 24) out of bounds for length 65
(c[j] >= 15 # point will be taken next with OnRight automatically!
Info( InfoGenSS, 2, "Found orbit withjava.lang.StringIndexOutOfBoundsException: Index 67 out of bounds for length 11
"length ",e[j] end );
cand := rec(points := [v[j]], ops := [op],
used := 0);InstallMethod( FindBasePointCandidates, "for a permutation group",
[ IsGroup and IsPermGroup, IsRecord IsObject ],
if i <> j and c[] >= 10 and
e[i] <= orblimit then
Add(cand.points,v[i]);
Add(cand.ops,op);
fi;
od;
if Length(cand.points
Info( InfoGenSS, 2, "Adding ",
Length(cand.points)-1, " more vectors",
to candidates.)java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
fi;
return cand;
fi;
else
AddSet(val,j);
fi;
else
HTAdd(ht,w,[j]);
fi;
od;
od;
minest := Minimum(e);
local name,s,f;
Info( InfoGenSS,2,"Birthday #", round, ": no small enough estimate. ",
"st=",minest," Coinc=",[j] );
randels := randels * 2;
orblimit : orblimit * 4;
od;
TryNextMethod();
end );
InstallMethod( FindBasePointCandidates,
"for amatrix group over a FF, original try short orbit method",
[ IsGroup and IsMatrixGroup and IsFinite, IsRecord, IsInt, IsObject ], 10,
function( grp,opt, i, parentS )
local F, d, data, cand, res;
F := DefaultFieldOfMatrixGroup(grp);
d := DimensionOfMatrixGroup(grp);
data := opt.FindBasePointCandidatesData;
Info( InfoGenSS, 3, "Finding nice base points (TryShortOrbit)..." );
# Next possibly "TryShortOrbit":
cand := rec( points := [], used := 0 );
if IsBound(opt.TryShortOrbit) and opt.java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 5
opt.TryShortOrbit [IsGroup,IsRecord,IsInt, IsObject ],
Info(InfoGenSS,1,"Looking for short orbit (",opt.TryShortOrbit,
"...);
res : GENSS_FindShortOrbit(grp,opt,parentS);
until res <> fail or opt.TryShortOrbit = 0;
if res <> fail then
if Size(F) > 2 then
cand.points := [res[1]];
cand.ops := [OnLines];
# Note that if we work non-java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 24
point will be taken next with OnRight automatically!
else
cand.points := [res[1]];
cand.ops := [OnRight];
fi;
return cand;
fi;
fi;
TryNextMethod();
end );
InstallMethod( FindBasePointCandidates 2:=StabilizerChain(fac);
"for a matrix group over a FF, traditional Murray/O'Brien",
[ IsGroup and IsMatrixGroup and IsFinite, IsRecord, IsInt, IsObject ],
function( grp, opt, i, parentS )
local F, d,bv, cand, w, v;
F := DefaultFieldOfMatrixGroup(grp);
d := DimensionOfMatrixGroup(grp);
(InfoGenSS, 3, "Finding nice base points (Murray/O'Brien)..." );
# Standard Murray/O op2 := GENSS_OpFunctionMaker(op,j);
if i = 0 and
(opt!Projective = false and Size(F)^d > 300000) or
(opt!.Projective = true and Size(F)^(d-1) > 300000)) then
bv := GENSS_FindVectorsWithShortOrbit(grp,opt,parentS);
if Length(bv) < 3 then
bv := MutableCopyMat(One(grp));
fijava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
bv := bv{[1..3]}; # just take 3 cand.sed := ;
else
v : One()java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
fi;
cand := rec( points := [], ops := [], used := 0 );
for v in bv do
w := function( gens, cand, optS )
(F)=2 then
Add(cand.points,w
(candops,OnRight);
else
Add(cand.points,w);
Add( Unbind(opt.FindBasePointCandidatesData);
# Note that if we work non-java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
be taken next with OnRight automatically!
fi;
od;
return cand;
end );
InstallMethod( java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 10
IsGroup andIsPermGroup, IsRecord, IsInt, IsObject ],
function( grp, opt, i, parentS )
local ops,points;
if i=0 then
points :
else
points := [1..LargestMovedPoint(grp)];
fi;
ops : List([1.Length(points)],x>OnPoints);
return rec( if S <> false and(opt.StrictlyUseCandidates)then
end );
GENSS_HACK := OnPoints;
InstallGlobalFunction( GENSS_OpFunctionMaker, function(op,index)
local name,s,f;
name := NAME_FUNC(op);
known" or name ="GENSS_HACK" return fail; fi;
s := Concatenation( "GENSS_HACK := function(x,el) return ",
,"(x,el[",String(index)"]); end;" );
f := InputTextString(s);
Read(f);
return GENSS_HACK;
end);
InstallMethod( FindBasePointCandidates, "for cand : cand );
[ IsGroup, IsRecord, IsIntodjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
function( grp, opt, i, parentS )
local gens,l,cand, if opt.Projecti = false and IsIdenticalObj(S!.orb!.op,OnLines) and
gens := GeneratorsOfGroup(grp);
if not(ForAll(gens,IsDirectProductElement)) or Length(gens) = 0 then
TryNextMethod();
fiNotFixedUnderAllGens(gens,S!.orb[1],OnRight) then
l := Length(gens[1]);
cand := rec( points := [], ops := [] InfoGenSS,3,"Taking same point in non-projective action.);
for j in [..l] do
factgens := List(gens,x->x[j]);
fac := Group(factgens);
S2 := StabilizerChain(fac);
cand2 := BaseStabilizerChain(java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 0
for k in [1..Length(cand2.ops)] do
op := cand2.ops[k];
op2 := GENSS_OpFunctionMaker(op,j);
if op2 <> fail then
Add(cand.points,cand2.points[k]);
Add(cand.ops,op2);
fi;
;
od;
. := 0;
return cand;
end );
InstallGlobalFunction( GENSS_NextBasePoint,
function( gens,cand, opt, S )
local NotFixedUnderAllGens,i,notfixed;
if IsBound(opt.FindBasePointCandidatesData) then pt.Reduced :java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
Unbind(opt.FindBasePointCandidatesData);
fi;
NotFixedUnderAllGens := function( gens, x, op )
IsObjWithMemory(gens[1]) hen
return ForAny( gens, g->op(x,g!.el) <> x );
else
return ForAny( gens, g->op(x,g) <> x );
fi;
end;
# S can be false or a stabilizer chain record
fS<>false and not(opt.StrictlyUseCandidates) then
# try points in previous orbit
for i in [2..Minimum(Length(S!.orb (topS,x;
# We#We it at the top to add it in every orbit above except
Info(InfoGenSS,3,"Taking another #the first one!
return rec( point := S!.orb[i], op := S!.orb!.op,
cand := cand );
fi;
od;
# Maybe we can take the last base point now acting non-projectively?
if opt.Projective = false and IsIdenticalObj(S!.java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 23
NotFixedUnderAllGens(o :=o!.schreierpos[po];
Info(InfoGenSS,3,"Taking same point in non-projective action.");
return rec(point := S!.orb[1], op := OnRight, cand := cand );
fi;
fi;
# Now use the candidates we already have:
repeat
if cand.used >= Length(cand.points) java.lang.StringIndexOutOfBoundsException: Range [0, 48) out of bounds for length 7
if IsBound(cand.points2) and Length(cand.points2) > 0 then
cand := rec( points := cand.points2 end );
used := 0 );
else
cand := FindBasePointCandidates(Group(gens),optInstallGlobalFunction( GENSS_StabilizerChainInner,
opt.StrictlyUseCandidates := false;
.educed := true;
fi;
fi;
and.used := cand.used + 1;
notfixed := NotFixedUnderAllGens(gens,
cand.points[cand.used],and.[cand.]);
if # layer layerin the final stabilizer chain. cand is a (shared)
if IsBound(cand.points2) then
# record for base point candidates and opt the (shared) option
# might want to use these points again:
cand.points2,cand.points[cand.used]);
Add(cand.ops2,cand.ops[cand.used]);
fi;
fi;
until opt.Reduced = false or notfixed;
return rec( point :=
cand : nfo(InfoGenSS,,"Entering GENSS_StabilizerChainInner layer=",layer);
end );
java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 51
function( parentS, gens, size nextpoint,nextop,cand,opt )
# parentS can be false or the parent in the stabiliser chain
local base, layer, stronggens, S := GENSS_CreateStabChainRecord(parentS,gens,size,
Info chain record..." );
if parentS = false then
base := ];
layer := 1;
stronggens := ShallowCopy( Info( InfoGenSS, 3, "Entering orbit layer ",layer,"..." );
layergens := [1..Length(gens)]; # indices in stronggens
else
base := parentS!.base;
layer := parentS!.layer + 1;
stronggens := parentS!.java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 37
nr := Length(stronggens);
Append(stronggens,gens);
layergens := [nr+1..Length(stronggens)];
fi;
gens := ShallowCopy(gens);
# Note that we do ShallowCopy such that the original listelse
one theorbit record are different from each other.
if IsInt(size) then
hashsize := NextPrimeInt(Minimum(size,opt.
else
hashsize := opt.InitialHashSize;
fi;
orb: Orb(gens, nextpoint,nextop,
rec( treehashsize := hashsize, schreier := Info(InfoGenSS, 2, "Layer ", layer, ": Orbit length is ", Length(S!.orb));
log := opt.OrbitsWithLog,
report := opt.Report ) );
S: rec(stab := false, orb := orb, cand := cand, base := base,
opt := opt, layer := layer, parentS := parentS,
stronggens := stronggens, layergens := layergens,
size := size, randpool := [], IsOne := opt.IsOne );
if parentS = false then
S!.topS := S;
else
S!.topS := parentS!.topS;
fi;
(opt.FindBasePointCandidatesData) then
S.randpool := opt.FindBasePointCandidatesData.randpool;
fi S!.orb!.depth,")..")
Add(base,nextpoint);
S(S!.stronggens,S!.orb!.gens{[merk+1.Length(S!orb!.gens)});
Append(S!.layergens,[merk2+1..Length(S!.stronggens)]);
return S;
end );
InstallGlobalFunction( GENSS_RandomElementFromAbove,
function( S, i )
# This function provides a random element java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 7
# in the chain "from above". These elements eventually come S!.orb!.gensi := List(S!.orb!.gens,x->x^-1);
# the one product replacer object in the opt record for the whole
# group. They are java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 0
# infrastructure until they if size <> false and Length(size <> false and Length(S!.orb) = size then
# means a random element in the whole group). If we find out java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 25
#that an orbit is too small (that is, a stabiliser was not complete),
# we fix the stabiliser chain as we go. Random elements that have
# been generated in a layer j < i previously and are not yet java.lang.StringIndexOutOfBoundsException: Range [0, 69) out of bounds for length 7
strong generators can be taken from a pool that was kept in
# the stabiliser chain. S must either be layer i of the stabiliser
# or (for i=0) it can be equal to the options record opt chain.
local SS, x, topS, j, o, p, po;
if i = 0 then
java.lang.StringIndexOutOfBoundsException: Range [8, 1) out of bounds for length 51
fi if not(S!.IsOne(x))
if S!.layer <> i then
Error("i must be equal to the layer");
fi;
SS := S;
while true o # will be left by break
if Length(SS!.randpool) > 0 then
x := Remove(SS!.java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 30
opS : SS!topS;
break;
fi;
ifLength(stabgens) > 0 then # there is a non-trivial stabiliser
if IsBound(SS!.opt.RandomElmFunc) then
x
else
x := Next(SS!.opt.pr);
i;
topS := SS; # remember top
break;
ijava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
else
od;
.layer, that is,
# it is contained in the SS!.layer-1-th stabiliser, +1,cand,S);
j-1;
while j < i do
o := SS!.orb;
if IsObjWithMemory(x) then
p := o!.op(o[1],x!.el);
else
p := o!.op(o[1],x);
fi;
po := Position(o,p);
if po = fail then # not in current stabilizer
Info(InfoGenSS,3,"Random element from top found error in layer ",
SS!.java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 0
)
# We addreport = .java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 46
java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
return GENSS_RandomElementFromAbove(S,i);
fi;
# Now sift through SchreierInfo(InfoGenSS,2,"Doing randomized verification...");
while po > 1 do
=x * ..o.po]java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
od;
SS := ,
j := j + 1;
# java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 69
# After the one productin [IsGroup,IsRecord ],
return x;
end );
GENSS_StabilizerChainInner
gens,size, ,cand, parentS)
# stabiliser S musteither layer #ErrorBound: rational giving the error bound, probability of an
# known). # in this case we got the options
#layer layer in the java.lang.StringIndexOutOfBoundsException: Range [4, 30) out of bounds for length 25
for basepoint candidates andopt java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 66
# record. This is called in StabilizerChain and calls itself.
layer isneeded.
# java.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 65
Info(if!parentS = false then # we have reached the top
next := GENSS_NextBasePoint(gens,cand,opt,parentS);
cand := next.cand; !.opt.andomElmFunc(;
else
nextpointnextopnextcand,;
base or set to OnLines if Projective is set to true,
java.lang.StringIndexOutOfBoundsException: Range [57, 8) out of bounds for length 74
repeat
Enumerate(S!.orb,opt.java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 21
ifnot(S.)
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 42
"Orbitjava.lang.StringIndexOutOfBoundsException: Range [0, 33) out of bounds for length 28
else
"java.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 71
fi;
fi;
until IsClosed(S!.orb);
Info(InfoGenSS, 2, "Layer ", # (except for the trivial# firstone!
if layer > 1 then
S;#such that now java.lang.StringIndexOutOfBoundsException: Range [61, 60) out of bounds for length 68
!
java.lang.StringIndexOutOfBoundsException: Range [12, 6) out of bounds for length 56
(ngth(!orb or !orb!epth > 5 nd
S!.opt.OrbitsWithLog then
Info(InfoGenSS, 3, "Trying to make Schreier tree shallower (depth=",j: j+1;
set to 0 if not #After ,we have successfully reached i-th stabilizer
merkerk := Length(S!.orb!.gens)java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
merk2 := LengthIjava.lang.StringIndexOutOfBoundsException: Range [4, 3) out of bounds for length 30
MakeSchreierTreeShallow(S!.orb);
Append,!orb!gens{merk1.ength(!o!!gjava.lang.StringIndexOutOfBoundsException: Range [75, 74) out of bounds for length 79
Append(S!#layer java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 67
Info(# record for base pointrecord for base point candidates and opt the (shared) option
fi;
fi;
S!.orb!.java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 0
# Are we done?
<,prp,ens,;
S!.proofS =GENSS_CreateStabChainRecordparentS,ens,ize,
Info(nfoGenSS4,LeavingGENSS_StabilizerChainInner # Fist afew preparations, wedelegate java.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 79
turn S;
Info( ,,"Enteringorbit enumeration layer ",layer,"..." );
# Now(.[erk2+.Length(.stronggens)]);
stabgens := EmptyPlist(opt.RandomStabGens);
for i in [1..opt.RandomStabGens] do
x := GENSS_RandomElementFromAbove(S,layer);
if not(S!.IsOne(x)) then
Add(IsIdenticalObj((stabgenssize/ength(.
;
od;
InfoGenSS,"Created "opt.andomStabGens,
" randomS.stab = GENSS_StabilizerChainInnerstabgens,alse,
(tabgens
if Length(stabgens) > 0 then # there is a non-trivial stabiliser
Info(InfoGenSS,3,
then
pt.ImmediateVerificationElements > 0
candoS;
else
zerChainInner(stabgens,false,
layer+1,cand,opt,S);
fi;
if IsString(S!.stab) then return S!.stab; fi;
if opt.ImmediateVerificationElements > 0 then
Info(InfoGenSS,2,"Doing immediate verification in java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 59
S!.layer," (",opt.x := GENSS_RandomElementFromAbove(S,layer
).);
i : Info(InfoGenSS "Immediatejava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 52
#Error("foobar");
java.lang.StringIndexOutOfBoundsException: Range [25, 17) out of bounds for length 58
i+1java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
x := GENSS_RandomElementFromAbove(S,layerjava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
java.lang.StringIndexOutOfBoundsException: Range [48, 18) out of bounds for length 64
Info( InfoGenSS, 2, "Immediate verification found error # Weare java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 78
"(layer ",S!proof =false;
i := 0;
fi;
od;
java.lang.StringIndexOutOfBoundsException: Index 72 out of bounds for length 11
S!.proof := S!.stab!.proof; # hand up information
else
# function( S )
Info(InfoGenSS,3,"Found no non-trivial ones.");
S!.proof :=java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
fi;
Info(InfoGenSS,4,"java.lang.StringIndexOutOfBoundsException: Range [0, 29) out of bounds for length 11
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 13
end );
InstallGlobalFunctionjava.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 20
function( S )
local cand;
cand := rec( points :=i=0;
while S <> false do
Add( cand.points, S!.orb[1] );
Add( cand.ops, S!.orb!.op );
S :=S!java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
od;
return cand;
end );
Possiblejava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
function( p, x )
return p;
end );
InstallMethodif IsStabilizerChain(opt.Base) then
(grp )
return StabilizerChain( grp, rec() )# # java.lang.StringIndexOutOfBoundsException: Range [60, 59) out of bounds for length 66
end );
InstallMethod(VerifyStabilizerChainMC,
zerchain apositiveinteger"java.lang.StringIndexOutOfBoundsException: Range [50, 51) out of bounds for length 50
[ IsStabilizerChainByOrb IsInt]);
function( S, nrels )ound(opt.BaseOps)) then
local x
Info verification..";
i := 0;
while i < nrels do
i := #or is set to OnLines if Projective is set to true,
if IsBound(S!.opt.RandomElmFunc) java.lang.StringIndexOutOfBoundsException: Range [4, 45) out of bounds for length 34
;
else
x := Next(S!.opt.pr);
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
if AddGeneratorToStabilizerChain(S,x) then
Info found error ... ",
"new size ", Size(S) );
i := 0;
od;
end );
InstallMethod( StabilizerChain, "for a group object and a record",
[ IsGroup, IsRecord ],
function( grp, opt )
# Computes a stabilizer chain for the group grp
#Possible options:
# random: compatibility to StabChain, works as # must be a record with components "pointswith components points""ps,
#ErrorBound: rational # "used", thelatter ndicates largestindex
java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 62
given, sets and
# DeterministicVerification
# VerifyElements: number of random elements for java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 24
ification: flag, whether to do or not
# (not yet implemented)
# Base: specify a known base, this can either be the
# StabilizerChain of a known supergroup or a list of
# points, if "BaseOps" is not given, it is either
# set to OnPoints if Projective is not set or Otherwise try#
#or et toO if Projectiveis totrue,
# if Base is set
java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 5
# Projective:
# as generators are thought projective
# elements, that is, the whole StabilizerChain# Add pt.trictlyUseCandidates = java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
# be one for a projective group!
# StrictlyUseCandidates: if set to true exactly the pointsif not( not(opt.rojective)then
.cand be usedas basepoints S = GENSS_StabilizerChainInnerGeneratorsOfGroup(,Sizeg),1,
# points from previous orbits are used first
# fi;
# Reduced:set true fi
# (xcept the trivial group), is true by default
#Cand: initializer for opt.IsOne := GENSS_IsOneProjective
candidates
# must be a record with components "points", "ops",
# "used", the latter java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
# if Length(gens) = 0 or
# set to 0 if not set.
# TryShortOrbit: Number of tries for the short orbit finding alg.
# StabGenScramble,
# StabGenScrambleFactor,
# StabGenAddSlots,
StabGenMaxDepth: for for SetStoredStabilizerChain(grp,S);
# random elements
fi
# vector and enumerate S := GENSS_CreateStabChainRecord(false,gensGENSS_TrivialOp,
# ... to be continued
#
local S,cand,i,pr,prob,x,gens,
First S.!.gensi : ListS.rb!.ens,-x^1;
ptions:
if (HasSize(grp) and not(IsBound(opt.Projective) and opt.Projective))
or IsBoundoptSize) S!#we knew the size in advance
if not(IsBound(opt.ImmediateVerificationElements)) then
ImmediateVerificationElements: 0java.lang.StringIndexOutOfBoundsException: Range [51, 52) out of bounds for length 51
fi;
fi;
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 11
opt.IsOne := GENSS_IsOneProjectivefijava.lang.StringIndexOutOfBoundsException: Range [7, 8) out of bounds for length 7
IsBound(pt.) then
opt.IsOne := #it the opt recordjava.lang.StringIndexOutOfBoundsException: Range [27, 28) out of bounds for length 27
fi;
# Now opt.IsOne is set to a function to check whether or not a x Next(opt.pr)
elementis identity.
GENSS_CopyDefaultOptions(GENSS,opt);
# Check for the identity group:
gens := GeneratorsOfGroup(grp);
if Length(gens) = 0 or
ForAll(gens od;
# Set up a trivial stabilizer chain record:
S!proof :=true;
rec( points := [], ops := [],
used : ),opt);
Enumerate(S!.orb) "mplemented!)java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
: List(S!.orb!gens,x->x^-1);
S!.proof := true;
S!.trivialgroup := true;
if (not(IsBound(opt.Projective)) or
opt.Projective = false) and
IsIdenticalObj(opt.IsOne,IsOne) then
SetStoredStabilizerChain(grp,S);
fi;
return S;
fi;
# Setup a random element generator for the whole group and store
# it in the opt record:
opt.pr := ProductReplacer( gens,
rec( scramble := opt.StabGenScramble,
scramblefactor := opt.StabGenScrambleFactor,
addslots := opt.StabGenAddSlots,
maxdepth := opt.StabGenMaxDepth ));
# Old style error probability for compatibility:
if IsBound(opt.random) then
if opt.random = 0 then
opt.VerifyElements := 0;
elif opt.random = 1000 then
opt.DeterministicVerification := true;
Info(InfoGenSS,1,"Warning: Deterministic verification not yet ",
"implemented!");
else
prob := 1/2;
opt.VerifyElements := 1;
while prob * (1000-opt.random) >= 1 do
prob := prob / 2;
opt. : VerifyElements + 1;
od;
fi;
;
# The new style error bounds:
if IsBound(opt.ErrorBound) then
prob :1/;
opt.VerifyElements java.lang.StringIndexOutOfBoundsException: Range [27, 28) out of bounds for length 7
while prob >= opt.ErrorBound do
prob := prob / 2;
opt.VerifyElements := opt.optVerifyElements := 1;
od;
fi;
point java.lang.StringIndexOutOfBoundsException: Range [33, 32) out of bounds for length 33
if IsBound(opt.Base) then
if IsStabilizerChain(opt.Base) then
cand := java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 16
else # directly take the base points:
cand := rec( points := opt.Base, used := 0, points2 := [],
java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 7
if not(IsBound(opt.BaseOps)) then
# Let's guess the ops:
if IsBound(opt.Projective) and opt.Projective = true then
cand.ops := java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 40
OnLines)java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
else
cand.ops :=
;
fi;
else
cand.ops := opt.BaseOps;
fi;
fi;
opt.StrictlyUseCandidates := true;
elif # Otherwisetry things using generic java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
cand := opt.Cand;
if not(IsBound(cand.used)) then
java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 7
fi;
cand.points2 := [];
cand.ops2 := [];
tryjava.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 69
cand := rec( points := [], )
fi;
notIsBound(.trictlyUseCandidates)) then
fi;
fi;
if HasSize(grp) and not(opt.Projective)else
S := (GeneratorsOfGroup(grp), Size(grp), 1,
cand, opt, false)
) then
S := GENSS_StabilizerChainInner(java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 30
cand, opt, false);
else
(!trivialgroup)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
cand, opt, java.lang.StringIndexOutOfBoundsException: Range [0, 57) out of bounds for length 7
fi;
if IsString(#return ;
Dowe a if r.isonethen # already inthe !
if S!.proof then
sBound(opt.) opt.rojective =false then
SetStoredStabilizerChain(grp,S# a possible java.lang.StringIndexOutOfBoundsException: Range [39, 39) out of bounds for length 7
fi;
return S;
fi;
if opt.erifyElements =0thennInfo(2,"nown not reached,hrowingin random ",
Info(2" # (the sift ran all through java.lang.StringIndexOutOfBoundsException: Range [40, 39) out of bounds for length 75
Now apossible verification phase:
if S!.size <> false then # we knew the size in advance
Info(x:Next(.pr)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
while Size(SnfAddGeneratorToStabilizerChainSx then
nfo(nfoGenSS,,Known sizenot ,throwing a andom ,
"element...");
if IsBound(opt.RandomElmFunc) then
.RandomElmFunc(;
if (not(IsBound(opt.Projective)) or opt.Projective = false) and
x := Next(opt.pr);
fi;
if AddGeneratorToStabilizerChain(S,x) then
Info( InfoGenSS, 2, "Increased size to java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 8
VerifyStabilizerChainMCS,optVerifyElements);
od;
".");
if (not
IsIdenticalObj(opt.while do
(grp,;
fi;
else
# if not(IsClosed(SS!.orb)) then
abilizerChainMC(,opt.VerifyElements);
fi;
return toolong,increase !.opt.OrbitLengthLimit;
SS := S;
whilereturn java.lang.StringIndexOutOfBoundsException: Range [13, 14) out of bounds for length 13
if java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 0
SS!.randpool := [];
fi;
: !.stab;
oduntil SS!);
return S;
end );
InstallMethod( AddGeneratorToStabilizerChain,
for astabilizer and java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 21
ifS!IsOne(el)
)
# Increases the set represented by S by the generator el.
r,i, java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 39
if IsBound(S!.trivialgroup) and S!.trivialgroup then
!.sOne(
return false;
fi;
SS := StabilizerChain(Group(el),S!.java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 32
if IsString(SS) then return SS; fi;
for n in java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 0
S!.(n) := SS!.(n);
d;
Unbind(S!.trivialgroup);
return true;
fi;
: Now wehave addeda ew generator oa layer layer java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
# if this is one then el is already contained in the (1) the sift stopped somewhere and we have to add a generator
ainthe group!
return false;
ijava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
Now thereremain two java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
# (1) the sift stopped somewhere and we have to Info( InfoGenSS, 2, "Adding new generator to sta,
# ran all the chain and theelement stillAdd(!stronggens,r.rem;
# the identity, then we have to prolong the chain
if r.S <> false then # case (1)
SS := r.S;
InfoGenSS ,"dding generator java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 45
"innewstrongnr: S!stronggens;
(SS!stronggens,r.
Add(SS!.java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 7
.rem]);
AddS!orb!gensir. Add(SS!.orb!.gensi,r.rem
newstrongnr := Length(SS!.stronggens);
Info( InfoGenSS, 4, "Entering orbit enumeration layer ",SS!.layer,
"..." );
repeat
numerate(SS!.orb b)
if if java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 30
ison := S!IsOne
return "Orbit too long, Note that we do not create a pr instance h
if IsString!stab) then return SS!stab;fi;java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56
Error("Orbit too long, increase S!.opt.OrbitLengthLimit!");
fi;
fi;
);
Info( InfoGenSSS:!stab
SS! od;
else ,we to it the replacer
# Note that we do not create a pr instance here for one
# generator, this will while <>false do
SS := r.preS;
newstrongnr := Length(SS!.stronggens)+1; # r.rem will end up there !
SS!.stab := GENSS_StabilizerChainInner([r.rem]java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 12
SS!.layer+1,SS!.cand, SS!.opt, SS );
if IsString(SSifpo=fail then#notin
SS (isone =false,rem =x, S : ,preS :preS ;
fi;
(or a new atlayer ,
# the new gen came from layer S (we were called here, after all),
# java.lang.StringIndexOutOfBoundsException: Range [18, 10) out of bounds for length 18
# and SS (exclusively) are also closed under the new generator r.rem,
# we add it to all these orbits, thereby also making the Schreier trees
# shallower:
while S!.layer < SS!.layer do
2, generator to orbit in layer",S!layer);
Add(S!.layergens,newstrongnr);
AddGeneratorsToOrbit(S!.orb,[r.rem]);
Add(S!.orb!.gensi,r.rem^-1);
S := S!.stab;
od;
# Finally, we have to add it to the product replacer!
AddGeneratorToProductReplacer(S!.opt!.pr,r.rem);
return true;
end );
InstallMethod( SiftGroupElement, "for a stabilizer chain and a group element",
[ IsStabilizerChain IsStabilizerChainByOrb, ],
function( S, x )slp: fail );
local o,p,po,preS,r,isone;
isone := S!.IsOne;
preS := false;
while S <> false do
o := S!.orb;
if IsObjWithMemory(x) then
p := o!.op(o[1],x!.el);
else
p := o!.op(o[1],x);
;
po := r.slp := StraightLineProgramNC(
if po = fail then # not in current stabilizer
return rec( isone := false, rem := x, S := S, preS := preS );
fi;
# Now sift java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 22
while po > 1 do
x := x * S!.orb!.gensi[o!.schreiergen[po]];
po : .[;
od;
preS := S;
S := S!.stab;
od;
r := rec( rem := x, S := false, preS := preS, isone := isoneend ;
return r;
end );
InstallMethod( SiftGroupElementSLP,
"for a stabilizer chain and a group element",
[ IsStabilizerChain and IsStabilizerChainByOrb, IsObject ]
S )
preS := while po > 1 do
isone := S!.IsOne;
nrstrong := Length(S!.stronggens);
slp := []; # will be reversed in the end
S > o;
:=S!orb;
p:= o.tab;
po := Position(o,p);
java.lang.StringIndexOutOfBoundsException: Range [13, 10) out of bounds for length 55
return rec( isone := false, rem := x, S := S, preS := preS,
slp := fail );
fi;
# Now sift through java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 16
>1do
=xAddo.gensi,^1)java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
Add(slp,1);
Add(slp,S!.layergens[o!.schreiergen[po]]);
:= o.schreierposp];
od;
S;
S := S!.stab;
java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
r := slp :=slp :opos :1
if r.isone then
if Length(slp) = 0 then # element was the identity!
r.slp := StraightLineProgramNC([[1,Enumerate(o,!opt.OrbitLengthLimit
else
r.slp := StraightLineProgramNCif po = then #not current stabilizer
gth(slp)-1.1}e
;
else
r.slp := fail;
fi;
java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 13
nd)java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
InstallMethod(StrongGenerators,"or astabilizer ",
[ IsStabilizerChain and java.lang.StringIndexOutOfBoundsException: Range [0, 48) out of bounds for length 37
)
return S!.stronggens;
end );
NrStrongGenerators,"or a stabilizerchain"java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 60
[ IsStabilizerChain and IsStabilizerChainByOrb ],
InstallMethod( GENSS_CreateSchreierGenerator,
return Length(S!.stronggens);
end );
InstallMethod( ForgetMemory, "for a stabilizer chain",
[ IsStabilizerChain and IsStabilizerChainByOrb ],
function( S )
ForgetMemory(S!.stronggens);
while S <> false do
java.lang.StringIndexOutOfBoundsException: Range [15, 13) out of bounds for length 22
ForgetMemory(S!.orb!.gensireturn r
S := S!.stab;
od;
end ;
InstallMethod(AddNormalizingGenToLayer,
"java.lang.StringIndexOutOfBoundsException: Range [15, 6) out of bounds for length 64
[ IsStabilizerChain and java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 34
function( S, x, p )
# This is a very specialised function which is not officially documented.
# It is used for the matrix PCGS code where a stabiliser chain is
# built up using a fjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 8
# where the generators are the java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 8
known java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 2
is new normalisingthe
# group generated by the previous generators in the# function java.lang.StringIndexOutOfBoundsException: Range [17, 18) out of bounds for length 15
# byS.So ## nrgens,nrschro,rds,res,bsgs,lp,ubgens,wxjava.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 73
# stabiliser chain but the layer where actually # ForgetMemory(!
# Namely, since it is known that the new generator generates
# a group which is p times as big as the previous one (p a prime)
# it is known that the orbit in the given layer will become
# p is is a very specialised function which is not officially documented.
local lmp,o,#It is # :VerifyStabilizerChainTC(!);
;
oldnrgens: Lengtho.ens;
Add is knownabout java.lang.StringIndexOutOfBoundsException: Range [26, 27) out of bounds for length 26
Add(o!.gensi,x^-1);
if java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 34
lmp : (o!.)java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
if lmp > Length(o!.tab) then
Append(o!.tab,ListWithIdenticalEntries(lmp-Length(o!.tab),0));
#it java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 63
fi;
ResetFilterObj(o,java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 15
!.os : ;
o.: o+# akeSchreierGens =function(java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
repeat
Enumerate(o,S!.opt.OrbitLengthLimit);
if not(IsClosed(o)) then
if S!.opt.FailInsteadOfError
return "Orbit too long, increase S!.opt.OrbitLengthLimit";
else
Error("Orbit too long, increase S!.opt.OrbitLengthLimit!");
fi;
fi;
until IsClosed(S!.orb);
o!.genstoapply := [1..Length(o!.gens)];
Now up stabilizer java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 45
notxS!.
Add(S!.stronggens,x);
Add(S!.layergens,Length(S!.stronggens));
fi;
Unbind(S!.size); # whatever +1.Length(gs)do
end );
java.lang.StringIndexOutOfBoundsException: Range [44, 13) out of bounds for length 46
"for a stabilizer chain, a position in the first orbit and a gen number",
[ IsStabilizerChain and IsStabilizerChainByOrb, IsPosInt, IsPosInt ],
function( S, i, j )
local o,p,w1,w2;
# return [,S!layer]java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
p := Position(o,o!.op(o[i],o!.gens##Grels[k] := Grels[k] / ResultOfStraightLineProgram(slp.slp,
if o!.schreierpos[p] = i and o!.schreiergen[p] = j then
return fail;
fi;
w1 := TraceSchreierTreeForward(o,i);
w2 := TraceSchreierTreeBack(o,p);
return [w1,j,w2];
nd ;
java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
function( gens, word )
if Length(word) = 0 then
return gens[1]^0;
else
{word
fi;
end );
InstallGlobalFunction( VerifyStabilizerChainTC,
urrentlynotfunctional!; fail; )java.lang.StringIndexOutOfBoundsException: Index 71 out of bounds for length 71
## function( S )
## local Grels,Hrels,# Info(InfoGenSS2,Coset !;
# newpres,nrschr,,ordspressbsgsslp,java.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 73
## cosetnrlimitfactor;
##
## allstrong := function(S)
## st := Set(S!.layergens);
## while S!.stab <> false do
## S := S!.stab;
## UniteSet(st,S!.layergens);
## od;
java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 20
## end;
## if S!.stab <> false then
# java.lang.StringIndexOutOfBoundsException: Range [20, 16) out of bounds for length 53
## if IsList(pres) then##for in1.rgens]do
## strongbelow Addnjava.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 53
## else
## pres := StraightLineProgram([[]],0);
# : [;
## fi;
## strong := allstrong(S);
## Info(InfoGenSS,1,"Verifying stabilizer chain in layer ",S!.layer);
##
## # First afew Schreiergenerators:
## sgs := [];
## i := 1;
###else
## o := S!.orb;
## nrgens := Length(o!.gens);
## ## (li,gsk]3+);
## local sg;
## Info(InfoGenSS,3,"Creating ",n," Schreier generators...");
## while Length(sgs) < n and
## i <= Length(o) do
## sg := GENSS_CreateSchreierGenerator(S,i,j);
# j =j ;
## if j > nrgens then
## j := 1;
## i := i + 1;
## fi;
## if sg <> fail then
## Add(sgs,sg);
## fi;
## od;
## end;
##
##function(gensgrelsfsgensljava.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
## MakeSchreierGens(nrschr);
));
## gens := GeneratorsOfGroup(f);
## gensi := List(gens,x->x^-1);
## subgens := gens{List(strongbelow,i->Position(strong,i))};
## Hrels := ResultOfStraightLineProgram(pres,subgens);
## if S!.opt.Projective then
## ords := List([1..nrgens],i->ProjectiveOrder(o!.gens[i]));
## else
## ords := List([1..nrgens],i->Order(o!.gens[i]));
## fi;
## Prels := List([1..nrgens],i->gens[i+sb]^ords[i]);
## Grels := [];
## cosetnrlimitfactor := 4;
## while true do # will be left by return eventually
## for k in [Length(Grels)+1..Length(sgs)] do
## Grels[k] := GENSS_Prod(gens,sgs[k][1]+sb) * gens[sgs[k][2]+sb] *
## GENSS_Prod(gensi,sgs[k][3]+sb);
## x := GENSS_Prod(o!.gens,sgs[k][1]) * o!.gens[sgs[k][2]] *
sisgsk[];
## if S!.stab <> false then
# rmax= java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 15
# if slpisone then
## return [fail,S!.layer]fijava.lang.StringIndexOutOfBoundsException: Range [54, 55) out of bounds for length 54
# fi;
# knew before, we know no longer := [;
##for gen in do
## sgs[ g: java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
## else
## if not(S!.IsOne(x)) then
## return [fail,S!.layer];
## fi;
## sgs[k][4] := false;
#fi;
## od;
## Info(InfoGenSS,2,"Doing coset enumeration#ute .
## cosetnrlimitfactor*Lengthwhile java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 27
## ct := java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 28
## subgens: end
## if ct = fail then # did not java.lang.StringIndexOutOfBoundsException: Range [0, 47) out of bounds for length 32
## java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 12
## Info(InfoGenSS,2,"Coset enumeration did not finish!");
##
## if nrschr > Length(sgs) # or
## # nrschr > S!.opt.MaxNumberSchreierGens odjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
## then # we are done!
## # Something is wrong!
## return [fail, S!.layer];
###rgens =Lengtho!ens
#
#(InfoGenSS2"marked int coset
## " java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 17
;
## if Length(ct[1]) = Length(o) then
#:
## l := GeneratorsWithMemory(
## ListWithIdenticalEntries(S!.nrstrong,()));
## li := List(l,x->x^-1);
## newpresGENSS_DoToddCoxeter :=function(r java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
## l{[1..S!.strongbelow]});
## for k in [1..nrgens] do
## Add(fgens := r.fgens;
## od;
## for k in [1..Length(sgs)] do
## if sgs[k][4] <> false then
## Add(newpres,
## GENSS_Prod(l,sgs[k][1]+sb)*l[sgs[k][java.lang.StringIndexOutOfBoundsException: Range [0, 69) out of bounds for length 22
## GENSS_Prod(li,sgs[k][3]+sb) : [6]
## ResultOfStraightLineProgram(sgs[k][4],l)^-1);
## else
## Add(newpres,GENSS_Prod(l,sgs[k][1]+sb)*l[sgs[k][java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
## GENSS_Prod(li,sgs[k][3]+sb));
## < 0 do
## od;
## Info(InfoGenSS,2,"Found presentation for layer ",S!.layer,
## " using ",Length(newpres)," relators.");
## return SLPOfElms(newpres);
## fi;
## fi;
## nrschr := QuoInt(nrschr*4,2);
## MakeSchreierGens(nrschr);
## od;
## end);
GENSS_CosetTableFromGensAndRelsInit :=
function(fgens,grels,fsgens,java.lang.StringIndexOutOfBoundsException: Range [2, 33) out of bounds for length 22
local Append(i]newrels[];
firstFree, lastFree, # first and last free coset
firstDef, lastDef, # first and last defined coset
table, # columnsjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
rels#ordspr,elssb,,subgens,c,ords;
relsGen#
ifstab <>false
i, gen, inv, # loop variables for generator
g, # loop variable for generator col
variables relation
p, p1, p2, # generator##pres## pres next =[2 .limit ;next[1]: ; nextlimit]
, list for M'
j, # integerjava.lang.StringIndexOutOfBoundsException: Range [0, 46) out of bounds for length 0
java.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 65
: ;
nums,
l,
nrdef, # number of defined cosets
nrmax, # ## subgens := gens{[1..S!.strongbelow]java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 64
nrdel # number of deleted cosets
nrinf; fi;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
Info( java.lang.StringIndexOutOfBoundsException: Range [0, 21) out of bounds for length 17
nrdef := return# =[]java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
nrmax := 1;
nrdel
java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
# define one coset ()
:= ;
firstFree := 2; lastFree :
the thatlinktogetherall
next := [ 2 .. limit + nrmax= .nrmax;
prev := [ 0 .. limit - 1 ]; prev[2] := 0;
# compute the representatives for the relators
rels := RelatorRepresentatives( grels );
# make the columns for the generators
## od;
for gen in fgens do
g := ListWithIdenticalEntries( limit, 0 );
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 24
if not ( x java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 22
r java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 30
fi;
Add( table, g );
od;
# make the rows for the relators and distribute over relsGen
# [java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 44
# make the rows for the subgroup generators
subgroup := [];
for rel in fsgens do
#T this code should use ExtRepOfObj -- its faster
# cope with SLP elms
if (
else
# a java.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 76
length := Length( rel );
length2 := 2 * length;
nums := [ ]; r.nrmax: nrmax
cols = ];colslength2]=0;
# compute r.: ;
i := 0; j := 0;
while i < length do
i := i + 1; java.lang.StringIndexOutOfBoundsException: Range [0, 26) out of bounds for length 0
gen := Subword( rel, i, i );
p := Position( fgens, gen );
if p = fail then
p := Position( fgens, gen^-1 );
p1 := 2 * p;
p2 := 2 * p - 1;
else
p1 := 2 * p - 1;
p2 := 2 * p;
fi;
nums[j] := p1; cols[j] := table[p1];
nums[j-1] := p2; cols[j-1] := table[p2];
od;
Add( subgroup, [ nums, cols ] );
od;
# make the structure that is passed to 'MakeConsequences'
app := [ table, next, prev, relsGen, subgroup,
firstFree, lastFree, firstDef, lastDef, 0, 0 ];
# we do not want minimal gaps to be marked in the coset table
app[12] := 0;
return rec(for iin java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 69
app := app, closed := false, table := table, limit := limit,
fgens := fgens );
end;
GENSS_DoToddCoxeter := function( r )
local app,fgens,firstDef,firstFree,gen,i,inv,lastDef,lastFree,next,nrdef,
nrdel,nrinf,nrmax,prev,relsGen,subgroup,table;
fgens := r.fgens;
nrdef := r.nrdef;
nrmax := r.nrmax;
nrdel := r.nrdel;
nrinf := r.nrinf;
app := r.app
table := app[1];
next := app[2];
prev := app[3];
relsGen := app[4];
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 24
lastFree#allgens{[1,.2# thatare differentjava.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45
:app[;
=app[;
# run over all the cosets:
< 0do
java.lang.StringIndexOutOfBoundsException: Range [18, 8) out of bounds for length 65
for i in [ 1 .. Length( table ) ] # app[[1]1];
: tablei]java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
if# words:= ExtRepOfObjnewrel[1)java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
=#indTwoWords =oopgens,a)
# if necessary expand the table
if firstFree = 0 then
;
app[7] := lastFree;
[8]: firstDefjava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
app[9] := lastDef;
n =;
. :=nrmax;
r.nrdel := nrdel;
java.lang.StringIndexOutOfBoundsException: Range [27, 20) out of bounds for length 37
return fail;
;
java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
nrdef := nrdef + 1;
if nrmax <= firstFree then
java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 39
fi;
# define a new coset
gen[firstDef] := firstFree;
inv[firstFree] := firstDef;
next[lastDef] := firstFree;
prev[firstFree] := lastDef;
lastDef := firstFree;
=next[firstFree];
next[lastDef] := 0;
# set up the deduction queue and run over it until it's empty
app[6] := firstFree;
app[7] := lastFree;
app[8] := firstDef;
app[9] := lastDef;
app[10] := i;
app[11] := firstDef;
nrdel := nrdel + MakeConsequences( app );
firstFree := app[6];
lastFree := app[7];
:=app[];
lastDef ptsrev[] :=new;
# give some information
if nrinf <= nrdef+nrdel then
Info( InfoFpGroup, 3, "\t", nrdef, "\t", nrinf-nrdef,
"\t", 2*nrdef-nrinf, "\t", nrmax );
nrinf := ( Int(nrdef+nrdel)/1000 + 1 ) * 1000;
fi;
fi;
od;
firstDef := next[firstDef];
od;
Info( InfoFpGroup, 2, "\t", nrdef, "\t", nrdel, "\t", nrdef-nrdel, "\t",
nrmax );
# separate pairs of identical table columns.
for i in [ 1 .. Length( fgens ) ] do
if IsIdenticalObj( table[2*i-1], table[2*i] ) then
table[2*i] := StructuralCopy( table[2*i-1] );
fi;
od;
# standardize the table
StandardizeTable( table );
# return the success result
r.losed =true;
return true;
end;
GENSS_ToddCoxeterExpandLimit := function(r,newlimit)
local app,g,l,limit,next,prev,table;
itthen r; fijava.lang.StringIndexOutOfBoundsException: Range [45, 46) out of bounds for length 45
app := #
table := app[1];
next := app[2];
prev := app[3];
limit := r.limit;
# Info(InfoGenSS2"enumeration ,rcosets,"cosets.)java.lang.StringIndexOutOfBoundsException: Index 81 out of bounds for length 81
prev[newlimit] := newlimit-1;
for gintabledog[newlimit]:0; odjava.lang.StringIndexOutOfBoundsException: Range [46, 47) out of bounds for length 46
for l in [ limit+2 .. newlimit-1 ]
next[l] := l+1;
prev[l] := l-1;
for g in table do g[l] := 0; od;
od;
next[limit+1] := limit+2;
prev[limit+1] := 0;
for g in table do g[limit+1] := 0; od;
app[6] := limit+1; # this is firstFree
r.limit := newlimit;
app[7] := newlimit; # this is lastFree
# java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4
GENSS_TCAddRelators := function(r,newrels)
local i,relsGen;
newrels := RelatorRepresentatives(newrels);
newrels := RelsSortedByStartGen( r.fgens, newrels, r.table, true );
relsGen := r.app[4];
for i in [1.# if .tab > then
(],[i]java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
od;
end;
## VerifyStabilizerChainTC5 :=
## ( java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
ndTwoWordsGrelsHPrels,allgens,osetlimitdone,l,,
## gens,gensi,hom,k,l,li,newpres,newrel,nrcosets,nrgens,o# =ShallowCopy(et(S!.rb# words[2] then
# ,,rsb,tronggens,trongi,cwords;
##
## if S!.stab <> false then
## pres := VerifyStabilizerChainTC5(S!.stab);
## if IsList(pres) then return pres; fi;
## else
## pres := StraightLineProgram([[]],0);
#fi;
## Info(InfoGenSS,1,"Verifying stabilizer chain in# # iftctable[][]<>0
#
## o := S!.orb;
## nrgens := Length(o!.gens);
## sb := S!.strongbelow;
##
# f := sb+;
## gens := GeneratorsOfGroup(f);
## gensi := List(gens,x->x^-1);
#if o >Length(!.)then
# [13.*Length# Print(-c;
## allgens{[2,4..2*Length(gens)# return fail;
## subgens := gens{[1..S!.strongbelow]};
## Hrels := ResultOfStraightLineProgram(pres,subgens);
#ifS.## # Now wea breadth- orbitsuch inversesof
## ords := List([1..nrgens],## # generators are again generatgeneratorsagain# Info(InfoGenSS,2,"Currently using ",Length(Hrels),"+",
## else## (rels,"+"Lrels) java.lang.StringIndexOutOfBoundsException: Range [65, 64) out of bounds for length 68
## ords := List([1..nrgens],i->Order(o!.gens[i]java.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 40
#ijava.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
## Prels := List([1..nrgens],i->gens[i+sb]^ords[i]);
## Grels := [];
# stronggens = trongGenerators();
## strongi := List(stronggens,x->x^-1);
## opgens := 0*[1..2*Length(stronggens)];
## opgens{[1,3..2*Length(stronggens)-1]} := stronggens;
## opgens{[2,4..2*Length(stronggens)]} := strongi;
##
## # Now start up a coset enumeration:
## cosetlimit :#if < then returnres;f;
## Info(InfoGenSS,2,"Starting coset enumeration java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 4
# , and"(),
## "+",Length(Prels),"+",Length(Grels)," relations...");
#### in [..!depth]do
## tc := GENSS_CosetTableFromGensAndRelsInit(gens,rels,subgens,cosetlimit);
## done := GENSS_DoToddCoxeter(tc);
##
# : functionoopgens,table)
## local TraceWord,cosets,cosetsrevtab,i,j,new,nrcosets,pt,pts,
## ptsrev,schgen,schpt,w1,w2,x,y;
## java.lang.StringIndexOutOfBoundsException: Range [22, 20) out of bounds for length 41
## cosets := [1];
## cosetsrevtab := 0*[1..nrcosets];
## cosetsrevtab[1] := 1;
## pts := [o[1]];
## ptsrev := 0*[1..Length(o)];
## ptsrev[1] := 1;
# := f]; # he Schreier
## schgen #else
## i := 1tab[]: ;
#ceWord: nction(pos)
## local w;
## w := [] ;
## while pos > 1 do
## Add(w,schgen[pos]);
## pos := schpt[pos];
## od;
## return Reversed(w);
## end;
## while i <= Length(cosets) do
## for j in [1..Length(opgens)] do
## x := table[j][cosets[i]];
## if x <> 0 then # image is defined:
## if cosetsrevtab[x] = 0 then # not visited
## Add(cosets,x);
## new := Length(cosets);
## cosetsrevtab[x] := new;
## schpt[new] := i;
## schgen[new] := j;
## pt := o!.op(pts[i],opgens[j]);
## y := Position(o,pt);
## if ptsrev[y] = 0 then
## Add(pts,pt);
# ptsrev[ = java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
## else
## # have anew word that
## # maps the starting point of the orbit to the
# samepointasthe of java.lang.StringIndexOutOfBoundsException: Range [73, 74) out of bounds for length 73
## w1 := TraceWord(ptsrev[y]);
## w2 := TraceWord(new);
## return [w1,w2];
## fi;
## fi;
## fi;
## od;
## i := i + 1;
# od;
## Error("Bad, this should never have been reached!");
#;
## end;
##
## ## # this subtree notneed to be done!
## if done = true then
## nrcosets := Length(tc.table[1]);
## Info(InfoGenSS,2,"Coset enumeration found ",nrcosets," cosets.");
## if nrcosets = Length(o) then
## # Verification is OK, now build a presentation:
## l := GeneratorsWithMemory(
##ListWithIdenticalEntries(S!.nrstrong,()));
## newpres := ResultOfStraightLineProgram(pres,
## l{[1..S!.strongbelow]});
## for k in [1..nrgens] do
## Add(newpres,l[k+sb]^ords[k]);
## od;
## hom := GroupHomomorphismByImagesNC(f,Group(l),gens,l);
## for k in Grels do
##Addnewpres,ImageElm(hom,k));
## od;
## Info(InfoGenSS,2,"Found presentation for layer ",S!.layer,
## " using ",Length(newpres)," relators.");
#### :=TraceSchreierTreeForward(op;
##elif nrcosets < Length(o) then
## Error("This cannot possibly have happened!");
## return [fail,S!.layer];
## else # ## #Lengthgens)w1,,,\n";
## Info(InfoGenSS,2,"Too many cosets, we must have forgotten ",
## "another relation!");
## Error("This cannot possibly have #else
## return [fail,S!.layer# = (!.,)
## fi;
## fi;
## # Now we have to find another relation, we do a breadth-first
## # search through the already defined cosets to find two cosets
## # that are still different but ought to be equal because the
## # corresponding orbit points are equal:
## words := FindTwoWords(o,opgens,tc.table);
## el := EvaluateWord(opgens, # Schreier generator is OK, we do not have to
## r := SiftGroupElementSLP(S,el);
## if not(r.isone) then
## # Error, we found a new stabilizer element!
## return [fail,S!.layer,el];
## fi;
## newrel := [(EvaluateWord(allgens,words[1])
## /EvaluateWord(allgens,words[2]))
## / ResultOfStraightLineProgram(r.slp,gens)];
## GENSS_TCAddRelators(tc,newrel);
## Add(Grels,newrel[1]);
## if Length(words[1]) > 0 then
## tc.app[10] := words[1][1];
## else
## # More difficult:
## words := ExtRepOfObj(newrel[1]);
## if words[2] > 0 then
## tc.app[10] := 2*words[1]-1;
## else
## tc.app[10] := 2*wordstjava.lang.StringIndexOutOfBoundsException: Range [42, 43) out of bounds for length 42
## fi;
## function( S )
## #Print("<\c");
## #for i in [1..tc.limit] do
## # for j in [1..Length(allgens)] do
## # if tc.table[j][i] <> 0 then
## # tc.app[11] := i;
## a[ =j;
# tc. =tc. + MakeConsequences .);
## # fi;
## # od;
## #od;
#end ;
## # ;
## #Print("-\c");
# : java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 21
## #Print(">\c");
## if Length(Grels) mod 100 = 0 then
## #Print("\n");
## Info(InfoGenSS,2,"Currently using ",Length# java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
## Length(Prels),"+",Length(Grels)," relations.");
## fi;
## od;
## end;
##
## VerifyStabilizerChainMax :=
## function( S )
## local bl,count,d,gens,i,invtab,j,k,o,p,r,res,s,w1,w2,x,xi,y,isone;
##
## isone := S!.IsOne;
## if S!######################################################java.lang.StringIndexOutOfBoundsException: Index 77 out of bounds for length 77
## res := VerifyStabilizerChainMax(S!.stab);
## if res <> true then return res; fi;
## fi;
## Info(InfoGenSS,1,"Verifying stabilizer chain in layer ",S!.layer,
## " (orbit of length ",Length(S!.orb),")");
##
#size =size Length(S!orb)java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
## gens := ShallowCopy(Set(S!.orb!.gens));
## invtab := [];
## k := Length(gens);
## for i in [1..k] do
##x =gens[];
## xi := x^-1;
## p := Position(gens,xi);
## if p = fail then
## Add(gens,xi);
## invtab[i] := Length(gens);
## invtab[Length(gens)] InstallMethod(Vjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 8
## else
## invtab[i] := p;H]doPrint" )java.lang.StringIndexOutOfBoundsException: Range [52, 53) out of bounds for length 52
## fi;
## od;
## o := Orb(gens,S!.orb[1],S!.orb!.op,rec(schreier := true, log := true));
## Enumerate(o);
##
## if Length(o) <> Length(S!.orb) then
ijava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 7
## return fail;
## fi
## Unbind(if S!.stab <> false
## # Now we have a nicefi;
## # generators are again generators.
## # First check whether the generators fix the first point:
## forSS :=;
## if SS < falsedo
# java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 35
## if S!.stab = false then
## r :local l, SS, i, o, pos;
## else
## r := SiftGroupElement(S!.stab,x);
## fi;
## if not(r.isone) then
## return [failwhilei=Lengthbi)do
## fi;
## fi;
## od;
##
# :=BlistList[.engtho][)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
## for d in [1..o!.depth] do
## Info(InfoGenSS,2,"Testing in depth ",d," (of ",o!.depth,") checking ",
## o!.depthmarks[d+1]-o!.depthmarks[d]," points (of ",Length(o),")");
## for i in [o!.depthmarks[d]..o!.depthmarks[d+1]-1] do
## # These indices contain points in depth d
## if bl[o!.schreierpos[i]] then
## # this subtree does not need to be done!
## bl[i] := true; # mark subtree as done
## else
## x := o[i];
# java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 49
## if j <> invtab[o!.schreiergen[i]] then
## y := o!.op(x,gens[j]);
## p := Position(o,y);
## # if p > i then this is a new point, do nothing
## if p <= i then
## count := count + 1;
## w1 return S!.proof;
## w2 := TraceSchreierTreeForward(o,p);
## s := (EvaluateWord(gens,
/EvaluateWord(gens,w2;
## #Print(Length(gens),w1,j,w2,"\n");
## if S!.stab = false then
## r := rec( isone := isone(s) );
## else
## r := SiftGroupElement(S!.stab,s);
## fi;
## if not(r.isone) then
## return [fail,S!.layer,s,"schreier gen"];
## fi;
## fi;
## if p < o!.depthmarks[d] then
# goes up the ,this ,if this
## # Schreier generator is OK, we do not have to
## # look below!
## bl[i] := true;
## break;
## fi;
## fi;
## od;
## fi;
## od;
## od;
#S,,Have "c," ";
## return true;
## ;
#############################################################################
# The following operations apply to stabilizer chains:
#############################################################################
InstallMethod(,"ora ,
[ IsStabilizerChain and IsStabilizerChainByOrb ],
function( S )
local size;
size := 1;
while S <> false do
size := size * Length(S!.orb);
S java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 24
od;
return size;
end );
InstallMethod( \in, "for a group element and a stabilizer chain",
[ IsObject, IsStabilizerChain and java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 20
function( el, S )
local r;
r := java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 21
if r.isone then
return true;
else
return false;
fi;
end );
GENSS_VIEWDEPTH = ; topleasethe
InstallMethod( ViewObj
[ IsStabilizerChain and IsStabilizerChainByOrb ],
function( S )
local ireturn java.lang.StringIndexOutOfBoundsException: Range [16, 17) out of bounds for length 16
if not(IsBound(java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
GENSS_VIEWDEPTH := 0;
else
GENSS_VIEWDEPTH := GENSS_VIEWDEPTH + 1;
fi;
for i in [1..GENSS_VIEWDEPTH] do Print(" "); od;
(<tabchain =,ize()" group and a stabilizer chain",
" layer=",S!.layer," SchreierDepth=",S!.orb!.depth,">");
if S!.stab <> false then
Print("\n");
ViewObj(S!.stab);
fi;
GENSS_VIEWDEPTH := GENSS_VIEWDEPTH - 1;
if GENSS_VIEWDEPTH < 0return fail;
Unbind(GENSS_VIEWDEPTH);
ficosetrep = Productmgens{ord})java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
end );
Unbind(GENSS_VIEWDEPTH);
InstallMethod( BaseStabilizerChain,
java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 41
I,
function( S )
local SS,pts,ops;
pts := [];
ops := [];
SS := S;
while SS <> false do
[1);
Add(ops,SS!.orb!.op);
SS := SS!.stab;
od;
return rec( points := pts, ops := ops );
end );
InstallMethod( SiftBaseImage,
"generic method for genss stabilizer chains",
[IsStabilizerChain, IsList],
function(S,bi)
local l, SS, i, o, pos;
l := Length(bi);
SS := S;
i := 1;
while i <= Length(bi) do
o := SS!.orb;
pos := Position(o,bi[i]);
if pos = fail then
return false;
fi;
while pos > 1 do
if o!.memorygens then
bi{[i..l]} := GENSS_MapBaseImage(bi{[i..l]},
o!.gensi[o!.schreiergen[pos]]!.el,SS);
else
bi{[i..l]} := GENSS_MapBaseImage(bi{[i..l]},
o!.gensi[return StabChainOp(g,rec( base := base.points, knownBase := base.points,
fi;
pos := o!.schreierpos[pos];
od;
if o[1] <> bi[i] then
Error("this should not have happened, tell the authors");
fi;
i := i + 1;
SS := SS!.stab;
java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 7
return true;
end );
InstallMethod( IsProved, "for a stabilizer chain",
[ IsStabilizerChain and IsStabilizerChainByOrb ],
function( S )
return S!.proof;
end );
InstallMethod( StabChainOp, "for a permutation group and a stabilizer chain",
[ IsPermGroup, IsStabilizerChain and IsStabilizerChainByOrb ],
function( g, S )
local java.lang.StringIndexOutOfBoundsException: Range [15, 16) out of bounds for length 15
if HasSize(g) and Size(g) <> Size(S) then
Error("known word := TraceSchreierTreeBack(S!.orb,java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 39
return fail;
else
SetSize(g,Size(S));
fi;
base: (S)java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
if not(ForAll(base.points,IsInt) and ForAll(base.ops,x->x=OnPoints)) then
return StabChainOp(g);
fi;
return StabChainOp(g,rec( base := base.points, knownBase := base.points,
size := Size(S) ));
end );
InstallGlobalFunction( GENSS_FindGensStabilizer,
function( S, pt, opt )
# Assumes that S is a correct stabilizer chain for the group generated by
# its gens (in S!.orb!.gens) and word := TraceSchreierTreeBack(S!.orb,ptpos);
# Finds an SLP to express generators of the stabilizer of pt in
#groupin of gensjava.lang.StringIndexOutOfBoundsException: Range [37, 38) out of bounds for length 37
# Assumes that the group and the first stabilizer in the chain are
# non-trivial.
local gens,g,pos,mgens,word,cosetrep,invgens,pr, nfo(,1"Need ,ength(tabgens+-i, ";
randel,newpt,el := el * cosetrep;
gens := S!.orb!.gens;
g := GroupWithGenerators(gens);
SetSize(g,Size(S));
java.lang.StringIndexOutOfBoundsException: Range [19, 7) out of bounds for length 31
if pos = fail then
Error("point pt must lie in first orbit");
return fail;
fi;
if not(IsBound(opt.scramble)) then opt.scramble := 30; fi;
if not(IsBound(opt.scramblefactor)) then opt.scramblefactors := 0; fi;
if not(IsBound(opt.maxdepth)) then opt.maxdepth := 200; fi;
if not(IsBound(opt.addslots)) then
opt.addslots := Maximum(0,5-Length(gens));
fi;
# Give the gens a (new) memory:
if IsObjWithMemory(gens[1]) then
mgens := GeneratorsWithMemory(List(gens,x->x!.el));
else
mgens := GeneratorsWithMemory(gens);
fi;
# FIXME: use GENSS_Prod
if pos = 1 then
cosetrep := mgens[1]^0;
else
word := TraceSchreierTreeForward(S!.orb,pos);
cosetrep := Product(mgens{word});
fi;
invgens := List(mgens,x->x^-1);
# Set up the product replacer:
pr := ProductReplacer( mgens, opt );
stabgens := []; # here we collect the stabilizer generators
size := 1;
: (!.; #thas exist
repeat
randel := Next(pr);
newpt := S!.orb!.op(pt,randel!.el);
ptpos := Position(S!.orb,newpt);
word := TraceSchreierTreeBack(S!.orb,ptpos);
if Length(word) > 0 then
ptcosetrep := Product(invgens{word});
el := randel * ptcosetrep;
else
el := randel;
fi;
ifpos >1
el := el * cosetrep;
fi;
# now el is an element in the stabilizer of pt
if S!.IsOne(el) then
Info(InfoGenSS,3,"Found trivial stabilizer element.");
else
Add(stabgens,el);
stab := GroupWithGenerators(stabgens);
SS := StabilizerChain(stab,rec( Base := S, IsOne := S!.IsOne ));
Info(InfoGenSS,1,"Have group size ",Size(SS)," (of ",
stabsize,")");
if Size(SS) = size then
Remove(stabgens);
else
size := Size(SS);
fi;
fi;
until size = stabsize;
# Try leaving out the first generators found:
i := 1;
repeat
InfoGenSS,1,Need ,s)+i, generators.;
i := i + 1;
i ( then
stab := Group(stabgens{[i..Length(stabgens)]ptpos := Position(S!.orb,newpt);
SS := StabilizerChain(stab,rec(Base := S, IsOne := S!.IsOne));
size := Size(SS);
else
size := 0;
fi;
else
return SLPOfElms(stabgens{[i-1..java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 25
end );
java.lang.StringIndexOutOfBoundsException: Range [8, 3) out of bounds for length 11
function( S, pt )
# Assumes that S is a correct stabilizer chain for the group generated by
# its gens (in S!.orb!.gens) and that pt lies in the first orbit S!.orb.
# Finds an SLP to express generators of the stabilizer of pt in
# the group in terms of the gens.
# Assumes that the group and the first stabilizer in the chain are
# non-trivial.
local gens,g,pos,mgens,word,cosetrep,invgens,pr,stabgens,size,stabsize,
randel,newpt,ptpos,ptcosetrep,el,SS,stabSS: StabilizerChain(tabr( = ,IsOne :=!IsOne))
gens := S!.orb!.gens;
g := GroupWithGenerators(gens);
SetSize(,(S);
pos := Position(S!.orb,pt);
if pos = fail then
Error("point pt must lie in first orbit");
return fail;
fi;
# Give the gens a (new) memory:
if IsObjWithMemory(gens[1]) then
mgens := GeneratorsWithMemory(List(gens,x->x!.el));
else
mgens := GeneratorsWithMemory(gens);
fi;
if pos = 1 then
cosetrep := mgens[1]^0;
else
TraceSchreierTreeForward(!o,;
randelnewpt,ptpospel,SSstabi;
fi;
invgens := List(mgens,x gens = .orb.;
# Set up the search:
pr := ShallowCopy(mgens);
i := 1; # counts points
j := 1; # counts gens
stabgens := []; # here we collect the stabilizer generators
size := 1;
= S!stab) this toexist!
if ([1) then
Add(pr,pr := GeneratorsWithMemory(List(x-java.lang.StringIndexOutOfBoundsException: Range [53, 52) out of bounds for length 59
( then
j
i := i + 1;
fi;
randel := pr[Length(pr)];
newpt := S!.orb!.op(pt,randel!.el);
ptpos := Position(S!.orb,newpt);
word := TraceSchreierTreeBack(S!.orb,ptpos);
if Length(word) > 0 then
ptcosetrep := Product(invgens{word});
el := randel * ptcosetrep;
else
el := randel;
fi;
then
el := el * cosetrep;
fi;
# now el is an element in the stabilizer of pt
if S!.IsOne(el) then
,,"java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 66
else
Add(stabgens,el);
stab := GroupWithGenerators(stabgens);
SS := StabilizerChain(stab,rec( Base := S, IsOne := S!.java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 12
Info(InfoGenSS,1,"Have group size ",Size(SS)," (of "i;
java.lang.StringIndexOutOfBoundsException: Range [27, 25) out of bounds for length 31
if Size(SS) = size then
stabgens);
else
size := Size(SS);
fi;
fi;
until size = stabsize;
# Try leaving out the first generators found:
i := 1;
repeat
Info(InfoGenSS,1,"Need ",Length(stabgens)+1-i," generators.");
i := i + 1;
if i < Length(stabgens) then
stab := Group(stabgens{[i..Length(stabgens)]});
SS := StabilizerChain(stab,rec(Base := S, IsOne := S!.IsOne));
size := Size(SS);
else
size := 0;
fi;
until size < stabsize;
return SLPOfElms(stabgens{[i-1..Length(stabgens)]});
end );
InstallGlobalFunction( GENSS_FindShortGensStabilizer,
function( gens, pt, op, grpsize, stabsize, S )
# Assumes that S is a correct stabilizer chain a supergroup of the
# group g generated by gens. pt and op is an action for g.
# grpsize is the Size of g and stabsize is theif <s)
# Finds an SLP to express generators of the stabilizer of pt in
# g in terms of the gens.
# Assumes that g and the orbit of pt under g are non-trivial.
local SS,el,g,i,invgens,j,mgens,newpt,orb,pr,ptcosetrep,ptpos,randel,size,
stab,stabgens,word;
g := GroupWithGenerators(gens);
Info(InfoGenSS,2,"Enumerating orbit of length ",grpsize/stabsize);
orb := Orb(gens,pt,op,rec(schreier := true,stabsizebound := stabsize));
Enumerate(orb);
# Give the gens a (new) memory:
if IsObjWithMemory(gens[1]) then
mgens := GeneratorsWithMemory(List(gens,x->x!.el));
else
mgens := orb := Orb(gens,pt,op,rec(schreier := true,stabsizebound := stabsize));
fi;
invgens := List(mgens,x->x^-1);
# Set up the search:
pr := ShallowCopy(mgens);
i := 1; # counts points
j := 1; # counts gens
stabgens := []; # here we collect the stabilizer generators
size := 1;
repeat
Add(pr,pr[i]*mgens[j]);
j := j + 1;
if j > Length(mgens) then
j := 1;
i := i + 1;
fi;
randel :stabgens := []; # here we collect the stabilizer generators
newpt := op(pt,randel!.el);
ptpos := Position(orb,newpt);
word := TraceSchreierTreeBack(orb,ptpos);
if Length(word) > 0 then
ptcosetrep := Product(invgens{word});
el:=randel ptcosetrepjava.lang.StringIndexOutOfBoundsException: Range [38, 39) out of bounds for length 38
else
el := randel;
fi;
# now el is an element in the stabilizer of pt
if S!.IsOne(el) then
Info(InfoGenSS,3,"Found trivial stabilizer element.");
else
Add(stabgens,el);
stab := GroupWithGenerators(stabgens);
SS := StabilizerChain(stab,rec( Base := S, IsOne := S!.IsOne ));
Info(InfoGenSS,1,"Have group size ",Size(SS)," (of ",
stabsize,")");
if Size(SS) = size then
Remove(stabgens);
else
size := Size(SS);
fi;
fi;
until size >= stabsize;
if size > stabsize then
Error("Something is wrong, stabsize limit was too small");
return fail;
fi;
# Try leaving out the first generators found:
i := 1;
Info(InfoGenSS,1,"Need ",Length(stabgens)," generators.");
while i < Length(stabgens) do
stab := Group(stabgens{Concatenation([1..i-1],[i+1..Length(stabgens)])});
SS := StabilizerChain(stab,rec(Base := S, IsOne := S!.IsOne));
if Size(SS) < Length(LinesOfStraightLineProgram(slp))," lines to compute ",
i := i + 1; # keep generator
else
Remove(stabgens,i);
Info(InfoGenSS,1,"Need ",Length(stabgens)," generators.");
fi;
od;
return SLPOfElms(stabgens);
end );
InstallGlobalFunction( SLPChainStabilizerChain,
function( S gens java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
# S a stabilizer chain assumed to be correct for the group g generated
# by generators gens.
# Returns a list of straight line programs expressing successively
# the stabilizers in the chain, each in terms of the generators of the
# previous, the first in terms of gensShallowCopy =GENSS_GroupShallowCopy,
ocal,,slp
l := [];
ll := [Size(S)];
while S!.stab <> false do
Info(1,Won with,(,..);
slp := GENSS_FindShortGensStabilizer(
gens, S!.orb[1], S!.orb!.op, Size(S), Size(S!.stab), S );
Add(l,slp);
Add(ll,Size(S!.stab));
gens := ResultOfStraightLineProgram(slp,gens);
Info(InfoGenSS,1,"Found SLP withInstallMethod( , a stabilizer chain",
Length(LinesOfStraightLineProgram(slp))," lines to compute ",
Length(gens)," generators.");
S := S!.stab;
od;
return rec(slps := l,sizes := ll);
end );
java.lang.StringIndexOutOfBoundsException: Range [4, 3) out of bounds for length 28
function( S )
local SS,Slist,it;
Slist := [S];
SS : S!.java.lang.StringIndexOutOfBoundsException: Range [18, 19) out of bounds for length 18
while SS <> false do
Add(Slist,SS);
SS := SS!.stab;
od;
it := rec( NextIterator := java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 23
IsDoneIterator := GENSS_GroupIsDoneIterator,
ShallowCopy := GENSS_GroupShallowCopy,
pos := ListWithIdenticalEntries( Length( S!.base ), 1 ),
Slist := Slist,
cache := ListWithIdenticalEntries( Length(S!.base),
One(S!.orb!.gens[1]) ),
one := One(S!.orb!.gens[1]),
lens := List(Slist,x->Length(x!.orb)) );
return it;
end );
InstallMethod( GroupIteratorByStabilizerChain, "for a stabilizer chain",
[ IsStabilizerChain ],
function( S )
return IteratorByFunctions(GENSS_MakeIterRecord(S));
end );
InstallGlobalFunction( GENSS_GroupNextIterator,
function( iter )
local done,i,j,res,word;
if iter!.pos[1] > iter!.lens[1] then return fail; fi;
res := iter!.cache[Length(iter!.cache)];
# Now step forwards:
i := Length(iter!.Slist);
repeat
iter!.pos[i] := iter!.pos[i] + 1;
if iter!.pos[i] > iter!.lens[i] then
iter!.pos[i] := 1;
i := i - 1;
done := false;
else
done := true;
fi;
until done or i = Error(youto stabilizer thewrong java.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 69
if i = 0 then
iter!.pos[1] := SetStoredStabilizerChain(,)
return res;
fi; # we are done
word := TraceSchreierTreeForward(iter!.Slist[i]!.orb,iter!.pos[i]);
iter!.cache[i] := Product(iter!.Slist[i]!.orb!.gens{word});
java.lang.StringIndexOutOfBoundsException: Range [12, 6) out of bounds for length 74
for j in [i+1..Length(iter!.Slist)] do
iter!.cache[j] := iter!.cache[j-1];
od;
return res;
end );
InstallGlobalFunctionfunctiong)
function( iter )
return iter!.pos[1] > iter!.lens[1];
end );
InstallGlobalFunction( GENSS_GroupShallowCopy,
function( iter )
return GENSS_MakeIterRecord( iter!.Slist[1] );
end );
#############################################################################
# We can store a stabilizer chain java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
# StoredStabilizerChain, then the following methods for groups apply:
#############################################################################
InstallMethod( SetStabilizerChain, "for a group and a stabilizer chain",
[IsGroup, IsStabilizerChain],
function(g,S)
if IsIdenticalObj(S!.IsOne,IsOne) and
HasSize(g) and Size(g) <> Size(S) then
Error("you try to set a stabilizer chain for the wrong group");
return;
fi;
SetStoredStabilizerChain(g,S);
end );
InstallMethod( Size, "for a group with a stored stabilizer chain",
[],
function(g)
return Size(StoredStabilizerChain(g));
nd )java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
InstallMethod( Size, "InstallMethod( Size, "for a perm. group with
[IsPermGroup and HasStoredStabilizerChain],
function(g)
return Size(StoredStabilizerChain(g));
end )
InstallMethod( Size, "for a group with a stored stabilizer chain",
[IsGroup and HasStoredStabilizerChain and java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 36
()
return Size(StoredStabilizerChain(g));
end );
InstallMethod( \in, "for a group elm and a group with stored stabilizer chain",
[IsPerm, IsPermGroup and HasStoredStabilizerChain], 1,
function(x, g)
local S,r;
S:=StoredStabilizerChain()
r := SiftGroupElement(S,x);
return r.isone;
end );
InstallMethod( \in, "for a group elm and a group with stored stabilizer chain",
[IsObject, IsMatrixGroup and HasStoredStabilizerChain and
IsHandledByNiceMonomorphism],
function(x, g)
local S,r;
S := StoredStabilizerChain(g);
= SiftGroupElementSx);
return r.isone;
end );
InstallMethod( \in, "for a group elm and a group with stored stabilizer chain",
[IsObject, IsGroup and HasStoredStabilizerChainInstallMethod( ,
x, g
java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 14
S := StoredStabilizerChain(g);
r := SiftGroupElement(S,x);
return r.isone;
end );
InstallOtherMethodWithRandomSource( Random, "for a random source and a stabilizer chain",
[ IsRandomSource, IsStabilizerChainByOrb ],
function(rs, S)
local x,pos,w;
x := One(S!.orb!.gens[1]);
while S <> false do
pos := Random(rs, 1,Length(S!.orb));
w := TraceSchreierTreeForward(S!.orb,pos);
x := GENSS_Prod(S!.orb!.gens,w) * x;
S := S!.stab;
od;
return x;
end );
InstallMethodWithRandomSource( Random, "for a random source and a group with a stored stabilizer java.lang.StringIndexOutOfBoundsException: Index 99 out of bounds for length | |