Definition parmove (mu: moves) : moves :=
List.rev (parmove_aux (State mu nil nil)).
(** This is the main correctness theorem: the sequence of elementary moves [parmove mu] is semantically equivalent to the parallel move [mu] if the latter is well-formed. *)

Theorem parmove_correctness:
forall mu,
move_no_temp mu -> is_mill mu ->
forall e,
env_equiv (exec_seq (parmove mu) e) (exec_par mu e).