# projDim -- finds an upper bound for the projective dimension of a module

## Synopsis

• Usage:
n = projDim(N, MinDimension=>d)
• Inputs:
• N, , a module over a polynomial ring
• d, an integer, the minimum projective dimension of the module
• Optional inputs:
• MinDimension => , default value 0, stop after verifying the module has at most a certain projective dimension
• PointOptions => a list, default value {Strategy => Default, Homogeneous => false, Replacement => Binomial, ExtendField => true, PointCheckAttempts => 0, DecompositionStrategy => Decompose, NumThreadsToUse => 1, DimensionFunction => dim, Verbose => false}, options to be passed to the RandomPoints package
• MaxMinors => ..., default value -*Function*-, used to control how many minors are computed of the matrices in a projective resolution
• DetStrategy => ..., default value Cofactor, DetStrategy is a strategy for allowing the user to choose how determinants (or rank), is computed
• Strategy => ..., default value new OptionTable from {Points => 0, Random => 16, GRevLexLargest => 0, LexSmallestTerm => 16, LexLargest => 0, LexSmallest => 16, GRevLexSmallestTerm => 16, RandomNonzero => 16, GRevLexSmallest => 16}, strategies for choosing submatrices
• Verbose => ..., default value false
• Outputs:
• n, an integer, an upper bound for the projective dimension of N

## Description

The function pdim returns the length of a projective resolution. If the module passed is not homogeneous, then the projective resolution may not be minimal and so pdim can give the wrong answer. This function projDim tries to improve this bound by considering ideals of appropriately sized minors of the resolution (starting from the end of the resolution and working backwards). Using the option MinDimension (default value 0) gives a lower bound on the projective dimension, increasing it can thus improve the speed of computation.

 i1 : R = QQ[x,y]; i2 : I = ideal((x^3+y)^2, (x^2+y^2)^2, (x+y^3)^2, (x*y)^2); o2 : Ideal of R i3 : pdim(module I) o3 = 2 i4 : time projDim(module I, Strategy=>StrategyRandom) -- used 0.294369 seconds o4 = 1 i5 : time projDim(module I, Strategy=>StrategyRandom, MinDimension => 1) -- used 0.0230224 seconds o5 = 1

The option MaxMinors can be used to control how many minors are computed at each step. If this is not specified, the number of minors is a function of the dimension $d$ of the polynomial ring and the possible minors $c$. Specifically it is 10 * d + 2 * log_1.3(c). Otherwise the user can set the option MaxMinors => ZZ to specify that a fixed integer is used for each step. Alternatively, the user can control the number of minors computed at each step by setting the option MaxMinors => List. In this case, the list specifies how many minors to be computed at each step, (working backwards). Finally, you can also set MaxMinors to be a custom function of the dimension $d$ of the polynomial ring and the maximum number of minors.

• pdim -- calculate the projective dimension

## Ways to use projDim :

• "projDim(Module)"

## For the programmer

The object projDim is .