(*									*)
(*  first et second renvoient repsectivement le premier et le deuxieme 	*)
(*  element d'un couple.						*)
(*									*)
  
Definition first (x : Elt) : Elt :=
  match x return Elt with
  | natural n =>
      (* natural *)  zero
      (* couple  *) 
  | couple a b => a
      (* up      *) 
  | up e => zero
      (* word    *) 
  | word w => zero
  end.Definition second (x : Elt) : Elt :=
  match x return Elt with
  | natural n =>
      (* natural *)  zero
      (* couple  *) 
  | couple a b => b
      (* up      *) 
  | up e => zero
      (* word    *) 
  | word w => zero
  end.

(* Specifications: *)
Lemma equal_couple : forall x y z t : Elt, couple x y = couple z t :>Elt -> x = z :>Elt /\ y = t :>Elt.
Lemma couple_couple_inv1 : forall a b c d : Elt, couple a c = couple b d :>Elt -> a = b :>Elt.
Lemma couple_couple_inv2 : forall a b c d : Elt, couple a c = couple b d :>Elt -> c = d :>Elt.