(* No unvalid pointers, i.e. othing pointing after nextblock *)      
Definition mem_wd (m:mem):=
  inject_neutral (nextblock m) m.(* All arguments are in memory and without unvalid pointers*)
Definition arg_well_formed args m0:=
  Val.inject_list (flat_inj (nextblock m0)) args args.Remark mem_wd_inject:
  forall m, mem_wd m -> inject (flat_inj (nextblock m)) m m.

(* Specifications: *)
Theorem empty_inject_neutral: forall thr, inject_neutral thr empty.
Theorem alloc_inject_neutral: forall thr m lo hi b m', alloc m lo hi = (m', b) -> inject_neutral thr m -> Plt (nextblock m) thr -> inject_neutral thr m'.
Theorem store_inject_neutral: forall chunk m b ofs v m' thr, store chunk m b ofs v = Some m' -> inject_neutral thr m -> Plt b thr -> Val.inject (flat_inj thr) v v -> inject_neutral thr m'.
Theorem drop_inject_neutral: forall m b lo hi p m' thr, drop_perm m b lo hi p = Some m' -> inject_neutral thr m -> Plt b thr -> inject_neutral thr m'.