Proof with simpl; auto.
induction l...
intros.
simpl.
inversion_clear H0.
apply NoDup_cons...
intro.
apply H1.
destruct (In_map_inv H0).
destruct H3.
rewrite (H a x)...
Qed.
Inductive InP (X: Type) (P: X -> Prop): list X -> Prop :=
| InP_head x t: P x -> InP P (x :: t)
| InP_tail x t: InP P t -> InP P (x :: t).
Inductive NoDupL (A: Type): list (list A) -> Prop :=
| NoDupL_nil: NoDupL nil
| NoDupL_cons (l: list A) (ll: list (list A)): NoDup l ->
(forall x, In x l -> ~ InP (In x) ll) -> NoDupL ll -> NoDupL (l :: ll).
Hint Constructors NoDupL.

(* Specifications: *)
Lemma InP_In (X: Type) (l: list X) (ll: list (list X)): In l ll -> forall x, In x l -> InP (In x) ll.
Proof with auto.