Inductive reach (M: sTM) : mconfig (states M) ->  mconfig (states M) -> Prop :=
|reachI c : reach c c
|reachS c d: reach (step c) d -> (halt (cstate c) = false) -> reach c d.
Hint Constructors reach.
Definition Halt' (M: sTM) (start: mconfig (states M)) :=
exists (f: mconfig (states M)), halt (cstate f)=true /\ reach start f.

Lemma TM_terminates_Halt (M:sTM) (start: mconfig (states M)) :
TMterminates start <-> Halt' start.