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).

Lemma extract_exists_pre_later {CS: compspecs} {Espec: OracleKind}:
forall  (A : Type) (Q: assert) (P : A -> assert) c Delta (R: ret_assert),
(forall x, semax Delta (Q && |> P x) c R) ->
semax Delta (Q && |> exp P) c R.