anchor.diff:           (Ident.string_of_lid sub.source) (Ident.string_of_lid sub.target)) r in
   
       let c = S.mk_Comp ({
  -      comp_univs = [ u_a ];
  +      comp_univs = [ Env.new_u_univ () ];
         effect_name = PC.effect_PURE_lid;
         result_typ = repr;
         effect_args = [ pure_wp_uvar |> S.as_arg ];
  
positive.code: 
      U.arrow bs c, Env.conj_guard (Env.conj_guard g_f_b g_repr) guard_wp in
  
     if Env.debug env <| Options.Other "LayeredEffects" then
      BU.print1 "tc_layered_lift: before unification k: %s\n" (Print.term_to_string k);
  
    let g = Rel.teq env lift_ty k in
  
negative.code:                      (src_ed.mname |> Ident.string_of_lid) (tgt_ed.mname |> Ident.string_of_lid)) r
    end;
  
    let us, lift, lift_ty = check_and_gen env0 "" "lift" 1 lift_ts in
  
    if Env.debug env0 <| Options.Other "LayeredEffects" then
      BU.print2 "Typechecked lift: %s and lift_ty: %s\n"
        (Print.tscheme_to_string (us, lift)) (Print.tscheme_to_string ((us, lift_ty)));
  
    let us, lift_ty = SS.open_univ_vars us lift_ty in
    let env = Env.push_univ_vars env0 us in
  
    // let env, us, lift =
    //   if List.length us = 0 then env0, us, lift
    //   else
    //     let us, lift = SS.open_univ_vars us lift in
    //     Env.push_univ_vars env0 us, us, lift in
  
    (*
     * We typecheck the lift term (without any expected type)
     *   and then unify its type with the expected lift type
     *)
  
    // let lift, lc, g = tc_tot_or_gtot_term env lift in
    // Rel.force_trivial_guard env g;
  
    // let lift_ty = lc.res_typ |> N.normalize [Beta] env0 in
  
    let lift_t_shape_error s = BU.format4
      "Unexpected shape of lift %s~>%s, reason:%s (t:%s)"
  