(* définition des fonctions de modification des adresses *)

Definition uad_conv_0 (a : ad) : ad :=
  match a with
  | N0 => N0
  | Npos p => Npos (xO p)
  end.Definition uad_conv_1 (a : ad) : ad :=
  match a with
  | N0 => Npos 1
  | Npos p => Npos (xI p)
  end.

(* Specifications: *)
Lemma adcnv_inj0 : forall a b : ad, uad_conv_0 a = uad_conv_0 b -> a = b.
Lemma adcnv_inj1 : forall a b : ad, uad_conv_1 a = uad_conv_1 b -> a = b.
Lemma adcnv_ok : forall a b : ad, uad_conv_0 a <> uad_conv_1 b.
Lemma adcnv_disj : forall a : ad, exists b : ad, a = uad_conv_0 b \/ a = uad_conv_1 b.