# Package sagbi/SB.TruncSAGBI

This article is about a function in ApCoCoA-2.0. |

## SB.TruncSAGBI

Computes a truncated SAGBI-basis of a standard-graded subalgebra.

### Syntax

SB.SAGBI(G: LIST of POLY,d: RAT): LIST of POLY

### Syntax

SB.SAGBI(G: LIST of POLY,d: RAT, HS: PSERIES): LIST of POLY

### Description

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.

#### Example

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 -- ]

#### Example

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 -- ]

#### Example

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

### See also

Package sagbi/SB.GetTruncSAGBI