Section mma2_simul.
(* To generalize for n register, we need a recursive nullifying code not compilcated though *)
Variable (iP : nat) (cP : list (mm_instr (pos 2))).
Let Q := mma_sim iP cP.
Let eQ := 1+length Q.
Let cN : list (mm_instr (pos 2)) := mma_null pos0 eQ ++ mma_null pos1 (1+eQ) ++ mma_jump 0 pos0.
Let L1 := @mma_null_length 2 pos0 eQ.
Let L2 := @mma_null_length 2 pos1 (1+eQ).
Let N_spec v : (eQ,cN) // (eQ,v) -+> (0,vec_zero).
Definition mma2_simul := Q ++ cN.
Let cQ_sim : (1,Q) <sc (1,mma2_simul).
End mma2_simul.
(* Termination can be simulated with termination on (0,vec_zero) *)

Theorem mma2_simulator i (P : list (mm_instr (pos 2))) :
{ Q | forall v, (i,P) // (i,v) ↓ <-> (1,Q) // (1,v) ~~> (0,vec_zero) }.