anchor.diff:        NonTrivial g
       | _ -> g2
   
  +
   (*
    * e has type lc, and lc is either pure or ghost
    * This function inserts a return (x==e) in lc
  
positive.code:     if m_opt |> is_none || Options.ml_ish () || is_ghost_effect env lc.eff_name
      then C.effect_PURE_lid
      else m_opt |> must in
    let flags =
      if should_return
      then if TcComm.is_total_lcomp lc
           then RETURN::lc.cflags
           else PARTIAL_RETURN::lc.cflags
      else lc.cflags
    in
    let refine () : comp * guard_t =
        let c, g_c = TcComm.lcomp_comp lc in
        let u_t =
  
negative.code:         (e2:term)
          (x, lc2)
     : lcomp =
     let env_x =
       match x with
       | None -> env
       | Some x -> Env.push_bv env x in
  
     //AR: use c1's effect to return c2 into
     let lc2 =
          let eff1 = Env.norm_eff_name env lc1.eff_name in
          let eff2 = Env.norm_eff_name env lc2.eff_name in
  
          if lid_equals eff2 C.effect_PURE_lid &&
             Env.join_opt env eff1 eff2 |> is_none &&
             Env.exists_polymonadic_bind env eff1 eff2 |> is_none
          then assume_result_eq_pure_term_in_m env_x (eff1 |> Some) e2 lc2
          else if (not (is_pure_or_ghost_effect env eff1)
               ||  should_not_inline_lc lc1)
               && is_pure_or_ghost_effect env eff2
          then maybe_assume_result_eq_pure_term_in_m env_x (eff1 |> Some) e2 lc2
          else lc2 in //the resulting computation is still pure/ghost and inlineable; no need to insert a return
     bind r env e1opt lc1 (x, lc2)
  
  