# isProjective -- determines if a given module is projective with constant rank over a Noetherian ring

## Synopsis

• Usage:
isProjective M
• Inputs:
• M, , a finitely generated module over a Noetherian ring.
• Outputs:

## Description

This method determines if the given R-module is projective with constant rank by considering the ideal of minors of its presentation matrix. In particular, if \phi is the presentation matrix of the module M, let I_t(\phi) be the ideal in R generated by the t \times\ t minors of \phi. If there exists an r such that I_r(\phi) = R and I_{r+1}(\phi) = 0, then we know that M is necessarily projective of constant rank (see Proposition 1.4.10 of Bruns-Herzog below). The method isProjective calls on maxMinors to compute the ideal of minors I_r(\phi) such that I_r(\phi) \neq 0 and I_{r+1}(\phi) = 0. If I_r(\phi) is the whole ring, then the module M is projective with constant rank.

Reference:

• W. Bruns and J. Herzog. Cohen-Macaulay Rings. Cambridge Studies in Advanced Mathematics, 39. Cambridge University Press, Cambridge, 1993. xii+403 pp. ISBN: 0-521-41068-1.
 i1 : R = QQ[x,y,z] o1 = R o1 : PolynomialRing i2 : P = 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 : isProjective ker P o3 = true i4 : M = matrix{{-y,-z^2,0},{x,0,-z^2},{0,x^2,x*y}} o4 = | -y -z2 0 | | x 0 -z2 | | 0 x2 xy | 3 3 o4 : Matrix R <--- R i5 : isProjective cokernel M o5 = false i6 : I = ideal(x^2,x*y,z^2) 2 2 o6 = ideal (x , x*y, z ) o6 : Ideal of R i7 : isProjective module I o7 = false i8 : isProjective R^3 o8 = true i9 : isProjective module ideal x o9 = true

## Caveat

If the method outputs false, this only implies the module in question is not projective with constant rank. However, if the ring is a domain, then all finitely generated projective modules have constant rank. In this scenario, isProjective outputs true if and only if the module is projective.

## See also

• maxMinors -- computes the ideal generated by the maximal non-vanishing minors of a given matrix

## Ways to use isProjective :

• "isProjective(Module)"

## For the programmer

The object isProjective is .