(* Lemma unchanged_on_sym P m m' b: Mem.unchanged_on P m m' -> Mem.valid_block m b -> Mem.unchanged_on (fun bb z => P bb z /\ bb=b) m' m. *)

(* Specifications: *)
Lemma loadbytes_unchanged_on (P : block -> Z -> Prop) m m' b ofs n:
Mem.unchanged_on P m m' -> Mem.valid_block m b ->
(forall i : Z, ofs <= i < ofs + n -> P b i) ->
Mem.loadbytes m b ofs n = Mem.loadbytes m' b ofs n.
Lemma loadbytes_alloc_unchanged m1 lo hi m2 b :
Mem.alloc m1 lo hi = (m2, b) ->
forall n (b' : block) (ofs : Z),
Mem.valid_block m1 b' ->
Mem.loadbytes m2 b' ofs n = Mem.loadbytes m1 b' ofs n.
Lemma alloc_readonly:
forall m lo hi m' b
(A: Mem.alloc m lo hi = (m',b)),
forall b, Mem.valid_block m b -> readonly m b m'.
Lemma alloc_readonlyLD:
forall m lo hi m' b
(A: Mem.alloc m lo hi = (m',b)),
forall b, Mem.valid_block m b -> readonlyLD m b m'.
(* Lemma free_forward: forall b z0 z m m' (M: Mem.free m b z0 z = Some m'), mem_forward m m'. *)
Lemma free_forward: forall b z0 z m m'
(M: Mem.free m b z0 z = Some m'),
mem_forward m m'.
Lemma loadbytes_free m1 bf lo hi m2:
Mem.free m1 bf lo hi = Some m2 ->
forall n (b : block) (ofs : Z),
b <> bf \/ lo >= hi \/ ofs + n <= lo \/ hi <= ofs ->
Mem.loadbytes m2 b ofs n = Mem.loadbytes m1 b ofs n.
Lemma free_readonlyLD: forall b lo hi m m'
(M: Mem.free m b lo hi = Some m'),
forall b, Mem.valid_block m b -> readonlyLD m b m'.
Lemma free_readonly: forall b lo hi m m'
(M: Mem.free m b lo hi = Some m'),
forall b, Mem.valid_block m b -> readonly m b m'.
Lemma freelist_forward: forall l m m'
(M: Mem.free_list m l = Some m'),
mem_forward m m'.
Lemma freelist_readonly: forall l m m'
(M: Mem.free_list m l = Some m'),
forall b, Mem.valid_block m b -> readonly m b m'.
Lemma freelist_readonlyLD: forall l m m'
(M: Mem.free_list m l = Some m'),
forall b, Mem.valid_block m b -> readonlyLD m b m'.
Lemma forward_nextblock: forall m m',
mem_forward m m' ->
(Mem.nextblock m <= Mem.nextblock m')%positive.
Lemma inject_separated_incr_fwd:
forall j j' m1 m2 j'' m2'
(InjSep : inject_separated j j' m1 m2)
(InjSep' : inject_separated j' j'' m1 m2')
(InjIncr' : inject_incr j' j'')
(Fwd: mem_forward m2 m2'),
inject_separated j j'' m1 m2.
Lemma inject_separated_incr_fwd2:
forall j0 j j' m10 m20 m1 m2,
inject_incr j j' ->
inject_separated j j' m1 m2 ->
inject_incr j0 j ->
mem_forward m10 m1 ->
inject_separated j0 j m10 m20 ->
mem_forward m20 m2 ->
inject_separated j0 j' m10 m20.
Lemma forall_inject_val_list_inject:
forall j args args' (H:Forall2 (val_inject j) args args' ),
Val.inject_list j args args'.
Lemma val_list_inject_forall_inject:
forall j args args' (H:Val.inject_list j args args'),
Forall2 (val_inject j) args args' .
Lemma forall_lessdef_val_listless:
forall args args' (H: Forall2 Val.lessdef args args'),
Val.lessdef_list args args' .
Lemma val_listless_forall_lessdef:
forall args args' (H:Val.lessdef_list args args'),
Forall2 Val.lessdef args args' .
Lemma storev_valid_block_1:
forall ch m addr v m',
Mem.storev ch m addr v = Some m' ->
(forall b, Mem.valid_block m b -> Mem.valid_block m' b).