Fixpoint compare_list {A: Type} (f: A -> A -> comparison) (xl yl : list A)
  : comparison :=
  match xl , yl with
  | x :: xl', y :: yl' => match f x y with
                          | Eq => compare_list f xl' yl'
                          | c => c
                          end
  | nil , _ :: _ => Lt
  | _ :: _ , nil => Gt
  | nil, nil => Eq
  end.

Lemma rsort_uniq_in: forall {A} (R: A -> A -> comparison) (EQ: forall a b, (a=b) <-> (Eq = R a b)) x l, List.In x (rsort_uniq R l) <-> List.In x l.