Require Export Coq.Lists.List.
Section Lindenbaum.
Context {A: Type}
(CA: Countable A)
(init: Ensemble A)
(P: Ensemble A -> Prop).
Fixpoint LindenbaumChain (n: nat): Ensemble A :=
match n with
| 0 => init
| S n => fun a => LindenbaumChain n a \/ CA a n /\ P (Union _ (LindenbaumChain n) (Singleton _ a))
end.
Definition LindenbaumConstruction: Ensemble A :=
fun a => exists n, LindenbaumChain n a.

Lemma Lindenbaum_finite_witness:
forall xs, Forall LindenbaumConstruction xs ->
exists n, Forall (LindenbaumChain n) xs.