### 5.1.53 groebner

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

Syntax:
`groebner (` ideal_expression `)`
`groebner (` module_expression `)`
`groebner (` ideal_expression`,` list of string_expressions `)`
`groebner (` ideal_expression`,` list of string_expressions and int_expression `)`

Type:
type of the first argument

Purpose:
computes a standard basis of the first argument `I` (ideal or module) by a heuristically chosen method (default) or by a method specified by further arguments of type string. Possible methods are:
- the direct methods `"std"` or `"slimgb"` without conversion,
- conversion methods `"hilb"` or `"fglm"` where a Groebner basis is first computed with an "easy" ordering and then converted to the ordering of the basering by the Hilbert driven Groebner basis computation or by linear algebra. The actual computation of the Groebner basis can be specified by `"std"` or by `"slimgb"` (not for all orderings implemented).
- `"HC"`: using the "high corner" from char p in char 0, finding a SB for 0-dimensional ideals in local orderings faster.
A further string `"par2var"` converts parameters to an extra block of variables before a Groebner basis computation (and afterwards back). `option(prot)` informs about the chosen method.

Hint:
Since there exists no uniform best method for computing standard bases, and since the difference in performance of a method on different examples can be huge, it is recommended to test, for hard examples, first various methods on a simplified example (e.g. use characteristic 32003 instead of 0 or substitute a subset of parameters/variables by integers, etc.).

Example:
 ``` intvec opt = option(get); option(prot); ring r = 0,(a,b,c,d),dp; ideal i = a+b+c+d,ab+ad+bc+cd,abc+abd+acd+bcd,abcd-1; groebner(i); ==> std in (QQ),(a,b,c,d),(dp(4),C) ==> [65535:2]1(3)s2(2)s3s4-s5ss6-s7-- ==> product criterion:8 chain criterion:5 ==> _[1]=a+b+c+d ==> _[2]=b2+2bd+d2 ==> _[3]=bc2+c2d-bd2-d3 ==> _[4]=bcd2+c2d2-bd3+cd3-d4-1 ==> _[5]=bd4+d5-b-d ==> _[6]=c3d2+c2d3-c-d ==> _[7]=c2d4+bc-bd+cd-2d2 ring s = 0,(a,b,c,d),lp; ideal i = imap(r,i); groebner(i,"hilb"); ==> compute hilbert series with std in ring (QQ),(a,b,c,d,@),(dp(5),C) ==> weights used for hilbert series: 1,1,1,1,1 ==> [1048575:2]1(3)s2(2)s3s4-s5ss6-s7-- ==> product criterion:8 chain criterion:5 ==> std with hilb in (QQ),(a,b,c,d,@),(lp(4),dp(1),C) ==> [1048575:2]1(6)s2(5)s3(4)s4-s5sshh6(3)shhhhh8shh ==> product criterion:9 chain criterion:8 ==> hilbert series criterion:9 ==> dehomogenization ==> simplification ==> imap to ring (QQ),(a,b,c,d),(lp(4),C) ==> _[1]=c2d6-c2d2-d4+1 ==> _[2]=c3d2+c2d3-c-d ==> _[3]=bd4-b+d5-d ==> _[4]=bc-bd5+c2d4+cd-d6-d2 ==> _[5]=b2+2bd+d2 ==> _[6]=a+b+c+d ring R = (0,a),(b,c,d),lp; minpoly = a2+1; ideal i = a+b+c+d,ab+ad+bc+cd,abc+abd+acd+bcd,d2-c2b2; groebner(i,"par2var","slimgb"); ==> //add minpoly to input ==> compute hilbert series with slimgb in ring (QQ),(b,c,d,a,@),(dp(5),C) ==> weights used for hilbert series: 1,1,1,1,1 ==> slimgb in ring (QQ),(b,c,d,a,@),(dp(5),C) ==> CC2M[2,2](2)C3M[1,1](2)4M[2,e1](2)C5M[2,e2](3)C6M[1,1](0) ==> NF:8 product criterion:15, ext_product criterion:3 ==> std with hilb in (QQ),(b,c,d,a,@),(lp(3),dp(1),dp(1),C) ==> [1048575:2]1(7)s2(6)s(5)s3(4)s4-s5sshh6(3)shhhhh ==> product criterion:15 chain criterion:5 ==> hilbert series criterion:7 ==> dehomogenization ==> simplification ==> imap to ring (QQ),(b,c,d,a),(lp(3),dp(1),C) ==> //simplification ==> (S:4)rtrtrtr ==> //imap to original ring ==> _[1]=d2 ==> _[2]=c+(a) ==> _[3]=b+c+d+(a) groebner(i,"fglm"); //computes a reduced standard basis ==> std in (0,a),(b,c,d),(dp(3),C) ==> [1048575:2]1(3)s2(2)s3s4-s5ss6-s7 ==> (S:2)-- ==> product criterion:9 chain criterion:1 ==> ..+++-- ==> vdim= 2 ==> ..++-+- ==> _[1]=d2 ==> _[2]=c+(a) ==> _[3]=b+d option(set,opt); ring Rt = (0,t),(x,y,z),ds; poly F = y10+(t2)*x7y7+x15+x9y6+(2t)*x6y9+x6y6z3+x5y11+z21; ideal I = jacob(F); I=groebner(I,"HC","prot"); ==> computing HC in char 32003 ==> found HC in char 32003: x7y2z38 ==> computing std with HC ```