# Singular

### A.2.1 groebner and std

The basic version of Buchberger's algorithm leaves a lot of freedom in carrying out the computational process. Considerable improvements are obtained by implementing criteria for reducing the number of S-polynomials to be actually considered (e.g., by applying the product criterion or the chain criterion). We refer to Cox, Little, and O'Shea [1997], Chapter 2 for more details and references on these criteria and on further strategies for improving the performance of Buchberger's algorithm (see also Greuel, Pfister [2002]).

SINGULAR's implementation of Buchberger's algorithm is available via the `std` command ('std' referring to `st`an`d`ard basis). The computation of reduced Groebner and standard bases may be forced by setting `option(redSB)` (see option).

However, depending on the monomial ordering of the active basering, it may be advisable to use the `groebner` command instead. This command is provided by the SINGULAR library `standard.lib` which is automatically loaded when starting a SINGULAR session. Depending on some heuristics, `groebner` either refers to the `std` command (e.g., for rings with ordering `dp`), or to one of the algorithms described in the sections Groebner basis conversion, slim Groebner bases. For information on the heuristics behind `groebner`, see the library file `standard.lib` (see also Procedures and libraries).

We apply the commands `std` and `groebner` to compute a lexicographic Groebner basis for the ideal of cyclic roots over the basering with 6 variables (see Cyclic roots). We set `option(prot)` to make SINGULAR display some information on the performed computations (see option for an interpretation of the displayed symbols). For long running computations, it is always recommended to set this option.

 ```LIB "poly.lib"; ring r=32003,(a,b,c,d,e,f),lp; ideal I=cyclic(6); option(prot); int t=timer; system("--ticks-per-sec", 100); // give time in 1/100 sec ideal sI=std(I); ==> [1023:1]1(5)s2(4)s3(3)s4s(4)s5(6)s(9)s(11)s(14)s(17)-s6s(19)s(21)s(24)s(2\ 7)s(30)s(33)s(35)s(38)s(41)ss(42)-s----s7(41)s(43)s(46)s(48)s(51)s(54)s(5\ 6)s(59)s(62)s(63)s(65)s(66)s(68)s(70)s(73)s(75)s(78)---ss(81)-----------s\ (73)--------8-s(66)s(69)s(72)s(75)s(77)s(80)s(81)s(83)s(85)s(88)s(91)s(93\ )s(96)s(99)s(102)s(105)s(107)s(110)s(113)-------------(100)-----------s(1\ 01)s(108)s(110)----------(100)--------9-s(94)s(97)s(99)s(84)s(74)s(77)s(8\ 0)---ss(83)s(86)s(73)s(76)s10(78)s(81)s(82)s(84)s(86)s(89)s(92)s(94)s(97)\ s(100)s(103)s(82)s(84)s(86)s(89)s(92)s(95)s11(98)s(87)s(90)s(93)s(95)s(98\ )s(101)s(104)----(100)---12-s(99)s(90)s(93)s(92)---------s(86)-----------\ 13-s(74)s(77)s(79)s(82)s(85)s(88)------------------14-s(64)s(67)ss(70)s(7\ 3)s(77)s(81)-----------------------15-s(57)s(65)s(68)ss(71)--------------\ ---s(57)----16-s(55)ss(56)------------------------17-s(34)s(32)--------18\ -s(26)s(28)s-----19-s(25)s(28)s(31)------20-s(27)s(30)s(35)-------21-s(23\ )s(26)------22-s(22)------23-s(15)24-s(17)-s(19)--25-s(18)s(19)s26-s(21)-\ --------27-s(11)28-s(13)--29-s(12)-30--s--31-s(11)---32-s33(7)s(10)---34-\ s-35----36-s37(6)s38s39s40---42-s43(5)s44s45--48-s49s50s51---54-s55(4)--6\ 7-86- ==> product criterion:664 chain criterion:2844 timer-t; // used time (in 1/100 secs) ==> 11 size(sI); ==> 17 t=timer; sI=groebner(I); ==> compute hilbert series with std in ring (ZZ/32003),(a,b,c,d,e,f,@),(dp(7)\ ,C) ==> weights used for hilbert series: 1,1,1,1,1,1,1 ==> [511:1]1(5)s2(4)s3(3)s4ss5(4)s(5)s(7)-s6(8)s(9)s(11)s(13)s(16)s(18)s(21)-\ -s7(22)s(23)s(24)s(27)s(29)s(31)s(32)s(35)-s(37)s(40)s(42)s(44)s(45)--s(4\ 6)s(48)-----8-s(44)s(47)s(50)s(52)s(55)s(57)s(59)s(61)-s(63)----s(62)----\ s(61)s(64)-s(66)-----------s(58)-------9-s(53)s(56)s(59)s(62)s(65)s(68)s(\ 71)s(74)s(77)s(80)s(83)s(86)s(90)s(95)s(102)s(108)--------(100)----------\ ------------s(81)---10-s(83)s(88)s(90)s(94)s(99)s(104)s(109)s(114)-s(116)\ s(121)s(126)s(128)s(132)--------------------------------(100)------------\ --11-s(87)---------------------------------------12-s(50)--------13-s(44)\ s(47)s(51)s(55)-------------14-s(45)s(48)s(51)s(55)s(58)s(61)s(64)s(67)s(\ 70)--------------------15-s(52)s(55)s(58)s(61)s(64)s(67)s(70)s(73)s(76)s(\ 79)s(82)-------------------------------------16--------------------------\ ------------------17- ==> product criterion:284 chain criterion:4184 ==> std with hilb in (ZZ/32003),(a,b,c,d,e,f,@),(lp(6),dp(1),C) ==> [511:1]1(98)s2(97)s3(96)s4s(97)-s5(98)s(101)s(103)s(106)s(109)---s6(107)s\ (109)s(111)s(114)s(117)s(120)s(123)s(125)s(128)s(131)ss(132)-s----------s\ 7(125)s(127)s(130)s(132)s(135)s(138)s(140)s(143)s(146)s(147)s(149)s(150)s\ (152)s(154)s(157)s(159)s(162)---ss(165)-----------shhhhhhhhhhhhhhhhhhhhhh\ h8(134)s(136)s(139)s(142)s(145)s(147)s(150)s(151)s(153)s(155)s(158)s(161)\ s(163)s(166)s(169)s(172)s(175)s(177)s(180)s(183)------------------------s\ (171)s(178)shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh9(147)s(150)s(153)s(155)s(18\ 1)s(184)s(187)s(190)s(203)s(208)s(213)s(217)s(218)s(220)s(222)s(225)---s-\ s(226)-----------s(219)---------shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh\ hhhhhhhhh10(163)s(166)s(168)s(171)s(177)s(180)s(183)s(186)shhhhhhhhhhhhhh\ hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh11(125)s(128)s(130)\ s(133)s(136)shhhhhhhhhhhhhhhhhhhhhhhhhhhhh12(110)s(113)s(120)s(123)s(127)\ -------------shhhhhhhhhhhhhhh13(102)s(106)s(109)s(111)s(114)s(117)----shh\ hhhhhhhhhhhhhhhhhhhhhhhhhhhhh14(85)s(90)s(93)s(97)s(100)s(103)---(100)-s(\ 103)shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh15(68)s(72)s(75)s(79)s(85)---\ -shhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh16(42)s(45)s(49)shhhhhhhhhhh\ hhhhhhhhhhh17(34)s(37)shhhhhhhhhhhhhh18(27)s(30)s(32)-shhhhhhhhh19(26)s(2\ 9)s(32)shhhhhhhhhhhhh20(22)s(25)s(28)shhhhhhhhhhhhh21(20)s(26)shhhhhhhhhh\ hh22(18)shhhhhhhhh23(12)shhhhh24(11)s(14)-shhhh25(13)s(18)-s(21)shhhhhhh2\ 6(18)shhhhhhhhhhhh27(9)shhhhh28(8)shhhh29(7)shhhh30(8)-shhh31shhhhh32(7)s\ hhhh33shhhh34(6)shhhhhhhh36(2)s37(6)shhhh38shhhh39shhhhhhhh42(2)s43(5)shh\ hh44shhhhhhhh48s49shhhh50shhhhhhhh54shhhhh ==> product criterion:720 chain criterion:11620 ==> hilbert series criterion:532 ==> dehomogenization ==> simplification ==> imap to ring (ZZ/32003),(a,b,c,d,e,f),(lp(6),C,L(1048575)) timer-t; // used time (in 1/100 secs) ==> 4 size(sI); ==> 17 option(noprot); ```