Proof with simpl; auto.
revert l2; induction l1... intros l2 _ H1.
assert (forall l, (fix merge_aux (l0 : list A) := l0) l = l)
as -> by (destruct l; auto)...
intros l2 H1 H2. induction l2... remember (cmp a a0) as b0; destruct b0...
split; auto. rewrite (Hcmp a a0) in Heqb0; subst. destruct H1 as [H1 H3]...
destruct H1, H2... destruct H1, H2... destruct H2; split... destruct H1; split...
Qed.

(* Specifications: *)
Lemma merge_nil l : merge cmp l nil = l.
Lemma listd_merge_inter' l1 l2 s :
listd f inter TT (merge cmp l1 l2) s ->
listd f inter TT l1 s /\ listd f inter TT l2 s.