Ltac match_funcptr'_funcptr :=
first [apply match_funcptr'_funcptr
| apply nomatch_funcptr'_funcptr; match_funcptr'_funcptr].
Ltac prove_func_ptr :=
match goal with |- fold_right_sepcon ?A |-- func_ptr ?F ?V =>
match A with context [func_ptr' ?G V] =>
unify F G
end
end;
unfold fold_right_sepcon;
match_funcptr'_funcptr.
Definition eq_no_post (x v: val) : Prop := x=v.
(* The purpose of eq_no_post is to "mark" the proposition in forward_call_idxxx lemmas so that the after-the-call can treat this one specially *)

(* Specifications: *)
Lemma no_post_exists:
forall v P Q R,
PROPx P (LOCALx (temp ret_temp v :: Q) (SEPx R)) =
EX x:val, PROPx (eq_no_post x v :: P) (LOCALx (temp ret_temp x :: Q) (SEPx R)).
Lemma no_post_exists0:
forall P Q R,
PROPx P (LOCALx Q (SEPx R)) =
EX x:unit, PROPx ((fun _ => P) x) (LOCALx Q (SEPx ((fun _ => R) x))).