(* Lemma mem_wd2_storebytes: forall m b ofs m' bl (WDm: mem_wd2 m) (ST: Mem.storebytes m b ofs bl = Some m') (V: val_valid v m), mem_wd2 m'. *)
Definition mem_wd' m m' := forall b ofs, memval_inject (Mem.flat_inj (Mem.nextblock m))
(ZMap.get ofs (PMap.get b (Mem.mem_contents m'))) (ZMap.get ofs (PMap.get b (Mem.mem_contents m'))).

(* Specifications: *)
Lemma mem_wd'_store: forall m0 m b ofs v m' chunk (WDm: mem_wd' m0 m)
(ST: Mem.store chunk m b ofs v = Some m')
(V: val_valid v m0), mem_wd' m0 m'.
Lemma mem_wd'_store_zeros: forall m0 m b p n m1
(STORE_ZERO: store_zeros m b p n = Some m1) (WD: mem_wd' m0 m), mem_wd' m0 m1.
Lemma mem_wd'_store_init_data: forall {F V} (ge: Genv.t F V) a (b:block) (z:Z)
m m1 m2 (SID:Genv.store_init_data ge m1 b z a = Some m2),
valid_genv ge m -> mem_wd' m m1 -> mem_wd' m m2.
Lemma mem_wd'_store_init_datalist: forall {F V} (ge: Genv.t F V) l (b:block)
(z:Z) m m1 m2 (SID: Genv.store_init_data_list ge m1 b z l = Some m2),
valid_genv ge m -> mem_wd' m m1 -> mem_wd' m m2.
Lemma mem_wd'_alloc: forall m0 m b lo hi m' (ALL: Mem.alloc m lo hi = (m',b))
(WDm: mem_wd' m0 m), mem_wd' m0 m'.
Lemma mem_wd'_drop: forall m0 m b lo hi p m' (DROP: Mem.drop_perm m b lo hi p = Some m')
(WDm: mem_wd' m0 m), mem_wd' m0 m'.
Lemma mem_wd'_alloc_global: forall  {F V} (ge: Genv.t F V) a m m0 m1
(GA: Genv.alloc_global ge m0 a = Some m1),
mem_wd' m m0 -> valid_genv ge m -> mem_wd' m m1.
Lemma mem_wd2_alloc_globals:
forall F V (ge: Genv.t F V) init_list m0 m
(GA: Genv.alloc_globals ge m0 init_list = Some m),
mem_wd' m m0 -> valid_genv ge m -> mem_wd2 m.