Notation schedule := (seq nat).(** Internal steps are just thread coresteps or resume steps or start steps,
          they mimic fine-grained internal steps *)
      Definition internal_step {tid} {tp} m (cnt: containsThread tp tid)
                 (Hcomp: mem_compatible tp m) tp' m' :=
      (exists ev, threadStep cnt Hcomp tp' m' ev) \/
      (resume_thread m cnt tp' /\ m = m') \/
      (start_thread m cnt tp' m').

Lemma containsThread_internal_step' : forall tp m tp' m' i j (Hcnt0: containsThread tp j) (Hcomp: mem_compatible tp m) (Hstep: internal_step Hcnt0 Hcomp tp' m') (Hcnt: containsThread tp' i), containsThread tp i.