Section SemaxContext.

(* Specifications: *)
Lemma universal_imp_unfold {A} {agA: ageable A}:
forall B (P Q: B -> pred A) w,
(ALL psi : B, P psi --> Q psi) w = (forall psi : B, (P psi --> Q psi) w).
Lemma guard_environ_put_te':
forall ge te ve Delta id v k,
guard_environ Delta k (mkEnviron ge ve te)  ->
(forall t,
(temp_types Delta) ! id = Some t -> tc_val' t v) ->
guard_environ Delta k (mkEnviron ge ve (Map.set id v te)).
Lemma prop_imp_derives {A}{agA: ageable A}:
forall (P: Prop) (Q Q': pred A),  (P -> Q |-- Q') -> !!P --> Q |-- !!P --> Q'.
Lemma prop_imp {A}{agA: ageable A}:
forall (P: Prop) (Q Q': pred A),  (P -> Q = Q') -> !!P --> Q = !!P --> Q'.
Lemma age_laterR {A} `{ageable A}: forall {x y}, age x y -> laterR x y.
Hint Resolve @age_laterR.
Lemma typecheck_environ_sub:
forall Delta Delta', tycontext_sub Delta Delta' ->
forall rho,
typecheck_environ Delta' rho -> typecheck_environ Delta rho.
Lemma funassert_resource: forall Delta rho a a' (Hl: level a = level a')
(Hr: resource_at a = resource_at a'),
funassert Delta rho a -> funassert Delta rho a'.
Lemma cl_corestep_fun': forall ge, corestep_fun (cl_core_sem ge).
Lemma jsafe_corestep_forward:
forall {Espec: OracleKind} ge c m c' m' n z,
jstep (cl_core_sem ge) c m c' m' -> jsafeN (@OK_spec Espec) ge (S n) z c m ->
jm_bupd z (jsafeN (@OK_spec Espec) ge n z c') m'.
Lemma semax_unfold {CS: compspecs} {Espec: OracleKind}:
semax Espec = fun Delta P c R =>
forall (psi: Clight.genv) Delta' (w: nat)
(TS: tycontext_sub Delta Delta')
(HGG: genv_cenv psi = cenv_cs)
(Prog_OK: believe Espec Delta' psi Delta' w) (k: cont) (F: assert),
closed_wrt_modvars c F ->
rguard Espec psi Delta' (frame_ret_assert R F) k w ->
guard Espec psi Delta' (fun rho => F rho * P rho) (Kseq c :: k) w.