The Rees Algebra of an ideal is the commutative algebra analogue of the blow up in algebraic geometry. (In fact, the ``Rees Algebra'' is sometimes called the ``blowup algebra''.) A great deal of modern commutative algebra is devoted to studying them.
Classically the Rees algebra appeared as the bihomogeneous coordinate ring of the blowup of a projective variety along a subvariety or subscheme, used for resolution of singularities. Though this is computationally slow on interesting examples, we illustrate with some elementary cases of resolution of plane curve singularities in PlaneCurveSingularities.
The Rees algebra was studied in the commutative algebra context (in the case where M is an ideal of a ring R), by David Rees in a famous paper,
On a problem of Zariski, Illinois J. Math. (1958) 145149).
In fact, Rees mainly studied the ring $R[It,t^{1}]$, now also called the `extended Rees Algebra' of I.
The original goal of this package, first written around 2002, was to compute the Rees algebra of a module as it is defined in the paper What is the Rees algebra of a module?, by Craig Huneke, David Eisenbud and Bernd Ulrich, Proc. Am. Math. Soc. 131, 701708, 2002. It has since expanded to include routines for computing many of the invariants of an ideal or module defined in terms of Rees algebras.
The Rees algebra, or more precisely the associated graded ring, which we compute as a biproduct, plays a central role in modern intersection theory: it is the basis of the FultonMacPherson definition of the intersection product in the Chow ring. We illustrate this in distinguished and intersectInP.
The Rees algebra of a module M is defined by a certain ideal in the symmetric algebra $Sym(M)$ of $M$, or, as in this package, by an ideal in the symmetric algebra of any free module $F$ that maps onto $M$. When $\phi: M \to G$ is the versal embedding of $M$, then, by the definition of HunekeEisenbudUlrich, the Rees ideal of M is the kernel of $Sym(\phi)$. Thus the Rees Algebra of M is the image of $Sym(\phi)$.
In most cases the kernel of the $Sym(\phi)$ is the same for any embedding $\phi$ of $M$ into a free module:
Theorem (EisenbudHunekeUlrich, Thms 0.2 and 1.4): Let R be a Noetherian ring and let $M$ be a finitely generated Rmodule. Let $\phi: M \to G$ be a versal map of $M$ to a free module. Assume that $\phi$ is an inclusion, and let $\psi: M \to G'$ be any inclusion. If $R$ is torsionfree over $\ZZ$ or $R$ is unmixed and generically Gorenstein, or $M$ is free locally at each associated prime of $R$, or $G=R$, then the kernel of $Sym(\phi)$ and the kernel of $Sym(\psi)$ are equal.
It follows that in the good cases above the Rees ideal is equal to the saturation of the defining ideal of symmetric algebra of $M$ with respect to any element f of the ground ring such that $M[f^{1}]$ is free, or is simply of linear type, meaning that $Sym(\phi)$ is a monomorphism. This is the case, for example, when M is an ideal and $M[f^{1}]$ is generated by a regular sequence. This fact often leads to a faster computation than computing the kernel of $Sym(\phi)$ directly.
Here is an example of the pathological case of inclusions $\phi: M \to G$ and $\psi: M \to G'$ where $ker(\phi) \neq ker(\psi)$. In the following, any finite characteristic would work as well.



It is easy to check that M \cong R^1/(x,y,z)^p. We write iota: M\to R^1 for the embedding as an ideal and psi for the embedding M \to R^2 sending z to (x,y).


Finally, a versal embedding is M \to R^3, sending z to (x,y,z):

We now compute the kernels of the three maps on symmetric algebras:



and check that the ones corresponding to phi and iota are equal, whereas the ones corresponding to psi and phi are not:


In fact, they differ in degree p:


Version 2.2 of this package was accepted for publication in volume 8 of The Journal of Software for Algebra and Geometry on 21 May 2018, in the article The ReesAlgebra package in Macaulay2. That version can be obtained from the journal or from the Macaulay2 source code repository.
This documentation describes version 2.3 of ReesAlgebra.
The source code from which this documentation is derived is in the file ReesAlgebra.m2.
The object ReesAlgebra is a package.