unfold increasing in |- *; intros f i x y ltxy.
elim ltxy; trivial with arith.
intros; apply lt_trans with (f m); auto with arith.
Qed.
(* A is Y-full : (full A Y) *)
Definition full (A : nat -> Prop) (Y : (nat -> nat) -> nat) :=
forall f : nat -> nat, increasing f -> A (f (Y f)).
Definition enumerate (Y : (nat -> nat) -> nat) :=
(fix F (x : nat) : nat :=
match x return nat with
| O =>
(* O   *)  Y (fun n : nat => n) (* S y *)
| S y => Y (fun n : nat => n + S (F y)) + S (F y)
end).

(* Specifications: *)
Lemma increasing_enumerate :
forall Y : (nat -> nat) -> nat, increasing (enumerate Y).