Section eq_dec.
Local Ltac t := hnf; decide equality; auto.
Let eq_dec_type := type_eq.
Let eq_dec_float := Float.eq_dec.
Let eq_dec_float32 := Float32.eq_dec.
Let eq_dec_int := Int.eq_dec.
Let eq_dec_int64 := Int64.eq_dec.
Let eq_dec_ident := ident_eq.
Let eq_dec_signature := signature_eq.
Let eq_dec_attr : EqDec attr. repeat t. Qed.
Let eq_dec_signedness : EqDec signedness. t. Qed.
Let eq_dec_intsize : EqDec intsize. t. Qed.
Let eq_dec_floatsize : EqDec floatsize. t. Qed.
Let eq_dec_Z : EqDec Z. repeat t. Qed.
Let eq_dec_calling_convention : EqDec calling_convention. repeat t. Qed.
Let eq_dec_option_ident := option_eq (ident_eq).
Let eq_dec_option_Z : EqDec (option Z). repeat t. Qed.
Let eq_dec_typelist : EqDec typelist. repeat t. Qed.
End eq_dec.
Instance EqDec_statement: EqDec statement := eq_dec_statement.
Instance EqDec_external_function: EqDec external_function := eq_dec_external_function.

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, ALL CS':compspecs,
!! (tycontext_sub Delta Delta' /\ cenv_sub (@cenv_cs CS) (@cenv_cs CS') /\
cenv_sub (@cenv_cs CS') (genv_cenv psi)) -->
@believe CS' Espec Delta' psi Delta' -->
ALL k : cont ,
ALL F : assert , ALL f: function,
!! closed_wrt_modvars c F &&
rguard Espec psi Delta' f (frame_ret_assert R F) k -->
guard Espec psi Delta' f (fun rho : environ => F rho * P rho) (Kseq c k))).