intros.
induction  f as [| a0 f Hrecf].
auto.
simpl in |- *.
elim a0.
intros.
elim (Xeq_dec a a1).
elim (XYeq_dec (b, y) (a1, b0)).
intros.
cut False.
intro F.
elim F.
unfold not in H.
apply H.
rewrite a3.
injection a2.
auto.
simpl in |- *.
elim (Xeq_dec a a1).
auto.
intros.
cut False.
intro F.
elim F.
auto.
elim (XYeq_dec (b, y) (a1, b0)).
simpl in |- *.
elim (Xeq_dec a a1).
intros.
cut False.
intro F.
elim F.
auto.
auto.
simpl in |- *.
elim (Xeq_dec a a1).
intros.
cut False.
intro F.
elim F.
auto.
intros.
auto.
Qed.

Lemma AddRemEq :
forall (a b : X) (y z : Y) (f : set (X * Y)),
a <> b ->
PARTFUNC f a =
PARTFUNC (set_add XYeq_dec (b, z) (set_remove XYeq_dec (b, y) f)) a.