induction ls; intuition; simpl in *.
econstructor.
econstructor.
inversion H1; clear H1; subst.
econstructor.
intuition.
eapply H4.
eapply  In_gen_eq.
trivial.
intuition.
inversion H1; clear H1; subst.
econstructor.
intuition.
eapply H4.
eapply In_gen_eq.
trivial.
intuition.
Qed.
Section NoDup_gen_map.
Variable A B : Type.
Variable ea : A -> A -> Prop.
Variable eb : B -> B -> Prop.
Variable f : A -> B.
Hypothesis ea_symm :
forall a1 a2,
ea a1 a2 -> ea a2 a1.
Hypothesis ea_trans :
forall a1 a2 a3,
ea a1 a2 ->
ea a2 a3 ->
ea a1 a3.
Hypothesis ea_func :
forall a1 a2, ea a1 a2 -> eb (f a1) (f a2).
Hypothesis eb_symm :
forall b1 b2,
eb b1 b2 -> eb b2 b1.
Hypothesis eb_trans :
forall b1 b2 b3,
eb b1 b2 ->
eb b2 b3 ->
eb b1 b3.
Hypothesis ea_refl :
forall a y,
eb (f a) y ->
ea a a .
Hypothesis eb_func :
forall a1 a2,
eb (f a1) (f a2) -> ea a1 a2.

(* Specifications: *)
Theorem In_gen_map_iff
: forall (l : list A) (y : B),
(In_gen eb y (map f l) <-> (exists x : A, eb (f x) y /\ In_gen ea x l)).