Local Open Scope nat_scope.
Local Open Scope pred.
Record juicy_ext_spec (Z: Type) := {
JE_spec:> external_specification juicy_mem external_function Z;
JE_pre_hered: forall e t ge_s typs args z, hereditary age (ext_spec_pre JE_spec e t ge_s typs args z);
JE_post_hered: forall e t ge_s tret rv z, hereditary age (ext_spec_post JE_spec e t ge_s tret rv z);
JE_exit_hered: forall rv z, hereditary age (ext_spec_exit JE_spec rv z)
}.
Class OracleKind := {
OK_ty : Type;
OK_spec: juicy_ext_spec OK_ty
}.
(*! The void ext_spec *)
Definition void_spec T : external_specification juicy_mem external_function T :=
Build_external_specification
juicy_mem external_function T
(fun ef => False)
(fun ef Hef ge tys vl m z => False)
(fun ef Hef ge ty vl m z => False)
(fun rv m z => False).
Definition ok_void_spec (T : Type) : OracleKind.
refine (Build_OracleKind T (Build_juicy_ext_spec _ (void_spec T) _ _ _)).

(* Specifications: *)
Lemma jstep_not_halted  {C} (csem: @CoreSemantics C mem):
forall m q m' q' i, jstep csem q m q' m' -> ~j_halted csem q i.