Section rev.
Definition Trans_rev(tr:Trans Σ) :=
let (s',d,o):=tr in
{| nxt:=s'; dir:=Dir_rev d; out:=o |}.
Definition option_Trans_rev(o:option (Trans Σ)) :=
match o with
| None => None
| Some tr => Some (Trans_rev tr)
end.
Definition TM_rev(tm:TM Σ) :=
fun s i => option_Trans_rev (tm s i).
Definition Tape_rev(t:Z->Σ) :=
fun x:Z => t (-x)%Z.
Definition ExecState_rev(st:ExecState Σ) :=
let (s,t):=st in
(s,Tape_rev t).

Lemma step_halt_rev tm st:
step Σ (TM_rev tm) st = None <->
step Σ tm (ExecState_rev st) = None.