End INJEXT.

(* Specifications: *)
Lemma empty_inj: Mem.inject (Mem.flat_inj 1%positive) Mem.empty Mem.empty.
Lemma empty_fwd: forall m, mem_forward Mem.empty m.
Lemma inject_split: forall j m1 m3 (Inj:Mem.inject j m1 m3),
exists m2 j1 j2, j = compose_meminj j1 j2 /\
Mem.inject j1 m1 m2 /\ Mem.inject j2 m2 m3.
Lemma forall_val_inject_split: forall j1 j2 vals1 vals3
(V: Forall2 (val_inject (compose_meminj j1 j2)) vals1 vals3),
exists vals2, Forall2 (val_inject j1) vals1 vals2
/\ Forall2 (val_inject j2) vals2 vals3.
Lemma initial_inject_split: forall j m1 m3 (Inj:Mem.inject j m1 m3),
exists m2 j1 j2, j = compose_meminj j1 j2 /\
Mem.inject j1 m1 m2 /\ Mem.inject j2 m2 m3 /\
(forall b1 b2 ofs2, j1 b1 = Some(b2,ofs2) -> (b1=b2 /\ ofs2=0)) /\
(forall (b2 b3 : block) (ofs3 : Z),
j2 b2 = Some (b3, ofs3) ->
Mem.flat_inj 1%positive b2 = Some (b3, ofs3) \/
b2 = Mem.nextblock Mem.empty /\
compose_meminj j1 j2 (Mem.nextblock Mem.empty) = Some (b3, ofs3) \/
(exists m : positive,
b2 = (Mem.nextblock Mem.empty + m)%positive /\
compose_meminj j1 j2 (Mem.nextblock Mem.empty + m)%positive =
Some (b3, ofs3))).