with(Groebner): RightPommaret:=proc(u,U,Vars) local N,Ind,i; N:=NULL: Ind:=indets(u): for i from nops(Vars) by -1 to 1 while not (Vars[i] in Ind) do N:=N,Vars[i]: od: N:=N,Vars[i]: RETURN([N]); end: ################# HilSeries:=proc(F,Var) local i,A,B,C,dd,d,f,N,a,b,u,r,n,Pol,a1,a2,a3,a4,b1,b2,b3,b4: A:=0: B:=0: n:=nops(Var): dd:=nops(Var)-HilbertDimension(F,Var): r:=HilbertSeries(F,t); r:=numer(r); a1,a2:=kernelopts(cputime,bytesused); B:=max(seq( degree(f,Var)+nops({op(Var)} minus {op(RightPommaret(f,F,Var))})-dd ,f=F)): for f in F do N:={op(Var)} minus {op(RightPommaret(f,F,Var))}: B:=max(B,degree(f,Var)+nops(N)-dd); od: d:=n-dd: Pol:=NULL: for i from 0 to B do C:=binomial(dd+i-1,dd-1): for f in F do a:=nops({op(Var)} minus {op(RightPommaret(f,F,Var))}): b:=degree(f,Var): if b<=i and a-dd>=0 then C:=C-(-1)^(i-b)*binomial(a-dd,i-b); elif b<=i and a-dd<0 then C:=C-binomial(dd-a+i-b-1,dd-a-1); fi: od: Pol:=Pol,[i,simplify(expand(C))]: od: a3,a4:=kernelopts(cputime,bytesused); b1,b2:=kernelopts(cputime,bytesused); HilbertSeries(F,Var,t); b3,b4:=kernelopts(cputime,bytesused); if abs(expand(add(u[2]*t^(u[1]),u=[Pol])))=abs(r) then print(true) else print(false); fi: print("Our Hilbert series is:",expand(add(u[2]*t^(u[1]),u=[Pol])/(1-t)^d),"and its time is:",a3-a1,"its used memory is",a4-a2); print("Maple Hilbert series is:",HilbertSeries(F,Var,t),"and its time is:",b3-b1,"its used memory is",b4-b2); end: ################# HilPoly:=proc(F,Var) local i,A,B,C,dd,d,f,N,a,b,u,r,Pol,a1,a2,a3,a4,b1,b2,b3,b4: a1,a2:=kernelopts(cputime,bytesused); Pol:=mul(t+j,j=1..nops(Var)-1)/(nops(Var)-1)!: for f in F do a:=nops({op(RightPommaret(f,F,Var))}): b:=degree(f,Var): Pol:=Pol- mul(t-b+j,j=1..a-1)/(a-1)! od: a3,a4:=kernelopts(cputime,bytesused); b1,b2:=kernelopts(cputime,bytesused); HilbertPolynomial(F,Var,t); b3,b4:=kernelopts(cputime,bytesused); if abs(expand(Pol))=abs(HilbertPolynomial(F,Var,t)) then print(true) else print(false); fi: print("Our Hilbert polynomial is:",expand(Pol),"and its time is:",a3-a1,"its used memory is",a4-a2); print("Maple Hilbert polynomial is:",HilbertPolynomial(F,Var,t),"and its time is:",b3-b1,"its used memory is",b4-b2); end: F:=[x1^2*x3, x1*x2^2, x1^2*x2, x1^3, x2^2*x3^2, x1*x2*x3^2, x2^3*x3, x2^4, x3^4*x4, x2*x3^3*x4, x1*x3^3*x4, x3^5, x2*x3^4, x1*x3^4, x3^3*x4^3, x2*x3^2*x4^3, x1*x3^2*x4^3, x2^2*x3*x4^3, x1*x2*x3*x4^3, x2^3*x4^3, x3^2*x4^5, x2*x3*x4^5, x1*x3*x4^5, x2^2*x4^5, x1*x2*x4^5, x1^2*x4^5, x3*x4^7, x2*x4^7, x1*x4^7, x4^9]: Var:=[x1, x2, x3, x4]: F:=[x^2*y^2*a^2, y^6, x^6, y^3*x^2*a^2, x^3*y^2*a^2, x*y^6, x*y^3*a^3*b, x^3*y*a^3*b, x^4*a^3*b, x^5*a^2*b, x^5*y*a*b, a^6*y^2, a^6*x*y, x^2*a^6, y^3*a^5, x*y^2*a^5, x^2*y*a^5, x^3*a^5, y^4*a^4, x*y^3*a^4, x^3*y*a^4, x^4*a^4, y^5*a^3, x*y^4*a^3, x^4*y*a^3, x^5*a^3, x*y^5*a^2, y^4*x^2*a^2, x^3*y^3*a^2, x^4*y^2*a^2, x^5*y*a^2, x^2*y^5*a, x^3*y^4*a, x^4*y^3*a, x^5*y^2*a, x^2*y^6, x^3*y^5, x^4*y^4, x^5*y^3, x^3*y*a^2*b^3, a^2*b^3*x^4, x^3*y^3*b^3, a^3*b^2*y^4, a^2*b^2*y^5, x*y^4*a^2*b^2, a^2*b^2*x^4*y, a*b^2*x*y^5, a*b^2*x^3*y^3, x^3*y^4*b^2, x^4*y^3*b^2, x^5*y^2*b^2, a^8*y, a^8*x, a^2*b^4*y^4, x*y^3*a^2*b^4, a^4*b^3*x^3, x^2*y^5*b^3, a^10, y^3*a^4*b^4]: Var:=[x, y, a, b]: F:=[x^4, y^3*x^2, x^3*y^2, y^6, x*y^5, x^3*y*z^3, x*y^4*z^2, y^4*z^4, x*y^3*z^4, x^2*y^2*z^4, y^5*z^3, y^3*z^6, x*y^2*z^6, x^2*y*z^6, x^3*z^6, y^2*z^8, x*y*z^8, x^2*z^8, y*z^10]: Var:=[x,y,z,t]: F:=[x1, x6*x7, x5*x7, x2*x6, x2*x5, x2*x4, x3^2, x2*x3, x2^2, x6^2*x7, x5*x6*x7, x4*x6*x7, x3*x6*x7, x5^2*x7, x4*x5*x7, x3*x5*x7, x3*x6^2, x3*x5*x6, x4^2*x6, x3*x4*x6, x4*x5^2, x3*x5^2, x4^2*x5, x3*x4*x5, x4^3, x3*x4^2, x7^4, x4*x7^3, x3*x7^3, x2*x7^3, x4^2*x7^2, x3*x4*x7^2, x6^3*x7, x5*x6^2*x7, x4*x6^2*x7, x5^2*x6*x7, x4*x5*x6*x7, x5^3*x7, x6^4, x5*x6^3, x4*x6^3, x5^2*x6^2, x4*x5*x6^2, x5^3*x6, x5^4]: Var:=[x1, x2, x3, x4, x5, x6, x7,x8]: F:=[x1, x4*x5, x4^2, x3*x4, x3^2, x2*x3, x2^2, x5^2*x7, x5^2*x6, x3*x5*x6, x5*x2*x6, x5^3, x3*x5^2, x5^2*x2, x4*x2*x5, x2*x4^2, x5*x6*x7^2, x5*x6^2*x7, x4*x6^2*x7, x3*x6^2*x7, x2*x6^2*x7, x2*x4*x6*x7, x5*x6^3, x4*x6^3, x3*x6^3, x2*x6^3, x2*x4*x6^2, x6^2*x7^3, x6*x4*x7^3, x6*x3*x7^3, x6*x2*x7^3, x5*x3*x7^3, x5*x2*x7^3, x2*x4*x7^3, x6^3*x7^2, x6^4*x7, x6^5, x6*x7^5, x5*x7^5, x4*x7^5, x3*x7^5, x2*x7^5, x7^7]: Var:=[x1, x2, x3, x4, x5, x6, x7]: HilSeries(F,Var); F:=[ss*zz, ss*bb, bb*zz, yy^2, xx*yy, bb*yy, xx^2, xx*bb, bb^2, xx*tt^2, bb*tt^2, ss^2*tt, yy*ss*tt, xx*ss*tt, zz^2*tt, yy*zz*tt, xx*zz*tt, yy*ss^2, xx*ss^2, zz^2*ss, yy*ss*zz, xx*ss*zz, yy*zz^2, xx*zz^2, yy*tt^2*ww, yy*tt^2*vv, yy*tt^2*uu, tt^4, ss*tt^3, zz*tt^3, yy*tt^3, ss^3*tt, zz^3*tt, ss^4, zz^3*ss, zz^4]: Var:=[bb, xx, yy, zz, ss, tt, uu, vv, ww]: F:=[x1*x2, x0^2, x0*x1*x3, x1^2*x2, x0*x1*x2, x1^3, x0*x2^2*x3, x1^2*x0*x3, x0*x2^3, x0*x1^2*x2, x0*x1^3, x1^2*x3^2*x4, x1^2*x3^3]: Var:=[x0, x1, x2, x3, x4,x5]: F:=[x^2, u^3, u^2*y, u*vv*x*y, x*u^3, y^2*u^2, x*u^2*y, y^3*vv^2, u*vv*y^3, y^2*u*vv*x, y^3*u^2, x*y^2*u^2, y^5, y^4*vv^2, x*y^3*vv^2, y^4*u*vv, x*u*vv*y^3, y^4*u^2, x*y^3*u^2, x*y^5, x*u^2*vv^4, y^2*u*vv^4, x*y^2*vv^4, x*y^4*vv^2, x*y^4*u*vv, x*y^4*u^2, u^2*vv^6, y*u*vv^6, y^2*vv^6, x*y*vv^6, y*vv^8]: Var:=[x, y, u, vv]: F:=[y^2*z, y^3, x^3, x*y^2*z, x*y^3, x^2*y^2*z, x^2*y^3]: Var:=[x,y,z]: F:=[x[3]*x[1], x[2]*x[1], x[1]^2, x[2]^2*x[3], x[2]^3]: Var:=[x[1], x[2], x[3]]: F:=[x^10*y, x^11, x^9*y^3, x^8*y^5, x^7*y^7, x^6*y^9, x^5*y^11, x^4*y^13, x^3*y^15, x^2*y^17, x*y^19, y^21]: Var:=[x,y,t,h]: F:=[x1^2,x1*x2,x2^3,x1*x3,x2^2*x3]: Var:=[x1,x2,x3]: F:=[x2*x3, x2^2, x1*x2, x1^2*x2, x1^3]: Var:=[x1,x2,x3]: F:=[x0^3*x3, x0^2*x2^2, x0^3*x2, x1^4, x0^2*x1^2, x0^3*x1, x0^4, x0^3*x4^2, x1*x0^2*x2^2, x0*x1^4, x1^3*x2^5, x0*x1^3*x2^5]: Var:=[x0, x1, x2, x3, x4]: