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 decomposek_cor n k v : v <> 0 -> is_decomposable n v -> hom n k v -> decomposable n (decomposek n k v) v.