intros.
exists (minus_part B y).
split.
apply Sym.
apply minus_add.
cut (in_part y (add_part B x)).
intros.
apply add_part_in_el_diff with x; auto with algebra.
apply in_part_comp_r with A; auto with algebra.
apply in_part_comp_r with (add_part C y); auto with algebra.
split.
apply add_part_simpl with y; auto with algebra.
unfold not in |- *; intro.
absurd (Equal y x); auto with algebra.
apply add_part_in_el_not_in with (minus_part B y); auto with algebra.
apply Trans with (add_part (add_part (minus_part B y) y) x);
auto with algebra.
apply Trans with (add_part B x); auto with algebra.
apply Trans with A; auto with algebra.
apply add_part_comp; auto with algebra.
apply Sym.
apply minus_add; auto with algebra.
apply add_part_in_el_diff with x; auto with algebra.
apply in_part_comp_r with (add_part C y); auto with algebra.
apply Trans with A; auto with algebra.
split.
apply minus_trans_not_in; auto with algebra.
auto with algebra.
Qed.

(* Specifications: *)
Lemma cardinal_ind2 :
forall P : forall (n : nat) (A : part_set E), cardinal A n -> Prop,
(forall (A : part_set E) (c : cardinal A 0), P 0 A c) ->
(forall n : nat,
(forall (B : part_set E) (c : cardinal B n), P n B c) ->
forall (A B : part_set E) (x : E),
~ in_part x B ->
Equal A (add_part B x) -> forall c' : cardinal A (S n), P (S n) A c') ->
forall (n : nat) (A : part_set E) (c : cardinal A n), P n A c.