anchor.diff:  
   [<AllowNullLiteral>]
   type private Vertex (state : int, level : int) =
  -    let mutable out : Edge[] = null
  +    let mutable out : UsualOne<Edge> = Unchecked.defaultof<_>
       member this.Level = level
       member this.OutEdges
           with get() = out
           and set v = out <- v
       member this.State = state
  -    member this.Edge i = out.[i]
   
   and private Edge =
       struct 
  
positive.code:                 let mutable i = 0
                  let vertex = usedStates.[s]
                  let edges = edges.[vertex]
                  let mutable count = 0
                  while i < edges.Count do
                      let k = trd edges.[i]
                      let mutable j = i+1
  
negative.code:                     else
                          //printfn "  m %d: %d %d" remainLength vertex.Level vertex.State
                          if vertex.Level <> num then
                              if vertex.OutEdges.other <> null then
                                  vertex.OutEdges.other |> Array.iter
                                      (fun e ->
                                          path.[remainLength - 1] <- e.Ast
                                          walk (remainLength - 1) e.Dest path)
                              path.[remainLength - 1] <- vertex.OutEdges.first.Ast
                              walk (remainLength - 1) vertex.OutEdges.first.Dest path
                          else
                              simpleEdges.[vertex.State] |> ResizeArray.iter(fun (v,a) ->
                                      path.[remainLength - 1] <- a
  