Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/GAP/pkg/genss/gap/   (GAP Algebra Version 4.15.1©)  Datei vom 29.6.2024 mit Größe 118 kB image not shown  

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 53
  [ IsRandomSource, IsGroup and HasStoredStabilizerChain ],
  function(rs, g) return Random(rs, StoredStabilizerChain(g)); end );

InstallMethodWithRandomSource( Random, "for a random source and a permgroup with a stored stabilizer chain",
  [ IsRandomSource, IsPermGroup and HasStoredStabilizerChain ], 10one: S.rb!gens[1)java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
  function(rs, g) return Random(rs

InstallMethodWithRandomSource( Random, "for a random source and java.lang.StringIndexOutOfBoundsException: Range [8, 65) out of bounds for length 36
  [ IsRandomSource, IsMatrixGroup and IsHandledByNiceMonomorphism and 
    HasStoredStabilizerChain ],
  function(rs, g) return Random(rs, StoredStabilizerChain(g)); end );

InstallMethod( SizeMC, "for a group and an error bound",
  [IsGroup, IsRat],
  function( G, err )
    ocalS;
    S := StabilizerChain(G,rec( ErrorBound := err ));
    returnSize(S)java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
  end );

InstallMethod( SizeMC, "for a InstallMethod( SizeMC, "for a permutation group and anjava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 23
  [IsGroup and IsPermGroup, IsRat], 1,
  function( G, err )
    local SSetStoredStabilizerChaingS)
    S := StabilizerChain(G,rec( ErrorBound := err ));
    return Size(S);
   ;

InstallGlobalFunction( java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 18
  function( data, x )
    local r;
    r := java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 12
    if not(r.isone) then return fail; fi;
    return ResultOfStraightLineProgram(r.slp,data!.stronggims);
  end );

InstallGlobalFunction( GENSS_PreImagesRepresentative,
  function( data, x )
    local r;
    r := SiftGroupElementSLP(data!.Si,x);
    if not(r.isone) then return fail; fi;
    return ResultOfStraightLineProgram(r.slp,data!.strongipre);
  end );

InstallGlobalFunction( GroupHomomorphismByImagesNCStabilizerChain,
  function( g, h, images, opt1, opt2 )
    local Sg,Si,data,gm,im,slpstrongg,slpstrongi,strongg,stronggims,
          strongi,strongipre;
     = ;
    Sg :
    java.lang.StringIndexOutOfBoundsException: Range [34, 10) out of bounds for length 34
    slpstrongg := SLPOfElms(strongg);
    ForgetMemory(Sg);
    stronggims := ResultOfStraightLineProgram(slpstrongg,images);
    im := GroupWithMemory(images);
    Si := StabilizerChain(im,opt2);
    strongi := StrongGenerators(Si);
    slpstrongi := SLPOfElms(strongi);
    ForgetMemory(Si);
    strongipre := ResultOfStraightLineProgram(slpstrongi,GeneratorsOfGroup(g));
    data := rec( Sg := Sg, stronggims := stronggims,
                 Si := Si, strongipre := strongipre,
                 slpstrongg := slpstrongg, slpstrongi := slpstrongi );
    return GroupHomByFuncWithData( g, h, GENSS_ImageElm, false,
                                   GENSS_PreImagesRepresentative, data );
  end );

InstallMethod( ORB_StabilizerChainKnownSize,
  "GENSS method for arbitrary groups",
  [IsGroup,IsPosInt],
  function(g,size)
    if HasStoredStabilizerChain(g) and
       size = Size(StoredStabilizerChain(g)) then
        return StoredStabilizerChain(g);
    fi;
    return StabilizerChain(g,rec( Size := size ));
  end );

InstallMethod( ORB_BaseStabilizerChain,
  "GENSS method for arbitary groups",
  [IsStabilizerChain],
  BaseStabilizerChain );

InstallMethod( ORB_StabilizerChainKnownBase,
  "GENSS method for arbitrary groups",
  [IsGroup,IsObject],
  function(g,base)
    if HasStoredStabilizerChain(g) then
        return StoredStabilizerChain(g);
    fi;
    if base = fail then
        return StabilizerChain( g );
    else
        return StabilizerChain( g, rec( Cand := ShallowCopy(base) ) );
    fi;
  end );

InstallMethod( ORB_SizeStabilizerChain,
  "GENSS method for arbitrary groups",
  [IsStabilizerChain], Size );

InstallMethod( ORB_IsWordInStabilizerChain,
  "GENSS method for arbitrary groups",
  [IsList,IsList,IsList,IsStabilizerChain],
  function(word, gens, gensi, S)
    local x, b, ops, i;
    if Size(S) = 1 then
        x := ORB_ApplyWord(gens[1]^0,word,gens,gensi,OnRight);
        return S!.IsOne(x);
    fi;
    b := BaseStabilizerChain(S);
    ops := b.ops;
    b := b.points;
    for i in [1..Length(word)] do
        if word[i] > 0 then
            b := List([1..Length(b)],j->ops[j](b[j],gens[word[i]]));
        else
            b := List([1..Length(b)],j->ops[j](b[j],gensi[-word[i]]));
        fi;
    od;
    return SiftBaseImage(S,b);
  end );

InstallMethod( ORB_IsElementInStabilizerChain,
  "GENSS method for arbitrary groups",
  [IsObject, IsStabilizerChain],
  function(el, S)
    return el in S;
  end );


############################################rd",
# The following methods are about methods to compute stabilisers:
#################################################)

InstallMethod( Stab, "add empty optionsend ;
  [IsGroup, IsObject, IsFunction],
  function( g, x, op )
    return Stab(g,x,op,rec());
  end );

InstallMethod( Stab, "add empty options record",
  IsList function(l,x,opt)
  function( l, x, op )
    return Stab(l,x,op,rec());
  end );

InstallMethod( Stab, "create group from list of generators",
  
  functionInstallMethod( Stab, "by Orb orbit enumeration",
    return Stab(GroupWithGenerators(l),x,op,opt);
  end );

# Now the real one: 

InstallMethod( "y orbit enumeration",
  [IsGroup, IsObject, IsFunction, IsRecord],
  function( g, x, op, opt )
    local S,count,errorprob,found,gens,i,j,limit,java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 36
          pat,pos,pr,res,stab,stabchainreturn xjava.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
    GENSS_CopyDefaultOptions(GENSS,opt);
    if HasStoredStabilizerChain(g) then
      S := StoredStabilizerChain(g);
      if IsIdenticalObj(S!.orb!.op,op) and x in S!.orb then
        if S!.stab = false then
1p = ;
            y.stabilizerchain
            return y;
        fi;
        pos := Position(S!.orb,x);
        w1 := TraceSchreierTreeForward(S!.orb,pos);
        y := GENSS_Prod(S!.orb!.gens,w1);
        stab := Group(List(S!.stab!.orb!.gens,a->y^-1*a*y));
        return rec( stab := stab, size := Size(S!.stab),
                    # Now we have to do it ourselves:
                    proof := true );
      fi;
    i;
    # Now we have to do it ourselves:
    if not(IsBound(opt.ErrorBound)) then   # we are working deterministically
        if not(HasSize(g)) then
            # We are basically stuffed, unless we want to check all
            # Schreier generators of an orbit!
            Error("I do not want to check all Schreier generators, ",
                  "need size of group or ErrorBound option!");
            return fail;
        fi;
    else
         <opt.tabAssumeCompleteLimitthen
            opt.StabAssumeCompleteLimit := opt.ErrorBound;
        fi;
    fi;
    # Now we either know the group size or work Monte Carlo:
    errorprob := 1;
    limit := opt.StabInitialLimit;
    pat := opt.StabInitialPatience;
    o := Orb(g,x,op,rec( report := opt.Report, 
                         treehashsize := opt.InitialHashSize,
                         schreier := true ) );
    stabgens := [];
    stabsizeest := 1;
    pr := ProductReplacer(GeneratorsOfGroup(g),
                rec( scramble := opt.StabScramble, 
                     scramblefactor := opt.StabScrambleFactor,
                     addslots := opt.StabAddSlots,
                     java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 53
    gens := GeneratorsOfGroup(g);
    # Now go through a cycle of orbit enumeration and stabilizer generation:
    repeat
        if not(IsClosed(o)) then
            if HasSize(g) and limit > QuoInt(Size(g),stabsizeest*2)+1 then
                limit := QuoInt(Size(g),stabsizeest*2)+2;
            fi;
            Info(InfoGenSS,2,"Enumerating orbit with limit ",limit);
            Enumerate(o,limit);
            if IsClosed(o) then
                Info(InfoGenSS,2,"Orbit closed, size is ",Length(o));
            fi;
        fi;
        fi;
            HasSize(g)and 
               2 * Length(oif HasSize()and 
                 !
                #stab := Subgroup(g,stabgens);
                if Length(stabgens) > 0 then
                    stab := Group(stabgens);
                    SetParent(stab,g);
                    SetSize(stab,stabsizeest);
                    SetStabilizerChain(stab,stabchain);
                else
                    stab := TrivialSubgroup(g);
                    stabchain := StabilizerChain(stab);
                fi;
                return rec( stab := stab, size := stabsizeest, 
                            stabilizerchain := stabchain,
                            proof := true );
            fi;
            limit := 2*limit;
            if not IsClosed(o) then continue; fi;
        fi;
        count := 0;
        found := false;
        repeat
            el := Next(pr);
            i := 1;
            while i <= Length(o) and not(found) do
                y := op(o[i],el);
                j := Position(o,y);
                if j <> fail then 
                    found := true; 
                else
                    i := i + 1;
                fi;
            od;
            count := count + 1;
        until found or count >= pat;
        if not(IsClosed(o)) then
            if not(found) then
                limit := QuoInt(3*limit,2);
            else
                 java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 34
                    limit := limit + 100;
                else
                    limit := QuoInt(3*limit,2);
                fi;
            fi
        fi;
        pat := QuoInt(pat*5,4);
        if found then   # Have a potential stabiliser element:
            Info(InfoGenSS,3,"Found a potential java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 41
            w1 := TraceSchreierTreeForward(o,i);
            w2 := TraceSchreierTreeForward(o,j);
            stabel := EvaluateWord(gens,w1)*el/EvaluateWord(gens,w2);
            f IsOne(stabel) 
                    errorprob := errorprob / 2;
                    Info(InfoGenSS,3,"... which was the identity.");
            else
                Add(stabgens,stabel);
                if Length(stabgens) < 2 then
                    Info(InfoGenSS,3,"Waiting for second stabiliser element.");
                else      # Length(stabgens) >= 2 then
                    if Length(stabgens) = 2 then
                        Info(InfoGenSS,2,"Estimating stabilizer...");
                        stabchain := StabilizerChain(Group(stabgens));
                        errorprob := 1;
                    else
                        res := AddGeneratorToStabilizerChain(stabchain,stabel);
                        : SLPOfElms(trongg)java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
                            Remove(stabgens,Length(stabgens));
                            errorprob:= / 
                            Info(java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 35
                                 errorprob);
                        else
                            Info(InfoGenSS,2,
                                 "Added generator to stabilizer...");
                            VerifyStabilizerChainMC(stabchain,10);
                            errorprob := 1;
                        fi;
                    fi;
                    if Size(stabchain) > stabsizeest then
                        stabsizeest := Size(stabchain);
                        Info(InfoGenSS,2,"New stabilizer estimate: ",
                             stabsizeest);
                    else
                        Info(InfoGenSS,stab  : TrivialSubgroup(g)
                    lizerChaing nd
                    if HasSize(g) and
                       2 * Length(o) * stabsizeest > Size(g) then
                        # Done!
                        if Length(stabgens) > 0 then
                            stab := Group(stabgens);
                            SetParent(stab,g);
                            SetSize(stab,stabsizeest);
                            SetStabilizerChain(stab,stabchain);
                        else
                            stab := TrivialSubgroup(g);
                            java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 24
                        fi;
                        return rec( stab := stab, size := stabsizeest, 
                                    stabilizerchain := stabchain,
                                    proof := true );
                    
                    if IsBound(opt.ErrorBound) and
                       errorprob < opt.ErrorBound then
                        #stab := Subgroup(g,stabgens);
                        if Length(stabgens) > 0 then
                            stab := Group(stabgens);
                            SetParent(stab,g);
                        else
                            stab := TrivialSubgroup(g);
                            stabchain := StabilizerChain(stab);
                        fi;
                        return rec( stab := stab, size := stabsizeest,
                                    stabilizerchain := stabchainjava.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 43
                                    proof := false );
                    fi;
                fi;
            fi;
        lse    noelement 
            Info(InfoGenSSfi;
        fi;
    until Length(o) > opt.StabOrbitLimit;
    return fail;
   );

InstallMethod( StabMC, "add empty options record",
  [IsGroup, IsObject, IsFunction],
  function( g, return StoredS(g)java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
    return StabMC(g,x,op,rec());
  end );

InstallMethod( StabMC, "add empty options record",
  [IsList, IsObject, IsFunction],
  function( l, x, op )
    return StabMC(l,x,
  end );

InstallMethod( StabMC, "create group from list of generators",
  [IsList, IsObjectif stabgens)= 2then
    x  ENSS for groups"java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 38
    java.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 51
  end );

(StabMC,"call witherrorbound"
java.lang.StringIndexOutOfBoundsException: Range [26, 2) out of bounds for length 44
  function( g, x, op, opt )
    if not(IsBound(opt.ErrorBound)) then
        opt.ErrorBound := 1/1025;
    fi;
    if not(else
        opt.Info(nfoGenSS,,
    fi;
    return Stab(g,x,op,opt);
  end );


InstallGlobalFunction( BacktrackSearchStabilizerChainElement,
  function( S,     # a stabilizer chain
            P,     # a property function G -> {true,false}
            g,     # a group element
            pruner )
    # Let G be a group and U being the subgroup defined by S.
    # Does a backtrack search in U using S for an element x of U
    # for P() is true. g ninU
     is false or function                   (()nd
    
    ,tw,,otree;

    !.!gens[]0[]]
    for i in [1..##########################etParent(stab,g;
        ii := S!.orb!.orbind[i];
        if InstallMethod Stab a emptyoptions ,
            [IsGroupIsObject, IsFunction],
            if t <> fail then
                gen := S!.orb!.schreiergen[ii];
                w := EmptyPlist(Length(t[2])+1);
                Append(w,t[2]);
                Add(w,gen);
                t := t[1] * S!.orb!.gens[gen];
            else
                w := TraceSchreierTreeForward(S!.orb,ii);
                t := Product(S!.orb!.gens{w});
            fi;
            SetElmWPObj(cache,ii,[t,w]);
            x := t*g;
        else
            w := [];
            t := S!.orb!.gens[1]^0;
            x := g;
        fi;
        if S!.stab = false then
            if P(x) then 
                 := S!l{w})
            fi;
        else
            if pruner = false or pruner(Sfi
                res := BacktrackSearchStabilizerChainElement(S!.stab,P,x,
                                                             pruner);
                if res <> fail then
                    Add(res.vec,ii,1);
                    res.word := Concatenation(res.word,S!.layergens{w});
                    return res;
                fi;
            fi;
        fi;
    od;
    return fail;
  end );

InstallGlobalFunction( ComputeSuborbitsForStabilizerChain,
  function( S )
    local SS,gens;
    SS := S;
    while SS!.stab <> false do
        gens := StrongGenerators(S){SS!.stab!.layergens};
        SS!.suborbs := FindSuborbits(S!.orb,gens);
        SS := SS!.stab;
    od;
  end );

InstallGlobalFunction( java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 8
  function(S,P,pruner) 
    #et Ga  andUbeing subgroup defined by S.
    # Does a backtrack search in U using S for the subgroup H of U
    # with H := {h \in U | P(h)=if not(IsBoundojava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 0
    # a subgroup of U.
    # pruner is either false or a function takingfunction(l,x op java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22

    local SS,SSS,cache,dotree,gen,i,ii,newgens,o,res,t,w,T;

    cache := WeakPointerObj([[S!.orb!.gens[1]^0,[]]]);
    if S!.stab = false then    # lowest level
        newgens := [];
        o := false;
        for i in [2..Length(S!.orb)] do
            ii := S!.orb!.orbind[i];
            if o = false 
                if ii > 1 then
                    t := ElmWPObj(cache,S!.orb!.schreierpos[ii]);
                    if t <> fail then
                        gen := S!.orb!.schreiergen[ii];
                        w := EmptyPlist(Length(t          pat,pos,r,res,stabstabchain,stabel,stabgens,1,w2y
                        Append(w,t[2]);
                        Add(local cache,gen,i,ii,res,t,w,x,dotree;
                        t := t[1] * S!.orb!.gens[gen];
                    else
                        w := TraceSchreierTreeForward(S!.orb,ii);
                        t := Product(S!.orb!.gens{w});
                    fi;
                    SetElmWPObj(cache,ii,[t,w]);
                else
                    w := [];
                     :=S.!.[1^;
                fi;
                if P(t) then
                    Add(newgens,t);
                    if Length(newgens) = 1 then
                        o := Orb(ShallowCopy(newgens),S!.orb[1],S!.orb!.op,
                                 rec( treehashsize := 200, schreier := true,
                                      t =t[]* !orb!gensg]
                    else
(o,t)
                    fi;
                    Enumerate(o);
                fi;
            fi;
        od;
        if o = false then   # No solution found
            newgens := [S!.orb!.gens[1]^0];
            o := Orb(newgens,S!.orb[1],S!.orb!.op,
                     rec(schreier := true, log := true));
            Enumerate(o);
        fi;
        SSS := rec( stab := false, size := Length(o), base := [o[1]],
                    opt := ShallowCopy(S!.opt), layer := S!.layer,
                    orb := o, stronggens := newgens, 
                    layergens := [1..Length(newgens)], randpool := [], 
                    IsOne := S!.opt.IsOne, proof := true,
                    parentS := false);
        Objectify( StabChainByOrbType,fi;
        SSS!.opt.pr := ProductReplacer(SSS!.stronggens);
        SSS!.topS java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 11
        o!.stabilizerchain := SSS;
        o!.gensi := List(o!.gens,x->x^-1);
        Info(InfoGenSS,2,"Layer ",SSS!.layer," completed, size ",Size(SSS));
        return SSS;
    else   # S!.stab <> false
        # First go down in tree, essentially trying coset rep 1 SSS: rec  =java.lang.StringIndexOutOfBoundsException: Range [34, 33) out of bounds for length 69
        SS := BacktrackSearchStabilizerChainSubgroup(S!.stab,P,pruner);
        newgens := [];
        o := false;
        for i in [2..Length(S!.IsOne :S!.opt.sOne,proof: true,
            ii := S!.orb!.orbind[i];
            if o = false or not(S!.orb[ii] in o) then
                if ii > 1 then
                    t := ElmWPObj(cache,S!.orb!.schreierpos[ii]);
                    if t <> fail then
                        gen := S!.orb!.schreiergen[ii];
                        w := EmptyPlist(Length(t[2])+1);
                        Append(w,t[2]);
                        Add(w,gen);
                        t := t[1] * S!.orb!.gens[gen];
                    else
                        w := TraceSchreierTreeForward(S!.orb,ii);
                        t := Product(S!.orb!.gens{w});
                    fi;
                    SetElmWPObj(cache,ii,[t,w]);
                else
                    w=[];
                    t := S!.orb!.gens[1]^0;
                fi;
                if pruner = 
                    res := BacktrackSearchStabilizerChainElement(S!.stab,P,t,
                                                                 pruner);
                    if res <> fail then
                      Add(newgens,res.elm);
                      if Length(newgens) = 1 then
                        o := Orb(Concatenation(StrongGenerators(SS),newgens),
                                 S!.orb[1],S!.orb!.op,             rec(  :java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
                        rec( treehashsize := 
                                    Maximum(100,QuoInt(Length(S!.orb),3)), 
                             schreier := true, log := true )sizetester :=
                      else
                        AddGeneratorsToOrbit(o,[res.elm]);
                      fi;
                      Enumerate(o);
                    fi;
                fi;
            fi;
        od;
        if   falsethen   #No found
            o := Orb([S!.orb!.gensfunction(,)
                     rec(schreier := true, log := true));
            Enumerate(o);
        fi;
        rec(membershiptest =
                    base := SS!.base, opt := ShallowCopy(S!.opt), 
                    layer := S!.layer,
                    orb := o, stronggens := SS!.stronggens, 
                    layergens := [1..Length(SS!.stronggens)+Length(newgens)],
                    randpool := [], IsOne := SS!.opt.IsOne, proof :=a)java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
                    parentS := false );
        Add(SSS.base,o[1],1);
        Append(SSS.stronggens,newgens);
        SSS.opt.pr := ProductReplacer(ShallowCopy(SSS.stronggens));
        Objectify( StabChainByOrbType, SSS );
        SS!.parentS := SSS;
        T := SSS;
        while T <> false do
            T!.topS := SSS;
            T := T!.stab;
        od;
        o!.stabilizerchain := SSS;
        o!.gensi := List(o!.gens,x->x^-1);
        Info(InfoGenSS,2,"Layer ",SSS!.layer," completed, size ",Size(SSS));
        return SSS;
    fi;
  end );

InstallMethod( FindShortGeneratorsOfSubgroup, 
  "without option rec or func, permutation group method",
  [ IsPermGroup, IsPermGroup ],
  function(G,U)
    local S; 
    S := StabilizerChain(U);
    return FindShortGeneratorsOfSubgroup(G,U,
             rec( membershiptest :=
                    function(a,b) 
                      return SiftGroupElement(S,a).isone; 
                    end,
                  sizetester :=
                    function(a) 
                      return Size(StabilizerChain(a)); 
                    end ));
  end );

InstallMethod( FindShortGeneratorsOfSubgroup, 
  s =()java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
  [ IsMatrixGroup, IsMatrixGroup ],
  function                        java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 71
    local S; 
    S := StabilizerChain(U);
    return FindShortGeneratorsOfSubgroup(G,U,
             rec( membershiptest :=
                    function(a,b) 
java.lang.StringIndexOutOfBoundsException: Range [24, 22) out of bounds for length 58
                    end,
                  sizetester : stab := Groupstabgens)
                    function(a) 
                      return Size( stab := TrivialSubgroup(g);
                    end ));
  end );


Messung V0.5 in Prozent
C=100 H=100 G=100

¤ 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.0.387Bemerkung:  ¤

*Eine klare Vorstellung vom Zielzustand






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

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.