Proof with auto.
intros H1.
cut (listd f un FF (l1 ++ l2) s).
intros H2. rewrite listd_app, listd_unfold_un in H2.
destruct H2; firstorder.
apply listd_In_inv_pred_un in H1. destruct H1 as [[a [C D]]|E].
apply listd_In_pred_un.
left. exists a. rewrite <-merge_elems in C. rewrite Coqlib.in_app. split...
inversion E.
Qed.
End ListDenoteMergePreds.
Section ListDenoteSeparate.
Context {X Y B : Type}.
Variables (f : X -> pred B) (g : Y -> pred B) (b : pred B) (l1 : list X)
(l2 : list Y).

(* Specifications: *)
Lemma listd_separate :
listd f inter (listd g inter b l2) l1 =
andp (listd f inter TT l1) (andp (listd g inter TT l2) b).