Definition substopt {A} (ret: option ident) (v: val) (P: environ -> A)  : environ -> A :=
   match ret with
   | Some id => subst id v P
   | None => P
   end.

Lemma free_list_free: forall m b lo hi l' m', free_list m ((b,lo,hi)::l') = Some m' -> {m2 | free m b lo hi = Some m2 /\ free_list m2 l' = Some m'}.