Inductive NoDup_gen : list A -> Prop :=
  | NoDup_gen_nil : NoDup_gen nil
  | NoDup_gen_cons : 
      forall (a : A)(ls : list A),
        (~In_gen ea a ls) -> 
        NoDup_gen ls ->
        NoDup_gen (a :: ls).Inductive NoDup_gen : list A -> Prop :=
  | NoDup_gen_nil : NoDup_gen nil
  | NoDup_gen_cons : 
      forall (a : A)(ls : list A),
        (~In_gen ea a ls) -> 
        NoDup_gen ls ->
        NoDup_gen (a :: ls).Inductive NoDup_gen : list A -> Prop :=
  | NoDup_gen_nil : NoDup_gen nil
  | NoDup_gen_cons : 
      forall (a : A)(ls : list A),
        (~In_gen ea a ls) -> 
        NoDup_gen ls ->
        NoDup_gen (a :: ls).

Theorem NoDup_gen_eq : forall (A : Type)(ls : list A), NoDup ls <-> NoDup_gen eq ls.