auto.
intros n0 y l H_rec.
simpl in |- *.
apply lt_le_trans with (pred base * exp_n base n0 + exp_n base n0).
apply le_lt_plus_mult.
elim y.
intros x H_y.
simpl in |- *.
auto. (*lt_le_pred*)
trivial.
replace (pred base) with (base - 1). (*pred_minus*)
rewrite mult_minus_distr_r.
simpl in |- *.
elim plus_n_O.
elim exp_n_plus_p1.
elim plus_Snm_nSm; simpl in |- *; elim plus_n_O.
elim plus_comm.
elim le_plus_minus.
apply le_mult_cst; auto.
apply le_exp_n_mult.
unfold base in |- *; case BASE; auto.
auto.
Qed.
Definition val_bound (n : nat) (X : num n) : inf (exp base n) :=
exist (fun p : nat => p < exp base n) (Val n X) (upper_bound n X).

(* Specifications: *)
Lemma comp_dif :
forall (n : nat) (x y : digit) (X Y : num n),
val x < val y -> Val (S n) (Cons n x X) < Val (S n) (Cons n y Y).