Section corestepN.
Context {C M E:Type} (Sem:@CoreSemantics C M).
Fixpoint corestepN (n:nat) : C -> M -> C -> M -> Prop :=
match n with
| O => fun c m c' m' => (c,m) = (c',m')
| S k => fun c1 m1 c3 m3 => exists c2, exists m2,
corestep Sem c1 m1 c2 m2 /\
corestepN k c2 m2 c3 m3
end.
Definition corestep_plus c m c' m' :=
exists n, corestepN (S n) c m c' m'.
Definition corestep_star c m c' m' :=
exists n, corestepN n c m c' m'.

Lemma corestep_star_trans: forall c1 c2 c3 m1 m2 m3,
corestep_star c1 m1 c2 m2 -> corestep_star c2 m2 c3 m3 ->
corestep_star c1 m1 c3 m3.