Tactic Notation "freeze1_SEP" constr(n) constr(m) :=
(gather_SEP n m); eapply (freeze1_SEP' (nat_of_Z 0)); simpl.
Tactic Notation "freeze1_SEP" constr(n) constr(m) constr(k)  :=
(gather_SEP n m k); eapply (freeze1_SEP' (nat_of_Z 0)); simpl.
Tactic Notation "freeze1_SEP" constr(n) constr(m) constr(k)  constr(p) :=
(gather_SEP n m k p); eapply (freeze1_SEP' (nat_of_Z 0)); simpl.
Tactic Notation "freeze1_SEP" constr(n) constr(m) constr(k) constr(p) constr(q) :=
(gather_SEP n m k p q); eapply (freeze1_SEP' (nat_of_Z 0)); simpl.
(*******************freezing a list of mpreds ******************************)
Fixpoint freezelist_nth (l: list nat) (al: list mpred): (list mpred) * (list mpred) :=
match l with
| nil => (nil,al)
| (n::l') => let (xs, ys) := freezelist_nth l' al
in (nth n ys emp::xs, delete_nth n ys)
end.

Lemma my_nth_nth {A}: forall n l (d:A), my_nth n l d = nth n l d.