Coercion tonat {n} := @pos2nat n.

(* Specifications: *)
Lemma vec_prod_div m (v : vec nat m) (u0 : nat) (p : pos m) i : vec_pos v p = S u0 -> qs (p + i) * exp i (vec_change v p u0) = exp i v.
Lemma qs_exp_div i j n v : i < j -> ~ divides (qs i) (@exp n j v).
Lemma qs_shift n m j k (v : vec nat k) : divides (qs n) (exp j v) <-> divides (qs (m + n)) (exp (m + j) v).
Lemma vec_prod_mult m v (u : pos m) i : @exp m i (vec_change v u (1 + vec_pos v u)) = qs (u + i) * exp i v.
Lemma inv_exp q p1 p2 x y : q <> 0 -> ~ divides q p1 -> ~ divides q p2 -> q ^ x * p1 = q ^ y * p2 -> x = y.
Lemma exp_inj n i v1 v2 : @exp n i v1 = exp i v2 -> v1 = v2.
Lemma exp_inv_inc n u v1 : @exp n 0 (vec_change v1 u (S (vec_pos v1 u))) = qs u * exp 0 v1.