anchor.diff:  
   let __tc (e : env) (t : term) : tac<(term * typ * guard_t)> =
       bind get (fun ps ->
  -    mlog (fun () -> BU.print1 "Tac> __tc(%s)\n" (tts e t)) (fun () ->
  +    mlog (fun () -> BU.print1 "Tac> __tc(%s)\n" (Print.term_to_string t)) (fun () ->
       let e = {e with uvar_subtyping=false} in
       try ret (ps.main_context.type_of e t)
       with | Errors.Err (_, msg)
  
positive.code:     in
      bind (__tc env t) (fun (t, typ, guard) ->
      mlog (fun () -> BU.print2 "__exact_now: got type %s\n__exact_now: and guard %s\n"
                                                       (tts (goal_env goal) typ)
                                                       (Rel.guard_to_string (goal_env goal) guard)) (fun _ ->
      bind (proc_guard "__exact typing" (goal_env goal) guard goal.opts) (fun _ ->
      mlog (fun () -> BU.print2 "__exact_now: unifying %s and %s\n" (tts (goal_env goal) typ)
                                                                    (tts (goal_env goal) (goal_type goal))) (fun _ ->
      bind (do_unify (goal_env goal) typ (goal_type goal)) (fun b -> if b
      then solve goal t
      else fail4 "%s : %s does not exactly solve the goal %s (witness = %s)"
  
negative.code:                | g::_ -> g.opts
                 | _ -> FStar.Options.peek ()
      in
      mlog (fun () -> BU.print1 "norm_term_env: t = %s\n" (Print.term_to_string t)) (fun () ->
      bind (__tc e t) (fun (t, _, _) ->
      let steps = [N.Reify; N.UnfoldTac]@(N.tr_norm_steps s) in
      let t = normalize steps ps.main_context t in
  