# qsIsomorphism -- computes an isomorphism between a free module and a given projective module

## Synopsis

• Usage:
qsIsomorphism M
• Inputs:
• M, , a projective module over a polynomial ring with coefficients in QQ, ZZ, or ZZ/p for p a prime integer, or a Laurent polynomial ring over QQ or ZZ/p
• 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 module is projective
• Outputs:
• M, , which is an isomorphism from a free module to the given projective module M

## Description

Given a projective module M over a polynomial ring with coefficients in QQ, ZZ, or ZZ/p with p a prime integer, this method uses algorithms of Logar-Sturmfels and Fabianska-Quadrat to compute an isomorphism from a free module F to the projective module M. The following gives examples of constructing such isomorphisms in the cases where the module is a cokernel, kernel, image, or coimage of a unimodular matrix.

 i1 : R = ZZ/101[x,y,z] o1 = R o1 : PolynomialRing i2 : f = 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 f o3 = true i4 : P1 = coker transpose f -- Construct the cokernel of the transpose of f. o4 = cokernel {-3} | x2y+1 | {-1} | x+y-2 | {-2} | 2xy | 3 o4 : R-module, quotient of R i5 : isProjective P1 o5 = true i6 : rank P1 o6 = 2 i7 : phi1 = qsIsomorphism P1 o7 = {-3} | 50x 0 | {-1} | 0 1 | {-2} | -1 0 | o7 : Matrix i8 : isIsomorphism phi1 o8 = true i9 : image phi1 == P1 o9 = true i10 : P2 = ker f -- Construct the kernel of f. o10 = image {3} | 0 x+y-2 y2-2y | {1} | xy -x2y-xy2+2xy-1 -xy3+2xy2-y | {2} | 50x+50y+1 -50xy-50y2-x-2y+2 -50y3-2y2+2y-50 | 3 o10 : R-module, submodule of R i11 : isProjective P2 o11 = true i12 : rank P2 o12 = 2 i13 : phi2 = qsIsomorphism P2 o13 = {3} | 0 0 | {4} | 1 0 | {5} | 0 1 | o13 : Matrix i14 : isIsomorphism phi2 o14 = true i15 : image phi2 == P2 o15 = true i16 : P3 = image f -- Construct the image of f. o16 = image | x2y+1 x+y-2 2xy | 1 o16 : R-module, submodule of R i17 : isProjective P3 o17 = true i18 : rank P3 o18 = 1 i19 : phi3 = qsIsomorphism P3 o19 = {3} | -1 | {1} | 0 | {2} | -50x | o19 : Matrix i20 : isIsomorphism phi3 o20 = true i21 : image phi3 == P3 o21 = true i22 : P4 = coimage f -- Construct the coimage of f. o22 = cokernel {3} | 0 x+y-2 y2-2y | {1} | xy -x2y-xy2+2xy-1 -xy3+2xy2-y | {2} | 50x+50y+1 -50xy-50y2-x-2y+2 -50y3-2y2+2y-50 | 3 o22 : R-module, quotient of R i23 : isProjective P4 o23 = true i24 : rank P4 o24 = 1 i25 : phi4 = qsIsomorphism P4 o25 = {3} | -1 | {1} | 0 | {2} | -50x | o25 : Matrix i26 : isIsomorphism phi4 o26 = true i27 : image phi4 == P4 o27 = true

## Ways to use qsIsomorphism :

• "qsIsomorphism(Module)"

## For the programmer

The object qsIsomorphism is .