(** We complete (iQ,cQ) with some code nullifying all variables except tmp1 & tmp2 *)
Let cN := mm_nullify tmp1 iE (map (fun p => pos_nxt (pos_nxt p)) (pos_list m)).
Let cE := cN ++ DEC tmp1 0 :: nil.
Let E_spec w' : w'#>tmp1 = 0 -> w'#>tmp2 = 0 -> (iE,cE) /MM/ (iE,w') -+> (0,vec_zero).
Definition bsm_mm := snd Q ++ cE.
Let cQ_sim : Q <sc (1,bsm_mm).
Let cE_sim : (iE,cE) <sc (1,bsm_mm).
(** (1,bsm_sim) is a simulator for (iP,cP) *)

(* Specifications: *)
Theorem bsm_mm_spec : (iP,cP) /BSM/ (iP,v) ↓ <-> (1,bsm_mm) /MM/ (1,w) ~~> (0,vec_zero).
End bsm_sim.