anchor.diff:                          c2_comp.effect_args
                           ([], wl)
                in
  -             let sub_probs = ret_sub_prob :: arg_sub_probs in
  -             let guard = U.mk_conj_l (List.map p_guard sub_probs) in
  -             let wl = { wl with wl_implicits = imps@wl.wl_implicits } in
  +             let sub_probs = ret_sub_prob :: (arg_sub_probs @ (g_lift.deferred |> List.map snd)) in
  +             let guard =
  +               let guard = U.mk_conj_l (List.map p_guard sub_probs) in
  +               match g_lift.guard_f with
  +               | Trivial -> guard
  +               | NonTrivial f -> U.mk_conj guard f in
  +             let wl = { wl with wl_implicits = g_lift.implicits@wl.wl_implicits } in
                let wl = solve_prob orig (Some guard) [] wl in
                solve env (attempt sub_probs wl)
       in
  
positive.code:                             then c1_comp, c2_comp
                              else Env.unfold_effect_abbrev env c1,
                                   Env.unfold_effect_abbrev env c2 in
                        solve_eq c1_comp c2_comp []
                   else begin
                      let c1 = Env.unfold_effect_abbrev env c1 in
                      let c2 = Env.unfold_effect_abbrev env c2 in
  
negative.code:             [trivial_post |> S.as_arg]
              None Range.dummyRange in
  
          let sub_probs = ret_sub_prob::(is_sub_probs@f_sub_probs@g_sub_probs@(g_lift.deferred |> List.map snd)) in
          let guard =
            let guard = U.mk_conj_l (List.map p_guard sub_probs) in
            match g_lift.guard_f with
            | Trivial -> guard
            | NonTrivial f -> U.mk_conj guard f in
          let wl = solve_prob orig (Some <| U.mk_conj guard fml) [] wl in
          solve env (attempt sub_probs wl) in
  
  