(* Defining the natural injection of Kn in Gn *)
Definition Kn := kn p.
Fixpoint k2g (n: nat) {struct n} : kn n ->  vect n :=
match n return kn n -> vect n with
O => fun k => 0%f
| S n1 => fun v => let (k, v1) := v in ([k], k2g n1 v1)
end.
Notation "'v_ x" := (k2g _ x) (at level 9).
Notation "'kn n" := (vn_eparams p (pred n)) (at level 10).

(* Specifications: *)
Lemma k2g0 n : 'v_0 = 0 :> vect n.
Lemma k2g_add n x y : 'v_(x + y) = 'v_x + 'v_y :> vect n.
Lemma k2g_scal n k x : 'v_(k .* x) = (k: K) .* 'v_x :> vect n.
Lemma k2g_unit n i : i < n -> 'v_('e_i)%Kn = 'e_i :> vect n.
Lemma k2g_hom n x : hom n 1 ('v_x).
Lemma hom1E n x : hom n 1 x -> exists y, x = 'v_y.
Lemma k2glift n x : 'v_(Kn.lift p n x) = ('v_x)^'l.
Lemma pscal_meet n x y : 'v_x ∧ '@('v_y) =  ((x [.] y)%Kn:K) .* 1 :> vect n.
Definition V0 := genk (dim p) 0.