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_Sifthenelse b c1 c2 F: closed_wrt_modvars (Sifthenelse b c1 c2) F <-> closed_wrt_modvars c1 F /\ closed_wrt_modvars c2 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 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.