(*Require Import effect_interpolation_proofs. not necessary - interface suffices*)
Declare Module EFFAX : EffectInterpolationAxioms.

(* Specifications: *)
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, (exists b3 d, compose_meminj j1 j2 b1 = Some(b3,d))
<-> (exists b2 d1, j1 b1 = Some(b2,d1))) /\
(forall b2 b3 d2, j2 b2 =Some(b3,d2) ->
exists b1 d, compose_meminj j1 j2 b1 = Some(b3,d)) /\
(forall b1 b2 ofs2, j1 b1 = Some(b2,ofs2) -> (b1=b2 /\ ofs2=0)) /\
(forall b2 b3 ofs3, 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))).