Module CConseqFacts :=
  SeparationLogicFacts.GenCConseqFacts
    (SeparationLogicAsLogicSoundness.MainTheorem.CSHL_PracticalLogic.CSHL_MinimumLogic.CSHL_Def)
    (SeparationLogicAsLogicSoundness.MainTheorem.CSHL_PracticalLogic.CSHL_MinimumLogic).Module Conseq :=
  SeparationLogicFacts.GenConseq
    (SeparationLogicAsLogicSoundness.MainTheorem.CSHL_PracticalLogic.CSHL_MinimumLogic.CSHL_Def)
    (SeparationLogicAsLogicSoundness.MainTheorem.CSHL_PracticalLogic.CSHL_MinimumLogic).Module ConseqFacts :=
  SeparationLogicFacts.GenConseqFacts
    (SeparationLogicAsLogicSoundness.MainTheorem.CSHL_PracticalLogic.CSHL_MinimumLogic.CSHL_Def)
    (Conseq).

(* Specifications: *)
Lemma semax_frame_PQR: forall Q2 R2 Espec {cs: compspecs} Delta R1 P Q P' Q' R1' c, closed_wrt_modvars c (LOCALx Q2 (SEPx R2)) -> @semax cs Espec Delta (PROPx P (LOCALx Q (SEPx R1))) c (normal_ret_assert (PROPx P' (LOCALx Q' (SEPx R1')))) -> @semax cs Espec Delta (PROPx P (LOCALx (Q++Q2) (SEPx (R1++R2)))) c (normal_ret_assert (PROPx P' (LOCALx (Q'++Q2) (SEPx (R1'++R2))))).
Lemma sequential: forall Espec {cs: compspecs} Delta P c Q, @semax cs Espec Delta P c (normal_ret_assert (RA_normal Q)) -> @semax cs Espec Delta P c Q.
Lemma sequential': forall Q Espec {cs: compspecs} Delta P c R, @semax cs Espec Delta P c (normal_ret_assert Q) -> @semax cs Espec Delta P c (overridePost Q R).
Lemma semax_seq': forall Espec {cs: compspecs} Delta P c1 P' c2 Q, @semax cs Espec Delta P c1 (normal_ret_assert P') -> @semax cs Espec Delta P' c2 Q -> @semax cs Espec Delta P (Ssequence c1 c2) Q.
Lemma gather_SEP: forall R1 R2, SEPx (R1 ++ R2) = SEPx (fold_right sepcon emp R1 :: R2).