Inductive cbl n (l: list (vect n)): nat -> (vect n) -> Prop :=
| cbl_in: forall v, In v l -> cbl n l 0%nat v
| cbl_add: forall k x y, cbl n l k x -> cbl n l k y -> cbl n l k (x + y)
| cbl_scal: forall k k1 x, cbl n l k x -> cbl n l k (k1 .* x)
| cbl_join: forall k v x, In v l -> cbl n l k x -> cbl n l k.+1 (v ∨ x).

(* Specifications: *)
Lemma cbl_cons n (a: vect n) l k x : cbl n l k x -> cbl n (a::l) k x.
Lemma joinl_join n l (v: vect n) :
(forall x, In x l -> hom n 1 x) -> In v l -> v ∨ joinl n l = 0.
Lemma cbl_joinl n (l: list (vect n)) :
l <> nil -> (forall x, In x l -> hom n 1 x) -> cbl n l (pred (length l)) (joinl n l).
Lemma cbl_joinl0 n (l: list (vect n)) k x :
(forall x, In x l -> hom n 1 x) -> cbl n l k x -> x ∨ joinl n l = 0.
Lemma cbl_hom n (l: list (vect n)) k x :
(forall x, In x l -> hom n 1 x) -> cbl n l k x -> hom n k.+1 x.
Lemma cbl_contra n (l: list (vect n)) lf k x :
(forall x, In x l -> hom n 1 x) -> cbl n l k.+1 x -> cbl n l k #<lf, x>#.
Lemma cbl_mcontra n (l: list (vect n)) lfs k x :
length lfs <= k ->
(forall x, In x l -> hom n 1 x) -> cbl n l k x -> cbl n l (k - length lfs) #<<lfs, x>>#.
Lemma decomp_one_factor_hom n (l: list (vect n)) M : l <> nil ->
decomposable n l M -> hom n 1 (one_factor n (pred (length l)) M).
Lemma decomp_one_factor0 n (l: list (vect n)) M :
decomposable n l M -> one_factor n (pred (length l)) M = 0 -> M = 0.
Lemma decomp_one_factor_join n (l: list (vect n)) M :
decomposable n l M -> one_factor n (pred (length l)) M ∨ M = 0.