# changeVar -- computes a change of variables which make the first entry of a unimodular row monic in a specified variable

## Synopsis

• Usage:
(A,B,C) = changeVar(U,L)
• Inputs:
• U, , a unimodular row
• L, a list, the variables appearing in the matrix, ordered so that the first entry of the new row will become monic in the last variable in the list
• 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, , a unimodular matrix that when multiplied by the row will make the first entry monic after the change of variables
• B, , change of variables
• C, , inverse change of variables

## Description

The purpose of changeVar is to compute a unimodular matrix A and an invertible change of variables (given as a matrix B with the inverse change of variables given by C) so that after multiplying the given unimodular row U by A and applying the substitution B (with sub(U*A,B)), the first entry of the new row becomes monic in the last variable in the list L.

This method is primarily used before applying horrocks, since horrocks requires the first entry of the unimodular row to be monic in the given variable.

 i1 : R = ZZ[x] o1 = R o1 : PolynomialRing i2 : U = matrix{{12*x^2+20*x+7,4*x^2+12*x+5,12*x^2+44*x+35}} o2 = | 12x2+20x+7 4x2+12x+5 12x2+44x+35 | 1 3 o2 : Matrix R <--- R i3 : isUnimodular U o3 = true i4 : (A,B,C) = changeVar(U,{x}) o4 = (| 3024x18+63720x17-952320x16-15154128x15+107756844x14+479809876x13+3995 | -504x13-15996x12-10056x11+2511768x10+9939946x9+16560274x8-699416978x7 | -3024x18-57672x17+1064640x16+12968688x15-132601500x14-202184380x13-37 ------------------------------------------------------------------------ 606820x12-39391285472x11-58650473936x10+102412518582x9+116188662804x8+ -1487252938x6-4031638520x5-5360330891x4-1814067042x3 30045168x12+46718607960x11-38451238904x10+23035969708x9-224995699378x8 ------------------------------------------------------------------------ 1077893682748x7+684018133334x6-1471276697626x5 -573273666782x7+211144844680x6+603448147606x5+ ------------------------------------------------------------------------ -1009133585930x4-116618595557x3 1 0 |, | x |, | 0 1 | 240206603531x4+23582871546x3+1 0 6x5-76x4+180x3-26x2-94x-13 | ------------------------------------------------------------------------ x |) o4 : Sequence i5 : U' = sub(U*A,B) o5 = | x3+12x2+44x+35 12x2+20x+7 ------------------------------------------------------------------------ 72x7-648x6-974x5+4948x4+4028x3-5198x2-3850x-450 | 1 3 o5 : Matrix R <--- R i6 : isUnimodular U' o6 = true

Notice that after multiplying U by the unimodular matrix A and applying the change of variables B (using the substitute command), the first entry in U' above is now monic in x.

The order of the variables given in the list matter, as changeVar will construct a change of variable so that the new unimodular row is monic in the last variable of the list.

In the next example, since we are using the command changeVar(U,{x,y}) the first entry in the row sub(U*A,B) will be monic in y.

 i7 : R = ZZ/7[x,y] o7 = R o7 : PolynomialRing i8 : U = matrix{{2*x^2*y+x*y+1,3*x^2*y^2+x*y,5*x^3*y^2+x*y}} o8 = | 2x2y+xy+1 3x2y2+xy -2x3y2+xy | 1 3 o8 : Matrix R <--- R i9 : isUnimodular U o9 = true i10 : (A,B,C) = changeVar(U,{x,y}) o10 = (| -3 0 0 |, | y x+y |, | -x+y x |) | 0 1 0 | | 0 0 1 | o10 : Sequence i11 : U' = sub(U*A,B) o11 = | xy2+y3-3xy-3y2-3 3x2y2-xy3+3y4+xy+y2 -2x2y3+3xy4-2y5+xy+y2 | 1 3 o11 : Matrix R <--- R i12 : isUnimodular U' o12 = true

One can also check that the inverse change of variables, C, will give the matrix U*A, undoing the change of variables given by B.

 i13 : U'' = sub(U',C) o13 = | x2y-3xy-3 3x2y2+xy -2x3y2+xy | 1 3 o13 : Matrix R <--- R i14 : U'' == U*A o14 = true