anchor.diff:              [trivial_post |> S.as_arg]
               None Range.dummyRange in
   
  -        let sub_probs = ret_sub_prob::(is_sub_probs@f_sub_probs@g_sub_probs) in
  -        let guard = U.mk_conj_l (List.map p_guard sub_probs) 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
   
  
positive.code:        *)
  
        if problem.relation = EQ
        then solve_eq c1 c2 g_lift.implicits  //AR: TODO: FIXME: THIS BREAKS IF g_lift IS MORE THAN IMPLICITS
        else
          let r = Env.get_range env in
          let wl = { wl with wl_implicits = g_lift.implicits@wl.wl_implicits } in  //AR: TODO: FIXME: THIS BREAKS IF g_lift IS MORE THAN IMPLICITS
  
          //sub problems for uvar indices in c1
          let is_sub_probs, wl =
  
negative.code:         if Env.is_layered_effect env c2.effect_name
          then solve_layered_sub c1 edge c2
          else if problem.relation = EQ
          then solve_eq (lift_c1 ()) c2 Env.trivial_guard
          else let is_null_wp_2 = c2.flags |> BU.for_some (function TOTAL | MLEFFECT | SOMETRIVIAL -> true | _ -> false) in
               let wpc1, wpc2 = match c1.effect_args, c2.effect_args with
                | (wp1, _)::_, (wp2, _)::_ -> wp1, wp2
  