anchor.diff:          if nargs=0 || U.eq_args args1 args2=U.Equal //special case: for easily proving things like nat <: nat, or greater_than i <: greater_than i etc.
           then if need_unif
                then solve_t env ({problem with lhs=head1; rhs=head2}) wl
  -             else match solve_maybe_uinsts env orig head1 head2 wl with
  -                  | USolved wl -> solve env (solve_prob orig None [] wl)
  -                  | UFailed msg -> giveup env msg orig
  -                  | UDeferred wl -> solve env (defer "universe constraints" orig wl)
  +             else solve_head_then wl (fun ok wl ->
  +                    if ok then solve env (solve_prob orig None [] wl)
  +                    else solve env wl)
           else//Given T t1 ..tn REL T s1..sn
               //  if T expands to a refinement, then normalize it and recurse
               //  This allows us to prove things like
  
positive.code:     in
  
      let try_umax_components u1 u2 msg =
          match u1, u2 with
              | U_max us1, U_max us2 ->
                //filter out common universes in us1 and us2
  
negative.code:                     (unfold_and_retry d)
  
                | _ -> //cannot be unfolded or no smt anyway; so just try to solve extensionally
                  //if debug env <| Options.Other "Rel"
                  //then BU.print3
                  //    "Cannot unfold %s or %s since delta_depth=%s\n"
                  //                (Print.term_to_string t1)
                  //                (Print.term_to_string t2)
                  //                (match d with | None -> "None" | Some d -> Print.delta_depth_to_string d);
                  solve_sub_probs env wl
  
                end
  
              | _ ->
                let lhs = force_refinement (base1, refinement1) in
  