End CLIGHT_SEPARATION_HOARE_LOGIC_COMPLETE_CONSEQUENCE.
Module GenCConseqFacts
(Def: CLIGHT_SEPARATION_HOARE_LOGIC_DEF)
(CConseq: CLIGHT_SEPARATION_HOARE_LOGIC_COMPLETE_CONSEQUENCE with Module CSHL_Def := Def).

(* Specifications: *)
Lemma semax_pre_post_indexed_bupd:
forall {CS: compspecs} {Espec: OracleKind} (Delta: tycontext),
forall P' (R': ret_assert) P c (R: ret_assert) ,
local (tc_environ Delta) && P |-- |==> |> FF || P' ->
local (tc_environ Delta) && RA_normal R' |-- |==> |> FF || RA_normal R ->
local (tc_environ Delta) && RA_break R' |-- |==> |> FF || RA_break R ->
local (tc_environ Delta) && RA_continue R' |-- |==> |> FF || RA_continue R ->
(forall vl, local (tc_environ Delta) && RA_return R' vl |-- |==> |> FF || RA_return R vl) ->
@semax CS Espec Delta P' c R' -> @semax CS Espec Delta P c R.
Lemma semax_pre_post_bupd:
forall {CS: compspecs} {Espec: OracleKind} (Delta: tycontext),
forall P' (R': ret_assert) P c (R: ret_assert) ,
local (tc_environ Delta) && P |-- |==> P' ->
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_pre_indexed_bupd:
forall P' Espec {cs: compspecs} Delta P c R,
local (tc_environ Delta) && P |-- |==> |> FF || P' ->
@semax cs Espec Delta P' c R  -> @semax cs Espec Delta P c R.
Lemma semax_post_indexed_bupd:
forall (R': ret_assert) Espec {cs: compspecs} Delta (R: ret_assert) P c,
local (tc_environ Delta) && RA_normal R' |-- |==> |> FF || RA_normal R ->
local (tc_environ Delta) && RA_break R' |-- |==> |> FF || RA_break R ->
local (tc_environ Delta) && RA_continue R' |-- |==> |> FF || RA_continue R ->
(forall vl, local (tc_environ Delta) && RA_return R' vl |-- |==> |> FF || RA_return R vl) ->
@semax cs Espec Delta P c R' ->  @semax cs Espec Delta P c R.
Lemma semax_post''_indexed_bupd: forall R' Espec {cs: compspecs} Delta R P c,
local (tc_environ Delta) && R' |-- |==> |> FF || RA_normal R ->
@semax cs Espec Delta P c (normal_ret_assert R') ->
@semax cs Espec Delta P c R.
Lemma semax_pre_bupd:
forall P' Espec {cs: compspecs} 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_post_bupd:
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'_bupd: 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_post''_bupd: forall R' Espec {cs: compspecs} Delta R P c,
local (tc_environ Delta) && R' |-- |==> RA_normal R ->
@semax cs Espec Delta P c (normal_ret_assert R') ->
@semax cs Espec Delta P c R.
Lemma semax_pre_post'_bupd: 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).
Lemma semax_pre_post''_bupd: forall P' R' Espec {cs: compspecs} Delta R P c,
local (tc_environ Delta) && P |-- |==> P' ->
local (tc_environ Delta) && R' |-- |==> RA_normal R ->
@semax cs Espec Delta P' c (normal_ret_assert R') ->
@semax cs Espec Delta P c R.