induction ls; intuition; simpl in *.
econstructor.
inversion H; clear H; subst.
eapply app_NoDup; intuition.
eapply in_flatten in H3.
destruct H3.
intuition.
eapply app_NoDup_inv.
eapply H1.
right.
eapply H6.
left.
reflexivity.
intuition.
subst.
eapply H4.
eapply In_gen_weaken.
exact H6.
intuition.
subst.
subst.
simpl in *.
intuition.
eauto.
eauto.
eapply in_flatten in H2.
destruct H2.
intuition.
eapply app_NoDup_inv.
eapply H1.
right.
eapply H6.
left.
reflexivity.
intuition.
subst.
eapply H4.
eapply In_gen_weaken.
exact H6.
intuition.
subst.
subst.
simpl in *.
intuition.
eauto.
eauto.
Qed.

(* Specifications: *)
Theorem NoDup_gen_weaken :
forall (A : Type)(e1 e2 : A -> A -> Prop) ls,
NoDup_gen e1 ls ->
(forall a1 a2, e2 a1 a2 -> e1 a1 a2) ->
NoDup_gen e2 ls.