(* Definition infinite_list_c P := ~ exists L, forall s, P s <-> In s L. *)
Definition infinite_fun P := exists f : nat -> term, forall n, P (f n) /\ forall m, m < n -> f m <> f n.
Definition really_infinite P := ~ exists L, forall x, P x -> x el L.
Definition infinite P := forall n, ~~ exists A, card A >= n /\  forall x, x el A -> P x.

Lemma productive_inf P : productive P -> exists A, A <<=1 P /\ recognisable A /\ infinite A.
Definition simple P := recognisable P /\ infinite (complement P) /\ ~ exists A, A <<=1 complement P /\ recognisable A /\ infinite A.