Ltac repeat_extract_exists_pre :=
first [(apply extract_exists_pre;
let x := fresh "x" in intro x; normalize;
repeat_extract_exists_pre;
revert x)
| autorewrite with canon
].

(* Specifications: *)
Lemma extract_exists_in_SEP:
forall {A} (R1: A -> mpred) P Q R,
PROPx P (LOCALx Q (SEPx (exp R1 :: R))) =
(EX x:A, PROPx P (LOCALx Q (SEPx (R1 x::R))))%assert.