Proof using.
unfold good_op_move, good_move.
intuition (try congruence). repeat find_inversion. eauto.
Qed.

(* Specifications: *)
Lemma good_op_move_cases :
forall x y,
good_op_move x y ->
exists k k',
(x = I k /\ y = I k') \/
(x = O k /\ y = O k') \/
(k <> k' /\ x = I k /\ y = O k').