### 7.6.4 Example of use of LETTERPLACE

The input monomials must be given in a letterplace notation (though we recommend to get used to the letterplace notation, the procedure `freeGBasis` from the freegb_lib provides an alternative).

We recommend first to define a commutative ring in SINGULAR and equip it with a degree well-ordering. Then, decide what should be the degree bound d and run the procedure `makeLetterplaceRing(d)` from the library freegb_lib. This procedure creates a letterplace algebra with an ordering, induced from the given commutative ring . In this algebra, define an ideal `I` as a list of polynomials in the letterplace encoding and run the procedure `letplaceGBasis`. The output is given in the letterplace encoding as well.

Alternatively, one can run the procedure `system("freegb",I,d,n)`, where is the number of variables of the original commutative ring which does the same computations as `letplaceGBasis`.

It is possible to convert the letterplace presentation of an ideal to a list of strings with the help of procedures `lp2lstr` and `lst2str` from the library freegb_lib. This is shown in the second part of the example below.

Yet another anternative is to use the procedure `freeGBasis` from freegb_lib in order to use a different encoding for polynomials in free algebra. No conversion tools are needed in that case.

We illustrate the approach with the following example:

    LIB "freegb.lib";
    ring r = 0,(x,y,z),dp;
    int d =4; // degree bound
    def R = makeLetterplaceRing(d);
    setring R;
    ideal I = x(1)*y(2) + y(1)*z(2), x(1)*x(2) + x(1)*y(2) - y(1)*x(2) - y(1)*y(2);
    option(redSB); option(redTail);
    ideal J = letplaceGBasis(I);
    J;
    ==> J[1]=x(1)*y(2)+y(1)*z(2)
    ==> J[2]=x(1)*x(2)-y(1)*x(2)-y(1)*y(2)-y(1)*z(2)
    ==> J[3]=y(1)*y(2)*y(3)-y(1)*y(2)*z(3)+y(1)*z(2)*y(3)-y(1)*z(2)*z(3)
    ==> J[4]=y(1)*y(2)*x(3)+y(1)*y(2)*z(3)+y(1)*z(2)*x(3)+y(1)*z(2)*z(3)
    ==> J[5]=y(1)*z(2)*y(3)*y(4)-y(1)*z(2)*y(3)*z(4)+y(1)*z(2)*z(3)*y(4)-y(1)*z(2\
       )*z(3)*z(4)
    ==> J[6]=y(1)*z(2)*y(3)*x(4)+y(1)*z(2)*y(3)*z(4)+y(1)*z(2)*z(3)*x(4)+y(1)*z(2\
       )*z(3)*z(4)
    ==> J[7]=y(1)*y(2)*z(3)*y(4)-y(1)*y(2)*z(3)*z(4)+y(1)*z(2)*z(3)*y(4)-y(1)*z(2\
       )*z(3)*z(4)
    ==> J[8]=y(1)*y(2)*z(3)*x(4)+y(1)*y(2)*z(3)*z(4)+y(1)*z(2)*z(3)*x(4)+y(1)*z(2\
       )*z(3)*z(4)
    // ----------------------------------
    lp2lstr(J,r); // export an object called @code{@LN} to the ring r
    setring r;  // change to the ring r
    lst2str(@LN,1); // output the string presentation
    ==> [1]:
    ==>    x*y+y*z
    ==> [2]:
    ==>    x*x-y*x-y*y-y*z
    ==> [3]:
    ==>    y*y*y-y*y*z+y*z*y-y*z*z
    ==> [4]:
    ==>    y*y*x+y*y*z+y*z*x+y*z*z
    ==> [5]:
    ==>    y*z*y*y-y*z*y*z+y*z*z*y-y*z*z*z
    ==> [6]:
    ==>    y*z*y*x+y*z*y*z+y*z*z*x+y*z*z*z
    ==> [7]:
    ==>    y*y*z*y-y*y*z*z+y*z*z*y-y*z*z*z
    ==> [8]:
    ==>    y*y*z*x+y*y*z*z+y*z*z*x+y*z*z*z

There are various conversion routines in the library `freegb_lib` (see freegb_lib). We work further on implementing more algorithms for non-commutative ideals and modules over free associative algebra.

User manual for Singular version 4-0-3, 2016, generated by texi2html.