Maximal Cohen-Macaulay approximatiodns were introduced by Auslander and Buchweitz [The homological theory of maximal Cohen-Macaulay (MCM) approximations, Colloque en l’honneur de Pierre Samuel (Orsay, 1987) Soc. Math. France (N.S.)} No. **38**, (1989), 5 - 37.] In the context of a local Gorenstein ring R, the theory simplifies a little and can be expressed as follows. Let M be an R-module.

1) There is a unique maximal Cohen-Macaulay R-module M’ and a short exact "approximation sequence" 0→N’ →M’ →M →0 such that N has finite projective dimension; the module M, together with the surjection, is the MCM approximation of M.

2) Dually, there is a unique short exact "co-approximation sequence" 0→M →N” →M” →0 such that N” has finite projective dimension and M” is a maximal Cohen-Macaulay module, the MCM co-approximation.

These sequences are easy to compute. Let d = 1+ depth R - depth M. Write M’_{0} for the d-th cosyzygy of the d-th syzygy module of M, and α: M’→M the induced map. The module M’ (or the map (M’→M) is called the essential MCM approximation of M. Since d >= 2, the module M’ has no free summand. Let B_{0} be a minimal free module mapping onto M/(image M’_{0}), and lift the surjection to a map β: B_{0} →M. The map (α, β): M’_{0} ⊕B_{0} --> M is the MCM approximation, and N is its kernel.

The routine approximation M returns the pair (α, β).

Further, if M” is the (d+1)st cosyzygy of the d-th syzygy of M then there is a short exact sequence 0→M’ →F →M” →0 with F free. Pushing this sequence forward along the map α: M’ →M gives the coapproximation sequence 0→M →N”→M” →0.

The routine coApproximation M resurns the map M --> N”. Here is an example of a simple approximation sequence, exhibited by the betti tables of its 3 middle terms:

The Betti table of the module M is at the top, and one sees that it is NOT MCM (the resolution is not periodic at the beginning) and not of finite projective dimension (the length of the given part of of the -- actually infinite -- resolution is already longer than the dimension of the ring.

Next comes the betti table of the MCM module that approximates M (we see that its resolution is periodic from the beginning).

Finally we see a module of finite projective dimension (in this case 1).

i1 : S = ZZ/101[a,b,c] o1 = S o1 : PolynomialRing |

i2 : R = S/ideal(a^3+b^3+c^3) o2 = R o2 : QuotientRing |

i3 : M = coker random(R^2, R^{4:-1}); |

i4 : Ea = approximationSequence M; |

i5 : netList apply({1,2,3}, i-> betti res Ea_i) +----------------+ | 0 1 2 3 4| o5 = |total: 2 4 6 6 6| | 0: 2 4 . . .| | 1: . . 6 6 .| | 2: . . . . 6| +----------------+ | 0 1 2 3 4| |total: 6 6 6 6 6| | 0: 6 6 . . .| | 1: . . 6 6 .| | 2: . . . . 6| +----------------+ | 0 1 | |total: 8 6 | | 0: 4 6 | | 1: 4 . | +----------------+ |

Here is a similar display for the co-approximation sequence. Here the Betti table of M is at the bottom, the Betti table of the module of finite projecdtive dimension is in the middle, and that of the MCM module is at the top (

i6 : Ec = coApproximationSequence M; |

i7 : netList apply(5, i-> betti res prune Ec_i) +----------------+ | | o7 = |total: | +----------------+ | 0 1 2 3 4| |total: 6 6 6 6 6| | -2: 6 . . . .| | -1: . 6 6 . .| | 0: . . . 6 6| +----------------+ | 0 1 2 | |total: 6 4 2 | | -2: 6 . . | | -1: . 4 2 | +----------------+ | 0 1 2 3 4| |total: 2 4 6 6 6| | 0: 2 4 . . .| | 1: . . 6 6 .| | 2: . . . . 6| +----------------+ | | |total: | +----------------+ |

- Functions and commands
- approximation -- returns pair of components of the map from the MCM approximation
- approximationSequence -- Short exact sequence of the MCM approximation
- auslanderInvariant -- measures failure of surjectivity of the essential MCM approximation
- coApproximation -- Maximal Cohen-Macaulay co-approximation of M
- coApproximationSequence -- Short exact sequence of the MCM coapproximation
- profondeur -- computes the profondeur with respect to an ideal
- setupModules -- Creates a list of modules and maps over complete intersection for experiments
- setupRings -- Sets up a complete intersection for experiments
- socleDegrees -- lists the degrees of the socle generators
- syzygyModule -- Produces the k-th syzygy module (k \in ZZ)

- Symbols
- Characteristic -- Option for setupRings(c,d,Characteristic=>q)
- CoDepth -- Option for syzygyModule(-k,M,CoDepth => m)
- Randomize -- Option for setupRings(c,d,Characteristic=>q, Randomize=>false)
- Total -- option for approximation