Inductive StepType : Type :=
    Internal | Concurrent | Suspend.Inductive StepType : Type :=
    Internal | Concurrent | Suspend.Inductive StepType : Type :=
    Internal | Concurrent | Suspend.Inductive StepType : Type :=
    Internal | Concurrent | Suspend.Definition ctlType (code : @threadPool.ctl semC) (m : Mem.mem) (st : StepType) : Prop :=
    match code with
    | Kinit _ _ => st = Internal
    | Krun c =>
      match at_external semSem c m with
      | None => (* ((exists i, halted semSem c i) /\ st = Halted) \/ *)
                st = Internal
      | Some _ => st = Suspend
      end
    | Kblocked c => st = Concurrent
    | Kresume c _ => st = Internal
    end.Definition getStepType {i tp} (cnt : containsThread tp i) m st :=
    ctlType (getThreadC cnt) m st.Notation fmachine_step := ((corestep (AsmContext.fine_semantics initU))).

(* Specifications: *)
Lemma fstep_valid_block: forall tpf tpf' mf mf' i U b tr tr' (Hvalid: Mem.valid_block mf b) (Hstep: fmachine_step (i :: U, tr, tpf) mf (U, tr',tpf') mf'), Mem.valid_block mf' b.