(ifTM ?? (inject_TM ? test_null_char 2 cfg)
     (nop ? 2)
     (copy_step cfg obj FSUnialpha 2 ·
-     mmove cfg FSUnialpha 2 L) 
+     mmove cfg FSUnialpha 2 L ·
+     mmove obj FSUnialpha 2 L) 
      tc_true) ·
   inject_TM ? (move_to_end FSUnialpha L) 2 cfg ·
   mmove cfg FSUnialpha 2 R.
              (midtape ? (left ? (nth obj ? t1 (niltape ?))) c (right ? (nth obj ? t1 (niltape ?)))) obj)
           (mk_tape ? [ ] (option_hd ? (reverse ? (c::ls))) (tail ? (reverse ? (c::ls)))) cfg).
 
-axiom sem_cfg_to_obj : obj_to_cfg ⊨  R_obj_to_cfg.
+axiom sem_cfg_to_obj : cfg_to_obj ⊨  R_cfg_to_obj.
 (*@(sem_seq_app FSUnialpha 2 ????? (sem_move_multi ? 2 cfg L ?)
    (sem_seq ??????
     (sem_if ??????????
 
 (* macchina che muove il nastro obj a destra o sinistra a seconda del valore
    del current di prg, che codifica la direzione in cui ci muoviamo *)
-
-axiom tape_move_obj : mTM FSUnialpha 2.
+   
+definition tape_move_obj : mTM FSUnialpha 2 ≝ 
+  ifTM ?? 
+   (inject_TM ? (test_char ? (λc:FSUnialpha.c == bit false)) 2 prg)
+   (mmove obj FSUnialpha 2 L)
+   (ifTM ?? 
+    (inject_TM ? (test_char ? (λc:FSUnialpha.c == bit true)) 2 prg)
+    (mmove obj FSUnialpha 2 R)
+    (nop ??)
+    tc_true)
+   tc_true.
 
 definition unistep ≝ 
   obj_to_cfg · match_m cfg prg FSUnialpha 2 · copy prg cfg FSUnialpha 2 ·