Module DeepEmbedded := DeepEmbedded (Def) (MinimumLogic).Module CSHL_Def := DeepEmbedded.DeepEmbeddedDef.Module CSHL_Defs := DeepEmbedded.DeepEmbeddedDefs.Module Conseq := GenConseq (Def) (MinimumLogic).Module ExtrFacts := GenExtrFacts (Def) (Conseq) (MinimumLogic).Module CSHL_Def := Def.Definition semax_call_forward := @MinimumLogic.semax_call.Module CallB := CallF2B (Def) (Conseq) (MinimumLogic) (CallF).Module CSHL_Def := Def.Definition semax_set_forward := @MinimumLogic.semax_set_forward.Module SetB := SetF2B (Def) (Conseq) (MinimumLogic) (SetF).Module CSHL_Def := Def.Definition semax_ptr_compare_forward := @MinimumLogic.semax_ptr_compare.Module PtrCmpB := PtrCmpF2B (Def) (Conseq) (MinimumLogic) (PtrCmpF).Module CSHL_Def := Def.Definition semax_load_forward := @MinimumLogic.semax_load.Module LoadB := LoadF2B (Def) (Conseq) (MinimumLogic) (LoadF).Module CSHL_Def := Def.Definition semax_cast_load_forward := @MinimumLogic.semax_cast_load.Module CastLoadB := CastLoadF2B (Def) (Conseq) (MinimumLogic) (CastLoadF).Module CSHL_Def := Def.Definition semax_store_forward := @MinimumLogic.semax_store.Module StoreB := StoreF2B (Def) (Conseq) (MinimumLogic) (StoreF).Module Extr : CLIGHT_SEPARATION_HOARE_LOGIC_EXTRACTION with Module CSHL_Def := Def := MinimumLogic.Module Sset := ToSset (Def) (Conseq) (Extr) (SetB) (PtrCmpB) (LoadB) (CastLoadB).

(* Specifications: *)
Theorem semax_sound: forall Espec CS Delta P c Q, @DeepEmbedded.DeepEmbeddedDef.semax Espec CS Delta P c Q -> @Def.semax Espec CS Delta P c Q.
Theorem semax_body_sound: forall Vspec Gspec CS f id, @DeepEmbedded.DeepEmbeddedDefs.semax_body Vspec Gspec CS f id -> @MinimumLogic.CSHL_Defs.semax_body Vspec Gspec CS f id.
Theorem semax_func_sound: forall Espec Vspec Gspec CS ids fs, @DeepEmbedded.DeepEmbeddedDef.semax_func Espec Vspec Gspec CS ids fs -> @Def.semax_func Espec Vspec Gspec CS ids fs.
Theorem semax_prog_sound: forall Espec prog Vspec Gspec f, @DeepEmbedded.DeepEmbeddedDefs.semax_prog Espec prog Vspec Gspec f -> @MinimumLogic.CSHL_Defs.semax_prog Espec prog Vspec Gspec f.
Theorem semax_prog_rule : forall {Espec: OracleKind}{CS: compspecs}, OK_ty = unit -> forall V G prog m h, @DeepEmbedded.DeepEmbeddedDefs.semax_prog Espec CS prog V G -> Genv.init_mem prog = Some m -> { b : block & { q : corestate & (Genv.find_symbol (globalenv prog) (prog_main prog) = Some b) * (forall jm, m_dry jm = m -> exists jm', semantics.initial_core (juicy_core_sem (cl_core_sem (globalenv prog))) h jm q jm' (Vptr b Ptrofs.zero) nil) * forall n, { jm | m_dry jm = m /\ level jm = n /\ (forall z, jsafeN (@OK_spec Espec) (globalenv prog) n z q jm) /\ no_locks (m_phi jm) /\ matchfunspecs (globalenv prog) G (m_phi jm) /\ app_pred (funassert (nofunc_tycontext V G) (empty_environ (globalenv prog))) (m_phi jm) } } }%type.
Theorem semax_prog_rule' : forall {Espec: OracleKind}{CS: compspecs}, forall V G prog m h, @DeepEmbedded.DeepEmbeddedDefs.semax_prog Espec CS prog V G -> Genv.init_mem prog = Some m -> { b : block & { q : corestate & (Genv.find_symbol (globalenv prog) (prog_main prog) = Some b) * (forall jm, m_dry jm = m -> exists jm', semantics.initial_core (juicy_core_sem (cl_core_sem (globalenv prog))) h jm q jm' (Vptr b Ptrofs.zero) nil) * forall n z, { jm | m_dry jm = m /\ level jm = n /\ nth_error (ghost_of (m_phi jm)) 0 = Some (Some (ext_ghost z, NoneP)) /\ jsafeN (@OK_spec Espec) (globalenv prog) n z q jm /\ no_locks (m_phi jm) /\ matchfunspecs (globalenv prog) G (m_phi jm) /\ app_pred (funassert (nofunc_tycontext V G) (empty_environ (globalenv prog))) (m_phi jm) } } }%type.