(* 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.

(* Specifications: *)
Lemma infinite_fun_infinite P : infinite_fun P -> infinite P.
(* infinite -> really_infinite and really_infinite -> infinite_list *)
(* use really_infinite as definition *)
Lemma infinite_list B L : infinite B -> ~~ exists s, B s /\ ~ s el L.
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.
Lemma simple_spec P : simple P -> ~ decidable P /\ ~ creative P.
Definition ran (u : term) t := exists s, u (tenc s) ▷ tenc t.