Module CallB: CLIGHT_SEPARATION_HOARE_LOGIC_CALL_BACKWARD with Module CSHL_Def := DeepEmbeddedDef.
Module CSHL_Def := DeepEmbeddedDef.
Definition semax_call_backward := @AuxDefs.semax_call_backward.
End CallB.
Module CallF := CallB2F (DeepEmbeddedDef) (Conseq) (CallB).
Definition semax_call := @CallF.semax_call_forward.
Definition semax_return := @AuxDefs.semax_return.
Module Sset: CLIGHT_SEPARATION_HOARE_LOGIC_SSET_BACKWARD with Module CSHL_Def := DeepEmbeddedDef.
Module CSHL_Def := DeepEmbeddedDef.
Definition semax_set_ptr_compare_load_cast_load_backward := @AuxDefs.semax_set_ptr_compare_load_cast_load_backward.
End Sset.
Module SetB := Sset2Set (DeepEmbeddedDef) (Conseq) (Sset).
Module SetF := SetB2F (DeepEmbeddedDef) (Conseq) (SetB).
Definition semax_set_forward := @SetF.semax_set_forward.
Module PtrCmpB := Sset2PtrCmp (DeepEmbeddedDef) (Conseq) (Sset).
Module PtrCmpF := PtrCmpB2F (DeepEmbeddedDef) (Conseq) (PtrCmpB).
Definition semax_ptr_compare := @PtrCmpF.semax_ptr_compare_forward.
Module LoadB := Sset2Load (DeepEmbeddedDef) (Conseq) (Sset).
Module LoadF := LoadB2F (DeepEmbeddedDef) (Conseq) (LoadB).
Definition semax_load := @LoadF.semax_load_forward.
Module CastLoadB := Sset2CastLoad (DeepEmbeddedDef) (Conseq) (Sset).
Module CastLoadF := CastLoadB2F (DeepEmbeddedDef) (Conseq) (CastLoadB).
Definition semax_cast_load := @CastLoadF.semax_cast_load_forward.
Module StoreB: CLIGHT_SEPARATION_HOARE_LOGIC_STORE_BACKWARD with Module CSHL_Def := DeepEmbeddedDef.
Module CSHL_Def := DeepEmbeddedDef.
Definition semax_store_backward := @AuxDefs.semax_store_backward.
End StoreB.
Module StoreF := StoreB2F (DeepEmbeddedDef) (Conseq) (StoreB).
Definition semax_store := @StoreF.semax_store_forward.
Definition semax_skip := @AuxDefs.semax_skip.
Definition semax_conseq := @AuxDefs.semax_conseq.
Definition semax_Slabel := @AuxDefs.semax_label.
Definition semax_ext := @MinimumLogic.semax_ext.
Definition semax_ext_void := @MinimumLogic.semax_ext_void.
Definition semax_external_FF := @MinimumLogic.semax_external_FF.
End DeepEmbeddedMinimumSeparationLogic.
Module DeepEmbeddedPracticalLogic <: PRACTICAL_CLIGHT_SEPARATION_HOARE_LOGIC.
Module CSHL_Def := DeepEmbeddedDef.
Module CSHL_Defs := DeepEmbeddedDefs.
Module CSHL_MinimumLogic := DeepEmbeddedMinimumSeparationLogic.
Definition semax_set := @DeepEmbeddedMinimumSeparationLogic.SetB.semax_set_backward.
Arguments semax {_} {_} _ _ _ _.

Lemma sepcon_derives_full: forall Delta P1 P2 Q1 Q2,
local (tc_environ Delta) && (allp_fun_id Delta && P1) |-- |==> |> FF || P2 ->
local (tc_environ Delta) && (allp_fun_id Delta && Q1) |-- |==> |> FF || Q2 ->
local (tc_environ Delta) && (allp_fun_id Delta && (P1 * Q1)) |-- |==> |> FF || (P2 * Q2).