# Singular

### 7.3.25 slimgb (plural)

`Syntax:`
`slimgb (` ideal_expression`)`
`slimgb (` module_expression`)`

`Type:`
same type as argument
`Purpose:`
returns a left Groebner basis of a left ideal or module with respect to the global monomial ordering of the basering.
`Note:`
The commutative algorithm is described in the diploma thesis of Michael Brickenstein "Neue Varianten zur Berechnung von Groebnerbasen", written 2004 under supervision of G.-M. Greuel in Kaiserslautern.

It is designed to keep polynomials or vectors slim (short with small coefficients). Currently best results are examples over function fields (parameters).

The current implementation may not be optimal for weighted degree orderings.

The program only supports the options `prot`, which will give protocol output and `redSB` for returning a reduced Groebner basis. The protocol messages of `slimgb` mean the following:
`M[n,m]` means a parallel reduction of `n` elements with `m` non-zero output elements,
`b` notices an exchange trick described in the thesis and
`e` adds a reductor with non-minimal leading term.

`slimgb` works for grade commutative algebras but not for general GR-algebras. Please use `qslimgb` instead.

For a detailed commutative example see slim Groebner bases.

`Example:`
 ```LIB "nctools.lib"; LIB "ncalg.lib"; def U = makeUsl(2); // U is the U(sl_2) algebra setring U; ideal I = e^3, f^3, h^3-4*h; option(redSB); ideal J = slimgb(I); J; ==> J[1]=h3-4h ==> J[2]=fh2-2fh ==> J[3]=eh2+2eh ==> J[4]=2efh-h2-2h ==> J[5]=f3 ==> J[6]=e3 // compare slimgb with std: ideal K = std(I); print(matrix(NF(K,J))); ==> 0,0,0,0,0,0 print(matrix(NF(J,K))); ==> 0,0,0,0,0,0 // hence both Groebner bases are equal ; // another example for exterior algebras ring r; def E = Exterior(); setring E; E; ==> // characteristic : 32003 ==> // number of vars : 3 ==> // block 1 : ordering dp ==> // : names x y z ==> // block 2 : ordering C ==> // noncommutative relations: ==> // yx=-xy ==> // zx=-xz ==> // zy=-yz ==> // quotient ring from ideal ==> _[1]=z2 ==> _[2]=y2 ==> _[3]=x2 slimgb(xy+z); ==> _[1]=yz ==> _[2]=xz ==> _[3]=xy+z ```
See option; std (plural).