(*CompCert imports*)
(* A minimal preservation property we sometimes require.*)
Definition mem_forward (m1 m2:mem) :=
(forall b, Mem.valid_block m1 b ->
Mem.valid_block m2 b /\
forall ofs p, Mem.perm m2 b ofs Max p -> Mem.perm m1 b ofs Max p).
Definition val_inject_opt (j: meminj) (v1 v2: option val) :=
match v1, v2 with Some v1', Some v2' => val_inject j v1' v2'
| None, None => True
| _, _ => False
end.
(******** Compatibility of memory operation with mem_forward********)

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.