induction ls; intuition; simpl in *.
intuition.
Qed.

Lemma flatten_NoDup_gen :
forall (A : Set)(ls : list (list A)),
NoDup_gen (fun a b => a <> nil /\ a = b) ls ->
(forall x, In x ls -> NoDup x) ->
(forall x1 x2, In x1 ls -> In x2 ls -> x1 <> x2 -> NoDup (x1 ++ x2)) ->
NoDup (flatten ls).