anchor.diff:      smt_ok=true;
       wl_implicits=[]
   }
  -let singleton wl prob smt_ok     = {wl with attempting=[prob]; smt_ok = smt_ok}
  -let wl_of_guard env g            = {empty_worklist env with attempting=List.map snd g}
  -let defer reason prob wl         = {wl with wl_deferred=(wl.ctr, reason, prob)::wl.wl_deferred}
  -let attempt probs wl             = {wl with attempting=probs@wl.attempting}
  -
   let giveup env reason prob =
       if debug env <| Options.Other "Rel"
       then BU.print2 "Failed %s:\n%s\n" reason (prob_to_string env prob);
  
positive.code: and solve_rigid_flex_or_flex_rigid_subtyping
      (rank:rank_t)
      (env:Env.env) (tp:tprob) (wl:worklist) : solution =
      let flip = rank = Flex_rigid in
      (*
          meet_or_join op [t1;..;tn] env wl:
  
negative.code:         def_check_scoped_comp (msgf "rhs")        prob p.rhs
          end
  
  let singleton wl prob smt_ok     = {wl with attempting=[prob]; smt_ok = smt_ok}
  let wl_of_guard env g            = {empty_worklist env with attempting=List.map snd g}
  let defer reason prob wl         = {wl with wl_deferred=(wl.ctr, reason, prob)::wl.wl_deferred}
  let attempt probs wl             =
      List.iter (def_check_prob "attempt") probs;
      {wl with attempting=probs@wl.attempting}
  
  let mk_eq2 wl prob t1 t2 : term * worklist =
      (* NS: Rather than introducing a new variable, it would be much preferable
              to simply compute the type of t1 here.
  