Instance EqDec_statement: EqDec statement := eq_dec_statement.
Instance EqDec_external_function: EqDec external_function := eq_dec_external_function.

(* Specifications: *)
Lemma closed_Slabel l c F: closed_wrt_modvars (Slabel l c) F = closed_wrt_modvars c F.
Lemma closed_Sloop c1 c2 F: closed_wrt_modvars (Sloop c1 c2) F <-> closed_wrt_modvars c1 F /\ closed_wrt_modvars c2 F.
Lemma closed_Ssequence c1 c2 F: closed_wrt_modvars (Ssequence c1 c2) F <-> closed_wrt_modvars c1 F /\ closed_wrt_modvars c2 F.
Lemma closed_Sswitch e sl F:
closed_wrt_modvars (Sswitch e sl) F ->
(forall n, closed_wrt_modvars (seq_of_labeled_statement (select_switch (Int.unsigned n) sl)) F).
Lemma semax_eq:
forall {CS: compspecs} {Espec: OracleKind} Delta P c R,
semax Espec Delta P c R =
(TT |-- (ALL psi : genv,
ALL Delta' : tycontext,
!! (tycontext_sub Delta Delta' /\ genv_cenv psi = cenv_cs) -->
believe Espec Delta' psi Delta' -->
ALL k : cont ,
ALL F : assert ,
!! closed_wrt_modvars c F &&
rguard Espec psi Delta' (frame_ret_assert R F) k -->
guard Espec psi Delta' (fun rho : environ => F rho * P rho) (Kseq c :: k))).
Lemma safe_kseq_Slabel {Espec: OracleKind} psi n ora ve te l c k m :
@jsafeN (@OK_ty Espec) (@OK_spec Espec) psi n ora
(State ve te (@cons cont' (Kseq c) k)) m ->
@jsafeN (@OK_ty Espec) (@OK_spec Espec) psi n ora
(State ve te (@cons cont' (Kseq (Slabel l c)) k)) m.
Lemma semax_Slabel {cs:compspecs} {Espec: OracleKind}
(Gamma:tycontext) (P:environ -> mpred) (c:statement) (Q:ret_assert) l:
@semax cs Espec Gamma P c Q -> @semax cs Espec Gamma P (Slabel l c) Q.
Lemma denote_tc_resource: forall {cs: compspecs} rho a a' t, resource_at a = resource_at a' ->
denote_tc_assert t rho a -> denote_tc_assert t rho a'.
Lemma bupd_denote_tc: forall {cs: compspecs} P t rho a,
denote_tc_assert t rho a -> bupd P a -> bupd (denote_tc_assert t rho && P) a.
Lemma assert_safe_jsafe: forall {Espec: OracleKind} ge ve te ctl ora jm,
assert_safe Espec ge ve te ctl (construct_rho (filter_genv ge) ve te) (m_phi jm) ->
jm_bupd ora (jsafeN OK_spec ge (level jm) ora (State ve te ctl)) jm.