Section thread_stepN.
Context {G TID SCH TR C M E res thread_type:Type}
(Sem:@ConcurSemantics G TID SCH TR C M res (*thread_type*)) (ge:G).
Fixpoint thread_stepN (n:nat) : SCH -> C -> M -> C -> M -> Prop :=
match n with
| O => fun U c m c' m' => (c,m) = ( c',m')
| S k => fun U c1 m1 c3 m3 => exists c2, exists m2,
@thread_step _ _ _ _ _ _ _ (*_*) Sem ge U c1 m1 c2 m2 /\
thread_stepN k U c2 m2 c3 m3
end.
Definition thread_step_plus U c m c' m' :=
exists n, thread_stepN (S n) U c m c' m'.
Definition thread_step_star U c m c' m' :=
exists n, thread_stepN n U c m c' m'.

Lemma thread_step_star_trans: forall U c1 c2 c3 m1 m2 m3,
thread_step_star U c1 m1 c2 m2 -> thread_step_star U c2 m2 c3 m3 ->
thread_step_star U c1 m1 c3 m3.