Proof with auto.
intros A C.
rewrite setd_base_separate.
rewrite setd_base_separate in A.
destruct A as [A' A]. split; auto.
clear A'.
apply listd_In_pred; [| auto].
intros a D.
generalize (setd_add_In_inv_elems cls _ _ D); intros [E | F].
rewrite <- E... rewrite <- M.elements_spec1, SetoidList.InA_alt in F.
destruct F as [y [F G]]; subst y.
solve [apply (listd_In_inv_pred f _ _ _ A G)].
Qed.

(* Specifications: *)
Lemma setd_remove c cls s :
setd f inter TT cls s -> setd f inter TT (M.remove c cls) s.