Local Open Scope pred.
(* This file contains two parts: 1. Proof of semax_conseq. 2. Deriving simpler and older version of consequence rules from semax_conseq. *)
(* Part 1: Proof of semax_conseq *)

(* Specifications: *)
Lemma _guard_mono: forall Espec ge Delta (P Q: assert) f k,
(forall rho, P rho |-- Q rho) ->
_guard Espec ge Delta Q f k |-- _guard Espec ge Delta P f k.
Lemma guard_mono: forall Espec ge Delta (P Q: assert) k,
(forall rho, P rho |-- Q rho) ->
guard Espec ge Delta Q k |-- guard Espec ge Delta P k.
Lemma rguard_mono: forall Espec ge Delta (P Q: ret_assert) k,
(forall rk vl rho, proj_ret_assert P rk vl rho |-- proj_ret_assert Q rk vl rho) ->
rguard Espec ge Delta Q k |-- rguard Espec ge Delta P k.