(** The main correctness result in this section is the following: if we can transition repeatedly from an initial state [mu, nil, nil] to a final state [nil, nil, tau], then the sequential execution of the moves [rev tau] is semantically equivalent to the parallel execution of the moves [mu]. *)

(* Specifications: *)
Theorem transitions_correctness:
forall mu tau,
move_no_temp mu ->
is_mill mu ->
transitions (State mu nil nil) (State nil nil tau) ->
forall e, env_equiv (exec_seq (List.rev tau) e) (exec_par mu e).
Theorem transitions_correctness:
forall mu tau,
move_no_temp mu ->
is_mill mu ->
transitions (State mu nil nil) (State nil nil tau) ->
forall e, env_equiv (exec_seq (List.rev tau) e) (exec_par mu e).