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

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