From Undecidability.L.Tactics Require Import LTactics GenEncode.
From Undecidability.L.Datatypes Require Import LNat Lists LProd LFinType LVector.
From Undecidability.L Require Import Functions.EqBool.
(* ** Extraction of Turing Machine interpreter  *)
MetaCoq Run (tmGenEncode "move_enc" move).
Hint Resolve move_enc_correct : Lrewrite.
Local Notation L := TM.Lmove.
Local Notation R := TM.Rmove.
Local Notation N := TM.Nmove.
Definition move_eqb (m n : move) : bool :=
match m,n with
N,N => true
| L,L => true
| R,R => true
| _,_ => false
end.

Lemma move_eqb_spec x y : reflect (x = y) (move_eqb x y).