End GenConseq.
Module GenConseqFacts
(Def: CLIGHT_SEPARATION_HOARE_LOGIC_DEF)
(Conseq: CLIGHT_SEPARATION_HOARE_LOGIC_CONSEQUENCE with Module CSHL_Def := Def).
(* Copied from canon.v *)

(* Specifications: *)
Lemma semax_pre: forall {Espec: OracleKind}{cs: compspecs},
forall P' Delta P c R,
local (tc_environ Delta) && P |-- P' ->
@semax cs Espec Delta P' c R  -> @semax cs Espec Delta P c R.
Lemma semax_pre_simple: forall {Espec: OracleKind}{cs: compspecs},
forall P' Delta P c R,
P |-- P' ->
@semax cs Espec Delta P' c R  -> @semax cs Espec Delta P c R.
Lemma semax_post:
forall (R': ret_assert) Espec {cs: compspecs} Delta (R: ret_assert) P c,
local (tc_environ Delta) && RA_normal R' |-- RA_normal R ->
local (tc_environ Delta) && RA_break R' |-- RA_break R ->
local (tc_environ Delta) && RA_continue R' |-- RA_continue R ->
(forall vl, local (tc_environ Delta) && RA_return R' vl |-- RA_return R vl) ->
@semax cs Espec Delta P c R' ->  @semax cs Espec Delta P c R.
Lemma semax_post_simple:
forall (R': ret_assert) Espec {cs: compspecs} Delta (R: ret_assert) P c,
RA_normal R' |-- RA_normal R ->
RA_break R' |-- RA_break R ->
RA_continue R' |-- RA_continue R ->
(forall vl, RA_return R' vl |-- RA_return R vl) ->
@semax cs Espec Delta P c R' ->  @semax cs Espec Delta P c R.
Lemma semax_post': forall R' Espec {cs: compspecs} Delta R P c,
local (tc_environ Delta) && R' |-- R ->
@semax cs Espec Delta P c (normal_ret_assert R') ->
@semax cs Espec Delta P c (normal_ret_assert R).
Lemma semax_pre_post': forall P' R' Espec {cs: compspecs} Delta R P c,
local (tc_environ Delta) && P |-- P' ->
local (tc_environ Delta) && R' |-- R ->
@semax cs Espec Delta P' c (normal_ret_assert R') ->
@semax cs Espec Delta P c (normal_ret_assert R).