anchor.diff:  
                     //weaken the then and else guards
                     //neg_cond is the negated branch condition upto this branch
  -                  let g_then = TcComm.weaken_guard_formula
  -                    (Env.conj_guard g_then g_lift_then)
  -                    (U.mk_conj neg_cond g) in
  -                  let g_else = TcComm.weaken_guard_formula
  -                    g_lift_else
  -                    (U.mk_conj neg_cond (U.mk_neg g)) in                
  +                  let g_then, g_else =
  +                    let g = U.b2t g in
  +                    TcComm.weaken_guard_formula
  +                      (Env.conj_guard g_then g_lift_then)
  +                      (U.mk_conj neg_cond g),
  +                    TcComm.weaken_guard_formula
  +                      g_lift_else
  +                      (U.mk_conj neg_cond (U.mk_neg g)) in
   
                     Some md,
                     c,
  
positive.code:               lcases
                |> List.map (fun (g, _, _, _) -> g)
                |> List.fold_left (fun (conds, acc) g ->
                    let cond = U.mk_conj acc (U.mk_neg g) in
                    (conds@[cond]), cond) ([U.t_true], U.t_true)
                |> fst
                |> (fun l -> List.splitAt (List.length l - 1) l)  //the length of the list is at least 1
  
negative.code:                   let c, g =
                      let lc = maybe_return eff_last c_last in
                      let c, g = TcComm.lcomp_comp lc in
                      c, TcComm.weaken_guard_formula g (U.mk_conj (U.b2t g_last) neg_last) in
  
                    lcases,
                    neg_branch_conds,
  