(* 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).

Lemma compose_meminj_inject_separated: forall j12 j12' j23 j23' m1 m2 m3
(InjSep12 : inject_separated j12 j12' m1 m2)
(InjSep23 : inject_separated j23 j23' m2 m3)
(InjIncr12: inject_incr j12 j12') (InjIncr23: inject_incr j23 j23')
(BV12: forall b1 b2 ofs, j12 b1 = Some (b2,ofs) -> Mem.valid_block m1 b1 /\ Mem.valid_block m2 b2)
(BV23: forall b1 b2 ofs, j23 b1 = Some (b2,ofs) -> Mem.valid_block m2 b1 /\ Mem.valid_block m3 b2),
inject_separated (compose_meminj j12 j23) (compose_meminj j12' j23') m1 m3.