anchor.diff:                      | _ -> failwith "Unexpected ast"
               for prefix in u.prefixes do
                   prString <-  prString + printPath prefix "["
  -            print <| sprintf "%d [label=\"%d_%d_%s\"]" !curNum u.Level u.State prString
  +            print <| sprintf "%d [label=\"%d_%d_%s\"]" !curNum u.Level u.State prString*)
               incr curNum
               u.OutEdges |> ResizeArray.iter (handleEdge u)
               
  
positive.code:                     addZeroReduction v e.Tag currentGraphV false
          v, isNew
  
      //return old prefixes with terminal on end
      let newPrefixes (oldPrefixes : ResizeArray<Path>) (terminal : Terminal) =
          oldPrefixes |> ResizeArray.map (fun prefix -> new Path(terminal, prefix))
  
  
      let addEdge (startV:VInfo<_>) isNew (newVertex:Vertex) edge isNotEps (prefixesToAdd : ResizeArray<Path>) =
          if not isNew && newVertex.PassingReductions.Count > 0
          then startV.passingReductions.Add((newVertex, edge))
          customEnqueue(startV)
          newVertex.addEdge edge
          for prefixToAdd in prefixesToAdd do
              if not (ResizeArray.exists 
                         (fun (path : Path) -> path.IsEqual prefixToAdd)
                         newVertex.prefixes)
              then newVertex.prefixes.Add(prefixToAdd)
  
          if isNotEps
          then
  
negative.code:     member this.OutEdges = out
      member this.State = state
      member this.PassingReductions = passingReductions
      member val prefixes = new ResizeArray<Prefix>() with get    //in reverse order
  
      member this.addEdge (edge : Edge) =
          let mutable i = out.Count - 1
  