(** ** Definition of infinite and generating types *)

Definition generating X :=
  forall (A : list X), exists x, ~ x el A.Definition injective X Y (f : X -> Y) :=
  forall x x', f x = f x' -> x = x'.Definition infinite X :=
  exists (f : nat -> X), injective f.

(* Specifications: *)
Lemma LX_el n x : x el LX n -> exists n', n' <= n /\ f n' = x.
Lemma LX_NoDup n : NoDup (LX n).
Lemma X_gen : generating X.