(*--------------------------------------------------------------------*)

Lemma init_cores: forall (v1 v2 : val) (sig : signature) entrypoints
(EP: In (v1, v2, sig) entrypoints)
(entry_points_ok :
forall v1 v2 sig,
In (v1, v2, sig) entrypoints ->
exists b f1 f2,
v1 = Vptr b Int.zero
/\ v2 = Vptr b Int.zero
/\ Genv.find_funct_ptr ge b = Some f1
/\ Genv.find_funct_ptr tge b = Some f2)
(vals1 : list val) (c1 : core_data) (m1 : mem) (j : meminj)
(vals2 : list val) (m2 : mem)
(CSM_Ini : initial_core CSharpMin_core_sem ge v1 vals1 = Some c1)
(Inj : Mem.inject j m1 m2)
(VI: Forall2 (val_inject j) vals1 vals2)
(PG: meminj_preserves_globals ge j)
(R: list_norepet (map fst (prog_defs prog)))
(INIT_MEM: exists m0, Genv.init_mem prog = Some m0
/\ Ple (Mem.nextblock m0) (Mem.nextblock m1)
/\ Ple (Mem.nextblock m0) (Mem.nextblock m2)),
exists c2 : CMin_core,
initial_core CMin_core_sem tge v2 vals2 = Some c2 /\
match_cores c1 j c1 m1 c2 m2.