  
  [1X2 [33X[0;0YThe Solve Method[133X[101X
  
  [33X[0;0YThe  central  functionality  of the Ferret package is based around the Solve
  method.  This  function  performs  a backtrack search, using the permutation
  backtracking  algorithm,  over  a  set of groups or cosets. Often users will
  want  to use a higher level function which wraps this functionality, such as
  Stabilizer  or  Intersection. The solve function accepts a list of groups or
  cosets,  and  finds their intersection. For efficiency reasons, these groups
  can  be  specified  in  a  variety of different ways. As an example, we will
  consider  how to implement Stabilizer(G, S, OnSets), the stabilizer of a set
  S  in  a  permutation  group  G  using Solve (this is not necessary, as when
  Ferret   is   loaded   this   method   is   replaced   with  a  Ferret-based
  implementation).  Another  way of viewing Stabilizer(G, S, OnSets) is as the
  Intersection  of  G with the Stabilizer of (Sym(n), S, OnSets), where Sym(n)
  is  the  symmetric  group  on  n  points,  and n is at least as large as the
  largest  moved  point  in  G.  Solve takes a list of objects which represent
  groups.  Two  of  these are ConInGroup(G), which represents the group G, and
  ConStabilize(S,  OnSets),  which represents the group which stabilizes S. We
  find   the   intersection  of  these  two  groups  by  Solve([ConInGroup(G),
  ConStabilize(S, OnSets)]).[133X
  
  
  [1X2.1 [33X[0;0YMethods of representing groups in Ferret[133X[101X
  
  [33X[0;0YGroups  and cosets must be represented in a way which Ferret can understand.
  The  following  list  gives  all the types of groups and cosets which Ferret
  accepts, and how to construct them.[133X
  
  
  [1X2.1-1 [33X[0;0YConStabilize[133X[101X
  
  [33X[1;0Y[29X[2XConStabilize[102X( [3Xobject[103X, [3Xaction[103X ) [32X function[133X
  [33X[1;0Y[29X[2XConStabilize[102X( [3Xobject[103X, [3Xn[103X ) [32X function[133X
  
  [33X[0;0YIn  the  first  form this represents the group which stabilises [3Xobject[103X under
  [3Xaction[103X.    The   currently   allowed   actions   are   OnSets,   OnSetsSets,
  OnSetsDisjointSets,  OnSetsTuples, OnTuples, OnPairs and OnDirectedGraph. In
  the  second  form  it  represents  the  stabilizer  of  a  partial  perm  or
  transformation in the symmetric group on [3Xn[103X points. Both of these methods are
  for constructing arguments for the [2XSolve[102X ([14X2.1-3[114X) method.[133X
  
  [1X2.1-2 ConInGroup[101X
  
  [33X[1;0Y[29X[2XConInGroup[102X( [3XG[103X ) [32X function[133X
  
  [33X[0;0YRepresents the permutation group [3XG[103X, as an argument for [2XSolve[102X ([14X2.1-3[114X).[133X
  
  [33X[0;0YThese methods are both used with Solve:[133X
  
  [1X2.1-3 Solve[101X
  
  [33X[1;0Y[29X[2XSolve[102X( [3Xconstraints[103X[, [3Xrec[103X] ) [32X function[133X
  
  [33X[0;0YFinds  the  intersection of the list [3Xconstraints[103X. Each member of [3Xconstraints[103X
  should  be  a  group  or  coset  generated  by  one of [2XConInGroup[102X ([14X2.1-2[114X) or
  ConStabilize.  The  optional second argument allows configuration options to
  be passed in. These follow options are supported:[133X
  
  [8X[10XrbaseCellHeuristic[110X[8X (default "smallest")[108X
        [33X[0;6YThe  cell to be branched on. This is the option which will most effect
        the  time  taken to search. the default is usually best. Other options
        are:  "First" (first cell), "Largest" (largest cell), "smallest2" (the
        2nd smallest cell), "random" (a random cell) and "randomsmallest" (one
        of the smallest cells, choosen randomly)[133X
  
  [8X[10XrbaseValueHeuristic[110X[8X (default "smallest")[108X
        [33X[0;6YChoose  which  cell  to  branch  on  within  a  cell.  While this will
        generally  make  a big difference to search, it is hard to predict the
        best  value,  and  small  changes  to the problem will change the best
        heuristic. Options are the same as [10XrbaseCellHeuristic[110X.[133X
  
  [8X[10XsearchValueHeuristic[110X[8X (default [9XRBase[109X)[108X
        [33X[0;6YThe  order  to branch during search. In general the best order is very
        hard  to  predict. Options are "RBase", "InvRBase", "Random", "Sorted"
        or  "Nosort"  (which  uses the order the values naturally end up in by
        the algorithm).[133X
  
  [8X[10XsearchFirstBranchValueHeuristic[110X[8X (default [9XRBase[109X)[108X
        [33X[0;6YChoose the search order used just on the left-most branches of search.
        Allows the same options as [10XsearchValueHeuristic[110X[133X
  
  [8X[10Xstats[110X[8X (default [10Xfalse[110X[8X)[108X
        [33X[0;6YChange  the  return  value to provide a range of information about how
        search  performed  (implies  [10Xrecreturn[110X).  This information will change
        between releases.[133X
  
  [8X[10XnodeLimit[110X[8X (default [10Xfalse[110X[8X) [108X
        [33X[0;6YEither  [12Xfalse[112X,  or  an  integer  which places a limit on the amount of
        search  which should be performed. WARNING: When this option is set to
        an  integer, Ferret will return the current best answer when the limit
        is  reached,  which may be a subgroup of the actual result. To know if
        this limit was reached, set [10Xstats[110X to [12Xtrue[112X, and check the nodes.[133X
  
  [8X[10Xrecreturn[110X[8X (default [10Xfalse[110X[8X) [108X
        [33X[0;6YReturn a record containing private information, rather than the group.[133X
  
  [8X[10Xonly_find_generators[110X[8X (default [10Xtrue[110X[8X)[108X
        [33X[0;6YBy  default only find the generators of the group. If false, then find
        all  members  of the group. This option is only useful for testing. If
        'true', then sets 'recreturn' to true.[133X
  
