(* Get the constant part of a vector *)
Fixpoint const (n: nat): (vect n) -> K :=
  match n return vect n -> K with 
  | O => fun a => a
  | S n1 => fun l => let (l1,l2) := l in const n1 l2
  end.Notation "'C[ x ]" := (const _ x).Notation "x ?= 0" := (eq0 _ x) (at level 70): g_scope.

(* Specifications: *)
Lemma en_def n : 'e_n = 1 :> vect n.
Lemma homk0 n k : hom n k 0.
Lemma hom1e n i : i < n -> hom n 1 'e_i.
Lemma homE n k1 k2 (x: vect n) : hom n k1 x -> hom n k2 x -> k1 = k2 \/ x = 0.
Lemma hom_lt n k v : n < k -> hom n k v -> v = 0.
Lemma add_hom n k (x y: vect n) : hom n k x -> hom n k y -> hom n k (x + y).
Lemma get_hom_add n m x y : get_hom n m (x + y) = get_hom n m x + get_hom n m y.