Fixpoint remove_all (to_delete l : list A) : list A :=
    match to_delete with
    | [] => l
    | d :: ds => remove_all ds (remove A_eq_dec d l)
    end.

Lemma remove_all_cons : forall ys a l, (remove_all ys (a :: l) = remove_all ys l /\ In a ys) \/ (remove_all ys (a :: l) = a :: (remove_all ys l) /\ ~In a ys).