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

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.