anchor.diff:          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
  +              //AR: 07/20: note the type of lhs' is t_last_arg -> t_res_lhs
                 let _, lhs', wl =
                   let b = S.null_binder t_last_arg in
                   copy_uvar u_lhs (bs_lhs@[b])
  
positive.code:       | None -> []
        | Some (_, bx, rest) -> bx::rest
  
  let restrict_ctx env (tgt:ctx_uvar) (bs:binders) (src:ctx_uvar) wl =
    let pfx, _ = maximal_prefix tgt.ctx_uvar_binders src.ctx_uvar_binders in
    let g = gamma_until src.ctx_uvar_gamma pfx in
  
    let aux (t:typ) (f:term -> term) =
      let _, src', wl = new_uvar ("restricted " ^ (Print.uvar_to_string src.ctx_uvar_head)) wl
        src.ctx_uvar_range g pfx t
  
negative.code:   let bs = bs |>
      List.filter (fun (bv1, _) -> List.existsb (fun (bv2, _) -> S.bv_eq bv1 bv2) src.ctx_uvar_binders) in
      
    if List.length bs = 0 then aux src.ctx_uvar_typ (fun src' -> src')  //no abstraction over bs
    else begin
      aux
        (src.ctx_uvar_typ |> env.universe_of env |> Some |> S.mk_Total' src.ctx_uvar_typ |> U.arrow bs)  //bs -> Tot t_t
        (fun src' -> S.mk_Tm_app  //?u bs
          src'
          (bs |> S.binders_to_names |> List.map S.as_arg)
          src.ctx_uvar_range)
  