Inductive empty_type : Type := .Definition withtype_of_NDfunspec fs := match fs with
  mk_funspec _ _ (rmaps.ConstType A) _ _ _ _ => A | _ => empty_type end.Definition withtype_of_funspec fs := match fs with
  mk_funspec _ _ A _ _ _ _ => A end.

(* Specifications: *)
Lemma subsume_funspec_refl: forall fs, subsume_funspec fs fs.
Lemma subsume_funspec_trans: forall fs1 fs2 fs3, subsume_funspec fs1 fs2 -> subsume_funspec fs2 fs3 -> subsume_funspec fs1 fs3.
Lemma NDsubsume_funspec_refl: forall fsig cc A P Q, NDsubsume_funspec (NDmk_funspec fsig cc A P Q) (NDmk_funspec fsig cc A P Q).
Lemma NDsubsume_funspec_trans: forall fsig1 cc1 A1 P1 Q1 fsig2 cc2 A2 P2 Q2 fsig3 cc3 A3 P3 Q3, NDsubsume_funspec (NDmk_funspec fsig1 cc1 A1 P1 Q1) (NDmk_funspec fsig2 cc2 A2 P2 Q2) -> NDsubsume_funspec (NDmk_funspec fsig2 cc2 A2 P2 Q2) (NDmk_funspec fsig3 cc3 A3 P3 Q3) -> NDsubsume_funspec (NDmk_funspec fsig1 cc1 A1 P1 Q1) (NDmk_funspec fsig3 cc3 A3 P3 Q3).
Lemma subsume_semax_body: forall fs1 fs2 (H: subsume_funspec0 fs1 fs2), forall Vprog Gprog cs f id, @semax_body Vprog Gprog cs f (id,fs1) -> @semax_body Vprog Gprog cs f (id,fs2).
Lemma subsume_semax_body': forall fs1 fs2 (H: subsume_funspec' fs1 fs2), forall Vprog Gprog cs f id, @semax_body Vprog Gprog cs f (id,fs1) -> @semax_body Vprog Gprog cs f (id,fs2).
Lemma subsume_semax_body'': forall Vprog Gprog cs f id fs1 fs2, subsume_funspec'' (func_tycontext f Vprog Gprog nil) fs1 fs2 -> @semax_body Vprog Gprog cs f (id,fs1) -> @semax_body Vprog Gprog cs f (id,fs2).
Lemma tycontext_sub6: forall Vprog Gprog f rho, tc_environ (make_tycontext (fn_params f) (fn_temps f) (fn_vars f) (fn_return f) Vprog Gprog nil) rho -> tc_environ (make_tycontext (fn_params f) nil nil (fn_return f) nil nil nil) rho.
Lemma tycontext_sub_i6: forall Vprog Gprog f, tycontext_sub (make_tycontext (fn_params f) nil nil (fn_return f) nil nil nil) (make_tycontext (fn_params f) (fn_temps f) (fn_vars f) (fn_return f) Vprog Gprog nil).
Lemma subsume_semax_body3: forall Vprog Gprog cs f id fs1 fs2, funsig_of_function f = funsig_of_funspec fs2 -> subsume_funspec'' (funsig_tycontext (funsig_of_funspec fs2)) fs1 fs2 -> @semax_body Vprog Gprog cs f (id,fs1) -> @semax_body Vprog Gprog cs f (id,fs2).