Definition nf : poly A0 eqA ltM -> list (poly A0 eqA ltM) -> poly A0 eqA ltM.

(* Specifications: *)
Theorem nf_irreducible : forall (p : poly A0 eqA ltM) (aP : list (poly A0 eqA ltM)), irreducible A A0 A1 eqA invA minusA multA divA eqA_dec n ltM ltM_dec aP (s2p A A0 eqA n ltM (nf p aP)).
Theorem nf_red : forall (a : poly A0 eqA ltM) (aP aQ : list (poly A0 eqA ltM)), incl aP aQ -> red (nf a aP) aQ -> red a aQ.
Theorem red_zerop : forall (a : poly A0 eqA ltM) (P : list (poly A0 eqA ltM)), red (nf a P) P -> zerop (nf a P).
Theorem zerop_red : forall (a : poly A0 eqA ltM) (aP : list (poly A0 eqA ltM)), zerop (nf a aP) -> red a aP.
Theorem canonical_s2p : forall x : poly A0 eqA ltM, canonical A0 eqA ltM (s2p A A0 eqA n ltM x).
Theorem nf_Cb : forall (a : poly A0 eqA ltM) (aP : list (poly A0 eqA ltM)), Cb a aP -> Cb (nf a aP) aP.