anchor.diff:          go (Map.toList a1) a2 Map.empty
   
       let fixpointAchieved (oldFsaMap: FSAMap) (widenedFsaMap: FSAMap) =
  -        let rec go (oldFsaList: list<string * FSA<State>>) (widenedFsaMap: FSAMap) =
  +        let rec go (oldFsaList: list<string * FSA<FsaState>>) (widenedFsaMap: FSAMap) =
               match oldFsaList with
               | [] -> true
               | (varName, oldFsa) :: tl ->
  
positive.code:             isRightDir, dirStack'
          else true, dirHelper
  
  type State = char * Position<int>
  type FSAMap = Map<string, FSA<State>>
  
  let buildAutomaton (ddg: DDG) =
      // exception messages
  
negative.code:     let fixpointComputationProblemMsg = "old fsa map contains more variables than the new one in fixpoint computation"
  
      let unionTwoFsaMaps (a1: FSAMap) (a2: FSAMap) =
          let rec go (a1: list<string * FSA<FsaState>>) (a2: FSAMap) (acc: FSAMap) =
              match a1 with
              | [] -> Map.fold (fun acc k v -> Map.add k v acc) acc a2
              | (varName, fsa1) :: tl ->
  