Definition inter (A B : nat -> Prop) (n : nat) := A n /\ B n.Definition combine (YA YB : (nat -> nat) -> nat) (f : nat -> nat) :=
  enumerate (fun g : nat -> nat => YA (fun x : nat => f (g x)))
    ((fun g : nat -> nat => YB (fun x : nat => f (g x)))
       (enumerate (fun g : nat -> nat => YA (fun x : nat => f (g x))))).

(* Specifications: *)
Theorem Ramsey1 : forall (A B : nat -> Prop) (YA YB : (nat -> nat) -> nat), full A YA -> full B YB -> full (inter A B) (combine YA YB).