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.

Lemma thread_stepN_add : forall n m U c1 m1 c3 m3, thread_stepN (n+m) U c1 m1 c3 m3 <-> exists c2, exists m2, thread_stepN n U c1 m1 c2 m2 /\ thread_stepN m U c2 m2 c3 m3.