  
  [1X3 [33X[0;0YRefiners[133X[101X
  
  
  [1X3.1 [33X[0;0YThe [10XGB Con[110X[101X[1X record[133X[101X
  
  [33X[0;0Y[5XGraphBacktracking[105X provides its refiners through the global record [10XGB_Con[110X, in
  the  same  spirit as the [10XBTKit_Refiner[110X record of [5XBacktrackKit[105X. Each field of
  [10XGB_Con[110X is a function that constructs a refiner; the resulting refiner can be
  placed  in  the  [3Xconlist[103X argument of the search functions in [14X2[114X, freely mixed
  with  [5XBacktrackKit[105X  refiners.  For  the  general notion of a refiner and the
  constraint  it  refines for, see [14X'BacktrackKit: Refiners'[114X and [14X'BacktrackKit:
  Constraints'[114X.  What  is  specific to this package is that these refiners may
  additionally push graphs onto the graph stack, as described in [14X1[114X.[133X
  
  [33X[0;0YThe descriptions below cover the refiners intended for ordinary use. Several
  of  them  have  a family of experimental variants (used for benchmarking the
  different graph constructions); those are listed in [14X3.5[114X.[133X
  
  
  [1X3.2 [33X[0;0YGroup and coset refiners[133X[101X
  
  [8X[10XGB_Con.InGroup([3XG[103X[8X[10X)[110X[8X[108X
        [33X[0;6Yrefines  for  the  permutations lying in the group [3XG[103X. Placing two such
        refiners in a search computes a group intersection.[133X
  
  [8X[10XGB_Con.InCoset([3XG[103X[8X[10X, [3Xx[103X[8X[10X)[110X[8X[108X
        [33X[0;6Yrefines for the permutations lying in the right coset [10X[3XG[103X[10X * [3Xx[103X[10X[110X.[133X
  
  [33X[0;0Y[10XGB_Con.InGroupSimple[110X     and     [10XGB_Con.InCosetSimple[110X     are    alternative
  implementations  of the same two constraints that push a different (simpler)
  set of graphs; they exist for comparison and compute the same answers.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XLoadPackage("graphbacktracking", false);;[127X[104X
    [4X[25Xgap>[125X [27XG := SymmetricGroup(4);;[127X[104X
    [4X[25Xgap>[125X [27XH := DihedralGroup(IsPermGroup, 8);;[127X[104X
    [4X[25Xgap>[125X [27XGB_SimpleSearch(PartitionStack(4),[127X[104X
    [4X[25X>[125X [27X         [GB_Con.InGroup(G), GB_Con.InGroup(H)]) = Intersection(G, H);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X3.3 [33X[0;0YTransporter refiners[133X[101X
  
  [8X[10XGB_Con.PermConjugacy([3Xa[103X[8X[10X, [3Xb[103X[8X[10X)[110X[8X[108X
        [33X[0;6Yrefines for the permutations [10Xp[110X with [10X[3Xa[103X[10X ^ p = [3Xb[103X[10X[110X, i.e. that conjugate the
        permutation [3Xa[103X to [3Xb[103X.[133X
  
  [8X[10XGB_Con.TransformationConjugacy([3Xa[103X[8X[10X, [3Xb[103X[8X[10X)[110X[8X[108X
        [33X[0;6Ylikewise for transformations [3Xa[103X, [3Xb[103X: refines for the permutations [10Xp[110X with
        [10X[3Xa[103X[10X  ^  p  =  [3Xb[103X[10X[110X  (conjugation),  via  the  functional  digraph  of  each
        transformation.[133X
  
  [8X[10XGB_Con.PartialPermConjugacy([3Xa[103X[8X[10X, [3Xb[103X[8X[10X)[110X[8X[108X
        [33X[0;6Ylikewise for partial permutations [3Xa[103X, [3Xb[103X.[133X
  
  [8X[10XGB_Con.SetDigraphs([3XsetL[103X[8X[10X, [3XsetR[103X[8X[10X)[110X[8X[108X
        [33X[0;6Yrefines  for  the permutations mapping the set of digraphs [3XsetL[103X to the
        set  of digraphs [3XsetR[103X (under [10XOnSetsDigraphs[110X). With [3XsetL[103X = [3XsetR[103X this is
        the setwise stabiliser of a set of digraphs.[133X
  
  
  [1X3.4 [33X[0;0YNormaliser and group-conjugacy refiners[133X[101X
  
  [33X[0;0YThese  are  the  refiners  that  motivate  graph  backtracking, and the main
  addition  in  this release. To compute the normaliser of [3XG[103X inside some group
  [3XU[103X,  combine  the  normaliser  refiner  with  a  [10XBTKit_Refiner.InGroup([3XU[103X[10X)[110X (or
  [10XGB_Con.InGroup[110X) refiner.[133X
  
  [8X[10XGB_Con.NormaliserOrbital([3XG[103X[8X[10X)[110X[8X[108X
        [33X[0;6Ythe recommended refiner for the normaliser of [3XG[103X. It pushes the orbital
        graphs  of  the  relevant  stabilisers (encoded as a set of graphs the
        normaliser may permute), together with orbit colourings and root-level
        block systems.[133X
  
  [8X[10XGB_Con.GroupConjugacyOrbital([3XL[103X[8X[10X, [3XR[103X[8X[10X)[110X[8X[108X
        [33X[0;6Ythe  transporter version: refines for the permutations conjugating the
        group   [3XL[103X   to   the   group   [3XR[103X  (group  conjugacy  under  [10XOnPoints[110X).
        [10XGB_Con.NormaliserOrbital([3XG[103X[10X)[110X is exactly [10XGB_Con.GroupConjugacyOrbital([3XG[103X[10X,
        [3XG[103X[10X)[110X.[133X
  
  [4X[32X  Example  [32X[104X
    [4X[25Xgap>[125X [27XG := Group((1,2,3,4,5));;[127X[104X
    [4X[25Xgap>[125X [27XN := GB_SimpleSearch(PartitionStack(5),[127X[104X
    [4X[25X>[125X [27X         [BTKit_Refiner.InGroup(SymmetricGroup(5)),[127X[104X
    [4X[25X>[125X [27X          GB_Con.NormaliserOrbital(G)]);;[127X[104X
    [4X[25Xgap>[125X [27XN = Normaliser(SymmetricGroup(5), G);[127X[104X
    [4X[28Xtrue[128X[104X
  [4X[32X[104X
  
  
  [1X3.5 [33X[0;0YExperimental normaliser variants[133X[101X
  
  [33X[0;0YFor  experimenting  with  the  different  graph constructions, several other
  normaliser  refiners  are  provided. They all compute the same normaliser as
  [10XGB_Con.NormaliserOrbital[110X (and the corresponding [10XGroupConjugacy*[110X two-argument
  forms  exist  as well), but differ in which graphs and deductions they push,
  and     hence     in     speed:     [10XNormaliserSimple[110X,     [10XNormaliserSimple2[110X,
  [10XNormaliserOrbitalRoot[110X,     [10XNormaliserOrbitalNone[110X,     [10XNormaliserOrbitalDeep[110X,
  [10XNormaliserOrbitalSmall[110X,             [10XNormaliserOrbitalRegOrbit[110X            and
  [10XNormaliserOrbitalRegOrbitChar[110X.  The trade-offs of each are documented in the
  comments of [11Xgap/constraints/normaliser.g[111X.[133X
  
  [33X[0;0Y[12XWarning.[112X  The  two  regular-orbit  variants  ([10XNormaliserOrbitalRegOrbit[110X  and
  [10XNormaliserOrbitalRegOrbitChar[110X)  are [13Xnot[113X canonical-safe: they are correct for
  testing   normaliser/conjugacy   equality,   but   must   not  be  used  for
  canonical-image  computations. Use [10XGB_Con.NormaliserOrbital[110X when a canonical
  image is required.[133X
  
