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