Definition bupd_ret_assert (Q: ret_assert): ret_assert :=
          {| RA_normal := fun rho => bupd (RA_normal Q rho);
             RA_break := fun rho => bupd (RA_break Q rho);
             RA_continue := fun rho => bupd (RA_continue Q rho);
             RA_return := fun v rho => bupd (RA_return Q v rho) |}.

(* Specifications: *)
Lemma proj_bupd_ret_assert: forall Q ek vl, proj_ret_assert (bupd_ret_assert Q) ek vl = fun rho => bupd (proj_ret_assert Q ek vl rho).
Lemma _guard_bupd': forall {Espec: OracleKind} ge Delta (P: environ -> pred rmap) f k, _guard Espec ge Delta P f k = _guard Espec ge Delta (fun rho => bupd (P rho)) f k.
Lemma guard_bupd': forall {Espec: OracleKind} ge Delta (P: environ -> pred rmap) k, guard Espec ge Delta P k = guard Espec ge Delta (fun rho => bupd (P rho)) k.
Lemma rguard_bupd': forall {Espec: OracleKind} ge Delta (P: ret_assert) k, rguard Espec ge Delta P k = rguard Espec ge Delta (bupd_ret_assert P) k.
Lemma _guard_bupd: forall {Espec: OracleKind} ge Delta (F P: environ -> pred rmap) f k, _guard Espec ge Delta (fun rho => F rho * P rho) f k = _guard Espec ge Delta (fun rho => F rho * bupd (P rho)) f k.
Lemma guard_bupd: forall {Espec: OracleKind} ge Delta (F P: environ -> pred rmap) k, guard Espec ge Delta (fun rho => F rho * P rho) k = guard Espec ge Delta (fun rho => F rho * bupd (P rho)) k.
Lemma rguard_bupd: forall {Espec: OracleKind} ge Delta F (P: ret_assert) k, rguard Espec ge Delta (frame_ret_assert P F) k = rguard Espec ge Delta (frame_ret_assert (bupd_ret_assert P) F) k.
Lemma rguard_except_0': forall {Espec: OracleKind} ge Delta (P: ret_assert) k, rguard Espec ge Delta P k = rguard Espec ge Delta (except_0_ret_assert P) k.
Lemma rguard_except_0: forall {Espec: OracleKind} ge Delta (F: environ -> pred rmap) Q k, rguard Espec ge Delta (frame_ret_assert Q F) k = rguard Espec ge Delta (frame_ret_assert (except_0_ret_assert Q) F) k.
Lemma _guard_allp_fun_id: forall {Espec: OracleKind} ge Delta' Delta (F P: environ -> pred rmap) f k, tycontext_sub Delta Delta' -> _guard Espec ge Delta' (fun rho => F rho * P rho) f k = _guard Espec ge Delta' (fun rho => F rho * (allp_fun_id Delta rho && P rho)) f k.
Lemma guard_allp_fun_id: forall {Espec: OracleKind} ge Delta' Delta (F P: environ -> pred rmap) k, tycontext_sub Delta Delta' -> guard Espec ge Delta' (fun rho => F rho * P rho) k = guard Espec ge Delta' (fun rho => F rho * (allp_fun_id Delta rho && P rho)) k.
Lemma rguard_allp_fun_id: forall {Espec: OracleKind} ge Delta' Delta (F: environ -> pred rmap) P k, tycontext_sub Delta Delta' -> rguard Espec ge Delta' (frame_ret_assert P F) k = rguard Espec ge Delta' (frame_ret_assert (conj_ret_assert P (allp_fun_id Delta)) F) k.
Lemma semax_bupd_elim {CS: compspecs} {Espec: OracleKind}: forall Delta P c R, semax Espec Delta P c R -> semax Espec Delta (fun rho => bupd (P rho)) c R.
Lemma semax_skip {CS: compspecs} {Espec: OracleKind}: forall Delta P, semax Espec Delta P Sskip (normal_ret_assert P).