Fixpoint v2k (n : nat) : vect n -> kn n :=
match n return vect n -> kn n  with
| O => fun v : vect 0 => tt
| S n1  => fun v => let (v1,v2) := v in
('C[v1], v2k n1 v2)
end.

(* Specifications: *)
Lemma contra_const n lf M : hom n 1 M ->
#<lf, M># = [(lf [.] v2k n M)%Kn].
Lemma contra_join n lf k1 k2 M1 M2 : hom n k1 M1 -> hom n k2 M2 ->
#<lf, M1 ∨ M2># = #<lf, M1># ∨ M2 + ((- (1))^k1).* M1 ∨ #<lf, M2>#.
(* Anti-commutativity for homegeonous vectors, generalization of  cbl_base_prod_com  *)
Lemma join_hom_com n k1 k2 x y :
hom n k1 x -> hom n k2 y ->  y ∨ x = ((- (1)) ^(k1 * k2)).* (x ∨ y).
Lemma join_hom_odd n k x : (1+1 <> (0: K))%f -> hom n k x -> odd k -> x ∨ x = 0.
Lemma join_hom_id n k x : hom n k x -> odd k ->  x ∨ x = 0.
Lemma is_vector_space_swap n x l :
is_vector_space n l -> In x l ->
exists l1, is_vector_space n (x::l1) /\ joinl n l = joinl n (x::l1).