Definition ret0_tycon (Delta: tycontext): tycontext :=
mk_tycontext (PTree.empty _) (PTree.empty _) (ret_type Delta) (glob_types Delta) (glob_specs Delta) (annotations Delta).
Definition ret1_tycon (Delta: tycontext): tycontext :=
mk_tycontext (PTree.set ret_temp (ret_type Delta) (PTree.empty _))
(PTree.empty _) (ret_type Delta) (glob_types Delta) (glob_specs Delta) (annotations Delta).

(* Specifications: *)
Lemma make_args0_tc_environ: forall rho Delta,
tc_environ Delta rho ->
tc_environ (ret0_tycon Delta) (make_args nil nil rho).
Lemma make_args1_tc_environ: forall rho Delta v,
tc_environ Delta rho ->
tc_val (ret_type Delta) v ->
tc_environ (ret1_tycon Delta) (make_args (ret_temp :: nil) (v :: nil) rho).
Lemma semax_post_ret1: forall P' R' Espec {cs: compspecs} Delta P v R Pre c,
ret_type Delta <> Tvoid ->
ENTAIL (ret1_tycon Delta),
PROPx P' (LOCAL (temp ret_temp v) (SEPx R')) |-- PROPx P (LOCAL (temp ret_temp v) (SEPx R)) ->
@semax cs Espec Delta Pre c
(frame_ret_assert (function_body_ret_assert (ret_type Delta)
(PROPx P' (LOCAL (temp ret_temp v) (SEPx R')))) emp) ->
@semax cs Espec Delta Pre c
(frame_ret_assert (function_body_ret_assert (ret_type Delta)
(PROPx P (LOCAL (temp ret_temp v) (SEPx R)))) emp).
Lemma semax_post_ret0: forall P' R' Espec {cs: compspecs} Delta P R Pre c,
ret_type Delta = Tvoid ->
ENTAIL (ret0_tycon Delta),
PROPx P' (LOCALx nil (SEPx R')) |-- PROPx P (LOCALx nil (SEPx R)) ->
@semax cs Espec Delta Pre c
(frame_ret_assert (function_body_ret_assert (ret_type Delta)
(PROPx P' (LOCALx nil (SEPx R')))) emp) ->
@semax cs Espec Delta Pre c
(frame_ret_assert (function_body_ret_assert (ret_type Delta)
(PROPx P (LOCALx nil (SEPx R)))) emp).