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.

Lemma mprod_perm l1 l2 lk1: perm l1 l2 -> length lk1 = length l1 ->
exists lk2, perm lk1 lk2 /\ lk1 *X* l1 = lk2 *X* l2.