Definition good_move (x y : IR) : Prop :=
    (forall k k', ~ (x = IRO k /\ y = IRI k')) /\
    (forall k, ~ (x = IRI k /\ y = IRO k)) /\
    (forall k, ~ (x = IRI k /\ y = IRU k)).

(* Specifications: *)
Lemma IR_equivalent_refl : forall l, IR_equivalent l l.
Lemma IR_equiv_in_l_r : forall ir1 ir2, IR_equivalent ir1 ir2 -> forall o, In o ir1 -> In o ir2.
Lemma IR_equiv_in_r_l : forall ir1 ir2, IR_equivalent ir1 ir2 -> forall o, In o ir2 -> In o ir1.
Lemma IR_equiv_Permutation : forall ir1 ir2, IR_equivalent ir1 ir2 -> Permutation ir1 ir2.
Lemma IR_equiv_app_head : forall l xs ys, IR_equivalent xs ys -> IR_equivalent (l ++ xs) (l ++ ys).
Lemma IR_equiv_app_tail : forall l xs ys, IR_equivalent xs ys -> IR_equivalent (xs ++ l) (ys ++ l).