anchor.diff:                 then giveup env msg prob
                  else fallback()
   
  -             | Success (_, defer_to_tac, imps, typs) ->
  +             | Success (_, defer_to_tac, imps) ->
                  UF.commit tx;
                  let guard =
                      U.mk_conj (p_guard base_prob)
                                (p_guard ref_prob |> guard_on_element wl problem x1) in
                  let wl = solve_prob orig (Some guard) [] wl in
                  let wl = {wl with ctr=wl.ctr+1} in
  -               let wl = extend_wl wl defer_to_tac imps typs in
  +               let wl = extend_wl wl defer_to_tac imps in
                  solve env (attempt [base_prob] wl)
           else fallback()
   
  
positive.code:                                 smt_ok=false;
                                  attempting=[TProb prob];
                                  wl_deferred=[];
                                  wl_implicits=[];
                                  wl_solution_types=[]} in  //AR: defer to tac [] here?
              let tx = UF.new_transaction () in
              match solve env wl' with
              | Success (_, defer_to_tac, imps, typs) ->
                  let wl' = {wl' with attempting=[orig]} in
                  (match solve env wl' with
                  | Success (_, defer_to_tac', imps', typs') ->
                    UF.commit tx;
                    Some (extend_wl wl (defer_to_tac@defer_to_tac') (imps@imps') (typs@typs'))
  
                  | Failed _ ->
                    UF.rollback tx;
  
negative.code:                                 (N.term_to_string env imp.imp_uvar.ctx_uvar_typ)
                                  imp.imp_reason) imp.imp_range
  
  let subtype_nosmt_force env t1 t2 =
      match subtype_nosmt env t1 t2 with
      | None -> false
      | Some g ->
  