This is BettiCharacters.info, produced by Macaulay2, version 1.20

BettiCharacters -- finite group characters on free resolutions and graded modules
*********************************************************************************

Description
===========

This package contains functions for computing characters of free resolutions
and graded modules equipped with the action of a finite group.

Let $R$ be a positively graded polynomial ring over a field $\Bbbk$, and $M$ a
finitely generated graded $R$-module. Suppose $G$ is a finite group whose order
is not divisible by the characteristic of $\Bbbk$. Assume $G$ acts
$\Bbbk$-linearly on $R$ and $M$ by preserving degrees, and distributing over
$R$-multiplication. If $F_\bullet$ is a minimal free resolution of $M$, and
$\mathfrak{m}$ denotes the maximal ideal generated by the variables of $R$,
then each $F_i / \mathfrak{m}F_i$ is a graded $G$-representation. We call the
characters of the representations $F_i / \mathfrak{m}F_i$ the Betti characters
of $M$, since evaluating them at the identity element of $G$ returns the usual
Betti numbers of $M$. Moreover, the graded components of $M$ are also
$G$-representations.

This package provides functions to compute the Betti characters and the
characters of graded components of $M$ based on the algorithms in F. Galetto -
Finite group characters on free resolutions (see
https://arxiv.org/abs/2106.14071 ). The package is designed to be independent
of the group; the user may provide the necessary information about the group
action in the form of matrices and/or substitutions into the variables of the
ring. See the menu below for using this package to compute some examples from
the literature.

Author
======

  * Federico Galetto (see http://math.galetto.org )
    <galetto.federico@gmail.com>

Version
=======

This documentation describes version 1.0 of BettiCharacters.

Source code
===========

The source code from which this documentation is derived is in the file
BettiCharacters.m2 (see common/share/Macaulay2/BettiCharacters.m2 ).

Exports
=======

  * Types
      * Action -- the class of all finite group actions
      * ActionOnComplex -- the class of all finite
        group actions on complexes
      * ActionOnGradedModule -- the class of all
        finite group actions on graded modules
      * Character -- the class of all characters of finite
        group representations
      * GradedCharacter -- the class of all graded
        characters of finite group representations
  * Functions and commands
      * action -- define finite group action
      * actors -- group elements of an action
      * character -- compute characters of finite group
        action
      * inverseRingActors -- get inverse of action on
        ring generators
      * numActors -- number of acting elements
      * ringActors -- get action on ring generators
      * stage -- get object acted upon
  * Methods
      * "action(ChainComplex,List)" -- see
        action(ChainComplex,List,List,ZZ),
        -- define finite group
        action on a resolution
      * action(ChainComplex,List,List,ZZ)
        -- define finite group
        action on a resolution
      * "action(Ideal,List)" -- see action(Module,List,List),
        -- define finite group action on a
        graded module
      * "action(Ideal,List,List)" -- see action(Module,List,List),
        -- define finite group action on a
        graded module
      * "action(Module,List)" -- see action(Module,List,List),
        -- define finite group action on a
        graded module
      * action(Module,List,List), --
        define finite group action on a graded module
      * "action(PolynomialRing,List)" -- see action(Module,List,List),
        -- define finite group action on a
        graded module
      * "action(PolynomialRing,List,List)" -- see
        action(Module,List,List), -- define
        finite group action on a graded module
      * "action(QuotientRing,List)" -- see action(Module,List,List),
        -- define finite group action on a
        graded module
      * "action(QuotientRing,List,List)" -- see action(Module,List,List),
        -- define finite group action on a
        graded module
      * "actors(Action)" -- see actors, -- group elements of an
        action
      * actors(ActionOnComplex,ZZ), --
        group elements of action on resolution
      * actors(ActionOnGradedModule,List)
        -- group elements acting on
        components of a module
      * "actors(ActionOnGradedModule,ZZ)" -- see
        actors(ActionOnGradedModule,List),
        -- group elements acting on
        components of a module
      * character(ActionOnComplex), --
        compute all Betti characters of minimal free resolution
      * character(ActionOnComplex,ZZ)
        -- compute Betti characters of
        minimal free resolution
      * character(ActionOnGradedModule,List)
        -- compute characters of
        graded components of a module
      * "character(ActionOnGradedModule,ZZ)" -- see
        character(ActionOnGradedModule,List),
        -- compute characters of
        graded components of a module
      * "character(ActionOnGradedModule,ZZ,ZZ)" -- see
        character(ActionOnGradedModule,List),
        -- compute characters of
        graded components of a module
      * "inverseRingActors(Action)" -- see inverseRingActors,
        -- get inverse of action on ring generators
      * net(Action) -- format for printing, as a net
      * "numActors(Action)" -- see numActors, -- number of
        acting elements
      * ring(Action) -- get ring of object acted upon
      * "ringActors(Action)" -- see ringActors, -- get action
        on ring generators
      * "stage(Action)" -- see stage, -- get object acted upon
  * Symbols
      * places -- starting homological degree
      * Sub -- act on ring via substitutions (rather than matrices)

For the programmer
==================

The object BettiCharacters, is a package (Macaulay2Doc).

Defining actions

Computing actions and characters

Examples from the literature

action -- define finite group action
************************************

Synopsis
========

  * Optional inputs (Macaulay2Doc),:
      * Sub, => ..., default value true, act on ring via
        substitutions (rather than matrices)

Description
===========

This function is provided by the package BettiCharacters.

Use this function to set up a finite group action on a minimal free resolution
or graded module. See the specific use cases for more details.

Ways to use action :
====================

  * "action(ChainComplex,List)" -- see action(ChainComplex,List,List,ZZ),
    -- define finite group action
    on a resolution
  * action(ChainComplex,List,List,ZZ)
    -- define finite group action
    on a resolution
  * "action(Ideal,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * "action(Ideal,List,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * "action(Module,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * action(Module,List,List) -- define
    finite group action on a graded module
  * "action(PolynomialRing,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * "action(PolynomialRing,List,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * "action(QuotientRing,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * "action(QuotientRing,List,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module

For the programmer
==================

The object action, is a method function with options (Macaulay2Doc).

Action -- the class of all finite group actions
***********************************************

Description
===========

This class is provided by the package BettiCharacters.

Types of Action :
=================

  * ActionOnComplex -- the class of all finite group
    actions on complexes
  * ActionOnGradedModule -- the class of all
    finite group actions on graded modules

Methods that use an object of class Action :
============================================

  * "actors(Action)" -- see actors, -- group elements of an
    action
  * "inverseRingActors(Action)" -- see inverseRingActors,
    -- get inverse of action on ring generators
  * net(Action) -- format for printing, as a net
  * "numActors(Action)" -- see numActors, -- number of acting
    elements
  * ring(Action) -- get ring of object acted upon
  * "ringActors(Action)" -- see ringActors, -- get action on
    ring generators
  * "stage(Action)" -- see stage, -- get object acted upon

For the programmer
==================

The object Action, is a type (Macaulay2Doc), with
ancestor classes HashTable (Macaulay2Doc), < Thing (Macaulay2Doc).

ActionOnComplex -- the class of all finite group actions on complexes
*********************************************************************

Description
===========

This class is provided by the package BettiCharacters.

Functions and methods returning an object of class ActionOnComplex :
====================================================================

  * "action(ChainComplex,List)" -- see action(ChainComplex,List,List,ZZ),
    -- define finite group action
    on a resolution
  * action(ChainComplex,List,List,ZZ)
    -- define finite group action
    on a resolution

Methods that use an object of class ActionOnComplex :
=====================================================

  * actors(ActionOnComplex,ZZ), --
    group elements of action on resolution
  * character(ActionOnComplex), --
    compute all Betti characters of minimal free resolution
  * character(ActionOnComplex,ZZ),
    -- compute Betti characters of minimal free resolution

For the programmer
==================

The object ActionOnComplex, is a type (Macaulay2Doc),
with ancestor classes Action, <
HashTable (Macaulay2Doc) < Thing (Macaulay2Doc).

places -- starting homological degree
*************************************

Description
===========

This symbol is provided by the package BettiCharacters.

This symbol stores the homological degree where the user initially defined the
action of a finite group on a free resolution.

See also
========

  * action(ChainComplex,List)
    -- define finite group action
    on a resolution

For the programmer
==================

The object places, is a symbol (Macaulay2Doc).

ActionOnGradedModule -- the class of all finite group actions on graded modules
*******************************************************************************

Description
===========

This class is provided by the package BettiCharacters.

Functions and methods returning an object of class ActionOnGradedModule :
=========================================================================

  * "action(Ideal,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * "action(Ideal,List,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * "action(Module,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * action(Module,List,List) -- define
    finite group action on a graded module
  * "action(PolynomialRing,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * "action(PolynomialRing,List,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * "action(QuotientRing,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module
  * "action(QuotientRing,List,List)" -- see action(Module,List,List),
    -- define finite group action on a graded
    module

Methods that use an object of class ActionOnGradedModule :
==========================================================

  * actors(ActionOnGradedModule,List)
    -- group elements acting on
    components of a module
  * "actors(ActionOnGradedModule,ZZ)" -- see
    actors(ActionOnGradedModule,List),
    -- group elements acting on components of a module
  * character(ActionOnGradedModule,List)
    -- compute characters of graded
    components of a module
  * "character(ActionOnGradedModule,ZZ)" -- see
    character(ActionOnGradedModule,List),
    -- compute characters of graded
    components of a module
  * "character(ActionOnGradedModule,ZZ,ZZ)" -- see
    character(ActionOnGradedModule,List),
    -- compute characters of graded
    components of a module

For the programmer
==================

The object ActionOnGradedModule, is a type (Macaulay2Doc),
with ancestor classes Action, <
HashTable (Macaulay2Doc) < Thing (Macaulay2Doc).

net(Action) -- format for printing, as a net
********************************************

Synopsis
========

  * Function: net (Macaulay2Doc),

Description
===========

Format objects of type Action, for printing. See net (Macaulay2Doc),
for more information.

Ways to use this method:
========================

  * net(Action) -- format for printing, as a net

ring(Action) -- get ring of object acted upon
*********************************************

Synopsis
========

  * Function: ring (Macaulay2Doc),
  * Usage:
        ring(A)
  * Inputs:
      * A, an instance of the type Action,
  * Outputs:
      * a polynomial ring (Macaulay2Doc), associated with
        the object acted upon

Description
===========

This function is provided by the package BettiCharacters.

Returns the polynomial ring associated with the object being acted upon.

See also
========

  * action -- define finite group action

Ways to use this method:
========================

  * ring(Action) -- get ring of object acted upon

ringActors -- get action on ring generators
*******************************************

Synopsis
========

  * Usage:
        ringActors(A)
  * Inputs:
      * A, an instance of the type Action,
  * Optional inputs (Macaulay2Doc),:
      * Sub, => ..., default value true, act on ring via
        substitutions (rather than matrices)
  * Outputs:
      * G, a list (Macaulay2Doc), of group elements

Description
===========

This function is provided by the package BettiCharacters.

Returns a List (Macaulay2Doc), of group elements acting on the
vector space spanned by the variables of the polynomial ring associated with
the object acted upon. These are the same elements originally defined by the
user when constructing the action. By default, these elements are expressed as
one-row substitution matrices as those accepted by substitute (Macaulay2Doc).
The optional input Sub, may be used to
return these elements as square matrices.

See also
========

  * action -- define finite group action

Ways to use ringActors :
========================

  * "ringActors(Action)"

For the programmer
==================

The object ringActors, is a method function with options (Macaulay2Doc).

stage -- get object acted upon
******************************

Synopsis
========

  * Usage:
        stage(A)
  * Inputs:
      * A, an instance of the type Action,

Description
===========

This function is provided by the package BettiCharacters.

Returns the object being acted upon. Depending on the action, this object may
be a ChainComplex (Macaulay2Doc), a PolynomialRing (Macaulay2Doc),
a QuotientRing (Macaulay2Doc),
an Ideal (Macaulay2Doc), or a
Module (Macaulay2Doc).

See also
========

  * action -- define finite group action

Ways to use stage :
===================

  * "stage(Action)"

For the programmer
==================

The object stage, is a method function (Macaulay2Doc).

action(ChainComplex,List,List,ZZ) -- define finite group action on a resolution
*******************************************************************************

Synopsis
========

  * Function: action,
  * Usage:
        A=action(C,G)
        A=action(C,G,G',i)
  * Inputs:
      * C, a chain complex (Macaulay2Doc), a minimal free
        resolution over a polynomial ring R
      * G, a list (Macaulay2Doc), of group elements acting on the
        variables of R
      * G', a list (Macaulay2Doc), of group elements acting on a
        basis of C_i
      * i, an integer (Macaulay2Doc), a homological degree
  * Optional inputs (Macaulay2Doc),:
      * Sub, => ..., default value true, act on ring via
        substitutions (rather than matrices)
  * Outputs:
      * A, an instance of the type ActionOnComplex,

Description
===========

This function is provided by the package BettiCharacters.

Use this function to define the action of a finite group on the minimal free
resolution of a module over a polynomial ring with coefficients in a field.
After setting up the action, use the function character, to
compute the Betti characters.

The input G is a List (Macaulay2Doc), of group elements acting on
the vector space spanned by the variables of the ring R. By default, these
elements are passed as one-row substitution matrices as those accepted by
substitute (Macaulay2Doc). The optional input Sub, may
be used to pass these elements as square matrices. For the function to work, G
can be an arbitrary list of group elements however, in order to obtain a
complete representation theoretic description of the characters, G should be a
list of representatives of the conjugacy classes of the group.

The example below sets up the action of a symmetric group on the resolution of
a monomial ideal. The symmetric group acts by permuting the four variables of
the ring. The conjugacy classes of permutations are determined by their cycle
types, which are in bijection with partitions. In this case, we consider five
permutations with cycle types, in order: 4, 31, 22, 211, 1111.

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_1..x_4]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : I = ideal apply(subsets(gens R,2),product)                              |
|                                                                             |
|o2 = ideal (x x , x x , x x , x x , x x , x x )                              |
|             1 2   1 3   2 3   1 4   2 4   3 4                               |
|                                                                             |
|o2 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i3 : RI = res I                                                              |
|                                                                             |
|      1      6      8      3                                                 |
|o3 = R  <-- R  <-- R  <-- R  <-- 0                                           |
|                                                                             |
|     0      1      2      3      4                                           |
|                                                                             |
|o3 : ChainComplex                                                            |
+-----------------------------------------------------------------------------+
|i4 : G = {matrix{{x_2,x_3,x_4,x_1}},                                         |
|          matrix{{x_2,x_3,x_1,x_4}},                                         |
|          matrix{{x_2,x_1,x_4,x_3}},                                         |
|          matrix{{x_2,x_1,x_3,x_4}},                                         |
|          matrix{{x_1,x_2,x_3,x_4}} }                                        |
|                                                                             |
|o4 = {| x_2 x_3 x_4 x_1 |, | x_2 x_3 x_1 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o4 : List                                                                    |
+-----------------------------------------------------------------------------+
|i5 : A = action(RI,G)                                                        |
|                                                                             |
|o5 = ChainComplex with 5 actors                                              |
|                                                                             |
|o5 : ActionOnComplex                                                         |
+-----------------------------------------------------------------------------+

The group elements acting on the ring can be recovered using ringActors,
while their inverses can be recovered using
inverseRingActors. To recover just the number of group
elements, use numActors.

+-----------------------------------------------------------------------------+
|i6 : ringActors A                                                            |
|                                                                             |
|o6 = {| x_2 x_3 x_4 x_1 |, | x_2 x_3 x_1 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o6 : List                                                                    |
+-----------------------------------------------------------------------------+
|i7 : inverseRingActors A                                                     |
|                                                                             |
|o7 = {| x_4 x_1 x_2 x_3 |, | x_3 x_1 x_2 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o7 : List                                                                    |
+-----------------------------------------------------------------------------+
|i8 : numActors A                                                             |
|                                                                             |
|o8 = 5                                                                       |
+-----------------------------------------------------------------------------+

The simplified version of this function suffices when dealing with resolutions
of quotients of the ring R by an ideal as in the previous example. In this
case, the first module in the resolution is R and it is assumed that the group
acts trivially on the generator of this first module.

When resolving modules or when more flexibility is needed, one may use the
general version of the function. In this case, it is necessary to specify a
homological degree i and a list of group elements acting on the module C_i. The
group elements are passed as a List (Macaulay2Doc), G' of matrices
written with respect to the basis of C_i used by Macaulay2. Moreover, the group
elements in G' must match (in number and order) the elements in G.

To illustrate, we set up the action on the resolution of the ideal in the
previous example considered as a module (as opposed to the resolution of the
quotient by the ideal). In this case, the elements of G' are the permutation
matrices obtained by acting with elements of G on the span of the minimal
generators of the ideal. For simplicity, we construct these matrices by
permuting columns of the identity.

+-----------------------------------------------------------------------------+
|i9 : M = module I                                                            |
|                                                                             |
|o9 = image | x_1x_2 x_1x_3 x_2x_3 x_1x_4 x_2x_4 x_3x_4 |                     |
|                                                                             |
|                             1                                               |
|o9 : R-module, submodule of R                                                |
+-----------------------------------------------------------------------------+
|i10 : RM = res M                                                             |
|                                                                             |
|       6      8      3                                                       |
|o10 = R  <-- R  <-- R  <-- 0                                                 |
|                                                                             |
|      0      1      2      3                                                 |
|                                                                             |
|o10 : ChainComplex                                                           |
+-----------------------------------------------------------------------------+
|i11 : G' = { (id_(R^6))_{2,4,5,0,1,3},                                       |
|             (id_(R^6))_{2,0,1,4,5,3},                                       |
|             (id_(R^6))_{0,4,3,2,1,5},                                       |
|             (id_(R^6))_{0,2,1,4,3,5},                                       |
|              id_(R^6) }                                                     |
|                                                                             |
|o11 = {| 0 0 0 1 0 0 |, | 0 1 0 0 0 0 |, | 1 0 0 0 0 0 |, | 1 0 0 0 0 0 |, | |
|       | 0 0 0 0 1 0 |  | 0 0 1 0 0 0 |  | 0 0 0 0 1 0 |  | 0 0 1 0 0 0 |  | |
|       | 1 0 0 0 0 0 |  | 1 0 0 0 0 0 |  | 0 0 0 1 0 0 |  | 0 1 0 0 0 0 |  | |
|       | 0 0 0 0 0 1 |  | 0 0 0 0 0 1 |  | 0 0 1 0 0 0 |  | 0 0 0 0 1 0 |  | |
|       | 0 1 0 0 0 0 |  | 0 0 0 1 0 0 |  | 0 1 0 0 0 0 |  | 0 0 0 1 0 0 |  | |
|       | 0 0 1 0 0 0 |  | 0 0 0 0 1 0 |  | 0 0 0 0 0 1 |  | 0 0 0 0 0 1 |  | |
|      -----------------------------------------------------------------------|
|      1 0 0 0 0 0 |}                                                         |
|      0 1 0 0 0 0 |                                                          |
|      0 0 1 0 0 0 |                                                          |
|      0 0 0 1 0 0 |                                                          |
|      0 0 0 0 1 0 |                                                          |
|      0 0 0 0 0 1 |                                                          |
|                                                                             |
|o11 : List                                                                   |
+-----------------------------------------------------------------------------+
|i12 : action(RM,G,G',0)                                                      |
|                                                                             |
|o12 = ChainComplex with 5 actors                                             |
|                                                                             |
|o12 : ActionOnComplex                                                        |
+-----------------------------------------------------------------------------+

By changing the last argument, it is possible to specify the action of the
group on any module of the resolution. For example, suppose we wish to
construct the action of the symmetric group on the resolution of the canonical
module of the quotient in the first example. In this case, it will be more
convenient to declare a trivial action on the last module of the resolution
rather than figuring out the action on the first module (i.e., the generators
of the canonical module). This can be achieved as follows.

+--------------------------------------------------+
|i13 : E = Ext^3(R^1/I,R^{-4})                     |
|                                                  |
|o13 = cokernel | x_4 x_2 0   x_3 0   x_3 0   0   ||
|               | 0   0   x_4 x_3 x_1 0   0   0   ||
|               | 0   0   0   0   0   x_3 x_2 x_1 ||
|                                                  |
|                             3                    |
|o13 : R-module, quotient of R                     |
+--------------------------------------------------+
|i14 : RE = res E                                  |
|                                                  |
|       3      8      6      1                     |
|o14 = R  <-- R  <-- R  <-- R  <-- 0               |
|                                                  |
|      0      1      2      3      4               |
|                                                  |
|o14 : ChainComplex                                |
+--------------------------------------------------+
|i15 : G'' = toList(5:id_(R^1))                    |
|                                                  |
|o15 = {| 1 |, | 1 |, | 1 |, | 1 |, | 1 |}         |
|                                                  |
|o15 : List                                        |
+--------------------------------------------------+
|i16 : action(RE,G,G'',3)                          |
|                                                  |
|o16 = ChainComplex with 5 actors                  |
|                                                  |
|o16 : ActionOnComplex                             |
+--------------------------------------------------+

Caveat
======

This function determines if the complex C is a free resolution computed by
Macaulay2. If this is not the case, then the function produces a warning to
inform the user that later computations (i.e., Betti characters) may fail or
return meaningless results.

Ways to use this method:
========================

  * "action(ChainComplex,List)"
  * action(ChainComplex,List,List,ZZ)
    -- define finite group action
    on a resolution

action(Module,List,List) -- define finite group action on a graded module
*************************************************************************

Synopsis
========

  * Function: action,
  * Usage:
        A=action(M,G)
        A=action(M,G,G')
  * Inputs:
      * M, a module (Macaulay2Doc), a graded
        module/ideal/quotient over a polynomial ring R
      * G, a list (Macaulay2Doc), of group elements acting on the
        variables of R
      * G', a list (Macaulay2Doc), of group elements acting on the
        ambient module of M
  * Optional inputs (Macaulay2Doc),:
      * Sub, => ..., default value true, act on ring via
        substitutions (rather than matrices)
  * Outputs:
      * A, an instance of the type ActionOnGradedModule,

Description
===========

This function is provided by the package BettiCharacters.

Use this function to define the action of a finite group on a graded module
over a polynomial ring with coefficients in a field. This includes also an
ideal in the polynomial ring, a quotient of the polynomial ring, and the
polynomial ring itself. After setting up the action, use the function
character, to compute the characters of graded components.

The input G is a List (Macaulay2Doc), of group elements acting on
the vector space spanned by the variables of the ring R. By default, these
elements are passed as one-row substitution matrices as those accepted by
substitute (Macaulay2Doc). The optional input Sub, may
be used to pass these elements as square matrices. For the function to work, G
can be an arbitrary list of group elements however, in order to obtain a
complete representation theoretic description of the characters, G should be a
list of representatives of the conjugacy classes of the group.

The example below sets up the action of a symmetric group on a polynomial ring,
a monomial ideal, and the corresponding quotient. The symmetric group acts by
permuting the four variables of the ring. The conjugacy classes of permutations
are determined by their cycle types, which are in bijection with partitions. In
this case, we consider five permutations with cycle types, in order: 4, 31, 22,
211, 1111.

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_1..x_4]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : G = {matrix{{x_2,x_3,x_4,x_1}},                                         |
|          matrix{{x_2,x_3,x_1,x_4}},                                         |
|          matrix{{x_2,x_1,x_4,x_3}},                                         |
|          matrix{{x_2,x_1,x_3,x_4}},                                         |
|          matrix{{x_1,x_2,x_3,x_4}} }                                        |
|                                                                             |
|o2 = {| x_2 x_3 x_4 x_1 |, | x_2 x_3 x_1 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o2 : List                                                                    |
+-----------------------------------------------------------------------------+
|i3 : action(R,G)                                                             |
|                                                                             |
|o3 = PolynomialRing with 5 actors                                            |
|                                                                             |
|o3 : ActionOnGradedModule                                                    |
+-----------------------------------------------------------------------------+
|i4 : I = ideal apply(subsets(gens R,2),product)                              |
|                                                                             |
|o4 = ideal (x x , x x , x x , x x , x x , x x )                              |
|             1 2   1 3   2 3   1 4   2 4   3 4                               |
|                                                                             |
|o4 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i5 : action(I,G)                                                             |
|                                                                             |
|o5 = Ideal with 5 actors                                                     |
|                                                                             |
|o5 : ActionOnGradedModule                                                    |
+-----------------------------------------------------------------------------+
|i6 : Q = R/I                                                                 |
|                                                                             |
|o6 = Q                                                                       |
|                                                                             |
|o6 : QuotientRing                                                            |
+-----------------------------------------------------------------------------+
|i7 : A = action(Q,G)                                                         |
|                                                                             |
|o7 = QuotientRing with 5 actors                                              |
|                                                                             |
|o7 : ActionOnGradedModule                                                    |
+-----------------------------------------------------------------------------+

The group elements acting on the ring can be recovered using ringActors.
To recover just the number of group elements, use numActors.

+-----------------------------------------------------------------------------+
|i8 : ringActors A                                                            |
|                                                                             |
|o8 = {| x_2 x_3 x_4 x_1 |, | x_2 x_3 x_1 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o8 : List                                                                    |
+-----------------------------------------------------------------------------+
|i9 : numActors A                                                             |
|                                                                             |
|o9 = 5                                                                       |
+-----------------------------------------------------------------------------+

The simplified version of this function assumes that the group acts trivially
on the generator of the polynomial ring.

When working with a module M, one needs to declare the action of the group on a
basis of the free ambient module of M. Unless this action is trivial, it can be
specified using the third argument, a list G' of matrices written with respect
to the basis of the free ambient module of  M used by Macaulay2. Moreover, the
group elements in G' must match (in number and order) the elements in G.

To illustrate, we set up the action on the canonical module of the quotient in
the previous example. We obtain the list of group elements G' for the canonical
module by computing the action on its resolution.

+-------------------------------------------------------------------+
|i10 : E = Ext^3(R^1/I,R^{-4})                                      |
|                                                                   |
|o10 = cokernel | x_4 x_2 0   x_3 0   x_3 0   0   |                 |
|               | 0   0   x_4 x_3 x_1 0   0   0   |                 |
|               | 0   0   0   0   0   x_3 x_2 x_1 |                 |
|                                                                   |
|                             3                                     |
|o10 : R-module, quotient of R                                      |
+-------------------------------------------------------------------+
|i11 : RE = res E                                                   |
|                                                                   |
|       3      8      6      1                                      |
|o11 = R  <-- R  <-- R  <-- R  <-- 0                                |
|                                                                   |
|      0      1      2      3      4                                |
|                                                                   |
|o11 : ChainComplex                                                 |
+-------------------------------------------------------------------+
|i12 : G'' = toList(5:id_(R^1))                                     |
|                                                                   |
|o12 = {| 1 |, | 1 |, | 1 |, | 1 |, | 1 |}                          |
|                                                                   |
|o12 : List                                                         |
+-------------------------------------------------------------------+
|i13 : B = action(RE,G,G'',3)                                       |
|                                                                   |
|o13 = ChainComplex with 5 actors                                   |
|                                                                   |
|o13 : ActionOnComplex                                              |
+-------------------------------------------------------------------+
|i14 : G' = actors(B,0)                                             |
|                                                                   |
|o14 = {| 0  0 1 |, | -1 1 1 |, | 0  -1 0  |, | 0 1 0  |, | 1 0 0 |}|
|       | 1  0 0 |  | -1 0 0 |  | -1 0  0  |  | 1 0 0  |  | 0 1 0 | |
|       | -1 1 1 |  | 0  0 1 |  | 1  -1 -1 |  | 0 0 -1 |  | 0 0 1 | |
|                                                                   |
|o14 : List                                                         |
+-------------------------------------------------------------------+
|i15 : action(E,G,G')                                               |
|                                                                   |
|o15 = Module with 5 actors                                         |
|                                                                   |
|o15 : ActionOnGradedModule                                         |
+-------------------------------------------------------------------+

Ways to use this method:
========================

  * "action(Ideal,List)"
  * "action(Ideal,List,List)"
  * "action(Module,List)"
  * action(Module,List,List) -- define
    finite group action on a graded module
  * "action(PolynomialRing,List)"
  * "action(PolynomialRing,List,List)"
  * "action(QuotientRing,List)"
  * "action(QuotientRing,List,List)"

Sub -- act on ring via substitutions (rather than matrices)
***********************************************************

Description
===========

This optional input is provided by the package BettiCharacters.

By default, the group elements acting on a ring are passed as one-row
substitution matrices as those accepted by substitute (Macaulay2Doc).
Setting Sub=>false allows the user to pass these
elements as square matrices.

The example below sets up the action of a symmetric group on the resolution of
a monomial ideal. The symmetric group acts by permuting the four variables of
the ring. The conjugacy classes of permutations are determined by their cycle
types, which are in bijection with partitions. In this case, we consider five
permutations with cycle types, in order: 4, 31, 22, 211, 1111. For simplicity,
we construct these matrices by permuting columns of the identity.

+----------------------------------------------------------------------+
|i1 : R = QQ[x_1..x_4]                                                 |
|                                                                      |
|o1 = R                                                                |
|                                                                      |
|o1 : PolynomialRing                                                   |
+----------------------------------------------------------------------+
|i2 : I = ideal apply(subsets(gens R,2),product)                       |
|                                                                      |
|o2 = ideal (x x , x x , x x , x x , x x , x x )                       |
|             1 2   1 3   2 3   1 4   2 4   3 4                        |
|                                                                      |
|o2 : Ideal of R                                                       |
+----------------------------------------------------------------------+
|i3 : RI = res I                                                       |
|                                                                      |
|      1      6      8      3                                          |
|o3 = R  <-- R  <-- R  <-- R  <-- 0                                    |
|                                                                      |
|     0      1      2      3      4                                    |
|                                                                      |
|o3 : ChainComplex                                                     |
+----------------------------------------------------------------------+
|i4 : G = { (id_(R^4))_{1,2,3,0},                                      |
|           (id_(R^4))_{1,2,0,3},                                      |
|           (id_(R^4))_{1,0,3,2},                                      |
|           (id_(R^4))_{1,0,2,3},                                      |
|            id_(R^4) }                                                |
|                                                                      |
|o4 = {| 0 0 0 1 |, | 0 0 1 0 |, | 0 1 0 0 |, | 0 1 0 0 |, | 1 0 0 0 |}|
|      | 1 0 0 0 |  | 1 0 0 0 |  | 1 0 0 0 |  | 1 0 0 0 |  | 0 1 0 0 | |
|      | 0 1 0 0 |  | 0 1 0 0 |  | 0 0 0 1 |  | 0 0 1 0 |  | 0 0 1 0 | |
|      | 0 0 1 0 |  | 0 0 0 1 |  | 0 0 1 0 |  | 0 0 0 1 |  | 0 0 0 1 | |
|                                                                      |
|o4 : List                                                             |
+----------------------------------------------------------------------+
|i5 : A = action(RI,G,Sub=>false)                                      |
|                                                                      |
|o5 = ChainComplex with 5 actors                                       |
|                                                                      |
|o5 : ActionOnComplex                                                  |
+----------------------------------------------------------------------+

Similarly, setting Sub=>false causes ringActors, and
inverseRingActors, to return the group elements acting on
the ring as square matrices. With the default setting Sub=>true, the same
elements are returned as one-row substitution matrices.

+-----------------------------------------------------------------------------+
|i6 : ringActors(A,Sub=>false)                                                |
|                                                                             |
|o6 = {| 0 0 0 1 |, | 0 0 1 0 |, | 0 1 0 0 |, | 0 1 0 0 |, | 1 0 0 0 |}       |
|      | 1 0 0 0 |  | 1 0 0 0 |  | 1 0 0 0 |  | 1 0 0 0 |  | 0 1 0 0 |        |
|      | 0 1 0 0 |  | 0 1 0 0 |  | 0 0 0 1 |  | 0 0 1 0 |  | 0 0 1 0 |        |
|      | 0 0 1 0 |  | 0 0 0 1 |  | 0 0 1 0 |  | 0 0 0 1 |  | 0 0 0 1 |        |
|                                                                             |
|o6 : List                                                                    |
+-----------------------------------------------------------------------------+
|i7 : inverseRingActors(A,Sub=>false)                                         |
|                                                                             |
|o7 = {| 0 1 0 0 |, | 0 1 0 0 |, | 0 1 0 0 |, | 0 1 0 0 |, | 1 0 0 0 |}       |
|      | 0 0 1 0 |  | 0 0 1 0 |  | 1 0 0 0 |  | 1 0 0 0 |  | 0 1 0 0 |        |
|      | 0 0 0 1 |  | 1 0 0 0 |  | 0 0 0 1 |  | 0 0 1 0 |  | 0 0 1 0 |        |
|      | 1 0 0 0 |  | 0 0 0 1 |  | 0 0 1 0 |  | 0 0 0 1 |  | 0 0 0 1 |        |
|                                                                             |
|o7 : List                                                                    |
+-----------------------------------------------------------------------------+
|i8 : ringActors(A)                                                           |
|                                                                             |
|o8 = {| x_2 x_3 x_4 x_1 |, | x_2 x_3 x_1 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o8 : List                                                                    |
+-----------------------------------------------------------------------------+
|i9 : inverseRingActors(A)                                                    |
|                                                                             |
|o9 = {| x_4 x_1 x_2 x_3 |, | x_3 x_1 x_2 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o9 : List                                                                    |
+-----------------------------------------------------------------------------+

Functions with optional argument named Sub :
============================================

  * "action(...,Sub=>...)"
  * "inverseRingActors(...,Sub=>...)"
  * "ringActors(...,Sub=>...)"

For the programmer
==================

The object Sub, is a symbol (Macaulay2Doc).

actors -- group elements of an action
*************************************

Description
===========

This function is provided by the package BettiCharacters.

When called (without additional arguments) on an object of type Action,
this function returns the list of group elements originally provided
by the user to act on a module or in a given homological degree of a
resolution. Note that these group elements are assumed to trivial, unless
otherwise indicated when constructing the action.

The user may specify additional arguments to obtain elements of the group
acting in other degrees. See the specific use cases for more details.

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_1..x_4]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : I = ideal apply(subsets(gens R,2),product)                              |
|                                                                             |
|o2 = ideal (x x , x x , x x , x x , x x , x x )                              |
|             1 2   1 3   2 3   1 4   2 4   3 4                               |
|                                                                             |
|o2 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i3 : M = module I                                                            |
|                                                                             |
|o3 = image | x_1x_2 x_1x_3 x_2x_3 x_1x_4 x_2x_4 x_3x_4 |                     |
|                                                                             |
|                             1                                               |
|o3 : R-module, submodule of R                                                |
+-----------------------------------------------------------------------------+
|i4 : RM = res M                                                              |
|                                                                             |
|      6      8      3                                                        |
|o4 = R  <-- R  <-- R  <-- 0                                                  |
|                                                                             |
|     0      1      2      3                                                  |
|                                                                             |
|o4 : ChainComplex                                                            |
+-----------------------------------------------------------------------------+
|i5 : G = {matrix{{x_2,x_3,x_4,x_1}},                                         |
|          matrix{{x_2,x_3,x_1,x_4}},                                         |
|          matrix{{x_2,x_1,x_4,x_3}},                                         |
|          matrix{{x_2,x_1,x_3,x_4}},                                         |
|          matrix{{x_1,x_2,x_3,x_4}} }                                        |
|                                                                             |
|o5 = {| x_2 x_3 x_4 x_1 |, | x_2 x_3 x_1 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o5 : List                                                                    |
+-----------------------------------------------------------------------------+
|i6 : G' = { (id_(R^6))_{2,4,5,0,1,3},                                        |
|            (id_(R^6))_{2,0,1,4,5,3},                                        |
|            (id_(R^6))_{0,4,3,2,1,5},                                        |
|            (id_(R^6))_{0,2,1,4,3,5},                                        |
|             id_(R^6) }                                                      |
|                                                                             |
|o6 = {| 0 0 0 1 0 0 |, | 0 1 0 0 0 0 |, | 1 0 0 0 0 0 |, | 1 0 0 0 0 0 |, | 1|
|      | 0 0 0 0 1 0 |  | 0 0 1 0 0 0 |  | 0 0 0 0 1 0 |  | 0 0 1 0 0 0 |  | 0|
|      | 1 0 0 0 0 0 |  | 1 0 0 0 0 0 |  | 0 0 0 1 0 0 |  | 0 1 0 0 0 0 |  | 0|
|      | 0 0 0 0 0 1 |  | 0 0 0 0 0 1 |  | 0 0 1 0 0 0 |  | 0 0 0 0 1 0 |  | 0|
|      | 0 1 0 0 0 0 |  | 0 0 0 1 0 0 |  | 0 1 0 0 0 0 |  | 0 0 0 1 0 0 |  | 0|
|      | 0 0 1 0 0 0 |  | 0 0 0 0 1 0 |  | 0 0 0 0 0 1 |  | 0 0 0 0 0 1 |  | 0|
|     ------------------------------------------------------------------------|
|     0 0 0 0 0 |}                                                            |
|     1 0 0 0 0 |                                                             |
|     0 1 0 0 0 |                                                             |
|     0 0 1 0 0 |                                                             |
|     0 0 0 1 0 |                                                             |
|     0 0 0 0 1 |                                                             |
|                                                                             |
|o6 : List                                                                    |
+-----------------------------------------------------------------------------+
|i7 : A = action(RM,G,G',0)                                                   |
|                                                                             |
|o7 = ChainComplex with 5 actors                                              |
|                                                                             |
|o7 : ActionOnComplex                                                         |
+-----------------------------------------------------------------------------+
|i8 : actors(A)                                                               |
|                                                                             |
|o8 = {{2} | 0 0 0 1 0 0 |, {2} | 0 1 0 0 0 0 |, {2} | 1 0 0 0 0 0 |, {2} | 1 |
|      {2} | 0 0 0 0 1 0 |  {2} | 0 0 1 0 0 0 |  {2} | 0 0 0 0 1 0 |  {2} | 0 |
|      {2} | 1 0 0 0 0 0 |  {2} | 1 0 0 0 0 0 |  {2} | 0 0 0 1 0 0 |  {2} | 0 |
|      {2} | 0 0 0 0 0 1 |  {2} | 0 0 0 0 0 1 |  {2} | 0 0 1 0 0 0 |  {2} | 0 |
|      {2} | 0 1 0 0 0 0 |  {2} | 0 0 0 1 0 0 |  {2} | 0 1 0 0 0 0 |  {2} | 0 |
|      {2} | 0 0 1 0 0 0 |  {2} | 0 0 0 0 1 0 |  {2} | 0 0 0 0 0 1 |  {2} | 0 |
|     ------------------------------------------------------------------------|
|     0 0 0 0 0 |, {2} | 1 0 0 0 0 0 |}                                       |
|     0 1 0 0 0 |  {2} | 0 1 0 0 0 0 |                                        |
|     1 0 0 0 0 |  {2} | 0 0 1 0 0 0 |                                        |
|     0 0 0 1 0 |  {2} | 0 0 0 1 0 0 |                                        |
|     0 0 1 0 0 |  {2} | 0 0 0 0 1 0 |                                        |
|     0 0 0 0 1 |  {2} | 0 0 0 0 0 1 |                                        |
|                                                                             |
|o8 : List                                                                    |
+-----------------------------------------------------------------------------+
|i9 : B = action(M,G)                                                         |
|                                                                             |
|o9 = Module with 5 actors                                                    |
|                                                                             |
|o9 : ActionOnGradedModule                                                    |
+-----------------------------------------------------------------------------+
|i10 : actors(B)                                                              |
|                                                                             |
|o10 = {| 1 |, | 1 |, | 1 |, | 1 |, | 1 |}                                    |
|                                                                             |
|o10 : List                                                                   |
+-----------------------------------------------------------------------------+

See also
========

  * action -- define finite group action

Ways to use actors :
====================

  * "actors(Action)"
  * actors(ActionOnComplex,ZZ), --
    group elements of action on resolution
  * actors(ActionOnGradedModule,List)
    -- group elements acting on
    components of a module
  * "actors(ActionOnGradedModule,ZZ)" -- see
    actors(ActionOnGradedModule,List),
    -- group elements acting on components of a module

For the programmer
==================

The object actors, is a method function (Macaulay2Doc).

actors(ActionOnComplex,ZZ) -- group elements of action on resolution
********************************************************************

Synopsis
========

  * Function: actors,
  * Usage:
        actors(A,i)
  * Inputs:
      * A, an instance of the type ActionOnComplex, a
        finite group action on a minimal free resolution
      * i, an integer (Macaulay2Doc), a homological degree
  * Outputs:
      * a list (Macaulay2Doc), of group elements acting in
        homological degree i

Description
===========

This function is provided by the package BettiCharacters.

This function returns matrices describing elements of a finite group acting on
a minimal free resolution in a given homological degree. If the homological
degree is the one where the user originally defined the action, then the user
provided elements are returned. Otherwise, suitable elements are computed as
indicated in F. Galetto - Finite group characters on free resolutions (see
https://arxiv.org/abs/2106.14071 ).

To illustrate, we compute the action of a symmetric group on the resolution of
a monomial ideal. The ideal is generated by all squarefree monomials of degree
two in four variables. The symmetric group acts by permuting the four variables
of the ring. We only consider five permutations with cycle types, in order: 4,
31, 22, 211, 1111 (since these are enough to determine the characters of the
action).

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_1..x_4]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : I = ideal apply(subsets(gens R,2),product)                              |
|                                                                             |
|o2 = ideal (x x , x x , x x , x x , x x , x x )                              |
|             1 2   1 3   2 3   1 4   2 4   3 4                               |
|                                                                             |
|o2 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i3 : RI = res I                                                              |
|                                                                             |
|      1      6      8      3                                                 |
|o3 = R  <-- R  <-- R  <-- R  <-- 0                                           |
|                                                                             |
|     0      1      2      3      4                                           |
|                                                                             |
|o3 : ChainComplex                                                            |
+-----------------------------------------------------------------------------+
|i4 : G = {matrix{{x_2,x_3,x_4,x_1}},                                         |
|          matrix{{x_2,x_3,x_1,x_4}},                                         |
|          matrix{{x_2,x_1,x_4,x_3}},                                         |
|          matrix{{x_2,x_1,x_3,x_4}},                                         |
|          matrix{{x_1,x_2,x_3,x_4}} }                                        |
|                                                                             |
|o4 = {| x_2 x_3 x_4 x_1 |, | x_2 x_3 x_1 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o4 : List                                                                    |
+-----------------------------------------------------------------------------+
|i5 : A = action(RI,G)                                                        |
|                                                                             |
|o5 = ChainComplex with 5 actors                                              |
|                                                                             |
|o5 : ActionOnComplex                                                         |
+-----------------------------------------------------------------------------+
|i6 : actors(A,0)                                                             |
|                                                                             |
|o6 = {| 1 |, | 1 |, | 1 |, | 1 |, | 1 |}                                     |
|                                                                             |
|o6 : List                                                                    |
+-----------------------------------------------------------------------------+
|i7 : actors(A,1)                                                             |
|                                                                             |
|o7 = {{2} | 0 0 0 1 0 0 |, {2} | 0 1 0 0 0 0 |, {2} | 1 0 0 0 0 0 |, {2} | 1 |
|      {2} | 0 0 0 0 1 0 |  {2} | 0 0 1 0 0 0 |  {2} | 0 0 0 0 1 0 |  {2} | 0 |
|      {2} | 1 0 0 0 0 0 |  {2} | 1 0 0 0 0 0 |  {2} | 0 0 0 1 0 0 |  {2} | 0 |
|      {2} | 0 0 0 0 0 1 |  {2} | 0 0 0 0 0 1 |  {2} | 0 0 1 0 0 0 |  {2} | 0 |
|      {2} | 0 1 0 0 0 0 |  {2} | 0 0 0 1 0 0 |  {2} | 0 1 0 0 0 0 |  {2} | 0 |
|      {2} | 0 0 1 0 0 0 |  {2} | 0 0 0 0 1 0 |  {2} | 0 0 0 0 0 1 |  {2} | 0 |
|     ------------------------------------------------------------------------|
|     0 0 0 0 0 |, {2} | 1 0 0 0 0 0 |}                                       |
|     0 1 0 0 0 |  {2} | 0 1 0 0 0 0 |                                        |
|     1 0 0 0 0 |  {2} | 0 0 1 0 0 0 |                                        |
|     0 0 0 1 0 |  {2} | 0 0 0 1 0 0 |                                        |
|     0 0 1 0 0 |  {2} | 0 0 0 0 1 0 |                                        |
|     0 0 0 0 1 |  {2} | 0 0 0 0 0 1 |                                        |
|                                                                             |
|o7 : List                                                                    |
+-----------------------------------------------------------------------------+
|i8 : actors(A,2)                                                             |
|                                                                             |
|o8 = {{3} | 0 0 -1 1 0  0 0  0 |, {3} | -1 1 0 0 0 0  0 0  |, {3} | 0 0  1 0 |
|      {3} | 0 0 -1 0 0  0 0  0 |  {3} | -1 0 0 0 0 0  0 0  |  {3} | 0 0  1 -1|
|      {3} | 0 0 0  0 -1 1 0  0 |  {3} | 0  0 0 0 1 0  0 0  |  {3} | 1 0  0 0 |
|      {3} | 0 0 0  0 -1 0 0  0 |  {3} | 0  0 0 0 1 -1 0 0  |  {3} | 1 -1 0 0 |
|      {3} | 0 0 0  0 0  0 -1 1 |  {3} | 0  0 0 0 0 0  1 0  |  {3} | 0 0  0 0 |
|      {3} | 0 0 0  0 0  0 -1 0 |  {3} | 0  0 0 0 0 0  1 -1 |  {3} | 0 0  0 0 |
|      {3} | 1 0 0  0 0  0 0  0 |  {3} | 0  0 1 0 0 0  0 0  |  {3} | 0 0  0 0 |
|      {3} | 0 1 0  0 0  0 0  0 |  {3} | 0  0 0 1 0 0  0 0  |  {3} | 0 0  0 0 |
|     ------------------------------------------------------------------------|
|     0  0 0  0 |, {3} | 1 0  0 0  0 0 0 0 |, {3} | 1 0 0 0 0 0 0 0 |}        |
|     0  0 0  0 |  {3} | 1 -1 0 0  0 0 0 0 |  {3} | 0 1 0 0 0 0 0 0 |         |
|     0  0 0  0 |  {3} | 0 0  1 0  0 0 0 0 |  {3} | 0 0 1 0 0 0 0 0 |         |
|     0  0 0  0 |  {3} | 0 0  1 -1 0 0 0 0 |  {3} | 0 0 0 1 0 0 0 0 |         |
|     0  0 -1 1 |  {3} | 0 0  0 0  0 0 1 0 |  {3} | 0 0 0 0 1 0 0 0 |         |
|     0  0 0  1 |  {3} | 0 0  0 0  0 0 0 1 |  {3} | 0 0 0 0 0 1 0 0 |         |
|     -1 1 0  0 |  {3} | 0 0  0 0  1 0 0 0 |  {3} | 0 0 0 0 0 0 1 0 |         |
|     0  1 0  0 |  {3} | 0 0  0 0  0 1 0 0 |  {3} | 0 0 0 0 0 0 0 1 |         |
|                                                                             |
|o8 : List                                                                    |
+-----------------------------------------------------------------------------+
|i9 : actors(A,3)                                                             |
|                                                                             |
|o9 = {{4} | 0 -1 1 |, {4} | 0  1  0 |, {4} | 0  -1 1  |, {4} | 0 1 0  |, {4} |
|      {4} | 1 1  0 |  {4} | -1 -1 0 |  {4} | -1 0  -1 |  {4} | 1 0 0  |  {4} |
|      {4} | 0 1  0 |  {4} | 0  -1 1 |  {4} | 0  0  -1 |  {4} | 0 0 -1 |  {4} |
|     ------------------------------------------------------------------------|
|     | 1 0 0 |}                                                              |
|     | 0 1 0 |                                                               |
|     | 0 0 1 |                                                               |
|                                                                             |
|o9 : List                                                                    |
+-----------------------------------------------------------------------------+

Caveat
======

When applied to a minimal free resolution $F_\bullet$, this function returns
matrices that induce the action of group elements on the representations
$F_i/\mathfrak{m}F_i$, where $\mathfrak{m}$ is the maximal ideal generated by
the variables of the polynomial ring. While these matrices often represent the
action of the same group elements on the modules $F_i$ of the resolution, this
is in general not a guarantee.

See also
========

  * action -- define finite group action

Ways to use this method:
========================

  * actors(ActionOnComplex,ZZ), --
    group elements of action on resolution

actors(ActionOnGradedModule,List) -- group elements acting on components of a module
************************************************************************************

Synopsis
========

  * Function: actors,
  * Usage:
        actors(A,d)
  * Inputs:
      * A, an instance of the type ActionOnGradedModule,
        a finite group action on a graded module
      * d, a list (Macaulay2Doc), a (multi)degree
  * Outputs:
      * a list (Macaulay2Doc), of group elements acting in the
        given (multi)degree

Description
===========

This function is provided by the package BettiCharacters.

This function returns matrices describing elements of a finite group acting on
the graded component of (multi)degree d of a module.

To illustrate, we compute the action of a symmetric group on the components of
a monomial ideal. The symmetric group acts by permuting the four variables of
the ring. We only consider five permutations with cycle types, in order: 4, 31,
22, 211, 1111 (since these are enough to determine the characters of the
action).

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_1..x_4]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : I = ideal apply(subsets(gens R,2),product)                              |
|                                                                             |
|o2 = ideal (x x , x x , x x , x x , x x , x x )                              |
|             1 2   1 3   2 3   1 4   2 4   3 4                               |
|                                                                             |
|o2 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i3 : G = {matrix{{x_2,x_3,x_4,x_1}},                                         |
|          matrix{{x_2,x_3,x_1,x_4}},                                         |
|          matrix{{x_2,x_1,x_4,x_3}},                                         |
|          matrix{{x_2,x_1,x_3,x_4}},                                         |
|          matrix{{x_1,x_2,x_3,x_4}} }                                        |
|                                                                             |
|o3 = {| x_2 x_3 x_4 x_1 |, | x_2 x_3 x_1 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o3 : List                                                                    |
+-----------------------------------------------------------------------------+
|i4 : A = action(I,G)                                                         |
|                                                                             |
|o4 = Ideal with 5 actors                                                     |
|                                                                             |
|o4 : ActionOnGradedModule                                                    |
+-----------------------------------------------------------------------------+
|i5 : actors(A,1)                                                             |
|                                                                             |
|o5 = {0, 0, 0, 0, 0}                                                         |
|                                                                             |
|o5 : List                                                                    |
+-----------------------------------------------------------------------------+
|i6 : actors(A,2)                                                             |
|                                                                             |
|o6 = {{2} | 0 0 0 1 0 0 |, {2} | 0 1 0 0 0 0 |, {2} | 1 0 0 0 0 0 |, {2} | 1 |
|      {2} | 0 0 0 0 1 0 |  {2} | 0 0 1 0 0 0 |  {2} | 0 0 0 0 1 0 |  {2} | 0 |
|      {2} | 1 0 0 0 0 0 |  {2} | 1 0 0 0 0 0 |  {2} | 0 0 0 1 0 0 |  {2} | 0 |
|      {2} | 0 0 0 0 0 1 |  {2} | 0 0 0 0 0 1 |  {2} | 0 0 1 0 0 0 |  {2} | 0 |
|      {2} | 0 1 0 0 0 0 |  {2} | 0 0 0 1 0 0 |  {2} | 0 1 0 0 0 0 |  {2} | 0 |
|      {2} | 0 0 1 0 0 0 |  {2} | 0 0 0 0 1 0 |  {2} | 0 0 0 0 0 1 |  {2} | 0 |
|     ------------------------------------------------------------------------|
|     0 0 0 0 0 |, {2} | 1 0 0 0 0 0 |}                                       |
|     0 1 0 0 0 |  {2} | 0 1 0 0 0 0 |                                        |
|     1 0 0 0 0 |  {2} | 0 0 1 0 0 0 |                                        |
|     0 0 0 1 0 |  {2} | 0 0 0 1 0 0 |                                        |
|     0 0 1 0 0 |  {2} | 0 0 0 0 1 0 |                                        |
|     0 0 0 0 1 |  {2} | 0 0 0 0 0 1 |                                        |
|                                                                             |
|o6 : List                                                                    |
+-----------------------------------------------------------------------------+
|i7 : actors(A,3)                                                             |
|                                                                             |
|o7 = {{3} | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 |, {3} | 0 0 0 0 0 1 0 0 0 0 0 0 |
|      {3} | 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 |  {3} | 0 0 0 0 1 0 0 0 0 0 0 0 |
|      {3} | 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 |  {3} | 0 0 1 0 0 0 0 0 0 0 0 0 |
|      {3} | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 1 0 0 0 0 0 |
|      {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 |  {3} | 0 0 0 0 0 0 0 0 1 0 0 0 |
|      {3} | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 |  {3} | 0 0 0 0 0 0 0 1 0 0 0 0 |
|      {3} | 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 1 0 0 |
|      {3} | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |  {3} | 1 0 0 0 0 0 0 0 0 0 0 0 |
|      {3} | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |  {3} | 0 1 0 0 0 0 0 0 0 0 0 0 |
|      {3} | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 1 0 0 0 0 0 0 0 0 |
|      {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 |
|      {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 |
|      {3} | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 1 0 |
|      {3} | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 1 |
|      {3} | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 |
|      {3} | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 |
|     ------------------------------------------------------------------------|
|     0 0 0 0 |, {3} | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |, {3} | 0 1 0 0 0 0 0 |
|     0 0 0 0 |  {3} | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |  {3} | 1 0 0 0 0 0 0 |
|     0 0 0 0 |  {3} | 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 |  {3} | 0 0 1 0 0 0 0 |
|     0 0 0 0 |  {3} | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 1 0 0 0 |
|     0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 |  {3} | 0 0 0 0 0 0 0 |
|     0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 |  {3} | 0 0 0 0 0 0 0 |
|     0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 |
|     0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 |  {3} | 0 0 0 0 1 0 0 |
|     0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 |  {3} | 0 0 0 0 0 1 0 |
|     0 0 0 0 |  {3} | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 1 |
|     0 0 1 0 |  {3} | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 |
|     0 0 0 1 |  {3} | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 |
|     0 0 0 0 |  {3} | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 |
|     0 0 0 0 |  {3} | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 |
|     1 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 |  {3} | 0 0 0 0 0 0 0 |
|     0 1 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 |  {3} | 0 0 0 0 0 0 0 |
|     ------------------------------------------------------------------------|
|     0 0 0 0 0 0 0 0 0 |, {3} | 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |}           |
|     0 0 0 0 0 0 0 0 0 |  {3} | 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |            |
|     0 0 0 0 0 0 0 0 0 |  {3} | 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 |            |
|     0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 |            |
|     1 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 |            |
|     0 1 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 |            |
|     0 0 1 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 |            |
|     0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 |            |
|     0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 |            |
|     0 0 0 0 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 |            |
|     0 0 0 0 0 1 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 |            |
|     0 0 0 0 0 0 1 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 |            |
|     0 0 0 1 0 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 |            |
|     0 0 0 0 1 0 0 0 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 |            |
|     0 0 0 0 0 0 0 1 0 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 |            |
|     0 0 0 0 0 0 0 0 1 |  {3} | 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 |            |
|                                                                             |
|o7 : List                                                                    |
+-----------------------------------------------------------------------------+

The degree argument can be an integer (in the case of single graded modules) or
a list of integers (in the case of a multigraded module).

See also
========

  * action -- define finite group action

Ways to use this method:
========================

  * actors(ActionOnGradedModule,List)
    -- group elements acting on
    components of a module
  * "actors(ActionOnGradedModule,ZZ)"

inverseRingActors -- get inverse of action on ring generators
*************************************************************

Synopsis
========

  * Usage:
        inverseRingActors(A)
  * Inputs:
      * A, an instance of the type Action,
  * Optional inputs (Macaulay2Doc),:
      * Sub, => ..., default value true, act on ring via
        substitutions (rather than matrices)
  * Outputs:
      * G, a list (Macaulay2Doc), of group elements

Description
===========

This function is provided by the package BettiCharacters.

Returns a List (Macaulay2Doc), of group elements acting on the
vector space spanned by the variables of the polynomial ring associated with
the object acted upon. These are the inverses of the elements originally
defined by the user when constructing the action. By default, these elements
are expressed as one-row substitution matrices as those accepted by
substitute (Macaulay2Doc). The optional input Sub, may
be used to return these elements as square matrices.

See also
========

  * action -- define finite group action

Ways to use inverseRingActors :
===============================

  * "inverseRingActors(Action)"

For the programmer
==================

The object inverseRingActors, is a method function with options (Macaulay2Doc).

numActors -- number of acting elements
**************************************

Synopsis
========

  * Usage:
        numActors(A)
  * Inputs:
      * A, an instance of the type Action,
  * Outputs:
      * an integer (Macaulay2Doc),

Description
===========

This function is provided by the package BettiCharacters.

Returns the number of group elements passed by the user when defining the given
action. This number is not necessarily the order of the acting group because in
order to compute characters it is enough to work with a representative of each
conjugacy class of the group.

See also
========

  * action -- define finite group action

Ways to use numActors :
=======================

  * "numActors(Action)"

For the programmer
==================

The object numActors, is a method function (Macaulay2Doc).

character -- compute characters of finite group action
******************************************************

Description
===========

This function is provided by the package BettiCharacters.

Use this function to compute the Betti characters of a finite group action on a
minimal free resolution or the characters of a finite group action on the
components of a graded module. See the specific use cases for more details.

Ways to use character :
=======================

  * character(ActionOnComplex), --
    compute all Betti characters of minimal free resolution
  * character(ActionOnComplex,ZZ),
    -- compute Betti characters of minimal free resolution
  * character(ActionOnGradedModule,List)
    -- compute characters of graded
    components of a module
  * "character(ActionOnGradedModule,ZZ)" -- see
    character(ActionOnGradedModule,List),
    -- compute characters of graded
    components of a module
  * "character(ActionOnGradedModule,ZZ,ZZ)" -- see
    character(ActionOnGradedModule,List),
    -- compute characters of graded
    components of a module

For the programmer
==================

The object character, is a method function (Macaulay2Doc).

Character -- the class of all characters of finite group representations
************************************************************************

Description
===========

This class is provided by the package BettiCharacters.

Characters appear as values in GradedCharacter,s.

For the programmer
==================

The object Character, is a type (Macaulay2Doc),
with ancestor classes VisibleList (Macaulay2Doc), <
BasicList (Macaulay2Doc) < Thing (Macaulay2Doc).

GradedCharacter -- the class of all graded characters of finite group representations
*************************************************************************************

Description
===========

This class is provided by the package BettiCharacters.

Functions and methods returning an object of class GradedCharacter :
====================================================================

  * character(ActionOnComplex,ZZ),
    -- compute Betti characters of minimal free resolution
  * character(ActionOnGradedModule,List)
    -- compute characters of graded
    components of a module
  * "character(ActionOnGradedModule,ZZ)" -- see
    character(ActionOnGradedModule,List),
    -- compute characters of graded
    components of a module
  * "character(ActionOnGradedModule,ZZ,ZZ)" -- see
    character(ActionOnGradedModule,List),
    -- compute characters of graded
    components of a module

For the programmer
==================

The object GradedCharacter, is a type (Macaulay2Doc),
with ancestor classes HashTable (Macaulay2Doc),
< Thing (Macaulay2Doc).

character(ActionOnComplex) -- compute all Betti characters of minimal free resolution
*************************************************************************************

Synopsis
========

  * Function: character,
  * Usage:
        character(A)
  * Inputs:
      * A, an instance of the type ActionOnComplex, a
        finite group action on a minimal free resolution
  * Outputs:
      * a hash table (Macaulay2Doc), of the Betti characters
        of the resolution

Description
===========

This function is provided by the package BettiCharacters.

Use this function to compute all nonzero Betti characters of a finite group
action on a minimal free resolution. This function calls
character(ActionOnComplex,ZZ), on all
nonzero homological degrees and then assembles the outputs in a hash table
indexed by homological degree.

To illustrate, we compute the Betti characters of a symmetric group on the
resolution of a monomial ideal. The ideal is the symbolic square of the ideal
generated by all squarefree monomials of degree three in four variables. The
symmetric group acts by permuting the four variables of the ring. The
characters are determined by five permutations with cycle types, in order: 4,
31, 22, 211, 1111.

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_1..x_4]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : J = intersect(apply(subsets(gens R,3),x->(ideal x)^2))                  |
|                                                                             |
|                                             2 2   2 2   2 2   2 2   2 2     |
|o2 = ideal (x x x , x x x , x x x , x x x , x x , x x , x x , x x , x x ,    |
|             2 3 4   1 3 4   1 2 4   1 2 3   3 4   2 4   1 4   2 3   1 3     |
|     ------------------------------------------------------------------------|
|      2 2                                                                    |
|     x x )                                                                   |
|      1 2                                                                    |
|                                                                             |
|o2 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i3 : RJ = res J                                                              |
|                                                                             |
|      1      10      15      6                                               |
|o3 = R  <-- R   <-- R   <-- R  <-- 0                                         |
|                                                                             |
|     0      1       2       3      4                                         |
|                                                                             |
|o3 : ChainComplex                                                            |
+-----------------------------------------------------------------------------+
|i4 : G = { matrix{{x_2,x_3,x_4,x_1}},                                        |
|           matrix{{x_2,x_3,x_1,x_4}},                                        |
|           matrix{{x_2,x_1,x_4,x_3}},                                        |
|           matrix{{x_2,x_1,x_3,x_4}},                                        |
|           matrix{{x_1,x_2,x_3,x_4}} }                                       |
|                                                                             |
|o4 = {| x_2 x_3 x_4 x_1 |, | x_2 x_3 x_1 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o4 : List                                                                    |
+-----------------------------------------------------------------------------+
|i5 : A = action(RJ,G)                                                        |
|                                                                             |
|o5 = ChainComplex with 5 actors                                              |
|                                                                             |
|o5 : ActionOnComplex                                                         |
+-----------------------------------------------------------------------------+
|i6 : character(A)                                                            |
|                                                                             |
|o6 = HashTable{0 => GradedCharacter{{0} => Character{1, 1, 1, 1, 1}}  }      |
|               1 => GradedCharacter{{3} => Character{0, 1, 0, 2, 4}}         |
|                                    {4} => Character{0, 0, 2, 2, 6}          |
|               2 => GradedCharacter{{4} => Character{-1, 0, -1, 1, 3}}       |
|                                    {5} => Character{0, 0, 0, 2, 12}         |
|               3 => GradedCharacter{{6} => Character{0, 0, -2, 0, 6}}        |
|                                                                             |
|o6 : HashTable                                                               |
+-----------------------------------------------------------------------------+

See character(ActionOnComplex,ZZ),
for more details on this example.

See also
========

  * action -- define finite group action
  * character(ActionOnComplex,ZZ),
    -- compute Betti characters of minimal free resolution

Ways to use this method:
========================

  * character(ActionOnComplex), --
    compute all Betti characters of minimal free resolution

character(ActionOnComplex,ZZ) -- compute Betti characters of minimal free resolution
************************************************************************************

Synopsis
========

  * Function: character,
  * Usage:
        character(A,i)
  * Inputs:
      * A, an instance of the type ActionOnComplex, a
        finite group action on a minimal free resolution
      * i, an integer (Macaulay2Doc), a homological degree
  * Outputs:
      * an instance of the type GradedCharacter, the
        i-th Betti character of the resolution

Description
===========

This function is provided by the package BettiCharacters.

Use this function to compute the Betti characters of a finite group action on a
minimal free resolution in a given homological degree. More explicitly, let
$F_\bullet$ be a minimal free resolution of a module $M$ over a polynomial ring
$R$, with a compatible action of a finite group $G$. If $\mathfrak{m}$ denotes
the maximal ideal generated by the variables of $R$, then $F_i/\mathfrak{m}F_i$
is a graded representation of $G$. We refer to its character as the $i$-th
Betti character of $M$ (or a minimal free resolution of $M$). Betti characters
are computed using Algorithm 1 in F. Galetto - Finite group characters on free
resolutions (see https://arxiv.org/abs/2106.14071 ).

To illustrate, we compute the Betti characters of a symmetric group on the
resolution of a monomial ideal. The ideal is the symbolic square of the ideal
generated by all squarefree monomials of degree three in four variables. The
symmetric group acts by permuting the four variables of the ring. The
characters are determined by five permutations with cycle types, in order: 4,
31, 22, 211, 1111.

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_1..x_4]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : J = intersect(apply(subsets(gens R,3),x->(ideal x)^2))                  |
|                                                                             |
|                                             2 2   2 2   2 2   2 2   2 2     |
|o2 = ideal (x x x , x x x , x x x , x x x , x x , x x , x x , x x , x x ,    |
|             2 3 4   1 3 4   1 2 4   1 2 3   3 4   2 4   1 4   2 3   1 3     |
|     ------------------------------------------------------------------------|
|      2 2                                                                    |
|     x x )                                                                   |
|      1 2                                                                    |
|                                                                             |
|o2 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i3 : RJ = res J                                                              |
|                                                                             |
|      1      10      15      6                                               |
|o3 = R  <-- R   <-- R   <-- R  <-- 0                                         |
|                                                                             |
|     0      1       2       3      4                                         |
|                                                                             |
|o3 : ChainComplex                                                            |
+-----------------------------------------------------------------------------+
|i4 : G = { matrix{{x_2,x_3,x_4,x_1}},                                        |
|           matrix{{x_2,x_3,x_1,x_4}},                                        |
|           matrix{{x_2,x_1,x_4,x_3}},                                        |
|           matrix{{x_2,x_1,x_3,x_4}},                                        |
|           matrix{{x_1,x_2,x_3,x_4}} }                                       |
|                                                                             |
|o4 = {| x_2 x_3 x_4 x_1 |, | x_2 x_3 x_1 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o4 : List                                                                    |
+-----------------------------------------------------------------------------+
|i5 : A = action(RJ,G)                                                        |
|                                                                             |
|o5 = ChainComplex with 5 actors                                              |
|                                                                             |
|o5 : ActionOnComplex                                                         |
+-----------------------------------------------------------------------------+
|i6 : character(A,0)                                                          |
|                                                                             |
|o6 = GradedCharacter{{0} => Character{1, 1, 1, 1, 1}}                        |
|                                                                             |
|o6 : GradedCharacter                                                         |
+-----------------------------------------------------------------------------+

By construction, the character in homological degree 0 is concentrated in
degree 0 and trivial.

+-----------------------------------------------------+
|i7 : character(A,1)                                  |
|                                                     |
|o7 = GradedCharacter{{3} => Character{0, 1, 0, 2, 4}}|
|                     {4} => Character{0, 0, 2, 2, 6} |
|                                                     |
|o7 : GradedCharacter                                 |
+-----------------------------------------------------+

The character in homological degree 1 has two components. The component of
degree 3 is the permutation representation spanned by the squarefree monomials
of degree 3 (which can be identified with the natural representation of the
symmetric group). The component of degree 4 is the permutation representation
spanned by the squares of the squarefree monomials of degree 2.

+-------------------------------------------------------+
|i8 : character(A,2)                                    |
|                                                       |
|o8 = GradedCharacter{{4} => Character{-1, 0, -1, 1, 3}}|
|                     {5} => Character{0, 0, 0, 2, 12}  |
|                                                       |
|o8 : GradedCharacter                                   |
+-------------------------------------------------------+

In homological degree 2, there is a component of degree 4 which is isomorphic
to the irreducible standard representation of the symmetric group. In degree 5,
we find the permutation representation of the symmetric group on the set of
ordered pairs of distinct elements from 1 to 4.

+------------------------------------------------------+
|i9 : character(A,3)                                   |
|                                                      |
|o9 = GradedCharacter{{6} => Character{0, 0, -2, 0, 6}}|
|                                                      |
|o9 : GradedCharacter                                  |
+------------------------------------------------------+

Finally, the character in homological degree 3 is concentrated in degree 6 and
corresponds to the direct sum of the standard representation and the tensor
product of the standard representation and the sign representation (i.e., the
direct sum of the two irreducible representations of dimension 3).

See also
========

  * action -- define finite group action

Ways to use this method:
========================

  * character(ActionOnComplex,ZZ),
    -- compute Betti characters of minimal free resolution

character(ActionOnGradedModule,List) -- compute characters of graded components of a module
*******************************************************************************************

Synopsis
========

  * Function: character,
  * Usage:
        character(A,d)
        character(A,lo,hi)
  * Inputs:
      * A, an instance of the type ActionOnGradedModule,
        a finite group action on a graded module
      * d, a list (Macaulay2Doc), a (multi)degree
  * Outputs:
      * an instance of the type GradedCharacter, the
        character of the components of a module in given degrees

Description
===========

This function is provided by the package BettiCharacters.

Use this function to compute the characters of the finite group action on the
graded components of a module. The second argument is the (multi)degree of the
desired component. For $\mathbb{Z}$-graded rings, one may compute characters in
a range of degrees by providing the lowest and highest degrees in the range.

To illustrate, we compute the Betti characters of a symmetric group on the
graded components of a polynomial ring, a monomial ideal, and their quotient.
The characters are determined by five permutations with cycle types, in order:
4, 31, 22, 211, 1111.

+-----------------------------------------------------------------------------+
|i1 : R = QQ[x_1..x_4]                                                        |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : I = ideal apply(subsets(gens R,2),product)                              |
|                                                                             |
|o2 = ideal (x x , x x , x x , x x , x x , x x )                              |
|             1 2   1 3   2 3   1 4   2 4   3 4                               |
|                                                                             |
|o2 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i3 : G = {matrix{{x_2,x_3,x_4,x_1}},                                         |
|          matrix{{x_2,x_3,x_1,x_4}},                                         |
|          matrix{{x_2,x_1,x_4,x_3}},                                         |
|          matrix{{x_2,x_1,x_3,x_4}},                                         |
|          matrix{{x_1,x_2,x_3,x_4}} }                                        |
|                                                                             |
|o3 = {| x_2 x_3 x_4 x_1 |, | x_2 x_3 x_1 x_4 |, | x_2 x_1 x_4 x_3 |, | x_2   |
|     ------------------------------------------------------------------------|
|     x_1 x_3 x_4 |, | x_1 x_2 x_3 x_4 |}                                     |
|                                                                             |
|o3 : List                                                                    |
+-----------------------------------------------------------------------------+
|i4 : Q = R/I                                                                 |
|                                                                             |
|o4 = Q                                                                       |
|                                                                             |
|o4 : QuotientRing                                                            |
+-----------------------------------------------------------------------------+
|i5 : A = action(R,G)                                                         |
|                                                                             |
|o5 = PolynomialRing with 5 actors                                            |
|                                                                             |
|o5 : ActionOnGradedModule                                                    |
+-----------------------------------------------------------------------------+
|i6 : B = action(I,G)                                                         |
|                                                                             |
|o6 = Ideal with 5 actors                                                     |
|                                                                             |
|o6 : ActionOnGradedModule                                                    |
+-----------------------------------------------------------------------------+
|i7 : C = action(Q,G)                                                         |
|                                                                             |
|o7 = QuotientRing with 5 actors                                              |
|                                                                             |
|o7 : ActionOnGradedModule                                                    |
+-----------------------------------------------------------------------------+
|i8 : character(A,0,5)                                                        |
|                                                                             |
|o8 = GradedCharacter{{0} => Character{1, 1, 1, 1, 1}  }                      |
|                     {1} => Character{0, 1, 0, 2, 4}                         |
|                     {2} => Character{0, 1, 2, 4, 10}                        |
|                     {3} => Character{0, 2, 0, 6, 20}                        |
|                     {4} => Character{1, 2, 3, 9, 35}                        |
|                     {5} => Character{0, 2, 0, 12, 56}                       |
|                                                                             |
|o8 : GradedCharacter                                                         |
+-----------------------------------------------------------------------------+
|i9 : character(B,0,5)                                                        |
|                                                                             |
|o9 = GradedCharacter{{0} => Character{0, 0, 0, 0, 0}  }                      |
|                     {1} => Character{0, 0, 0, 0, 0}                         |
|                     {2} => Character{0, 0, 2, 2, 6}                         |
|                     {3} => Character{0, 1, 0, 4, 16}                        |
|                     {4} => Character{1, 1, 3, 7, 31}                        |
|                     {5} => Character{0, 1, 0, 10, 52}                       |
|                                                                             |
|o9 : GradedCharacter                                                         |
+-----------------------------------------------------------------------------+
|i10 : character(C,0,5)                                                       |
|                                                                             |
|o10 = GradedCharacter{{0} => Character{1, 1, 1, 1, 1}}                       |
|                      {1} => Character{0, 1, 0, 2, 4}                        |
|                      {2} => Character{0, 1, 0, 2, 4}                        |
|                      {3} => Character{0, 1, 0, 2, 4}                        |
|                      {4} => Character{0, 1, 0, 2, 4}                        |
|                      {5} => Character{0, 1, 0, 2, 4}                        |
|                                                                             |
|o10 : GradedCharacter                                                        |
+-----------------------------------------------------------------------------+
|i11 : character(C,6)                                                         |
|                                                                             |
|o11 = GradedCharacter{{6} => Character{0, 1, 0, 2, 4}}                       |
|                                                                             |
|o11 : GradedCharacter                                                        |
+-----------------------------------------------------------------------------+

See also
========

  * action -- define finite group action

Ways to use this method:
========================

  * character(ActionOnGradedModule,List)
    -- compute characters of graded
    components of a module
  * "character(ActionOnGradedModule,ZZ)"
  * "character(ActionOnGradedModule,ZZ,ZZ)"

Example 1 -- Specht ideals / subspace arrangements
**************************************************

In this example, we identify the Betti characters of the Specht ideal
associated        with the partition (4,3). The action of the symmetric group
on the resolution of this ideal is described in K. Shibata, K. Yanagawa -
Minimal free resolutions of the Specht ideals of shapes (n−2,2) and (d,d,1)
(see https://arxiv.org/abs/2010.06522 ). The same ideal is also the ideal of
the 4-equals subspace arrangement in a 7-dimensional affine space. This point
of view is explored in C. Berkesch, S. Griffeth, S. Sam - Jack polynomials as
fractional quantum Hall states and the Betti numbers of the (k+1)-equals ideal
(see https://doi.org/10.1007/s00220-014-2010-4 ). where the action of the
symmetric group on the resolution is also described.

We begin by constructing the ideal using the function spechtPolynomials (SpechtModule),
provided by
the package SpechtModule. We compute a minimal free
resolution and its Betti table.

+-----------------------------------------------------------------------------+
|i1 : R=QQ[x_1..x_7]                                                          |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : needsPackage "SpechtModule"                                             |
|                                                                             |
|o2 = SpechtModule                                                            |
|                                                                             |
|o2 : Package                                                                 |
+-----------------------------------------------------------------------------+
|i3 : I=ideal values spechtPolynomials(new Partition from {5,2},R)            |
|                                                                             |
|o3 = ideal (x x  - x x  - x x  + x x , x x  - x x  - x x  + x x , x x  - x x |
|             1 2    2 3    1 7    3 7   1 3    2 3    1 7    2 7   1 2    2 4|
|     ------------------------------------------------------------------------|
|     - x x  + x x , x x  - x x  - x x  + x x , x x  - x x  - x x  + x x ,    |
|        1 6    4 6   1 2    2 5    1 7    5 7   1 2    2 4    1 5    4 5     |
|     ------------------------------------------------------------------------|
|     x x  - x x  - x x  + x x , x x  - x x  - x x  + x x , x x  - x x  - x x |
|      1 2    2 6    1 7    6 7   1 2    2 3    1 6    3 6   1 3    2 3    1 6|
|     ------------------------------------------------------------------------|
|     + x x , x x  - x x  - x x  + x x , x x  - x x  - x x  + x x , x x  -    |
|        2 6   1 3    2 3    1 4    2 4   1 3    2 3    1 5    2 5   1 2      |
|     ------------------------------------------------------------------------|
|     x x  - x x  + x x , x x  - x x  - x x  + x x , x x  - x x  - x x  +     |
|      2 4    1 7    4 7   1 2    2 5    1 6    5 6   1 2    2 3    1 5       |
|     ------------------------------------------------------------------------|
|     x x , x x  - x x  - x x  + x x )                                        |
|      3 5   1 2    2 3    1 4    3 4                                         |
|                                                                             |
|o3 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i4 : RI=res I                                                                |
|                                                                             |
|      1      14      35      35      14      1                               |
|o4 = R  <-- R   <-- R   <-- R   <-- R   <-- R  <-- 0                         |
|                                                                             |
|     0      1       2       3       4       5      6                         |
|                                                                             |
|o4 : ChainComplex                                                            |
+-----------------------------------------------------------------------------+
|i5 : betti RI                                                                |
|                                                                             |
|            0  1  2  3  4 5                                                  |
|o5 = total: 1 14 35 35 14 1                                                  |
|         0: 1  .  .  .  . .                                                  |
|         1: . 14 35 35 14 .                                                  |
|         2: .  .  .  .  . 1                                                  |
|                                                                             |
|o5 : BettiTally                                                              |
+-----------------------------------------------------------------------------+

Next we set up the group action on the resolution. The group is the symmetric
group on 7 elements. Its conjugacy classes are determined by cycle types, which
are in bijection with partitions of 7. Once the action is set up, we compute
the Betti characters.

+-----------------------------------------------------------------------------+
|i6 : G = for p in partitions(7) list (                                       |
|         L := gens R;                                                        |
|         g := for u in p list (                                              |
|             l := take(L,u);                                                 |
|             L = drop(L,u);                                                  |
|             rotate(1,l)                                                     |
|             );                                                              |
|         matrix { flatten g }                                                |
|         )                                                                   |
|                                                                             |
|o6 = {| x_2 x_3 x_4 x_5 x_6 x_7 x_1 |, | x_2 x_3 x_4 x_5 x_6 x_1 x_7 |, | x_2|
|     ------------------------------------------------------------------------|
|     x_3 x_4 x_5 x_1 x_7 x_6 |, | x_2 x_3 x_4 x_5 x_1 x_6 x_7 |, | x_2 x_3   |
|     ------------------------------------------------------------------------|
|     x_4 x_1 x_6 x_7 x_5 |, | x_2 x_3 x_4 x_1 x_6 x_5 x_7 |, | x_2 x_3 x_4   |
|     ------------------------------------------------------------------------|
|     x_1 x_5 x_6 x_7 |, | x_2 x_3 x_1 x_5 x_6 x_4 x_7 |, | x_2 x_3 x_1 x_5   |
|     ------------------------------------------------------------------------|
|     x_4 x_7 x_6 |, | x_2 x_3 x_1 x_5 x_4 x_6 x_7 |, | x_2 x_3 x_1 x_4 x_5   |
|     ------------------------------------------------------------------------|
|     x_6 x_7 |, | x_2 x_1 x_4 x_3 x_6 x_5 x_7 |, | x_2 x_1 x_4 x_3 x_5 x_6   |
|     ------------------------------------------------------------------------|
|     x_7 |, | x_2 x_1 x_3 x_4 x_5 x_6 x_7 |, | x_1 x_2 x_3 x_4 x_5 x_6 x_7 |}|
|                                                                             |
|o6 : List                                                                    |
+-----------------------------------------------------------------------------+
|i7 : A=action(RI,G)                                                          |
|                                                                             |
|o7 = ChainComplex with 15 actors                                             |
|                                                                             |
|o7 : ActionOnComplex                                                         |
+-----------------------------------------------------------------------------+
|i8 : elapsedTime c=character A                                               |
| -- 0.599461 seconds elapsed                                                 |
|                                                                             |
|o8 = HashTable{0 => GradedCharacter{{0} => Character{1,                      |
|               1 => GradedCharacter{{2} => Character{0,                      |
|               2 => GradedCharacter{{3} => Character{0,                      |
|               3 => GradedCharacter{{4} => Character{0,                      |
|               4 => GradedCharacter{{5} => Character{0,                      |
|               5 => GradedCharacter{{7} => Character{1,                      |
|                                                                             |
|o8 : HashTable                                                               |
|-----------------------------------------------------------------------------|
|1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}}        }                          |
|-1, 1, -1, 0, 0, 0, -1, 2, 0, 2, 2, 2, 6, 14}}                               |
|1, 0, 0, -1, 1, -1, -1, -1, -1, -1, 1, -1, 5, 35}}                           |
|-1, 0, 0, 1, 1, 1, -1, -1, 1, -1, -1, -1, -5, 35}}                           |
|1, -1, -1, 0, 0, 0, -1, 2, 0, 2, -2, 2, -6, 14}}                             |
|-1, -1, 1, -1, 1, -1, 1, 1, -1, 1, -1, 1, -1, 1}}                            |
+-----------------------------------------------------------------------------+

To make sense of these characters we decompose them against     the character
table of the symmetric group, which can be computed using the function
characterTable (SpechtModule), provided by the package
SpechtModule. First we form a hash table with the
irreducible characters. Then we define a function that computes the
multiplicities of the irreducible characters in a given character. Finally, we
apply this function to the Betti characters computed above.

+-----------------------------------------------------------------------------+
|i9 : irrReps = new HashTable from pack(2,                                    |
|         mingle {                                                            |
|             partitions 7,                                                   |
|             apply(entries (characterTable 7)#values, r -> mutableMatrix{r}) |
|             }                                                               |
|         )                                                                   |
|                                                                             |
|o9 = HashTable{Partition{1, 1, 1, 1, 1, 1, 1} => | 1 -1 -1 1 -1 1 -1 1 1 -1  |
|               Partition{2, 1, 1, 1, 1, 1} => | -1 0 1 1 1 0 -2 0 -1 -1 3 0  |
|               Partition{2, 2, 1, 1, 1} => | 0 1 -1 -1 0 0 0 -1 2 0 2 -2 2 - |
|               Partition{2, 2, 2, 1} => | 0 0 1 -1 -1 0 2 2 -1 -1 -1 0 2 -4  |
|               Partition{3, 1, 1, 1, 1} => | 1 0 0 0 -1 -1 -1 0 -1 1 3 3 -1  |
|               Partition{3, 2, 1, 1} => | 0 -1 0 0 1 1 1 -1 -1 1 -1 -1 -1 -5 |
|               Partition{3, 2, 2} => | 0 0 -1 1 1 -1 1 0 1 -1 -3 3 1 -1 21 | |
|               Partition{3, 3, 1} => | 0 0 1 1 -1 -1 -1 0 1 1 -3 -3 1 1 21 | |
|               Partition{4, 1, 1, 1} => | -1 0 0 0 0 0 0 2 2 0 2 0 -4 0 20 | |
|               Partition{4, 2, 1} => | 0 1 0 0 -1 1 -1 -1 -1 -1 -1 1 -1 5 35 |
|               Partition{4, 3} => | 0 0 -1 -1 1 0 -2 2 -1 1 -1 0 2 4 14 |    |
|               Partition{5, 1, 1} => | 1 0 0 0 1 -1 1 0 -1 -1 3 -3 -1 5 15 | |
|               Partition{5, 2} => | 0 -1 1 -1 0 0 0 -1 2 0 2 2 2 6 14 |      |
|               Partition{6, 1} => | -1 0 -1 1 -1 0 2 0 -1 1 3 0 2 4 6 |      |
|               Partition{7} => | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 |             |
|                                                                             |
|o9 : HashTable                                                               |
|-----------------------------------------------------------------------------|
|1 -1 1 -1 1 |}                                                               |
|2 -4 6 |                                                                     |
|6 14 |                                                                       |
|14 |                                                                         |
|-5 15 |                                                                      |
| 35 |                                                                        |
|                                                                             |
|                                                                             |
|                                                                             |
| |                                                                           |
+-----------------------------------------------------------------------------+
|i10 : multiplicities = c -> select(                                          |
|          applyValues(irrReps,                                               |
|              v -> innerProduct(7,v,mutableMatrix{new List from c})),        |
|          v -> v!=0                                                          |
|          )                                                                  |
|                                                                             |
|o10 = multiplicities                                                         |
|                                                                             |
|o10 : FunctionClosure                                                        |
+-----------------------------------------------------------------------------+
|i11 : multiplicities c#0#{0}                                                 |
|                                                                             |
|o11 = HashTable{Partition{7} => 1}                                           |
|                                                                             |
|o11 : HashTable                                                              |
+-----------------------------------------------------------------------------+
|i12 : multiplicities c#1#{2}                                                 |
|                                                                             |
|o12 = HashTable{Partition{5, 2} => 1}                                        |
|                                                                             |
|o12 : HashTable                                                              |
+-----------------------------------------------------------------------------+
|i13 : multiplicities c#2#{3}                                                 |
|                                                                             |
|o13 = HashTable{Partition{4, 2, 1} => 1}                                     |
|                                                                             |
|o13 : HashTable                                                              |
+-----------------------------------------------------------------------------+
|i14 : multiplicities c#3#{4}                                                 |
|                                                                             |
|o14 = HashTable{Partition{3, 2, 1, 1} => 1}                                  |
|                                                                             |
|o14 : HashTable                                                              |
+-----------------------------------------------------------------------------+
|i15 : multiplicities c#4#{5}                                                 |
|                                                                             |
|o15 = HashTable{Partition{2, 2, 1, 1, 1} => 1}                               |
|                                                                             |
|o15 : HashTable                                                              |
+-----------------------------------------------------------------------------+
|i16 : multiplicities c#5#{7}                                                 |
|                                                                             |
|o16 = HashTable{Partition{1, 1, 1, 1, 1, 1, 1} => 1}                         |
|                                                                             |
|o16 : HashTable                                                              |
+-----------------------------------------------------------------------------+

As expected from the general theory, we find a single irreducible
representation in each homological degree.

Example 2 -- Symbolic powers of star configurations
***************************************************

In this example, we identify the Betti characters of the third symbolic power
of a monomial star configuration. The action of the symmetric group on the
resolution of this ideal is described in Example 6.5 of J. Biermann, H. De
Alba, F. Galetto, S. Murai, U. Nagel, A. O'Keefe, T. Römer, A. Seceleanu -
Betti numbers of symmetric shifted ideals (see
https://doi.org/10.1016/j.jalgebra.2020.04.037 ), and belongs to the larger
class of symmetric shifted ideals.

We start by constructing the ideal, and compute a minimal free resolution and
its Betti table.

+-----------------------------------------------------------------------------+
|i1 : R=QQ[x_1..x_6]                                                          |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : I=intersect(apply(subsets(gens R,4),x->(ideal x)^3))                    |
|                                                                             |
|                                                                             |
|o2 = ideal (x x x x x , x x x x x , x x x x x , x x x x x , x x x x x ,      |
|             2 3 4 5 6   1 3 4 5 6   1 2 4 5 6   1 2 3 5 6   1 2 3 4 6       |
|     ------------------------------------------------------------------------|
|                    2 2 2     2 2 2     2 2 2   2   2 2   2   2 2   2   2 2  |
|     x x x x x , x x x x , x x x x , x x x x , x x x x , x x x x , x x x x , |
|      1 2 3 4 5   3 4 5 6   2 4 5 6   1 4 5 6   3 4 5 6   2 4 5 6   1 4 5 6  |
|     ------------------------------------------------------------------------|
|        2 2 2     2 2 2   2   2 2   2   2 2     2 2 2   2   2 2   2 2   2    |
|     x x x x , x x x x , x x x x , x x x x , x x x x , x x x x , x x x x ,   |
|      2 3 5 6   1 3 5 6   2 3 5 6   1 3 5 6   1 2 5 6   1 2 5 6   3 4 5 6    |
|     ------------------------------------------------------------------------|
|      2 2   2   2 2   2   2 2   2   2 2   2   2 2   2     2 2 2     2 2 2    |
|     x x x x , x x x x , x x x x , x x x x , x x x x , x x x x , x x x x ,   |
|      2 4 5 6   1 4 5 6   2 3 5 6   1 3 5 6   1 2 5 6   2 3 4 6   1 3 4 6    |
|     ------------------------------------------------------------------------|
|      2   2 2   2   2 2     2 2 2   2   2 2   2 2   2   2 2   2   2 2   2    |
|     x x x x , x x x x , x x x x , x x x x , x x x x , x x x x , x x x x ,   |
|      2 3 4 6   1 3 4 6   1 2 4 6   1 2 4 6   2 3 4 6   1 3 4 6   1 2 4 6    |
|     ------------------------------------------------------------------------|
|        2 2 2   2   2 2   2 2   2   2 2 2     2 2 2     2 2 2     2 2 2      |
|     x x x x , x x x x , x x x x , x x x x , x x x x , x x x x , x x x x ,   |
|      1 2 3 6   1 2 3 6   1 2 3 6   3 4 5 6   2 4 5 6   1 4 5 6   2 3 5 6    |
|     ------------------------------------------------------------------------|
|      2 2 2     2 2 2     2 2 2     2 2 2     2 2 2     2 2 2       2 2 2    |
|     x x x x , x x x x , x x x x , x x x x , x x x x , x x x x , x x x x ,   |
|      1 3 5 6   1 2 5 6   2 3 4 6   1 3 4 6   1 2 4 6   1 2 3 6   2 3 4 5    |
|     ------------------------------------------------------------------------|
|        2 2 2   2   2 2   2   2 2     2 2 2   2   2 2   2 2   2   2 2   2    |
|     x x x x , x x x x , x x x x , x x x x , x x x x , x x x x , x x x x ,   |
|      1 3 4 5   2 3 4 5   1 3 4 5   1 2 4 5   1 2 4 5   2 3 4 5   1 3 4 5    |
|     ------------------------------------------------------------------------|
|      2 2   2     2 2 2   2   2 2   2 2   2   2 2 2     2 2 2     2 2 2      |
|     x x x x , x x x x , x x x x , x x x x , x x x x , x x x x , x x x x ,   |
|      1 2 4 5   1 2 3 5   1 2 3 5   1 2 3 5   2 3 4 5   1 3 4 5   1 2 4 5    |
|     ------------------------------------------------------------------------|
|      2 2 2       2 2 2   2   2 2   2 2   2   2 2 2     3 3 3   3 3 3        |
|     x x x x , x x x x , x x x x , x x x x , x x x x , x x x , x x x ,       |
|      1 2 3 5   1 2 3 4   1 2 3 4   1 2 3 4   1 2 3 4   4 5 6   3 5 6        |
|     ------------------------------------------------------------------------|
|      3 3 3   3 3 3   3 3 3   3 3 3   3 3 3   3 3 3   3 3 3   3 3 3   3 3 3  |
|     x x x , x x x , x x x , x x x , x x x , x x x , x x x , x x x , x x x , |
|      2 5 6   1 5 6   3 4 6   2 4 6   1 4 6   2 3 6   1 3 6   1 2 6   3 4 5  |
|     ------------------------------------------------------------------------|
|      3 3 3   3 3 3   3 3 3   3 3 3   3 3 3   3 3 3   3 3 3   3 3 3   3 3 3  |
|     x x x , x x x , x x x , x x x , x x x , x x x , x x x , x x x , x x x ) |
|      2 4 5   1 4 5   2 3 5   1 3 5   1 2 5   2 3 4   1 3 4   1 2 4   1 2 3  |
|                                                                             |
|o2 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i3 : RI=res I                                                                |
|                                                                             |
|      1      86      230      210      65                                    |
|o3 = R  <-- R   <-- R    <-- R    <-- R   <-- 0                              |
|                                                                             |
|     0      1       2        3        4       5                              |
|                                                                             |
|o3 : ChainComplex                                                            |
+-----------------------------------------------------------------------------+
|i4 : betti RI                                                                |
|                                                                             |
|            0  1   2   3  4                                                  |
|o4 = total: 1 86 230 210 65                                                  |
|         0: 1  .   .   .  .                                                  |
|         1: .  .   .   .  .                                                  |
|         2: .  .   .   .  .                                                  |
|         3: .  .   .   .  .                                                  |
|         4: .  6   5   .  .                                                  |
|         5: .  .   .   .  .                                                  |
|         6: . 60 165 150 45                                                  |
|         7: .  .   .   .  .                                                  |
|         8: . 20  60  60 20                                                  |
|                                                                             |
|o4 : BettiTally                                                              |
+-----------------------------------------------------------------------------+

Next we set up the group action on the resolution. The group is the symmetric
group on 6 elements. Its conjugacy classes are determined by cycle types, which
are in bijection with partitions of 6. Once the action is set up, we compute
the Betti characters.

+-----------------------------------------------------------------------------+
|i5 : G = for p in partitions(6) list (                                       |
|         L := gens R;                                                        |
|         g := for u in p list (                                              |
|             l := take(L,u);                                                 |
|             L = drop(L,u);                                                  |
|             rotate(1,l)                                                     |
|             );                                                              |
|         matrix { flatten g }                                                |
|         )                                                                   |
|                                                                             |
|o5 = {| x_2 x_3 x_4 x_5 x_6 x_1 |, | x_2 x_3 x_4 x_5 x_1 x_6 |, | x_2 x_3 x_4|
|     ------------------------------------------------------------------------|
|     x_1 x_6 x_5 |, | x_2 x_3 x_4 x_1 x_5 x_6 |, | x_2 x_3 x_1 x_5 x_6 x_4 |,|
|     ------------------------------------------------------------------------|
|     | x_2 x_3 x_1 x_5 x_4 x_6 |, | x_2 x_3 x_1 x_4 x_5 x_6 |, | x_2 x_1 x_4 |
|     ------------------------------------------------------------------------|
|     x_3 x_6 x_5 |, | x_2 x_1 x_4 x_3 x_5 x_6 |, | x_2 x_1 x_3 x_4 x_5 x_6 |,|
|     ------------------------------------------------------------------------|
|     | x_1 x_2 x_3 x_4 x_5 x_6 |}                                            |
|                                                                             |
|o5 : List                                                                    |
+-----------------------------------------------------------------------------+
|i6 : A=action(RI,G)                                                          |
|                                                                             |
|o6 = ChainComplex with 11 actors                                             |
|                                                                             |
|o6 : ActionOnComplex                                                         |
+-----------------------------------------------------------------------------+
|i7 : elapsedTime c=character A                                               |
| -- 0.52044 seconds elapsed                                                  |
|                                                                             |
|o7 = HashTable{0 => GradedCharacter{{0} => Character{1, 1, 1, 1, 1, 1, 1, 1, |
|               1 => GradedCharacter{{5} => Character{0, 1, 0, 2, 0, 1, 3, 0, |
|                                    {7} => Character{0, 0, 0, 0, 0, 1, 3, 0, |
|                                    {9} => Character{0, 0, 0, 0, 2, 2, 2, 0, |
|               2 => GradedCharacter{{6} => Character{-1, 0, -1, 1, -1, 0, 2, |
|                                    {8} => Character{0, 0, -1, -1, 0, 0, 6, -|
|                                    {10} => Character{0, 0, 0, 0, 0, 1, 3, 0,|
|               3 => GradedCharacter{{9} => Character{0, 0, 0, -2, 0, -1, 3, 0|
|                                    {11} => Character{0, 0, 0, 0, 0, -1, 3, 0|
|               4 => GradedCharacter{{10} => Character{0, 0, 1, -1, 0, 0, 0, 3|
|                                    {12} => Character{0, 0, 0, 0, 2, 0, 2, 0,|
|                                                                             |
|o7 : HashTable                                                               |
|-----------------------------------------------------------------------------|
|1, 1, 1}}      }                                                             |
|2, 4, 6}  }                                                                  |
|4, 16, 60}                                                                   |
|4, 8, 20}                                                                    |
|-1, 1, 3, 5}  }                                                              |
|3, 1, 33, 165}                                                               |
| 4, 16, 60}                                                                  |
|, -6, 20, 150}}                                                              |
|, -4, 8, 60}                                                                 |
|, -3, 3, 45}}                                                                |
| -4, 0, 20}                                                                  |
+-----------------------------------------------------------------------------+

To make sense of these characters we decompose them against     the character
table of the symmetric group, which can be computed using the function
characterTable (SpechtModule), provided by the package
SpechtModule. First we form a hash table with the
irreducible characters. Then we define a function that computes the
multiplicities of the irreducible characters in a given character. Finally, we
apply this function to the Betti characters computed above.

+-----------------------------------------------------------------------------+
|i8 : needsPackage "SpechtModule"                                             |
|                                                                             |
|o8 = SpechtModule                                                            |
|                                                                             |
|o8 : Package                                                                 |
+-----------------------------------------------------------------------------+
|i9 : irrReps = new HashTable from pack(2,                                    |
|         mingle {                                                            |
|             partitions 6,                                                   |
|             apply(entries (characterTable 6)#values, r -> mutableMatrix{r}) |
|             }                                                               |
|         )                                                                   |
|                                                                             |
|o9 = HashTable{Partition{1, 1, 1, 1, 1, 1} => | -1 1 1 -1 1 -1 1 -1 1 -1 1 |}|
|               Partition{2, 1, 1, 1, 1} => | 1 0 -1 -1 -1 0 2 1 1 -3 5 |     |
|               Partition{2, 2, 1, 1} => | 0 -1 1 1 0 0 0 -3 1 -3 9 |         |
|               Partition{2, 2, 2} => | 0 0 -1 1 2 -1 -1 3 1 -1 5 |           |
|               Partition{3, 1, 1, 1} => | -1 0 0 0 1 1 1 2 -2 -2 10 |        |
|               Partition{3, 2, 1} => | 0 1 0 0 -2 0 -2 0 0 0 16 |            |
|               Partition{3, 3} => | 0 0 -1 -1 2 1 -1 -3 1 1 5 |              |
|               Partition{4, 1, 1} => | 1 0 0 0 1 -1 1 -2 -2 2 10 |           |
|               Partition{4, 2} => | 0 -1 1 -1 0 0 0 3 1 3 9 |                |
|               Partition{5, 1} => | -1 0 -1 1 -1 0 2 -1 1 3 5 |              |
|               Partition{6} => | 1 1 1 1 1 1 1 1 1 1 1 |                     |
|                                                                             |
|o9 : HashTable                                                               |
+-----------------------------------------------------------------------------+
|i10 : multiplicities = c -> select(                                          |
|          applyValues(irrReps,                                               |
|              v -> innerProduct(6,v,mutableMatrix{new List from c})),        |
|          v -> v!=0                                                          |
|          )                                                                  |
|                                                                             |
|o10 = multiplicities                                                         |
|                                                                             |
|o10 : FunctionClosure                                                        |
+-----------------------------------------------------------------------------+
|i11 : applyValues(c#0, v -> multiplicities v)                                |
|                                                                             |
|o11 = GradedCharacter{{0} => HashTable{Partition{6} => 1}}                   |
|                                                                             |
|o11 : GradedCharacter                                                        |
+-----------------------------------------------------------------------------+
|i12 : applyValues(c#1, v -> multiplicities v)                                |
|                                                                             |
|o12 = GradedCharacter{{5} => HashTable{Partition{5, 1} => 1}   }             |
|                                       Partition{6} => 1                     |
|                      {7} => HashTable{Partition{3, 2, 1} => 1}              |
|                                       Partition{3, 3} => 1                  |
|                                       Partition{4, 1, 1} => 1               |
|                                       Partition{4, 2} => 2                  |
|                                       Partition{5, 1} => 2                  |
|                                       Partition{6} => 1                     |
|                      {9} => HashTable{Partition{3, 3} => 1}                 |
|                                       Partition{4, 2} => 1                  |
|                                       Partition{5, 1} => 1                  |
|                                       Partition{6} => 1                     |
|                                                                             |
|o12 : GradedCharacter                                                        |
+-----------------------------------------------------------------------------+
|i13 : applyValues(c#2, v -> multiplicities v)                                |
|                                                                             |
|o13 = GradedCharacter{{6} => HashTable{Partition{5, 1} => 1}      }          |
|                      {8} => HashTable{Partition{3, 1, 1, 1} => 1}           |
|                                       Partition{3, 2, 1} => 3               |
|                                       Partition{3, 3} => 2                  |
|                                       Partition{4, 1, 1} => 4               |
|                                       Partition{4, 2} => 4                  |
|                                       Partition{5, 1} => 4                  |
|                                       Partition{6} => 1                     |
|                      {10} => HashTable{Partition{3, 2, 1} => 1}             |
|                                        Partition{3, 3} => 1                 |
|                                        Partition{4, 1, 1} => 1              |
|                                        Partition{4, 2} => 2                 |
|                                        Partition{5, 1} => 2                 |
|                                        Partition{6} => 1                    |
|                                                                             |
|o13 : GradedCharacter                                                        |
+-----------------------------------------------------------------------------+
|i14 : applyValues(c#3, v -> multiplicities v)                                |
|                                                                             |
|o14 = GradedCharacter{{9} => HashTable{Partition{3, 1, 1, 1} => 2} }         |
|                                       Partition{3, 2, 1} => 3               |
|                                       Partition{3, 3} => 1                  |
|                                       Partition{4, 1, 1} => 4               |
|                                       Partition{4, 2} => 3                  |
|                                       Partition{5, 1} => 2                  |
|                      {11} => HashTable{Partition{3, 1, 1, 1} => 1}          |
|                                        Partition{3, 2, 1} => 1              |
|                                        Partition{4, 1, 1} => 2              |
|                                        Partition{4, 2} => 1                 |
|                                        Partition{5, 1} => 1                 |
|                                                                             |
|o14 : GradedCharacter                                                        |
+-----------------------------------------------------------------------------+
|i15 : applyValues(c#4, v -> multiplicities v)                                |
|                                                                             |
|o15 = GradedCharacter{{10} => HashTable{Partition{3, 1, 1, 1} => 1}}         |
|                                        Partition{3, 2, 1} => 1              |
|                                        Partition{4, 1, 1} => 1              |
|                                        Partition{4, 2} => 1                 |
|                      {12} => HashTable{Partition{3, 1, 1, 1} => 1}          |
|                                        Partition{4, 1, 1} => 1              |
|                                                                             |
|o15 : GradedCharacter                                                        |
+-----------------------------------------------------------------------------+

The description provided in J. Biermann, H. De Alba, F. Galetto, S. Murai, U.
Nagel, A. O'Keefe, T. Römer, A. Seceleanu - Betti numbers of symmetric shifted
ideals (see https://doi.org/10.1016/j.jalgebra.2020.04.037 ) uses
representations induced from products of smaller symmetric groups. In order, to
compare with the results obtained here one may use the Littlewood-Richardson
rule to decompose induced representations into a direct sum of irreducibles.

Example 3 -- Klein configuration of points
******************************************

In this example, we identify the Betti characters of the defining ideal of the
Klein configuration of points in the projective plane and its square. The
defining ideal of the Klein configuration is explicitly constructed in
Proposition 7.3 of T. Bauer, S. Di Rocco, B. Harbourne, J. Huizenga, A.
Seceleanu, T. Szemberg - Negative Curves on Symmetric Blowups of the Projective
Plane, Resurgences, and Waldschmidt Constants (see
https://doi.org/10.1093/imrn/rnx329 ). We start by constructing the ideal, its
square, and both their resolutions and Betti tables. In order to later use
characters, we work over the cyclotomic field obtained by adjoining a primitive
7th root of unity to $\mathbb{Q}$. (This example was precompiled by the package
author.)

+-----------------------------------------------------------------------------+
|i1 : kk=toField(QQ[a]/ideal(sum apply(7,i->a^i)))                            |
|                                                                             |
|o1 = kk                                                                      |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : R=kk[x,y,z]                                                             |
|                                                                             |
|o2 = R                                                                       |
|                                                                             |
|o2 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i3 : f4=x^3*y+y^3*z+z^3*x                                                    |
|                                                                             |
|      3     3       3                                                        |
|o3 = x y + y z + x*z                                                         |
|                                                                             |
|o3 : R                                                                       |
+-----------------------------------------------------------------------------+
|i4 : H=jacobian transpose jacobian f4                                        |
|                                                                             |
|o4 = {-3} | 6xy 3x2 3z2 |                                                    |
|     {-3} | 3x2 6yz 3y2 |                                                    |
|     {-3} | 3z2 3y2 6xz |                                                    |
|                                                                             |
|             3       3                                                       |
|o4 : Matrix R  <--- R                                                        |
+-----------------------------------------------------------------------------+
|i5 : f6=-1/54*det(H)                                                         |
|                                                                             |
|        5    5      2 2 2      5                                             |
|o5 = x*y  + x z - 5x y z  + y*z                                              |
|                                                                             |
|o5 : R                                                                       |
+-----------------------------------------------------------------------------+
|i6 : I=minors(2,jacobian matrix{{f4,f6}})                                    |
|                                                                             |
|               3 5     7      7       4 2 2        4 3     2   5    8    7   |
|o6 = ideal (14x y  - 5x z - 3y z - 35x y z  + 35x*y z  - 7x y*z  + z , 3x y -|
|     ------------------------------------------------------------------------|
|      8      4 3        5 2      5 3      2 2 4       7   8       7     5 2  |
|     y  - 35x y z + 7x*y z  - 14x z  + 35x y z  + 5y*z , x  - 5x*y  - 7x y z |
|     ------------------------------------------------------------------------|
|          2 4 2      3   4      3 5       7                                  |
|     - 35x y z  + 35x y*z  + 14y z  - 3x*z )                                 |
|                                                                             |
|o6 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i7 : RI=res I                                                                |
|                                                                             |
|      1      3      2                                                        |
|o7 = R  <-- R  <-- R  <-- 0                                                  |
|                                                                             |
|     0      1      2      3                                                  |
|                                                                             |
|o7 : ChainComplex                                                            |
+-----------------------------------------------------------------------------+
|i8 : betti RI                                                                |
|                                                                             |
|            0 1 2                                                            |
|o8 = total: 1 3 2                                                            |
|         0: 1 . .                                                            |
|         1: . . .                                                            |
|         2: . . .                                                            |
|         3: . . .                                                            |
|         4: . . .                                                            |
|         5: . . .                                                            |
|         6: . . .                                                            |
|         7: . 3 .                                                            |
|         8: . . .                                                            |
|         9: . . 1                                                            |
|        10: . . .                                                            |
|        11: . . 1                                                            |
|                                                                             |
|o8 : BettiTally                                                              |
+-----------------------------------------------------------------------------+
|i9 : I2=I^2;                                                                 |
|                                                                             |
|o9 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i10 : RI2=res I2                                                             |
|                                                                             |
|       1      6      6      1                                                |
|o10 = R  <-- R  <-- R  <-- R  <-- 0                                          |
|                                                                             |
|      0      1      2      3      4                                          |
|                                                                             |
|o10 : ChainComplex                                                           |
+-----------------------------------------------------------------------------+
|i11 : betti RI2                                                              |
|                                                                             |
|             0 1 2 3                                                         |
|o11 = total: 1 6 6 1                                                         |
|          0: 1 . . .                                                         |
|          1: . . . .                                                         |
|          2: . . . .                                                         |
|          3: . . . .                                                         |
|          4: . . . .                                                         |
|          5: . . . .                                                         |
|          6: . . . .                                                         |
|          7: . . . .                                                         |
|          8: . . . .                                                         |
|          9: . . . .                                                         |
|         10: . . . .                                                         |
|         11: . . . .                                                         |
|         12: . . . .                                                         |
|         13: . . . .                                                         |
|         14: . . . .                                                         |
|         15: . 6 . .                                                         |
|         16: . . . .                                                         |
|         17: . . 3 .                                                         |
|         18: . . . .                                                         |
|         19: . . 3 .                                                         |
|         20: . . . .                                                         |
|         21: . . . 1                                                         |
|                                                                             |
|o11 : BettiTally                                                             |
+-----------------------------------------------------------------------------+

The unique simple group of order 168 acts as described in §2.2 of BDHHSS (see
https://doi.org/10.1093/imrn/rnx329 ). In particular, the group is generated by
the elements g of order 7, h of order 3, and i of order 2, and is minimally
defined over the 7th cyclotomic field. In addition, we consider the identity,
the inverse of g, and another element j of order 4 as representatives of the
conjugacy classes of the group. The action of the group on the resolution of
both ideals is described in the second proof of Proposition 8.1.

+-----------------------------------------------------------------------------+
|i12 : g=matrix{{a^4,0,0},{0,a^2,0},{0,0,a}}                                  |
|                                                                             |
|o12 = | a4 0  0 |                                                            |
|      | 0  a2 0 |                                                            |
|      | 0  0  a |                                                            |
|                                                                             |
|               3        3                                                    |
|o12 : Matrix kk  <--- kk                                                     |
+-----------------------------------------------------------------------------+
|i13 : h=matrix{{0,1,0},{0,0,1},{1,0,0}}                                      |
|                                                                             |
|o13 = | 0 1 0 |                                                              |
|      | 0 0 1 |                                                              |
|      | 1 0 0 |                                                              |
|                                                                             |
|               3        3                                                    |
|o13 : Matrix ZZ  <--- ZZ                                                     |
+-----------------------------------------------------------------------------+
|i14 : i=(2*a^4+2*a^2+2*a+1)/7 * matrix{                                      |
|          {a-a^6,a^2-a^5,a^4-a^3},                                           |
|          {a^2-a^5,a^4-a^3,a-a^6},                                           |
|          {a^4-a^3,a-a^6,a^2-a^5}                                            |
|          }                                                                  |
|                                                                             |
|o14 = | 3/7a5+1/7a4+1/7a3+3/7a2-1/7  -1/7a5+2/7a4+2/7a3-1/7a2-2/7            |
|      | -1/7a5+2/7a4+2/7a3-1/7a2-2/7 -2/7a5-3/7a4-3/7a3-2/7a2-4/7            |
|      | -2/7a5-3/7a4-3/7a3-2/7a2-4/7 3/7a5+1/7a4+1/7a3+3/7a2-1/7             |
|      -----------------------------------------------------------------------|
|      -2/7a5-3/7a4-3/7a3-2/7a2-4/7 |                                         |
|      3/7a5+1/7a4+1/7a3+3/7a2-1/7  |                                         |
|      -1/7a5+2/7a4+2/7a3-1/7a2-2/7 |                                         |
|                                                                             |
|               3        3                                                    |
|o14 : Matrix kk  <--- kk                                                     |
+-----------------------------------------------------------------------------+
|i15 : j=-1/(2*a^4+2*a^2+2*a+1) * matrix{                                     |
|          {a^5-a^4,1-a^5,1-a^3},                                             |
|          {1-a^5,a^6-a^2,1-a^6},                                             |
|          {1-a^3,1-a^6,a^3-a}                                                |
|          }                                                                  |
|                                                                             |
|o15 = | -1/7a5-1/7a4+2/7a2-2/7a+2/7      1/7a5+4/7a4+2/7a3+2/7a2+4/7a+1/7    |
|      | 1/7a5+4/7a4+2/7a3+2/7a2+4/7a+1/7 1/7a5-1/7a4+1/7a3+3/7a+3/7          |
|      | -2/7a5-1/7a3+2/7a2+2/7a-1/7      1/7a5+3/7a4-1/7a3+3/7a2+1/7a        |
|      -----------------------------------------------------------------------|
|      -2/7a5-1/7a3+2/7a2+2/7a-1/7  |                                         |
|      1/7a5+3/7a4-1/7a3+3/7a2+1/7a |                                         |
|      2/7a4-1/7a3-2/7a2-1/7a+2/7   |                                         |
|                                                                             |
|               3        3                                                    |
|o15 : Matrix kk  <--- kk                                                     |
+-----------------------------------------------------------------------------+
|i16 : G={id_(R^3),i,h,j,g,inverse g};                                        |
+-----------------------------------------------------------------------------+
|i17 : A1=action(RI,G,Sub=>false)                                             |
|                                                                             |
|o17 = ChainComplex with 6 actors                                             |
|                                                                             |
|o17 : ActionOnComplex                                                        |
+-----------------------------------------------------------------------------+
|i18 : A2=action(RI2,G,Sub=>false)                                            |
|                                                                             |
|o18 = ChainComplex with 6 actors                                             |
|                                                                             |
|o18 : ActionOnComplex                                                        |
+-----------------------------------------------------------------------------+
|i19 : elapsedTime character A1                                               |
| -- 3.19914 seconds elapsed                                                  |
|                                                                             |
|o19 = HashTable{0 => GradedCharacter{{0} => Character{1, 1, 1, 1, 1, 1}}     |
|                                                                    4    2   |
|                1 => GradedCharacter{{8} => Character{3, -1, 0, 1, a  + a  + |
|                2 => GradedCharacter{{11} => Character{1, 1, 1, 1, 1, 1}}    |
|                                     {13} => Character{1, 1, 1, 1, 1, 1}     |
|                                                                             |
|o19 : HashTable                                                              |
|-----------------------------------------------------------------------------|
|                      }                                                      |
|      4    2                                                                 |
|a, - a  - a  - a - 1}}                                                       |
+-----------------------------------------------------------------------------+
|i20 : elapsedTime character A2                                               |
| -- 91.882 seconds elapsed                                                   |
|                                                                             |
|o20 = HashTable{0 => GradedCharacter{{0} => Character{1, 1, 1, 1, 1, 1}}     |
|                1 => GradedCharacter{{16} => Character{6, 2, 0, 0, -1, -1}}  |
|                                                                     4    2  |
|                2 => GradedCharacter{{19} => Character{3, -1, 0, 1, a  + a  +|
|                                                                     4    2  |
|                                     {21} => Character{3, -1, 0, 1, a  + a  +|
|                3 => GradedCharacter{{24} => Character{1, 1, 1, 1, 1, 1}}    |
|                                                                             |
|o20 : HashTable                                                              |
|-----------------------------------------------------------------------------|
|                      }                                                      |
|                                                                             |
|      4    2                                                                 |
|a, - a  - a  - a - 1}}                                                       |
|      4    2                                                                 |
|a, - a  - a  - a - 1}                                                        |
+-----------------------------------------------------------------------------+

The character of the resolution of the ideal shows the free module in
homological degree two is a direct sum of two trivial representations. It
follows that its second exterior power is also trivial. As observed in the
second proof of Proposition 8.1 in BDHHSS (see
https://doi.org/10.1093/imrn/rnx329 ), the free module in homological degree 3
in the resolution of the square of the ideal is exactly this second exterior
power and a trivial representation.

In alternative, we can compute the symbolic square of the ideal modulo the
ordinary square. The component of degree 21 of this quotient matches the
generators of the last module in the resolution of the ordinary square in
degree 24 (by local duality); in particular, it is a trivial representation. We
can verify this directly.

+----------------------------------------------------------+
|i21 : needsPackage "SymbolicPowers"                       |
|                                                          |
|o21 = SymbolicPowers                                      |
|                                                          |
|o21 : Package                                             |
+----------------------------------------------------------+
|i22 : Is2 = symbolicPower(I,2);                           |
|                                                          |
|o22 : Ideal of R                                          |
+----------------------------------------------------------+
|i23 : M = Is2 / I2;                                       |
+----------------------------------------------------------+
|i24 : B = action(M,G,Sub=>false)                          |
|                                                          |
|o24 = Module with 6 actors                                |
|                                                          |
|o24 : ActionOnGradedModule                                |
+----------------------------------------------------------+
|i25 : elapsedTime character(B,21)                         |
| -- 37.966 seconds elapsed                                |
|                                                          |
|o25 = GradedCharacter{{21} => Character{1, 1, 1, 1, 1, 1}}|
|                                                          |
|o25 : GradedCharacter                                     |
+----------------------------------------------------------+