Definition is_base vs := free vs /\ forall e, cbl vs e.
Structure vparamsProp: Type := {
sProp : fparamsProp p;
eqE_dec: forall x y, if x ?= y then x = y else x <> y;
(* Boolean equality *)
addE_assoc: forall x y z, (x + y) + z = x + (y + z);
(* Associativity for + *)
addE_com: forall x y, x + y = y + x;
(* Commutativity for + *)
addE0l: forall x, 0 + x = x;
(* Left neutral  for + *)
scalE0l: forall x, 0 .* x = 0;
(* scalar 0 *)
scalE1: forall x, 1 .* x = x;
(* scalar 1 *)
scal_addEl: forall k1 k2 x, (k1 + k2) .* x = (k1.* x) + (k2 .* x);
(* scalar distributivity left *)
scal_addEr: forall k x y, k .* (x + y) = k .* x + k .* y;
(* scalar distributivity right *)
scal_multE: forall k1 k2 x, (k1 * k2) .* x = k1.* (k2 .* x)
(* scalar distributivity left *)
}.
Variable Hp: vparamsProp.

(* Multiple product of a sum *)
Lemma addE_mprod ks1 ks2 vs : length ks1 = length ks2 ->
map2 (fun k1 k2 => (k1 + k2)%f) ks1 ks2 *X* vs = ks1 *X* vs + ks2 *X* vs.