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 TM_rev_rev:
forall tm,
TM_rev (TM_rev tm) = tm.