Definition subsume_funspec'' (Delta: tycontext) (f1 f2 : funspec) :=
match f1 with
| mk_funspec fsig1 cc1 A1 P1 Q1 _ _ =>
match f2 with
| mk_funspec fsig2 cc2 A2 P2 Q2 _ _ =>
fsig1 = fsig2 /\ cc1 = cc2 /\
forall ts2 x2, exists ts1,
ENTAIL Delta, P2 ts2 x2 |-- EX x1:_,
((P1 ts1 x1) &&
(!! (ENTAIL (ret_tycon Delta), Q1 ts1 x1 |-- Q2 ts2 x2)))
end end.

(* Specifications: *)
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.