anchor.diff:      let ffsym, ff = fresh_fvar "f" Fuel_sort in
       let xx_has_type = mk_HasTypeFuel ff xx tapp in
       Term.Assume(mkForall([[xx_has_type]], (xxsym, Term_sort)::(ffsym, Fuel_sort)::vars,
  -                         mkImp(xx_has_type, mkEq(tapp, mkApp("PreType", [xx])))), Some "pretyping", Some (varops.fresh "@pretyping_"))
  +                         mkImp(xx_has_type, mkEq(tapp, mkApp("PreType", [xx])))), Some "pretyping", Some (varops.mk_unique ("pretyping_" ^ (Util.digest_of_string tapp.hash))))
   
   let primitive_type_axioms : env -> lident -> string -> term -> list<decl> =
       let xx = ("x", Term_sort) in
  
positive.code:       | Tm_uvar (uv, k) ->
          let ttm = Term.mk_Term_uvar (Unionfind.uvar_id uv) in
          let t_has_k, decls = encode_term_pred None k env ttm in //TODO: skip encoding this if it has already been encoded before
          let d = Term.Assume(t_has_k, Some "Uvar typing", Some (varops.fresh (Util.format1 "@uvar_typing_%s" (Util.string_of_int <| Unionfind.uvar_id uv)))) in
          ttm, decls@[d]
  
        | Tm_app _ ->
  
negative.code:               Term.mkApp(t, cvars |> List.map mkFreeV), []
  
              | None ->
                let tsym = varops.mk_unique ("Tm_refine_" ^ (Util.digest_of_string tkey.hash)) in
                let cvar_sorts = List.map snd cvars in
                let tdecl = Term.DeclFun(tsym, cvar_sorts, Term_sort, None) in
                let t = Term.mkApp(tsym, List.map mkFreeV cvars) in
  