Definition mults : Term A n -> list (Term A n) -> list (Term A n).

(* Specifications: *)
Lemma mults_order_l : forall l m1 m2, ~ zeroP (A:=A) A0 eqA (n:=n) m1 -> canonical A0 eqA ltM (pX m2 l) -> canonical A0 eqA ltM (pX (multTerm (A:=A) multA (n:=n) m1 m2) (mults m1 l)).
Lemma canonical_mults : forall m l, ~ zeroP (A:=A) A0 eqA (n:=n) m -> canonical A0 eqA ltM l -> canonical A0 eqA ltM (mults m l).
Lemma canonical_mults_inv : forall (p : list (Term A n)) (a : Term A n), ~ zeroP (A:=A) A0 eqA (n:=n) a -> canonical A0 eqA ltM (mults a p) -> canonical A0 eqA ltM p.