# Singular

##### 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 two-sided 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 left-syzygies 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]); ==> sX-2s-SX,x-X+1,s2-2sS+S2 // Groebnerbasis of BiSyz(I) as LeftSyz in R^{env} // We get : 2s+SX + ( sX - 2s -SX) = sX - a pure tensor!!!!