Proof using.
induction xs; intros; simpl in *.
- constructor.
- invc_NoDup.
constructor; auto.
intro.
do_in_map.
find_apply_hyp_hyp.
find_reverse_rewrite.
auto using in_map.
Qed.

(* Specifications: *)
Lemma pigeon :
forall (l : list A) sub1 sub2,
(forall a, In a sub1 -> In a l) ->
(forall a, In a sub2 -> In a l) ->
NoDup l ->
NoDup sub1 ->
NoDup sub2 ->
length sub1 + length sub2 > length l ->
exists a, In a sub1 /\ In a sub2.