Section Pmult.
Load "hCoefStructure".
Load "hOrderStructure".
Load "hMults".
Fixpoint multpf (p : list (Term A n)) : list (Term A n) -> list (Term A n) :=
fun q : list (Term A n) =>
match p with
| nil => pO A n
| a :: p' =>
pluspf (A:=A) A0 (eqA:=eqA) plusA eqA_dec (n:=n) (ltM:=ltM) ltM_dec
(mults (A:=A) multA (n:=n) a q) (multpf p' q)
end.

Theorem canonical_multpf :
forall l1 l2 : list (Term A n),
canonical A0 eqA ltM l1 ->
canonical A0 eqA ltM l2 -> canonical A0 eqA ltM (multpf l1 l2).