Section INJEXT.

Lemma  diagram_injext: forall
(core_data12 : Type)
(match_core12 : core_data12 -> meminj -> C1 -> mem -> C2 -> mem -> Prop)
(core_ord12 : core_data12 -> core_data12 -> Prop)
(core_diagram12 : forall (st1 : C1) (m1 : mem) (st1' : C1) (m1' : mem),
corestep Sem1 g1 st1 m1 st1' m1' ->
forall (cd : core_data12) (st2 : C2) (j : meminj) (m2 : mem),
match_core12 cd j st1 m1 st2 m2 ->
exists st2' : C2,
exists m2' : mem,
exists cd' : core_data12,
exists j' : meminj,
inject_incr j j' /\
inject_separated j j' m1 m2 /\
match_core12 cd' j' st1' m1' st2' m2' /\
(corestep_plus Sem2 g2 st2 m2 st2' m2' \/
corestep_star Sem2 g2 st2 m2 st2' m2' /\ core_ord12 cd' cd))
(core_data23 : Type)
(match_core23 : core_data23 -> C2 -> mem -> C3 -> mem -> Prop)
(core_ord23 : core_data23 -> core_data23 -> Prop)
(core_diagram23 : forall (st1 : C2) (m1 : mem) (st1' : C2) (m1' : mem),
corestep Sem2 g2 st1 m1 st1' m1' ->
forall (cd : core_data23) (st2 : C3) (m2 : mem),
match_core23 cd st1 m1 st2 m2 ->
exists st2' : C3,
exists m2' : mem,
exists cd' : core_data23,
match_core23 cd' st1' m1' st2' m2' /\
(corestep_plus Sem3 g3 st2 m2 st2'
m2' \/
corestep_star Sem3 g3 st2 m2 st2'
m2' /\ core_ord23 cd' cd))
(st1 : C1)
(m1 : mem)
(st1' : C1)
(m1' : mem)
(CS1 : corestep Sem1 g1 st1 m1 st1' m1')
(d12 : core_data12)
(d23 : core_data23)
(st3 : C3)
(j : meminj)
(m3 : mem)
(st2 : C2)
(m2 : mem)
(MC12: match_core12 d12 j st1 m1 st2 m2)
(MC23: match_core23 d23 st2 m2 st3 m3)
(MatchHyp12: forall d12 j12 c1 m1 c2 m2,  match_core12 d12 j12 c1 m1 c2 m2 ->
forall b1 b2 ofs, j12 b1 = Some (b2,ofs) -> Mem.valid_block m1 b1 /\ Mem.valid_block m2 b2)
(MatchHyp23: forall d23 c2 m2 c3 m3,  match_core23 d23 c2 m2 c3 m3 ->
forall b, Mem.valid_block m2 b <-> Mem.valid_block m3 b),
exists st2' : C3,
exists m2' : mem,
exists cd' : core_data12 * option C2 * core_data23,
exists j' : meminj,
inject_incr j j' /\
inject_separated j j' m1 m3 /\
(let (y, d2) := cd' in
let (d1, X) := y in
exists c2 : C2,
exists m0 : mem,
X = Some c2 /\
match_core12 d1 j' st1' m1' c2 m0 /\
match_core23 d2 c2 m0 st2' m2') /\
(corestep_plus Sem3 g3 st3 m3 st2' m2' \/
corestep_star Sem3 g3 st3 m3 st2' m2' /\
clos_trans (core_data12 * option C2 * core_data23)
(sem_compose_ord_eq_eq core_ord12 core_ord23 C2) cd'
(d12, Some st2, d23)).