If R is a Gorenstein ring, and M is a finitely generated R-module, then, according to the theory of Auslander and Buchweitz (a good exposition is in Ding's Thesis) there are unique exact sequences $$0\to K \to M' \to M\to 0$$ and $$0\to M \to N\to M''\to 0$$ such that K and N are of finite projective dimension, M' and M'' are maximal Cohen-Macaulay, and M'' has no free summands. The call
approximation M
returns the map $M'\to M$, while the call
coApproximation M
returns the map $M\to N$.
Since the script coApproximation begins by computing the approximation, it may shorten the computation if the user knows the depth of M in advance, specified with the option Depth => d.
i1 : setRandomSeed 100 o1 = 100 |
i2 : c = 3;d=3; |
i4 : S = setupRings(c,d); |
i5 : R = S_c; -- complete intersection, codim = c |
i6 : R' = S_(c-1); --codim c-1 |
i7 : Mc = coker vars R; |
i8 : (M,k,p) = setupModules(S,Mc); --M_(c-1) is Mc as an R_(c-1)-module |
i9 : ca = coApproximation M_(c-1); o9 : Matrix |
i10 : M'' = coker ca; |
i11 : N = target ca o11 = cokernel {-4} | x_0^2x_1^2x_2 14x_0^2x_2^3 8x_1^2x_2^3 14x_2 | {-4} | x_0^2x_2^3 x_0^2x_1x_2^2 8x_2^5 x_1 | {-4} | 15x_1^2x_2^3 8x_2^5 15x_0x_1^2x_2^2 x_0 | 3 o11 : R'-module, quotient of R' |
i12 : profondeur M'' == dim ring M'' -- an MCM module o12 = true |
i13 : M'' == source approximation(M'', Total=>false) -- no free summands o13 = false |
i14 : 2 == length res(N, LengthLimit =>10) -- projective dimension <\infty o14 = true |
The object coApproximation is a method function with options.