# patch -- patch together local solutions to eliminate a variable

## Synopsis

• Usage:
patch(L,var)
• Inputs:
• L, a list, a list of local solutions to the unimodular row problem for some unimodular row f
• var, , the current variable to eliminate
• Optional inputs:
• Verbose (missing documentation) => an integer, default value 0, which controls the level of output of the method (0, 1, 2, 3, or 4)
• Outputs:
• , a unimodular matrix U so that f*U is the same as evaluating f when var = 0

## Description

Given a unimodular row f over a polynomial ring R[x_1,\ldots,x_n] (where R is either QQ, ZZ, or ZZ/p) one can compute a collection of matrices \{U_i\}^r_{i=1} and maximal ideals m_1,\ldots,m_r so that:

1. Each U_i is unimodular over (R[x_1,\ldots,x_{n-1}]_{m_i})[x_n] ,

2. Each U_i solves the unimodular row problem for f in (R[x_1,\ldots,x_{n-1}]_{m_i})[x_n], and

3. Letting d_i denote the common denominator of the entries of U_i in R[x_1,\ldots,x_{n-1}] , we have (d_1,\ldots,d_r) = R[x_1,\ldots,x_{n-1}].

One can accomplish this, for example, by repeatedly using getMaxIdeal and horrocks as in the following example.

 i1 : R = ZZ[x,y] o1 = R o1 : PolynomialRing i2 : f = matrix{{y^3+2*x*y^2,3*y+1,x^3}} o2 = | 2xy2+y3 3y+1 x3 | 1 3 o2 : Matrix R <--- R i3 : isUnimodular f o3 = true i4 : m1 = getMaxIdeal(ideal(0_R),{x}) o4 = ideal (2, x) o4 : Ideal of R i5 : L1 = horrocks(f,y,m1) o5 = | 27/(6x-1) (-27y-9)/(6x-1) | (-18xy-9y2+6x+3y-1)/(6x-1) (18xy2+9y3)/(6x-1) | 0 0 ------------------------------------------------------------------------ (-27x3)/(6x-1) | (18x4y+9x3y2-6x4-3x3y+x3)/(6x-1) | 1 | 3 3 o5 : Matrix (frac R) <--- (frac R) i6 : m2 = getMaxIdeal(sub(ideal(6*x-1),R),{x}) o6 = ideal (x - 1, 5) o6 : Ideal of R i7 : L2 = horrocks(f,y,m2) o7 = | 0 0 1 | | 0 1 0 | | 1/x3 (-3y-1)/x3 (-2xy2-y3)/x3 | 3 3 o7 : Matrix (frac R) <--- (frac R) i8 : sub(ideal(6*x-1,x^3),R) == ideal(1_R) o8 = true i9 : L = {L1,L2} o9 = {| 27/(6x-1) (-27y-9)/(6x-1) | (-18xy-9y2+6x+3y-1)/(6x-1) (18xy2+9y3)/(6x-1) | 0 0 ------------------------------------------------------------------------ (-27x3)/(6x-1) |, | 0 0 1 |} (18x4y+9x3y2-6x4-3x3y+x3)/(6x-1) | | 0 1 0 | 1 | | 1/x3 (-3y-1)/x3 (-2xy2-y3)/x3 | o9 : List

Once we have constructed a list L of local solutions of the unimodular row problem for f, we can use patch to create a matrix U so that the product fU is the same as f evaluated at y=0.

 i10 : U = patch(L,y) o10 = | 45349632x8y3+7558272x7y3+1259712x6y3+419904x6y2-1944x3y2-648x3y | -30233088x9y4-15116544x8y5+10077696x9y3-2519424x7y5-419904x6y5- | -10077696x6y3-93312x4y2 ----------------------------------------------------------------------- +3y+1 279936x7y3+93312x7y2+1296x4y3+648x3y4-2xy2-y3 ----------------------------------------------------------------------- 2916x2y+486xy+81y 0 | -1944x3y2-972x2y3+648x3y-162xy3-27y3+9y2-3y+1 0 | -648y 1 | 3 3 o10 : Matrix R <--- R i11 : isUnimodular U o11 = true i12 : f*U o12 = | 0 1 x3 | 1 3 o12 : Matrix R <--- R i13 : sub(f,{y => 0}) o13 = | 0 1 x3 | 1 3 o13 : Matrix R <--- R