(* Grade definition *)
Definition grade n k x := hom n k x &&
if decompose n x then true else false.

(* Specifications: *)
Lemma gradeE n k x :
grade n k x <->  hom n k x /\
exists l, x = joinl n l /\
(forall y, In y l -> hom n 1 y).
Lemma grade0 n k : grade n k 0.
Lemma grade0E n x : grade n 0 x -> x = 0.
Lemma grade_hom n k x : grade n k x -> hom n k x.
Lemma grade1_hom n x : grade n 1 x = hom n 1 x.
Lemma grade_scal n k1 k2 x : grade n k1 x -> grade n k1 (k2 .* x).
Lemma grade_join n k1 k2 x y :
grade n k1 x -> grade n k2 y -> grade n (k1 + k2) (x ∨ y).