anchor.diff:                    | Some univ ->
                       S.mk (Tm_type univ) None t.pos, univ
                 in
  -              let _, u, wl = copy_uvar u_lhs (U.arrow (bs_lhs@bs) (S.mk_Total k)) wl in
  -              f (S.mk_Tm_app u (bs_lhs_args@bs_terms) None c.pos) (Some univ), wl
  +              let _, u, wl = copy_uvar u_lhs (bs_lhs@bs) k wl in
  +              f u (Some univ), wl
              in
              match c.n with
              | Total (t, uopt) ->
  
positive.code:         //            (Print.args_to_string [last_arg_rhs]);
          let t_lhs, u_lhs, _lhs_args = lhs in
          let lhs', lhs'_last_arg, wl =
                let _, t_last_arg, wl = copy_uvar u_lhs (fst <| U.type_u()) wl in
                //FIXME: this may be an implicit arg ... fix qualifier
                let _, u_lhs', wl = copy_uvar u_lhs (U.arrow (bs_lhs@[S.null_binder t_last_arg]) (S.mk_Total t_res_lhs)) wl in
                let lhs' = S.mk_Tm_app u_lhs' bs_lhs_args None t_lhs.pos in
                let _, u_lhs'_last_arg, wl = copy_uvar u_lhs (U.arrow bs_lhs (S.mk_Total t_last_arg)) wl in
                let lhs'_last_arg = S.mk_Tm_app u_lhs'_last_arg bs_lhs_args None t_lhs.pos in
                lhs', lhs'_last_arg, wl
          in
          //if Env.debug env <| Options.Other "Rel"
  
negative.code:               solve env (attempt [sub_prob] (solve_prob orig None [sol] wl))
  
              | (x, imp)::formals ->
                let _ctx_u_x, u_x, wl = copy_uvar u_lhs (bs_lhs@bs) (U.type_u() |> fst) wl in
                //printfn "Generated formal %s where %s" (Print.term_to_string t_y) (Print.ctx_uvar_to_string ctx_u_x);
                let y = S.new_bv (Some (S.range_of_bv x)) u_x in
                aux (bs@[y, imp]) (bs_terms@[S.bv_to_name y, imp]) formals wl
           in
           aux [] [] formals wl
  