# computeFreeBasis -- computes a free basis of a projective module

## Synopsis

• Usage:
computeFreeBasis M
• Inputs:
• M, , a projective module over a polynomial ring
• 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)
• CheckProjective => , default value false, which gives the user the option to check whether the given module is projective
• Outputs:
• , a free generating set for M

## Description

Using the fact that every finitely generated projective module over a polynomial ring R is isomorphic to the kernel of some surjection between free modules, we define a surjective R-linear map from R^3 \to \ R to get a projective module.

 i1 : R = QQ[x,y] o1 = R o1 : PolynomialRing i2 : M = matrix{{x^2*y+1,x+y-2,2*x*y}} o2 = | x2y+1 x+y-2 2xy | 1 3 o2 : Matrix R <--- R i3 : isUnimodular M o3 = true

Let P be the stably-free (and hence projective) kernel with rank 2. Notice that the first generator is a linear combination of the other two.

 i4 : P = ker M o4 = image {3} | 0 2x+2y-4 2y2-4y | {1} | 2xy -2x2y-2xy2+4xy-2 -2xy3+4xy2-2y | {2} | -x-y+2 xy+y2-2x-4y+4 y3-4y2+4y+1 | 3 o4 : R-module, submodule of R i5 : isProjective P o5 = true i6 : rank P o6 = 2 i7 : mingens P o7 = {3} | 0 -2x-2y+4 -2y2+4y | {1} | 2xy 2 2y | {2} | -x-y+2 x2+xy-2x xy2-2xy-1 | 3 3 o7 : Matrix R <--- R i8 : syz mingens P o8 = {3} | -1 | {4} | -y2+2y | {5} | x+y-2 | 3 1 o8 : Matrix R <--- R

Notice that the native command mingens does not return a free generating set. We can use computeFreeBasis to construct a free generating set for P.

 i9 : B = computeFreeBasis(P) o9 = {3} | -2x-2y+4 -2y2+4y | {1} | 2x2y+2xy2-4xy+2 2xy3-4xy2+2y | {2} | -xy-y2+2x+4y-4 -y3+4y2-4y-1 | 3 2 o9 : Matrix R <--- R i10 : image B == P o10 = true i11 : syz B o11 = 0 2 o11 : Matrix R <--- 0

## Ways to use computeFreeBasis :

• "computeFreeBasis(Ideal)"
• "computeFreeBasis(Module)"

## For the programmer

The object computeFreeBasis is .