Section Gen.
Variable f : nat -> X.
Hypothesis Hf : injective f.
Fixpoint LX n :=
match n with
| 0 => [f 0]
| S n => f (S n) :: LX n
end.
End Gen.
(* ** Generating data types are infinite *)
Hypothesis Hg : generating X.
Instance el_dec :
forall (A : list X) x, dec (x el A).
Definition dummy : X.
Definition f n :=
match (f' n) with Some x => x | None => dummy end.
Definition le_f x y :=
exists n, f n = x /\ forall n', f n' = y -> n <= n'.
Fixpoint LL n :=
match n with 0 => nil | S n => LL n ++ [gen' (LL n)] end.
Definition F n :=
gen' (LL n).
(* ** Generating data types are in bijection to nat *)
Definition G x :=
mu' _ (F_sur x).

Lemma FG n :
F (G n) = n.