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).
End rev.
End TM.

Lemma Trans_swap_id s1 s2 t:
nxt Σ t <> s1 ->
nxt Σ t <> s2 ->
t = Trans_swap Σ s1 s2 t.