Fixpoint decomposek (n: nat) k (v: vect n) {struct k} : list (vect n) :=
match k with
| O => nil
| S O => v::nil
| S k1 => let v1 := one_factor n k1 v in
v1::decomposek n k1 (factor n v1 v)
end.

(* Specifications: *)
Lemma decomposekSS (n: nat) k (v: vect n) :
decomposek n k.+2 v =
one_factor n k.+1 v::
decomposek n k.+1 (factor n (one_factor n k.+1 v) v).