
7.7.1.0. liftenvelope
Procedure from library bimodules.lib (see bimodules_lib).
 Usage:
 liftenvelope(M,g); M ideal/module, g poly
 Return:
 ring, the enveloping algebra of the basering R.
Given a twosided ideal M in R and a polynomial g in R this procedure returns the enveloping algebra of R.
Additionally it exports a list l = C, B; where B is the left Groebner basis of the leftsyzygies of M \otimes 1 and C is a vector of coefficients in the enveloping algebra
of R such that psi_s(C^T *(f_1 \dots f_n)) = g.
psi_s is an 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)$.
 Assume:
 The second component has to be an element of the first component.
 Purpose:
 This procedure is used for computing total divisors. Let {f_1, ..., f_n} be the generators of the first component and let the second component be called g. Then
the returned list l = C, B = (b_1, ..., b_n); defines an affine set A = C + sum_i a_i b_i with (a_1,..,a_n) in the enveloping algebra of the basering R such that
psi_s(a^T * (f_1 ... f_n)) = g for all a in A. For certain rings R, we csn find pure tensors within this set A,
and if we do, liftenvelope() helps us to decide whether f is a total divisor of g.
 Note:
 To get list l = C, B. we set: def G = liftenvelope(); 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;
ideal I = x*s;
poly p = s*x*s*x; // = (s (x) x) * x*s = (sX) * x*s
p;
==> x2s2+3xs2+2s2
def J = liftenvelope(I,p);
setring J;
print(l[1]);
==> 0
//2s+SX = (2s (x) 1) + (1 (x) sx)
print(l[2]);
==> sX2sSX,xX+1,s22sS+S2
// Groebnerbasis of BiSyz(I) as LeftSyz in R^{env}
// We get : 2s+SX + ( sX  2s SX) = sX  a pure tensor!!!!

