*Invariant theory *is central to the mathematical account of the fundamental notion of *symmetry.* Its various appearances in apparently distant mathematical fields emphasize its importance. In its most general formulation, one considers a family \(\mathcal F\) of objects with an equivalence relation on it. An *invariant* is a function \(f\) that associates to each object of \(\mathcal{F}\) an element of another set such that the function \(f\) is *constant* in each equivalence class of \({\mathcal F}\). Thus, by its very definition, if two objects \(A, B\in {\mathcal F}\) satisfy that \(f(A)\neq f(B)\), then \(A\) is not equivalent to \(B\). On the other hand, it may happen that \(f(A)=f(B)\) but \(A\) may not be equivalent to \(B\), that is, the systems of invariants \(f\) may not be *complete*.

A general goal of the theory is to construct a *complete system of invariants* for the given classification problem. It barely needs noting that such a general goal might not be attainable, and one must settle for less complete systems of invariants or more concrete settings to formulate the classification problems at hand.

Perhaps the oldest invariant problem in algebra considers the action a given group \(G\) on an algebra of polynomials \(k[x_1,\dots, x_n]\), over a field \(k\). More concretely, one considers actions of linear algebraic groups, that is, subgroups of the general linear group of invertible matrices \(\mathrm{GL}_n\) over the field \(k\); to avoid arithmetic complications one considers first the case when the field is algebraically closed. Thus, the actions that are of interest are actions of a linear group \(G\) on rings of coordinates \(k[X]\) of affine algebraic varieties \(X\) over the given field that come from regular actions of \(G\) over the variety \(X\). The main invariant is the subring of functions that are fixed by all elements of the group: \[ k[X]^G=\{f\in k[X]: \sigma\cdot f=f\;\text{for all \(\sigma\in G\)}\}.\]

There are several problems associated to finding the invariant algebra \(k[X]^G\), and the most important one is to find generators for this ring as a \(k\)-algebra. Of course, one must answer first the basic question of when this \(k\)-algebra is finitely generated.

From its very beginning, invariant theory had to deal with two fundamental aspects of mathematics: abstract theoretical advances and algorithmic practical developments. The first practitioners of invariant theory in the 19th century, Cayley, Sylvester, Gordan, Clebsch, Aronhold, and Cremona, were masters of the constructive approach to invariant theory, looking for algorithms to compute generators for the ring of invariants \(k[X]^G\), when \(G\) is a classical group.

This classic period of invariant theory came to an early demise when Hilbert gave a non-constructive proof of the finite generation of rings of invariants of classical groups. Gordan’s well-known criticism of Hilbert methods was answered by a constructive proof, also by Hilbert, for finding all the invariants of the special and general linear groups.

After these developments, invariant theory went to a period of hibernation, but the algebraic methods that were developed around these classical problems would find fertile ground for the algebraization of geometry in the 20th century.

Invariant theory came back, now with a strong algebraic-geometry formulation, in the hands of David Mumford and the Grothendieck school: Geometric invariant theory looks for algebraic varieties (schemes, algebraic spaces or stacks in more general settings) \(Y\) that realize the ring of invariants \(K[X]^G\) as the coordinate ring \(K[Y]\) of \(Y\).

Moreover, during the second half of the 20th century, powerful computational tools were developed for finding generators and relations between them, many of them based on Gröbner bases and the Buchberger algorithm.

Invariant theory is alive and well now. It flourishes, in fact, either in the abstract theoretical setting or in the constructive version, with a healthy interaction between both approaches.

The book under review is devoted to the constructive, algorithmic, approach to invariant theory. Although there are many monographs devoted to invariant theory, most of them take the non constructive approach, for example in Popov and Vinberg *Invariant Theory* (Springer, 1994) or Dolgachev’s *Lectures on Invariant Theory* (Cambridge, 2003) or the algebro-geometrical approach of Mumford (and Fogarty and Kirwan) in *Geometric Invariant Theory *(Springer, first edition 1965, second edition 1982, third edition 1994) or Ferrer and Rittatore’s *Actions and Invariants of Algebraic Groups**, *(Chapman and Hall, 2005). Perhaps the only other book focused on the algorithmic approach is Sturmfels’ *Algorithms in Invariant Theory* (Springer, 1993).

The contents of the book under review can be divided in three parts. The first part, chapters one and two, collects some introductory material. Chapter one treats the necessary background on Gröbner bases and algorithms to built them. The second chapter summarizes the basic facts of invariant theory over an algebraically closed field, from invariants rings and reductive groups to categorical quotients and Hilbert series of invariant rings.

The second part of the book, chapters three and four, almost 200 pages, constitute the core of the monograph. Chapter three treats the invariant theory of finite groups. Again, the focus is on the computation of finite sets of generators for the invariant ring. It is important to remark that both the modular and non-modular cases are treated. Since the approach is mainly constructive, for the implementations of the invariant theory algorithms discussed in this chapter, the computer algebra systems SINGULAR and MAGMA are highly recommended, since both come with several packages and libraries devoted to invariant theory.

Most of the algorithms discussed in this chapter are due to the authors, especially for the modular case. The fourth chapter treats the case of invariants of linearly reductive groups. Again some of the given algorithms to compute sets of generators are due to the authors. Details and background material to discuss these algorithms are presented in this chapter. Here we also find methods to compute Hilbert series of the invariant ring by a variation of Molien’s formula. Most of the results discussed in this chapter are for reductive groups, since, by a theorem of Nagata, this is the case when the ring of invariants is guaranteed to be finitely generated. The final sections of the chapter consider the non-reductive case and some methods that could be useful to compute generators of the invariant ring, provided that this ring is finitely generated for the given non reductive group.

The third part of the book, chapter five, is a hodgepodge of short vistas of applications of invariant theory, from the computation of cohomology rings of finite groups and calculation of Galois groups to combinatorics and computer vision.

The book has three appendices; the first one gives a quick survey of results on linear algebraic groups that are used throughout the text. For this second edition, there are now a second and third appendices, by V. Popov. The second appendix studies algorithms to decide when an orbit is contained in the closure of another one, and the third appendix is devoted to the stratification of the nullcone, with an addendum that includes the source code for a program to compute this stratification.

Although the book under review is a monograph, now in its second edition, it is so well structured that can be read by anyone with a basic background on algebraic groups. The subject, as was sketchily summarized in the introduction to this review, is a classic one with an almost romantic history of being reborn after periods of stagnation, as Kung and Rota so eloquently remind us in their survey article "The Invariant Theory of Binary Forms" * Bull. A. M. S.* **10** (1984), 27-85.

Felipe Zaldivar is Professor of Mathematics at the Universidad Autonoma Metropolitana-I, in Mexico City. His e-mail address is fz@xanum.uam.mx.