Section client_lemmas.
Context {Delta A r} (my_module: module Delta A r).
(** Assume my_module. Then the following holds about calls to functions [f_id] exported by the module: *)

Lemma client_call:
forall Espec P Q R ret (f_id: xident my_module) bl x f
(GLBL: (var_types Delta) ! (get_ident f_id) = None)
(SPEC: rfun_of_xident f_id = Some f),
let Pre  := rspec_pre  my_module.(Rinv) f.(a_spec) r in
let Post := rspec_post my_module.(Rinv) f.(a_spec) r in
@semax Espec Delta
(PROPx P
(LOCALx (tc_exprlist Delta (snd (split f.(argsig))) bl :: Q)
(SEPx (`(Pre x) (make_args' (f.(argsig),Tvoid) (eval_exprlist
(snd (split f.(argsig))) bl)) :: R))))
(Scall (Some ret)
(Evar f_id (Tfunction (type_of_params f.(argsig)) f.(retty)))
bl)
(normal_ret_assert (EX old:val,
PROPx P
(LOCALx (map (subst ret (`old)) Q)
(SEPx (`(Post x) (get_result1 ret) :: map (subst ret (`old)) R))))).