# minimalPresentation(Module) -- minimal presentation of a module

## Synopsis

• Usage:
N = minimalPresentation M
• Function: minimalPresentation
• Inputs:
• M,
• Optional inputs:
• Outputs:
• N, , isomorphic to M
• Consequences:
• The isomorphism from N to M as g = N.cache.pruningMap unless M.cache.pruningMap already exists, in which case N is the same as M. The inverse isomorphism can be obtained as g^-1

## Description

If the Module M is graded then the module N is a minimal presentation of M. If not, then an attempt is made to improve the presentation of M. An example follows.
 `i1 : R = ZZ/32003[a..d];` ```i2 : M = coker matrix {{a,1,b},{c,3,b+d}} o2 = cokernel | a 1 b | | c 3 b+d | 2 o2 : R-module, quotient of R``` ```i3 : N = minimalPresentation M o3 = cokernel | b+16001d a-10668c | 1 o3 : R-module, quotient of R``` ```i4 : peek N.cache o4 = CacheTable{cache => MutableHashTable{}} pruningMap => | -10668 | | 0 |``` ```i5 : g = N.cache.pruningMap o5 = | -10668 | | 0 | o5 : Matrix``` ```i6 : g^-1 o6 = | -3 1 | o6 : Matrix```
This function also works when M is , , or , by acting on the modules and maps within it.
 ```i7 : I = ideal(a^2,b^3,c^4,d^7) 2 3 4 7 o7 = ideal (a , b , c , d ) o7 : Ideal of R``` ```i8 : X = Proj R o8 = X o8 : ProjectiveVariety``` ```i9 : J = (module I)~ o9 = image | a2 b3 c4 d7 | 1 o9 : coherent sheaf on X, subsheaf of OO X``` ```i10 : minimalPresentation J 1 o10 = OO X o10 : coherent sheaf on X, free```