(* MachStep that doesn't change the schedule,
    Reduces the set of valid schedules... 
   *)
  Inductive has_unique_running tp:Prop :=
  | HasUniqueRun i (cnti : ThreadPool.containsThread tp i) q:
      ThreadPool.getThreadC cnti = Krun q ->
      has_unique_running tp.(* MachStep that doesn't change the schedule,
    Reduces the set of valid schedules... 
   *)
  Inductive has_unique_running tp:Prop :=
  | HasUniqueRun i (cnti : ThreadPool.containsThread tp i) q:
      ThreadPool.getThreadC cnti = Krun q ->
      has_unique_running tp.

Lemma csafe_unique_running: forall U tr tp m n tid, schedPeek U = Some tid -> has_unique_running tp -> valid (tr, tp, m) U -> csafe (U, tr, tp) m n -> forall U', valid (tr, tp, m) U' -> csafe (U', tr, tp) m n.