(*  On definit maintenant (sup x) pour un ensemble x, qui est		*)
(*    - soit O, si x ne contient pas d'entier				*)
(*    - soit (S n), si n est le plus grand entier de x			*)
(*									*)

(*
Definition Z : Elt -> nat :=
  [x:Elt]
    (<nat>Case x of
	(* natural *) [n:nat](S n)
	(* couple  *) [a:Elt][b:Elt]O
	(* up      *) [e:Ensf]O
	(* word    *) [w:Word]O
    end ).
*)

Definition Z (x : Elt) : nat := match x with
                                | natural n => S n
                                | _ => 0
                                end.(*
Fixpoint sup [e:Ensf] : nat :=
    (<nat>Case e of
	(* empty *) O	
	(* add   *) [x:Elt][f:Ensf](max (Z x) (sup f))
    end ).
*)

Fixpoint sup (e : Ensf) : nat :=
  match e with
  | empty => 0
  | add x f => max (Z x) (sup f)
  end.

Lemma sup_add : forall (x : Elt) (e : Ensf), sup (add x e) = max (Z x) (sup e) :>nat.