intuition.
eapply NoDup_Permutation; intuition.
eapply intersect_NoDup.
trivial.
eapply intersect_NoDup.
trivial.
unfold intersect in *.
apply filter_In in H1.
intuition.
eapply filter_In; intuition.
destruct (in_dec eqd x ls1); try congruence.
destruct (in_dec eqd x ls2); intuition.
unfold intersect in *.
apply filter_In in H1.
intuition.
eapply filter_In; intuition.
destruct (in_dec eqd x ls2); try congruence.
destruct (in_dec eqd x ls1); intuition.
Qed.

(* Specifications: *)
Lemma fold_add_nat_filter_partition :
forall (A : Set)(P : A -> bool)(f : A -> nat)(ls : list A),
fold_left (fun acc a => acc + (f a))%nat ls O =
(plus
(fold_left (fun acc a => acc + (f a))%nat (filter P ls) O)
(fold_left (fun acc a => acc + (f a))%nat (filter (fun a => negb (P a)) ls) O)
).