anchor.diff:      : solution =
       let wl' = {wl with defer_ok=false;
                          smt_ok=false;
  +                       umax_heuristic_ok=false;
                          attempting=[];
                          wl_deferred=[];
                          wl_implicits=[]} in
  
positive.code:         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//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
  
negative.code:             (Print.term_to_string t2) (Print.tag_of_term t2);
          let head1, args1 = U.head_and_args t1 in
          let head2, args2 = U.head_and_args t2 in
          let solve_head_then wl k =
              if need_unif then k true wl
              else match solve_maybe_uinsts env orig head1 head2 wl with
              | USolved wl -> k true wl //(solve_prob orig None [] wl)
              | UFailed msg -> giveup env msg orig
              | UDeferred wl -> k false (defer "universe constraints" orig wl)
          in
          let nargs = List.length args1 in
          if nargs <> List.length args2
          then giveup env (BU.format4 "unequal number of arguments: %s[%s] and %s[%s]"
  