Fixpoint nats (x n: nat) {struct n}: Vector.t (natBelow (x + n)) n :=
  match n as n0 return Vector.t (natBelow (x + n0)) n0 with
  | 0 => Vector.nil
  | S n0 => map (fun d => eq_rec_r natBelow d (trans_plus_n_Sm x n0))
    (Vector.cons (mkNatBelow x n0) (nats (S x) n0))
  end.Definition nb_nats (x n: nat): Vector.t nat n := map nb_val (nats x n).

Lemma S_rect A n (P: Vector.t A (S n) -> Type): (forall h t, P (Vector.cons h t)) -> forall v, P v.