Singular

Home Online Manual
Top
Back: getdump
Forward: help
FastBack: Functions and system variables
FastForward: Control structures
Up: Functions
Top: Singular Manual
Contents: Table of Contents
Index: Index
About: About this document

5.1.47 groebner

Procedure from library standard.lib (see standard_lib).

Syntax:
groebner ( ideal_expression )
groebner ( module_expression )
groebner ( ideal_expression, int_expression )
groebner ( module_expression, int_expression )
groebner ( ideal_expression, list of string_expressions )
groebner ( ideal_expression, list of string_expressions and int_expression )
groebner ( ideal_expression, 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).
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.

Note:
If an additional argument, say wait, of type int is given, then the computation runs for at most wait seconds. That is, if no result could be computed in wait seconds, then the computation is interrupted, 0 is returned, a warning message is displayed, and the global variable Standard::groebner_error is defined. This feature uses MP and hence it is available on UNIX platforms, only.

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 (0),(a,b,c,d),(dp(4),C)
==> [255: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 (0),(a,b,c,d,@),(dp(5),C)
==> weights used for hilbert series: 1,1,1,1,1
==> [63:1]1(3)s2(2)s3s4-s5ss6-s7--
==> product criterion:8 chain criterion:5
==> std with hilb in (0),(a,b,c,d,@),(lp(4),dp(1),C)
==> [63:1]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 (0),(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 (0),(b,c,d,a,@),(dp(5),C)
==> weights used for hilbert series: 1,1,1,1,1
==> slimgb in ring (0),(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 (0),(b,c,d,a,@),(lp(3),dp(1),dp(1),C)
==> [63:1]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 (0),(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)
==> [1023: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);
See also: slimgb; std; stdfglm; stdhilb.