anchor.diff:                      (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);
  +                //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
  -
  -
  -
  -
  -              //if need_unif then
  -              //    let argp = List.zip ((head1, None)::args1) ((head2, None)::args2) in
  -              //    let subprobs, wl = List.fold_right (fun ((a1, _), (a2, _)) (probs, wl) ->
  -              //                          let prob', wl = mk_problem wl (p_scope orig) orig a1 EQ a2 None "index" in
  -              //                          (TProb prob')::probs, wl) argp ([], wl)
  -              //    in
  -              //    if debug env <| Options.Other "Rel" then
  -              //        BU.print1 "Adding subproblems for arguments: %s" (Print.list_to_string (prob_to_string env) subprobs);
  -              //    let formula = U.mk_conj_l (List.map (fun p -> p_guard p) subprobs) in
  -              //    let wl = solve_prob orig (Some formula) [] wl in
  -              //    solve env (attempt subprobs wl)
  -              //else begin
  -              //     match solve_maybe_uinsts env orig head1 head2 wl with
  -              //     | UFailed msg -> giveup env msg orig
  -              //     | UDeferred wl -> solve env (defer "universe constraints" orig wl)
  -              //     | USolved wl ->
  -              //       let subprobs, wl =
  -              //         List.fold_right2
  -              //           (fun (a, _) (a', _) (subprobs, wl) ->
  -              //               let p, wl = mk_t_problem wl [] orig a EQ a' None "index" in
  -              //               p::subprobs, wl)
  -              //           args1
  -              //           args2
  -              //           ([], wl)
  -              //       in
  -              //       if debug env <| Options.Other "Rel"
  -              //       then BU.print1 "Adding subproblems for arguments: %s\n"
  -              //                      (Print.list_to_string (prob_to_string env) subprobs);
  -
  -              //       List.iter (def_check_prob "solve_t' subprobs") subprobs;
  -              //       let formula = U.mk_conj_l (List.map p_guard subprobs) in
  -              //       let wl = solve_prob orig (Some formula) [] wl in
  -              //       solve env (attempt subprobs wl)
  -              //     end
   
               | _ ->
                 let lhs = force_refinement (base1, refinement1) 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]"
  