anchor.diff:                                  else
                                       notAttachedEdges.[gssVertex.State] |> ResizeArray.iter f
   
  -                    and reductionStep (leftNfaVertex : VertexWithBackTrack<int, int>) leftGssVertex rightVertex sppfLabel =
  -                        let prevVertex =
  -                            match reductionTemp.TryGetAlreadyVisited leftNfaVertex leftGssVertex with
  -                            | Some pv -> pv
  -                            | None -> 
  -                                let pv = new Vertex<VertexWithBackTrack<int, int> * GssVertex, SppfLabel>((leftNfaVertex, leftGssVertex))
  -                                reductionTemp.AddVisited pv                              
  -                        //TODO: maybe we should check and return, if we have reached left end of a handle, and add edge only in positive case
  -                        //this automaticaly would save us from useless hanging edges and subsequent search...
  -                        //But we can entrust this to GC
  -                                reductionDfs pv
  -                                pv
  -                        let edge = new Edge<_,_>(rightVertex, sppfLabel)
  -                        match sppfLabel with
  -                        | SppfLabel.TemporaryReduction _ -> temporarySppfEdges.Push(edge)
  -                        | _ -> ()
  -                        prevVertex.addEdge edge
  -
                       let rightEnd =
                           match reductionTemp.TryGetAlreadyVisited nfa.[pos] gssVertex with
                           | Some x -> x
  
positive.code:                             nfaEdge.label = term
                          | _ -> false
  
                      //vertex is already in reductionTemp, put there it's predecessors
                      //NOT SAFE: does not check, if vertex has already been processed
                      let rec reductionDfs (vertex : Vertex<VertexWithBackTrack<int, int> * GssVertex, SppfLabel>) =
  
negative.code:                         for edge in nfaVertex.inEdges do
                              if matchNfaAndGssEdgeLabels edge sppfLabel then
                                  reductionStep (edge.dest :?> VertexWithBackTrack<_,_>) prevGssVertex vertex sppfLabel
  
                      while dfsStack.Count > 0 do
                          dfsStack.Pop() |> reductionDfs
                      
                      //handle
                      for leftEnd in reductionTemp.NotHandledLeftEnds do
  