anchor.diff:              printfn "%s" (externalToString rulesIndexMap ext)
               newState
             )  
  -
  -  printfn "final exp: %s" (ccodegen.prettyprint (fst finalProg))
  +  let (finalProgRoot, _, _) = finalProg
  +  printfn "final exp: %s" (ccodegen.prettyprint finalProgRoot)
   
     best
   
  
positive.code:   | _  -> p @ [nextMove]
  
  let stepProg (prog: ProgramState) (step: Step): ProgramState = 
    let (e, pos) = prog
    match step with 
    | StepMove(m) -> 
      let (_, moves) = stateToMoves prog
      let moves' = movesUpdate moves m
      movesToState (e, moves')
    | StepRule(r) ->
      applyRuleAtParticularPosition e (pos, r), pos
  
  let deltaPos (p1: Move list) (p2: Move list): Move list = 
    let rec commonPrefix l1 l2 = 
  
negative.code: // In essence similar to a zipper data structure
  type SubExpr<'p> = 
    Expr (* Root *) * 
    Expr option (* Sub Expression *) * 
    'p (* Position Representation *)
  type ProgramState = SubExpr<RulePosition>
  type ProgramMoves = SubExpr<Move list>
  