anchor.diff:      member val vNum = vNum with get
       member val processedGssVertices = new ResizeArray<Vertex>() with get
       member val unprocessedGssVertices = new ResizeArray<Vertex>() with get
  +    member val passingReductions = new ResizeArray<Vertex * Edge>() with get
       member val reductions = new Queue<_> (10) with get
   
       member this.GetReduction() = 
  
positive.code:                 let findGssVertex (target : VInfo<_>) = 
                      let srcV = target.processedGssVertices |> ResizeArray.tryFind(fun v -> v.State = push)
                      match srcV with
                      | Some v -> v
                      | None -> 
                          let srcV = target.unprocessedGssVertices |> ResizeArray.tryFind(fun v -> v.State = push)
                          match srcV with
                          | Some v -> v
                          | None -> 
                              let v = new Vertex(push, target.vNum)
                              if currentGraphV = target
                              then newUnprocessedGssVs.Add v
                              else target.unprocessedGssVertices.Add v
                              v
                  let targetGssV = findGssVertex e.Target
  
                  let mutable edge = Unchecked.defaultof<_>
                  if edgesToTerms.ContainsKey e
  
negative.code:         else 
              let edge = new Edge(final, nodes.Count)
              nodes.Add <| new AST (Unchecked.defaultof<_>, null)
              if not isNew
              then startV.passingReductions.Add((newVertex, edge))
              newVertex.addEdge edge
              if (pos > 0)
              then
  