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 semax_loop_unroll1:
forall {CS: compspecs} {Espec: OracleKind} Delta P P' Q body incr R,
@semax CS Espec Delta P body (loop1_ret_assert P' R) ->
@semax CS Espec Delta P' incr (loop2_ret_assert Q R) ->
@semax CS Espec Delta Q (Sloop body incr) R ->
@semax CS Espec Delta P (Sloop body incr) R.