# InvariantRing -- invariants of group actions

## Description

InvariantRing is a package implementing algorithms to compute invariants of linearly reductive groups.

Current algorithms include:

• An elimination theory algorithm that computes the Hilbert ideal for any linearly reductive group: Derksen, H. & Kemper, G. (2015). Computational Invariant Theory. Heidelberg: Springer. Algorithm 4.1.9, pp 159-164
• A simple and efficient algorithm for invariants of tori based on: Derksen, H. & Kemper, G. (2015). Computational Invariant Theory. Heidelberg: Springer. Algorithm 4.3.1 pp 174-177
• An adaptation of the tori algorithm for invariants of finite abelian groups based on: Gandini, F. Ideals of Subspace Arrangements. Thesis (Ph.D.)-University of Michigan. 2019. ISBN: 978-1392-76291-2. pp 29-34.
• King's algorithm and the linear algebra method for invariants of finite groups: Derksen, H. & Kemper, G. (2015). Computational Invariant Theory. Heidelberg: Springer. Algorithm 3.8.2, pp 107-109; pp 72-74
• The algorithms for primary and secondary invariants, and Molien series of finite groups implemented in version 1.1.0 of this package by: Hawes, T. Computing the invariant ring of a finite group. JSAG, Vol. 5 (2013). pp 15-19. DOI: 10.2140/jsag.2013.5.15

Version history:

• 1.1.0: the first version of this package was developed by Thomas Hawes. It focused on computing primary and secondary invariants of finite groups. For more information, see: Hawes, T. Computing the invariant ring of a finite group. JSAG, Vol. 5 (2013). pp 15-19. DOI: 10.2140/jsag.2013.5.15
• 2.0: this version was developed by L. Ferraro, F. Galetto, F. Gandini, H. Huang, M. Mastroeni, and X. Ni. It introduces types for different group actions as well as rings of invariants. It also contains new functionality for invariants of finite groups, diagonal actions (tori/abelian groups), and linearly reductive groups. The code from version 1.1.0 is preserved in the auxiliary file Hawes.m2 (with documentation in the file HawesDoc.m2) and has been updated to work with the new types.

## Certification

Version 1.1.0 of this package was accepted for publication in volume 5 of The Journal of Software for Algebra and Geometry on 2013-05-16, in the article Computing the invariant ring of a finite group. That version can be obtained from the journal or from the Macaulay2 source code repository.

## Version

This documentation describes version 2.0 of InvariantRing.

## Source code

The source code from which this documentation is derived is in the file InvariantRing.m2. The auxiliary files accompanying it are in the directory InvariantRing/.

## Exports

• Types
• Functions and commands
• action -- the group action that produced a ring of invariants
• actionMatrix -- matrix of a linearly reductive action
• cyclicFactors -- of a diagonal action
• definingIdeal -- presentation of a ring of invariants as polynomial ring modulo the defining ideal
• diagonalAction -- diagonal group action via weights
• equivariantHilbertSeries -- equivariant Hilbert series for a diagonal action
• finiteAction -- the group action generated by a list of matrices
• group -- list all elements of the group of a finite group action
• groupIdeal -- ideal defining a linearly reductive group
• hilbertIdeal -- compute generators for the Hilbert ideal
• hironakaDecomposition -- calculates a Hironaka decomposition for the invariant ring of a finite group
• invariantRing -- the ring of invariants of a group action
• invariants -- computes the generating invariants of a group action
• isAbelian -- check whether a finite matrix group is Abelian
• isInvariant -- check whether a polynomial is invariant under a group action
• linearlyReductiveAction -- Linearly reductive group action
• molienSeries -- computes the Molien (Hilbert) series of the invariant ring of a finite group
• permutationMatrix -- convert a one-line notation or cyclic notation of a permutation to a matrix representation
• primaryInvariants -- computes a list of primary invariants for the invariant ring of a finite group
• reynoldsOperator -- the image of a polynomial under the Reynolds operator
• schreierGraph -- Schreier graph of a finite group
• secondaryInvariants -- computes secondary invariants for the invariant ring of a finite group
• weights -- of a diagonal action
• words -- associate a word in the generators of a group to each element
• Methods
• "action(RingOfInvariants)" -- see action -- the group action that produced a ring of invariants
• "actionMatrix(LinearlyReductiveAction)" -- see actionMatrix -- matrix of a linearly reductive action
• ambient(RingOfInvariants) -- the ambient polynomial ring where the group acted upon
• "cyclicFactors(DiagonalAction)" -- see cyclicFactors -- of a diagonal action
• "definingIdeal(RingOfInvariants)" -- see definingIdeal -- presentation of a ring of invariants as polynomial ring modulo the defining ideal
• degreesRing(DiagonalAction) -- of a diagonal action
• "diagonalAction(Matrix,List,PolynomialRing)" -- see diagonalAction -- diagonal group action via weights
• "diagonalAction(Matrix,Matrix,List,PolynomialRing)" -- see diagonalAction -- diagonal group action via weights
• "diagonalAction(Matrix,PolynomialRing)" -- see diagonalAction -- diagonal group action via weights
• dim(GroupAction) -- dimension of the polynomial ring being acted upon
• "equivariantHilbertSeries(DiagonalAction)" -- see equivariantHilbertSeries -- equivariant Hilbert series for a diagonal action
• "finiteAction(List,PolynomialRing)" -- see finiteAction -- the group action generated by a list of matrices
• "finiteAction(Matrix,PolynomialRing)" -- see finiteAction -- the group action generated by a list of matrices
• generators(FiniteGroupAction) -- generators of a finite group
• generators(RingOfInvariants) -- the generators for a ring of invariants
• "group(FiniteGroupAction)" -- see group -- list all elements of the group of a finite group action
• "groupIdeal(LinearlyReductiveAction)" -- see groupIdeal -- ideal defining a linearly reductive group
• "hilbertIdeal(LinearlyReductiveAction)" -- see hilbertIdeal -- compute generators for the Hilbert ideal
• hilbertSeries(RingOfInvariants) -- Hilbert series of the invariant ring
• "hironakaDecomposition(FiniteGroupAction)" -- see hironakaDecomposition -- calculates a Hironaka decomposition for the invariant ring of a finite group
• "invariantRing(GroupAction)" -- see invariantRing -- the ring of invariants of a group action
• "PolynomialRing ^ GroupAction" -- see invariantRing -- the ring of invariants of a group action
• "QuotientRing ^ LinearlyReductiveAction" -- see invariantRing -- the ring of invariants of a group action
• invariants(DiagonalAction) -- computes the generating invariants of a group action
• invariants(FiniteGroupAction) -- computes the generating invariants of a group action
• "invariants(FiniteGroupAction,List)" -- see invariants(FiniteGroupAction,ZZ) -- basis for graded component of invariant ring
• invariants(FiniteGroupAction,ZZ) -- basis for graded component of invariant ring
• invariants(LinearlyReductiveAction) -- invariant generators of Hilbert ideal
• "invariants(LinearlyReductiveAction,List)" -- see invariants(LinearlyReductiveAction,ZZ) -- basis for graded component of invariant ring
• invariants(LinearlyReductiveAction,ZZ) -- basis for graded component of invariant ring
• "isAbelian(FiniteGroupAction)" -- see isAbelian -- check whether a finite matrix group is Abelian
• "isInvariant(RingElement,DiagonalAction)" -- see isInvariant -- check whether a polynomial is invariant under a group action
• "isInvariant(RingElement,FiniteGroupAction)" -- see isInvariant -- check whether a polynomial is invariant under a group action
• "isInvariant(RingElement,LinearlyReductiveAction)" -- see isInvariant -- check whether a polynomial is invariant under a group action
• "linearlyReductiveAction(Ideal,Matrix,PolynomialRing)" -- see linearlyReductiveAction -- Linearly reductive group action
• "linearlyReductiveAction(Ideal,Matrix,QuotientRing)" -- see linearlyReductiveAction -- Linearly reductive group action
• "molienSeries(FiniteGroupAction)" -- see molienSeries -- computes the Molien (Hilbert) series of the invariant ring of a finite group
• "net(DiagonalAction)" -- see net(RingOfInvariants) -- format for printing, as a net
• "net(FiniteGroupAction)" -- see net(RingOfInvariants) -- format for printing, as a net
• "net(LinearlyReductiveAction)" -- see net(RingOfInvariants) -- format for printing, as a net
• net(RingOfInvariants) -- format for printing, as a net
• numgens(DiagonalAction) -- number of generators of the finite part of a diagonal group
• numgens(FiniteGroupAction) -- number of generators of a finite group
• "permutationMatrix(Array)" -- see permutationMatrix -- convert a one-line notation or cyclic notation of a permutation to a matrix representation
• "permutationMatrix(List)" -- see permutationMatrix -- convert a one-line notation or cyclic notation of a permutation to a matrix representation
• "permutationMatrix(String)" -- see permutationMatrix -- convert a one-line notation or cyclic notation of a permutation to a matrix representation
• "permutationMatrix(ZZ,Array)" -- see permutationMatrix -- convert a one-line notation or cyclic notation of a permutation to a matrix representation
• "permutationMatrix(ZZ,List)" -- see permutationMatrix -- convert a one-line notation or cyclic notation of a permutation to a matrix representation
• "primaryInvariants(FiniteGroupAction)" -- see primaryInvariants -- computes a list of primary invariants for the invariant ring of a finite group
• rank(DiagonalAction) -- of a diagonal action
• relations(FiniteGroupAction) -- relations of a finite group
• "reynoldsOperator(RingElement,DiagonalAction)" -- see reynoldsOperator -- the image of a polynomial under the Reynolds operator
• "reynoldsOperator(RingElement,FiniteGroupAction)" -- see reynoldsOperator -- the image of a polynomial under the Reynolds operator
• ring(GroupAction) -- the polynomial ring being acted upon
• "schreierGraph(FiniteGroupAction)" -- see schreierGraph -- Schreier graph of a finite group
• "secondaryInvariants(List,FiniteGroupAction)" -- see secondaryInvariants -- computes secondary invariants for the invariant ring of a finite group
• "weights(DiagonalAction)" -- see weights -- of a diagonal action
• "words(FiniteGroupAction)" -- see words -- associate a word in the generators of a group to each element
• Symbols

## For the programmer

The object InvariantRing is .