(**************************************)
(** * The set of von Neuman numerals  *)
(**************************************)
(** The set omega of von Neumann numerals is represented as the pointed graph ((opt nat), OMEGA, (none nat)) whose edge relation OMEGA : (Rel (opt nat)) is defined by the following two clauses:  1. Delocation of the strict ordering "lt"  if (wf_nat n), (wf_nat m) and (lt n m), then (OMEGA (some nat n) (some nat m))  2. Connecting wf_nat's to the new root:  if (wf_nat n), then (OMEGA (some nat n) (none nat)).  As usual, we define it via a second-order encoding: *)
Definition OMEGA : Rel (opt nat) :=
fun z' z =>
forall E : Prop,
(forall n n' : nat,
eq (opt nat) z (some nat n) ->
eq (opt nat) z' (some nat n') -> wf_nat n -> wf_nat n' -> lt n' n -> E) ->
(forall n' : nat,
eq (opt nat) z (none nat) ->
eq (opt nat) z' (some nat n') -> wf_nat n' -> E) -> E.
(** The corresponding constructors are the following: *)

(* Specifications: *)
Lemma OMEGA_in :
forall n : nat,
wf_nat n ->
forall m : nat, wf_nat m -> lt n m -> OMEGA (some nat n) (some nat m).