(******** Compatibility of memory operation with mem_forward********)

(* Specifications: *)
Lemma store_forward: forall m b ofs v ch m'
(M:Mem.store ch m b ofs v = Some m'),
mem_forward m m'.
Lemma storebytes_forward: forall m b ofs bytes m'
(M: Mem.storebytes m b ofs bytes = Some m'),
mem_forward m m'.
Lemma alloc_forward:
forall m lo hi m' b
(A: Mem.alloc m lo hi = (m',b)),
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 freelist_forward: forall l m m'
(M: Mem.free_list m l = Some m'),
mem_forward m 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_list_inject j args args'.
Lemma val_list_inject_forall_inject:
forall j args args' (H:val_list_inject 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).
Lemma store_forward: forall m b ofs v ch m'
(M:Mem.store ch m b ofs v = Some m'),
mem_forward m m'.
Lemma storebytes_forward: forall m b ofs bytes m'
(M: Mem.storebytes m b ofs bytes = Some m'),
mem_forward m m'.
Lemma alloc_forward:
forall m lo hi m' b
(A: Mem.alloc m lo hi = (m',b)),
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 freelist_forward: forall l m m'
(M: Mem.free_list m l = Some m'),
mem_forward m 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_list_inject j args args'.
Lemma val_list_inject_forall_inject:
forall j args args' (H:val_list_inject 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).