Notation " x ^'l " := (lift _ x) (at level 9, format "x ^'l"): g_scope.Notation "x ^'dl" := (dlift _ x) (at level 9, format "x ^'dl" ): g_scope.(* Coordinates for k vector *)
Fixpoint proj (n: nat) k: (vect n) -> (list K) :=
  match n return vect n -> list  K with 
  | O => fun a  =>
          match k with | O => a::nil | _ => nil end
  | S n1 => fun l => let (l1,l2) := l in 
          match k with | O => proj n1 k l2 | S k1 => 
           (proj n1 k1 l1 ++ proj n1 k l2)%list
          end
  end.

(* Specifications: *)
Lemma proj_hom0_eq n x y : hom n 0 x -> hom n 0 y -> nth 0 (proj n 0 x) 0%f = nth 0 (proj n 0 y) 0%f -> x = y.
Lemma proj_lt n m x : n < m -> proj n m x = nil.
Lemma proj_homn_eq n x y : hom n n x -> hom n n y -> nth 0 (proj n n x) 0%f = nth 0 (proj n n y) 0%f -> x = y.