anchor.diff:      pointers.Add []
   
       let nextSetU = new HashSet<Context>([new Context(0<state>, 0<vertex>, dummyPtr)])
  -    let nextSetW = new HashSet<int<ptr>>()
  -
  -    let createPointer nodes (set: HashSet<_>) =
  +    let nextSetW = new Dictionary<int64, ResizeArray<int<ptr>>>()
  +
  +    let createPointer nodes (set: Dictionary<_, ResizeArray<int<ptr>>>) =
           pointers.Add nodes
           let newPtrNum = (pointers.Count - 1) * 1<ptr>
  -        set.Add newPtrNum |> ignore
  +        let hashKey = hashptr nodes
  +        set.Add (hashKey, new ResizeArray<_>([newPtrNum])) |> ignore
           newPtrNum
       
       let addNode node =
  
positive.code:             refreshSets()
              step -1 pos (new Queue<_>(setU)) table
      
      let getResult () =                
          sppfNodes |> Seq.iter (fun node -> match node with   // lol
                                             | :? AST as ast -> ast.pos <- -1
                                             | _ -> ())
  
negative.code:         | Some context ->
              let root = sppfNodes.[pointers.[int context.Pointer].[0]] 
              Success (new Tree<_>(Seq.toArray tokens, root, rules))                      
          | None -> Error "nope"
  
      createEpsNodesAndPtr()
      run 0
  