(* A factor of a special degre *)
Fixpoint one_factor (n: nat) k : vect n -> vect n :=
match n return vect n -> vect n with
| O => fun a  => a
| S n1 => fun l =>
match k with
| O => l
| S k1 =>
let (l1,l2) := l in
let r := one_factor n1 k1 l1 in
(0:vect n1, if r ?= 0 then one_factor n1 k l2 else r)
end
end.

(* Specifications: *)
Lemma one_factor0 n k : one_factor n k 0 = 0.
Lemma one_factor_hom n k1 k2 (x: vect n) :
k2 < k1 -> hom n k1 x -> hom n (k1 - k2) (one_factor n k2 x).