| ##### 7.5.1.0. bitrinity Procedure from library `bimodules.lib` (see bimodules_lib). Usage: bitrinity(M); M is (two-sided) ideal/module Return: ring, the enveloping algebra of the basering, with objects in it. additionally it exports a list L = Coeff, Bisyz. Theory: Let psi_s be the epimorphism of left R (X) R^{opp} modules: psi_s(s (X)_K t) = smt := (s_1 m t_1, ... , s_s m t_s) = (\psi(s_1 (X) t_1) , \dots , psi(s_s (X) t_s)) in R^s. Then psi_s(A) := (psi_s(a_{ij})) for every matrix A in Mat(n x m, R)$. For a two-sided ideal I = < f_1, ... , f_j> with Groebner basis G = {g_1, ... , g_k} in R, Coeff is the Coefficient-Matrix and BiSyz a bisyzygy matrix. Let C be the submatrix of Coeff, where C is Coeff without the first row. Then (g_1,...,g_k) = psi_s(C^T * (f_1 ... f_j)^T) and (0,...,0) = psi_s(BiSyz^T * (f_1 ... f_j)^T). The first row of Coeff (G_1 ... G_n)$ corresponds to the image of the Groebner basis of I: psi_s((G_1 ... G_n)) = G = {g_1 ... g_k }. For a (R,R)-bimodule M with Groebner basis G = {g_1, ... , g_k} in R^r, Coeff is the coefficient matrix and BiSyz a bisyzygy matrix. Let C be the submatrix of Coeff, where C is Coeff without the first r rows. Then (g_1 ... g_k) = psi_s(C^T * (f_1 ... f_j)^T) and (0 ... 0) = psi_s(BiSyz^T * (f_1 ... f_j)^T). The first r rows of Coeff = (G_1 ... G_n) (Here G_i denotes to the i-th column of the first r rows) corresponds to the image of the Groebner basis of M: psi_s((G_1 ... G_n)) = G = {g_1 ... g_k}. Purpose: This procedure returns a coefficient matrix in the enveloping algebra of the basering R, that gives implicitly the two-sided Groebner basis of a (R,R)-bimodule M and the coefficients that produce the Groebner basis with the help of the originally used generators of M. Additionally it calculates the bisyzygies of M as left-module of the enveloping algebra of R. Auxiliary procedures: Note: To get list L = Coeff, BiSyz, we set: def G = bitrinity(); setring G; L; or $L[1]; L[2];. Example:
    LIB "bimodules.lib";
    ring r = 0,(x,s),dp;
    def R = nc_algebra(1,s); setring R; // 1st shift algebra
    poly f = x*s + s^2; // only one generator
    ideal I = f; // note, two sided Groebner basis of I is xs, s^2
    def G = bitrinity(I);
    setring G;
    print(L[1]); // Coeff
    ==> S2, SX,
    ==> s-S,-s+S+1
    //the first row shows the Groebnerbasis of I consists of
    // psi_s(SX) = xs , phi(S^2) = s^2:
    // remember phi(a (X) b - c (X) d) = psi_s(a (X) b) - phi(c (X) d) := ab - cd in R.
    // psi_s((-s+S+1)*(x*s + s^2)) = psi_s(-xs2-s3+xsS+xs+s2S)
    // = -xs^2-s^3+xs^2+xs+s^3 = xs
    // psi_s((s-S)*(x*s + s^2)) = psi_s(xs2+s3-xsS-s2S+s2) = s^2
    print(L[2]);  //Bisyzygies
    ==> sX+sS-2s-SX-S2,x+s-X-S+1,s2-2sS+S2
    // e.g. psi_s((x2-2sS+s-X2+2S2+2X+S-1)(x*s + s^2))
    // = psi_s(x3s+x2s2-2xs2S+xs2-2s3S+s3-xsX2+2xsS2+2xsX+xsS-xs-s2X2+2s2S2+2s2X-s2S)
    // = x^3s+x^2s^2-2xs^3+xs^2-2s^4+s^3-xsx^2+2xs^3+2xsx+xs^2-xs-s^2x^2+2s^4+2s^2x-s^3
    // = 0 in R

User manual for Singular version 4.3.2, 2023, generated by texi2html.