|This article is about a function in ApCoCoA-2.0.|
Computes a truncated SAGBI-basis of a standard-graded subalgebra.
SB.SAGBI(G: LIST of POLY,d: RAT): LIST of POLY
SB.SAGBI(G: LIST of POLY,d: RAT, HS: PSERIES): LIST of POLY
This function computes a d-truncated SAGBI-basis of the subalgebra S generated by the polynomials in the list G, i.e. a set of polynomials F such that any term appearing as the leading term of a polynomial in S of degree smaller than or equal to d is a product of terms appearing as leading term of a polynomial in F.
If additionally, the Hilbert series of K[G] is given, then the SAGBI basis is computed Hilbert-driven.
@param G A list of homogeneous polynomials which generates a subalgebra.
@param d An integer specifying the truncation degree.
@param HS (optional) The Hilbert Series of K[G].
@return A tuple [L,b] where L is a list of polynomials which form a d-truncated finite SAGBI-basis of the subalgebra generated by G. b is a boolean value which is true if L is already a complete SAGBI basis.
Use QQ[x,y,z], DegRevLex; S := SB.TruncSAGBI([x^2 -z^2, x*y +z^2, y^2 -2*z^2],3); indent(S); -- [ -- [y^2 -2*z^2, x*y +z^2, x^2 -z^2], -- false -- ]
Use QQ[x,y], Lex; S := SB.TruncSAGBI([x +y, x*y, x*y^2],7); -- K[x+y,xy,xy^2] does not have a finite SAGBI basis indent(S); -- [ -- [x +y, x*y, x*y^2, x*y^3, x*y^4, x*y^5, x*y^6], -- false -- ]
Use QQ[x,y], DegLex; L := [x, x*y -y^2, x*y^2]; t0 := CpuTime(); s1 := SB.TruncSAGBI(L,30); t1 := CpuTime(); HS := SB.SubalgebraHS(L); s2 := SB.TruncSAGBI(L,30,HS); t2 := CpuTime(); PrintLn "Normal: ", FloatStr(t1-t0); PrintLn "Hilbert-driven: ", FloatStr(t2-t1); -- should be faster