Section MoveToSymbol_Sem.
Local Arguments skipn { A } !n !l.
Local Arguments plus : simpl never.
Local Arguments mult : simpl never.
Variable sig : finType.
(* Halt function *)
Variable stop : sig -> bool.
(* Rewrite function *)
Variable f : sig -> sig.

Lemma MoveToSymbol_correct t str1 str2 x :
(forall x, List.In x str1 -> stop x = false) ->
(stop x = true) ->
tape_local t = str1 ++ x :: str2 ->
MoveToSymbol_Fun stop f t = midtape (rev (map f str1) ++ left t) (f x) str2.