Inductive wf_state: state -> Prop :=
  | wf_state_intro: forall mu sigma tau,
      wf_moves mu -> wf_moves sigma -> wf_moves tau ->
      wf_state (State mu sigma tau).Inductive wf_state: state -> Prop :=
  | wf_state_intro: forall mu sigma tau,
      wf_moves mu -> wf_moves sigma -> wf_moves tau ->
      wf_state (State mu sigma tau).

(* Specifications: *)
Lemma dtransition_preserves_wf_state: forall st st', dtransition st st' -> wf_state st -> wf_state st'.
Lemma dtransitions_preserve_wf_state: forall st st', dtransitions st st' -> wf_state st -> wf_state st'.
Lemma parmove_wf_moves: forall mu, wf_moves mu (parmove mu).
Lemma parmove2_wf_moves: forall sl dl, wf_moves (List.combine sl dl) (parmove2 sl dl).
Lemma dtransition_preserves_wf_state: forall st st', dtransition st st' -> wf_state st -> wf_state st'.
Lemma dtransitions_preserve_wf_state: forall st st', dtransitions st st' -> wf_state st -> wf_state st'.
Lemma parmove_wf_moves: forall mu, wf_moves mu (parmove mu).
Lemma parmove2_wf_moves: forall sl dl, wf_moves (List.combine sl dl) (parmove2 sl dl).