# Singular

### 5.1.149 stdhilb

Procedure from library `standard.lib` (see standard_lib).

Syntax:
`stdhilb (` ideal_expression `)`
`stdhilb (` module_expression `)`
`stdhilb (` ideal_expression, intvec_expression `)`
`stdhilb (` module_expression, intvec_expression `)`
`stdhilb (` ideal_expression`,` list of string_expressions, and intvec_expression `)`

Type:
type of the first argument

Purpose:
Compute a Groebner basis of the ideal/module in the basering by using the Hilbert driven Groebner basis algorithm. If an argument of type string, stating `"std"` resp. `"slimgb"`, is given, the standard basis computation uses `std` or `slimgb`, otherwise a heuristically chosen method (default)
If an optional second argument w of type intvec is given, w is used as variable weights. If w is not given, it is computed as w[i] = deg(var(i)). If the ideal is homogeneous w.r.t. w then the Hilbert series is computed w.r.t. to these weights.

Theory:
If the ideal is not homogeneous compute first a Groebner basis of the homogenization [w.r.t. the weights w] of the ideal/module, then the Hilbert function and, finally, a Groebner basis in the original ring by using the computed Hilbert function. If the given w does not coincide with the variable weights of the basering, the result may not be a groebner basis in the original ring.

Note:
'Homogeneous' means weighted homogeneous with respect to the weights w[i] of the variables var(i) of the basering. Parameters are not converted to variables.

Example:
 ``` ring r = 0,(x,y,z),lp; ideal i = y3+x2,x2y+x2z2,x3-z9,z4-y2-xz; ideal j = stdhilb(i); j; ==> j=z10 ==> j=yz9 ==> j=2y2z4-z8 ==> j=2y3z3-2y2z5-yz7 ==> j=y4+y3z2 ==> j=xz+y2-z4 ==> j=xy2-xz4-y3z ==> j=x2+y3 ring r1 = 0,(x,y,z),wp(3,2,1); ideal i = y3+x2,x2y+x2z2,x3-z9,z4-y2-xz; //ideal is homogeneous ideal j = stdhilb(i,"std"); j; ==> j=y2+xz-z4 ==> j=x2-xyz+yz4 ==> j=2xz5-z8 ==> j=2xyz4-yz7+z9 ==> j=z10 ==> j=2yz9+z11 //this is equivalent to: intvec v = hilb(std(i),1); ideal j1 = std(i,v,intvec(3,2,1)); j1; ==> j1=y2+xz-z4 ==> j1=x2-xyz+yz4 ==> j1=2xz5-z8 ==> j1=2xyz4-yz7+z9 ==> j1=z10 ==> j1=yz9 size(NF(j,j1))+size(NF(j1,j)); //j and j1 define the same ideal ==> 0 ``` 