anchor.diff:          new (d, a) = {Dest = d; Ast = a}
       end
   
  -let inline treeCompare (ast1 : obj) (ast2 : obj) inputLength =
  -    let mutable result = false
  -    let mutable leftChild1 = None
  -    let mutable rightChild1 = None
  -    let mutable leftChild2 = None
  -    let mutable rightChild2 = None
  -    let ext1, prod1 =
  -        match ast1 with
  -        | :? AST as a -> Some(a.leftExt, a.rightExt), a.first.prod
  -        | :? IntermidiateNode as i -> Some i.Extention, fst i.Position
  -        | _ -> None,0
  -    let ext2, prod2 =
  -        match ast2 with
  -        | :? AST as a -> Some(a.leftExt, a.rightExt), a.first.prod
  -        | :? IntermidiateNode as i -> Some i.Extention, fst i.Position
  -        | _ -> None,0
  -    
  -    //if fst ext1.Value = 0 && snd ext1.Value = inputLength  && fst ext2.Value = 0 && snd ext2.Value = inputLength then result <- false
  -    if ext1 = ext2 && prod1 = prod2
  -    then
  -        result <- true
  -    result
  -
   type Context =
       val Index         : int
       val Label         : Label
  
positive.code:                     n.rightExt
                  | :? AST as a -> a.rightExt 
                  | _ -> failwith "Unexpected type."
              //let family = new Family(prod, new Nodes(result, l, r, -1),l, r)
              let nodes = new Nodes(result, l, r, -1)
              let family = findFamily prod nodes l r
              family
  
negative.code:             else 
                  
                  stop := true  
                                
          and processing () =  
              let getIndex(nTerm, term) = 
  