-- -*- M2-comint -*- hash: 4910517167498827489

i1 : Poly = new Type of HashTable

o1 = Poly

o1 : Type

i2 : p = new Poly from { "" => 1, "x" => 2, "y" => 3, "cat" => 5 }

o2 = Poly{"" => 1   }
          "cat" => 5
          "x" => 2
          "y" => 3

o2 : Poly

i3 : Poly * Poly := (p,q) -> combine(p,q,concatenate,times,plus);

i4 : p*p

o4 = Poly{"" => 1       }
          "cat" => 10
          "catcat" => 25
          "catx" => 10
          "caty" => 15
          "x" => 4
          "xcat" => 10
          "xx" => 4
          "xy" => 6
          "y" => 6
          "ycat" => 15
          "yx" => 6
          "yy" => 9

o4 : Poly

i5 : DivPowPoly = new Type of HashTable

o5 = DivPowPoly

o5 : Type

i6 : divPowCoeff = (i,j) -> binomial(i+j,i)

o6 = divPowCoeff

o6 : FunctionClosure

i7 : p = new DivPowPoly from { 0 => 1, 1 => 1 }

o7 = DivPowPoly{0 => 1}
                1 => 1

o7 : DivPowPoly

i8 : DivPowPoly * DivPowPoly := (p,q) -> combine(p,q,plus,divPowCoeff,times,plus);

i9 : p*p

o9 = DivPowPoly{0 => 1}
                1 => 2
                2 => 2

o9 : DivPowPoly

i10 : 
