(** * Abstracting read-only global variables *)

Definition romem := PTree.t ablock.

(* Specifications: *)
Lemma romatch_store: forall chunk m b ofs v m' rm, Mem.store chunk m b ofs v = Some m' -> romatch m rm -> romatch m' rm.
Lemma romatch_storebytes: forall m b ofs bytes m' rm, Mem.storebytes m b ofs bytes = Some m' -> romatch m rm -> romatch m' rm.
Lemma romatch_ext: forall m rm m', romatch m rm -> (forall b id ofs n bytes, bc b = BCglob id -> Mem.loadbytes m' b ofs n = Some bytes -> Mem.loadbytes m b ofs n = Some bytes) -> (forall b id ofs p, bc b = BCglob id -> Mem.perm m' b ofs Max p -> Mem.perm m b ofs Max p) -> romatch m' rm.
Lemma romatch_free: forall m b lo hi m' rm, Mem.free m b lo hi = Some m' -> romatch m rm -> romatch m' rm.
Lemma romatch_alloc: forall m b lo hi m' rm, Mem.alloc m lo hi = (m', b) -> bc_below bc (Mem.nextblock m) -> romatch m rm -> romatch m' rm.