(* Turn a vector in a list of scalar to be used for multiple product *)
Fixpoint v2l (n: nat) : vect n -> list K :=
match n return vect n -> list K with
O => fun k => k :: nil
| S n1 => fun x => let (x1, x2) := x in
(v2l n1 x1 ++ v2l n1 x2)%list
end.

(* Every vector is a linear combination of all products of the base *)
Lemma cbl_all_prods n v : cbl _ (all_prods _ (base n 1)) v.