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

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://doi.org/10.1016/j.jsc.2022.02.001 ). The package is designed to be
independent of the group; the user provides matrices for the group actions and
character tables (to decompose characters into irreducibles). See the menu
below for using this package to compute some examples from the literature.

Version history:

  * 1.0: Initial version. Includes computation of actions and Betti characters.
  * 2.0: Introduces character tables, decompositions, and other methods for
    characters.

Author
======

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

Version
=======

This documentation describes version 2.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
      * CharacterDecomposition -- the class of
        all finite group character decompositions
      * CharacterTable -- the class of all character
        tables of finite groups
  * Functions and commands
      * action -- define finite group action
      * actors -- group elements of an action
      * character -- compute characters of finite group
        action
      * characterTable -- construct a character table
      * decomposeCharacter -- decompose a character
        into irreducible characters
      * inverseRingActors -- get inverse of action on
        ring generators
      * numActors -- number of acting elements
      * ringActors -- get action on ring generators
      * symmetricGroupActors -- permutation action
        of the symmetric group
      * symmetricGroupTable -- character table of
        the symmetric group
  * 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 Array -- homological shift
      * 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
      * character(CharacterDecomposition,CharacterTable)
        -- recover
        character from decomposition
      * "CharacterDecomposition * CharacterTable" -- see
        character(CharacterDecomposition,CharacterTable),
        -- recover
        character from decomposition
      * character(PolynomialRing,ZZ,HashTable)
        -- construct a
        character
      * "characterTable(List,Matrix,PolynomialRing,List)" -- see
        characterTable, -- construct a character table
      * "characterTable(List,Matrix,PolynomialRing,RingMap)" -- see
        characterTable, -- construct a character table
      * "Character / CharacterTable" -- see decomposeCharacter,
        -- decompose a character into irreducible
        characters
      * "decomposeCharacter(Character,CharacterTable)" -- see
        decomposeCharacter, -- decompose a character into
        irreducible characters
      * "Character ++ Character" -- see directSum(Character),
        -- direct sum of characters
      * directSum(Character) -- direct sum of
        characters
      * "dual(Character,List)" -- see dual, -- dual character
      * "dual(Character,RingMap)" -- see dual, -- dual character
      * "inverseRingActors(Action)" -- see inverseRingActors,
        -- get inverse of action on ring generators
      * net(Action) -- format for printing, as a net
      * net(Character) -- format for printing, as a
        net
      * net(CharacterDecomposition), --
        format for printing, as a net
      * net(CharacterTable) -- 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
      * "symmetricGroupActors(PolynomialRing)" -- see
        symmetricGroupActors, -- permutation action of
        the symmetric group
      * "symmetricGroupTable(PolynomialRing)" -- see symmetricGroupTable,
        -- character table of the symmetric group
      * target(Action) -- get object acted upon
      * "Character ** Character" -- see tensor(Character,Character),
        -- tensor product of characters
      * tensor(Character,Character),
        -- tensor product of characters
  * Symbols
      * Labels -- custom labels for irreducible characters
      * "labels" -- see Labels, -- custom labels for irreducible
        characters
      * Sub -- format ring actors as one-row substitution matrices

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

The object BettiCharacters, is a package (Macaulay2Doc).

Defining and computing actions

Characters and related operations

Character tables and decompositions

Symmetric group actions

Examples from the literature

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

Synopsis
========

  * Optional inputs (Macaulay2Doc),:
      * Sub, => ..., default value true, format ring actors as
        one-row substitution 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

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

  * action -- define finite group action

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
  * target(Action) -- 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).

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, format ring actors as
        one-row substitution 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).
One may obtain these elements as square matrices by
setting the optional input Sub, to false.

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).

target(Action) -- get object acted upon
***************************************

Synopsis
========

  * Function: target (Macaulay2Doc),
  * Usage:
        target(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 this method:
========================

  * target(Action) -- get object acted upon

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, format ring actors as
        one-row substitution 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). One may pass these elements as square
matrices by setting the optional input Sub, to false. The list G can
contain arbitrary group elements however, 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, format ring actors as
        one-row substitution 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). One may pass these elements as square
matrices by setting the optional input Sub, to false. The list G can
contain arbitrary group elements however, 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 -- format ring actors as one-row substitution 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://doi.org/10.1016/j.jsc.2022.02.001 ).

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, format ring actors as
        one-row substitution 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). One may obtain these elements as square
matrices by setting the optional input Sub, to false.

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 method 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.

All characters are bigraded by homological degree and internal degree
(inherited from the complex or module they are computed from). Modules are
considered to be concentrated in homological degree zero.

Characters may also be constructed by hand using
character(PolynomialRing,ZZ,HashTable).

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
  * character(CharacterDecomposition,CharacterTable)
    -- recover
    character from decomposition
  * character(PolynomialRing,ZZ,HashTable)
    -- construct a character

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.

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

  * character -- compute characters of finite group action
  * Character Array -- homological shift
  * 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
  * character(CharacterDecomposition,CharacterTable)
    -- recover
    character from decomposition
  * "CharacterDecomposition * CharacterTable" -- see
    character(CharacterDecomposition,CharacterTable),
    -- recover
    character from decomposition
  * character(PolynomialRing,ZZ,HashTable)
    -- construct a character
  * "Character ++ Character" -- see directSum(Character),
    -- direct sum of characters
  * "dual(Character,List)" -- see dual, -- dual character
  * "dual(Character,RingMap)" -- see dual, -- dual character
  * "Character ** Character" -- see tensor(Character,Character),
    -- tensor product of characters
  * tensor(Character,Character), --
    tensor product of characters

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

  * "Character / CharacterTable" -- see decomposeCharacter,
    -- decompose a character into irreducible characters
  * "decomposeCharacter(Character,CharacterTable)" -- see
    decomposeCharacter, -- decompose a character into
    irreducible characters
  * directSum(Character) -- direct sum of
    characters
  * net(Character) -- format for printing, as a net

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

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

Character Array -- homological shift
************************************

Synopsis
========

  * Operator: SPACE (Macaulay2Doc),

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

Shift the homological degrees of a character.

+--------------------------------------+
|i1 : R = QQ[x,y,z]                    |
|                                      |
|o1 = R                                |
|                                      |
|o1 : PolynomialRing                   |
+--------------------------------------+
|i2 : I = ideal(x*y,x*z,y*z)           |
|                                      |
|o2 = ideal (x*y, x*z, y*z)            |
|                                      |
|o2 : Ideal of R                       |
+--------------------------------------+
|i3 : RI = res I                       |
|                                      |
|      1      3      2                 |
|o3 = R  <-- R  <-- R  <-- 0           |
|                                      |
|     0      1      2      3           |
|                                      |
|o3 : ChainComplex                     |
+--------------------------------------+
|i4 : S3 = symmetricGroupActors R      |
|                                      |
|o4 = {| y z x |, | y x z |, | x y z |}|
|                                      |
|o4 : List                             |
+--------------------------------------+
|i5 : A = action(RI,S3)                |
|                                      |
|o5 = ChainComplex with 3 actors       |
|                                      |
|o5 : ActionOnComplex                  |
+--------------------------------------+
|i6 : a = character A                  |
|                                      |
|o6 = Character over R                 |
|                                      |
|     (0, {0}) => | 1 1 1 |            |
|     (1, {2}) => | 0 1 3 |            |
|     (2, {3}) => | -1 0 2 |           |
|                                      |
|o6 : Character                        |
+--------------------------------------+
|i7 : a[-10]                           |
|                                      |
|o7 = Character over R                 |
|                                      |
|     (10, {0}) => | 1 1 1 |           |
|     (11, {2}) => | 0 1 3 |           |
|     (12, {3}) => | -1 0 2 |          |
|                                      |
|o7 : Character                        |
+--------------------------------------+

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

  * Character Array -- homological shift

directSum(Character) -- direct sum of characters
************************************************

Synopsis
========

  * Function: directSum (Macaulay2Doc),
  * Usage:
        character(c)
        character(c1,c2,...)
  * Inputs:
      * c, an instance of the type Character, or sequence of
        characters
  * Outputs:
      * an instance of the type Character,

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

This function is provided by the package BettiCharacters.

Returns the direct sum of the input characters. The operator ++ may be used for
the same purpose.

+--------------------------------------------------------+
|i1 : R = QQ[x_1..x_3]                                   |
|                                                        |
|o1 = R                                                  |
|                                                        |
|o1 : PolynomialRing                                     |
+--------------------------------------------------------+
|i2 : I = ideal(x_1+x_2+x_3)                             |
|                                                        |
|o2 = ideal(x  + x  + x )                                |
|            1    2    3                                 |
|                                                        |
|o2 : Ideal of R                                         |
+--------------------------------------------------------+
|i3 : J = ideal(x_1-x_2,x_1-x_3)                         |
|                                                        |
|o3 = ideal (x  - x , x  - x )                           |
|             1    2   1    3                            |
|                                                        |
|o3 : Ideal of R                                         |
+--------------------------------------------------------+
|i4 : S3 = {matrix{{x_2,x_3,x_1}},                       |
|           matrix{{x_2,x_1,x_3}},                       |
|           matrix{{x_1,x_2,x_3}} }                      |
|                                                        |
|o4 = {| x_2 x_3 x_1 |, | x_2 x_1 x_3 |, | x_1 x_2 x_3 |}|
|                                                        |
|o4 : List                                               |
+--------------------------------------------------------+
|i5 : A = action(I,S3)                                   |
|                                                        |
|o5 = Ideal with 3 actors                                |
|                                                        |
|o5 : ActionOnGradedModule                               |
+--------------------------------------------------------+
|i6 : B = action(J,S3)                                   |
|                                                        |
|o6 = Ideal with 3 actors                                |
|                                                        |
|o6 : ActionOnGradedModule                               |
+--------------------------------------------------------+
|i7 : a = character(A,1)                                 |
|                                                        |
|o7 = Character over R                                   |
|                                                        |
|     (0, {1}) => | 1 1 1 |                              |
|                                                        |
|o7 : Character                                          |
+--------------------------------------------------------+
|i8 : b = character(B,1)                                 |
|                                                        |
|o8 = Character over R                                   |
|                                                        |
|     (0, {1}) => | -1 0 2 |                             |
|                                                        |
|o8 : Character                                          |
+--------------------------------------------------------+
|i9 : a ++ b                                             |
|                                                        |
|o9 = Character over R                                   |
|                                                        |
|     (0, {1}) => | 0 1 3 |                              |
|                                                        |
|o9 : Character                                          |
+--------------------------------------------------------+
|i10 : K = ideal(x_1,x_2,x_3)                            |
|                                                        |
|o10 = ideal (x , x , x )                                |
|              1   2   3                                 |
|                                                        |
|o10 : Ideal of R                                        |
+--------------------------------------------------------+
|i11 : C = action(K,S3)                                  |
|                                                        |
|o11 = Ideal with 3 actors                               |
|                                                        |
|o11 : ActionOnGradedModule                              |
+--------------------------------------------------------+
|i12 : c = character(C,1)                                |
|                                                        |
|o12 = Character over R                                  |
|                                                        |
|      (0, {1}) => | 0 1 3 |                             |
|                                                        |
|o12 : Character                                         |
+--------------------------------------------------------+
|i13 : a ++ b === c                                      |
|                                                        |
|o13 = true                                              |
+--------------------------------------------------------+

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

  * directSum(Character) -- direct sum of
    characters

dual -- dual character
**********************

Synopsis
========

  * Usage:
        dual(c,conj)
        dual(c,perm)
  * Inputs:
      * c, an instance of the type Character, of a finite
        group action
      * conj, a ring map (Macaulay2Doc), conjugation in
        coefficient field
      * perm, a list (Macaulay2Doc), permutation of conjugacy
        classes
  * Outputs:
      * an instance of the type Character,

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

This function is provided by the package BettiCharacters.

Returns the dual of a character, i.e., the character of the dual or
contragredient representation.

The first argument is the original character.

Assuming the polynomial ring over which the character is defined has a
coefficient field F which is a subfield of the complex numbers, then the second
argument is the restriction of complex conjugation to F.

As an example, we construct a character of the alternating group $A_4$
considered as a subgroup of the symmetric group $S_4$. The conjugacy classes
are represented by the identity, and the permutations $(12)(34)$, $(123)$, and
$(132)$, in cycle notation. The character is constructed over the field
$\mathbb{Q}[w]$, where $w$ is a primitive third root of unity. Complex
conjugation restricts to $\mathbb{Q}[w]$ by sending $w$ to $w^2$. The character
is concentrated in homological degree 1, and internal degree 2.

+------------------------------------------------------------------+
|i1 : F = toField(QQ[w]/ideal(1+w+w^2))                            |
|                                                                  |
|o1 = F                                                            |
|                                                                  |
|o1 : PolynomialRing                                               |
+------------------------------------------------------------------+
|i2 : R = F[x_1..x_4]                                              |
|                                                                  |
|o2 = R                                                            |
|                                                                  |
|o2 : PolynomialRing                                               |
+------------------------------------------------------------------+
|i3 : conj = map(F,F,{w^2})                                        |
|                                                                  |
|o3 = map (F, F, {- w - 1})                                        |
|                                                                  |
|o3 : RingMap F <--- F                                             |
+------------------------------------------------------------------+
|i4 : X = character(R,4,hashTable {(1,{2}) => matrix{{1,1,w,w^2}}})|
|                                                                  |
|o4 = Character over R                                             |
|                                                                  |
|     (1, {2}) => | 1 1 w -w-1 |                                   |
|                                                                  |
|o4 : Character                                                    |
+------------------------------------------------------------------+
|i5 : X' = dual(X,conj)                                            |
|                                                                  |
|o5 = Character over R                                             |
|                                                                  |
|     (-1, {-2}) => | 1 1 -w-1 w |                                 |
|                                                                  |
|o5 : Character                                                    |
+------------------------------------------------------------------+

If working over coefficient fields of positive characteristic or if one wishes
to avoid defining conjugation, one may replace the second argument by a list
containing a permutation $\pi$ of the integers $1,\dots,r$, where $r$ is the
number of conjugacy classes of the group. The permutation $\pi$ is defined as
follows: if $g$ is an element of the $j$-th conjugacy class, then $g^{-1}$ is
an element of the $\pi (j)$-th class.

In the case of $A_4$, the identity and $(12)(34)$ are their own inverses, while
$(123)^{-1} = (132)$. Therefore the permutation $\pi$ is the transposition
exchanging 3 and 4. Hence the dual of the character in the example above may
also be constructed as follows, with $\pi$ represented in one-line notation by
a list passed as the second argument.

+------------------------+
|i6 : perm = {1,2,4,3}   |
|                        |
|o6 = {1, 2, 4, 3}       |
|                        |
|o6 : List               |
+------------------------+
|i7 : dual(X,perm) === X'|
|                        |
|o7 = true               |
+------------------------+

The page characterTable, contains some motivation for
using conjugation or permutations of conjugacy classes when dealing with
characters.

See also
========

  * characterTable -- construct a character table

Ways to use dual :
==================

  * "dual(BettiTally)" -- see BettiTally (Macaulay2Doc), --
    the class of all Betti tallies
  * "dual(Character,List)"
  * "dual(Character,RingMap)"
  * dual(ChainComplex) (Macaulay2Doc) -- dual
  * dual(ChainComplexMap) (Macaulay2Doc), --
    dual of a chain complex
  * dual(CoherentSheaf) (Macaulay2Doc) -- dual
    coherent sheaf
  * dual(Matrix) (Macaulay2Doc) -- dual of a map
  * dual(Module) (Macaulay2Doc) -- dual module
  * dual(MonomialIdeal) (Macaulay2Doc) -- the
    Alexander dual of a monomial ideal
  * dual(MonomialIdeal,List) (Macaulay2Doc)
    -- the Alexander dual
  * dual(MonomialIdeal,RingElement) (Macaulay2Doc)
    -- the Alexander dual

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

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

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

Synopsis
========

  * Function: net (Macaulay2Doc),

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

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

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

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

tensor(Character,Character) -- tensor product of characters
***********************************************************

Synopsis
========

  * Function: tensor (Macaulay2Doc),
  * Usage:
        tensor(c1,c2)
  * Inputs:
      * c1, an instance of the type Character,
      * c2, an instance of the type Character,
  * Outputs:
      * an instance of the type Character,

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

This function is provided by the package BettiCharacters.

Returns the tensor product of the input characters. The operator ** may be used
for the same purpose.

We construct the character of the coinvariant algebra of the symmetric group on
3 variables.

+----------------------------------------------+
|i1 : R = QQ[x,y,z]                            |
|                                              |
|o1 = R                                        |
|                                              |
|o1 : PolynomialRing                           |
+----------------------------------------------+
|i2 : I = ideal(x+y+z,x*y+x*z+y*z,x*y*z)       |
|                                              |
|o2 = ideal (x + y + z, x*y + x*z + y*z, x*y*z)|
|                                              |
|o2 : Ideal of R                               |
+----------------------------------------------+
|i3 : S3 = symmetricGroupActors R              |
|                                              |
|o3 = {| y z x |, | y x z |, | x y z |}        |
|                                              |
|o3 : List                                     |
+----------------------------------------------+
|i4 : A = action(R/I,S3)                       |
|                                              |
|o4 = QuotientRing with 3 actors               |
|                                              |
|o4 : ActionOnGradedModule                     |
+----------------------------------------------+
|i5 : a = character(A,0,3)                     |
|                                              |
|o5 = Character over R                         |
|                                              |
|     (0, {0}) => | 1 1 1 |                    |
|     (0, {1}) => | -1 0 2 |                   |
|     (0, {2}) => | -1 0 2 |                   |
|     (0, {3}) => | 1 -1 1 |                   |
|                                              |
|o5 : Character                                |
+----------------------------------------------+

The Gorenstein duality of this character may be observed by tensoring with the
character of the sign representation concentrated in degree 3.

+---------------------------------------------------------------------+
|i6 : sign = character(R,3, hashTable { (0,{3}) => matrix{{1,-1,1}} })|
|                                                                     |
|o6 = Character over R                                                |
|                                                                     |
|     (0, {3}) => | 1 -1 1 |                                          |
|                                                                     |
|o6 : Character                                                       |
+---------------------------------------------------------------------+
|i7 : dual(a,{1,2,3}) ** sign === a                                   |
|                                                                     |
|o7 = true                                                            |
+---------------------------------------------------------------------+

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

  * tensor(Character,Character), --
    tensor product of characters

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:
      * an instance of the type Character, 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 = Character over R                                                        |
|                                                                             |
|     (0, {0}) => | 1 1 1 1 1 |                                               |
|     (1, {3}) => | 0 1 0 2 4 |                                               |
|     (1, {4}) => | 0 0 2 2 6 |                                               |
|     (2, {4}) => | -1 0 -1 1 3 |                                             |
|     (2, {5}) => | 0 0 0 2 12 |                                              |
|     (3, {6}) => | 0 0 -2 0 6 |                                              |
|                                                                             |
|o6 : Character                                                               |
+-----------------------------------------------------------------------------+

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 Character, 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://doi.org/10.1016/j.jsc.2022.02.001 ).

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 = Character over R                                                        |
|                                                                             |
|     (0, {0}) => | 1 1 1 1 1 |                                               |
|                                                                             |
|o6 : Character                                                               |
+-----------------------------------------------------------------------------+

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

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

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 = Character over R           |
|                                |
|     (2, {4}) => | -1 0 -1 1 3 ||
|     (2, {5}) => | 0 0 0 2 12 | |
|                                |
|o8 : Character                  |
+--------------------------------+

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 = Character over R          |
|                               |
|     (3, {6}) => | 0 0 -2 0 6 ||
|                               |
|o9 : Character                 |
+-------------------------------+

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 Character, 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 = Character over R                                                        |
|                                                                             |
|     (0, {0}) => | 1 1 1 1 1 |                                               |
|     (0, {1}) => | 0 1 0 2 4 |                                               |
|     (0, {2}) => | 0 1 2 4 10 |                                              |
|     (0, {3}) => | 0 2 0 6 20 |                                              |
|     (0, {4}) => | 1 2 3 9 35 |                                              |
|     (0, {5}) => | 0 2 0 12 56 |                                             |
|                                                                             |
|o8 : Character                                                               |
+-----------------------------------------------------------------------------+
|i9 : character(B,0,5)                                                        |
|                                                                             |
|o9 = Character over R                                                        |
|                                                                             |
|     (0, {2}) => | 0 0 2 2 6 |                                               |
|     (0, {3}) => | 0 1 0 4 16 |                                              |
|     (0, {4}) => | 1 1 3 7 31 |                                              |
|     (0, {5}) => | 0 1 0 10 52 |                                             |
|                                                                             |
|o9 : Character                                                               |
+-----------------------------------------------------------------------------+
|i10 : character(C,0,5)                                                       |
|                                                                             |
|o10 = Character over R                                                       |
|                                                                             |
|      (0, {0}) => | 1 1 1 1 1 |                                              |
|      (0, {1}) => | 0 1 0 2 4 |                                              |
|      (0, {2}) => | 0 1 0 2 4 |                                              |
|      (0, {3}) => | 0 1 0 2 4 |                                              |
|      (0, {4}) => | 0 1 0 2 4 |                                              |
|      (0, {5}) => | 0 1 0 2 4 |                                              |
|                                                                             |
|o10 : Character                                                              |
+-----------------------------------------------------------------------------+
|i11 : character(C,6)                                                         |
|                                                                             |
|o11 = Character over R                                                       |
|                                                                             |
|      (0, {6}) => | 0 1 0 2 4 |                                              |
|                                                                             |
|o11 : Character                                                              |
+-----------------------------------------------------------------------------+

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)"

character(PolynomialRing,ZZ,HashTable) -- construct a character
***************************************************************

Synopsis
========

  * Function: character,
  * Usage:
        character(R,l,H)
  * Inputs:
      * R, a polynomial ring (Macaulay2Doc), over a field
      * l, an integer (Macaulay2Doc), character length
      * H, a hash table (Macaulay2Doc), raw character data
  * Outputs:
      * an instance of the type Character,

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

This function is provided by the package BettiCharacters.

The character, method is mainly designed to compute characters
of finite group actions defined via action. The user who wishes
to define characters by hand may do so with this particular application of the
method.

The first argument is the polynomial ring the character values will live in;
this makes it possible to compare or combine the hand-constructed character
with other characters over the same ring. The second argument is the length of
the character, i.e., the number of conjugacy classes of the group whose
representations the character is coming from. The third argument is a hash
table containing the "raw" character data. The hash table entries are in the
format (i,d) => c, where i is an integer representing homological degree, d is
a list representing the internal (multi)degree, and c is a list containing the
values of the character in the given degrees. Note that the values of the
character are elements in the ring given as the first argument.

+---------------------------------------------------------------+
|i1 : R = QQ[x_1..x_3]                                          |
|                                                               |
|o1 = R                                                         |
|                                                               |
|o1 : PolynomialRing                                            |
+---------------------------------------------------------------+
|i2 : regRep = character(R,3, hashTable {                       |
|             (0,{0}) => matrix{{1,1,1}},                       |
|             (0,{1}) => matrix{{-1,0,2}},                      |
|             (0,{2}) => matrix{{-1,0,2}},                      |
|             (0,{3}) => matrix{{1,-1,1}},                      |
|             })                                                |
|                                                               |
|o2 = Character over R                                          |
|                                                               |
|     (0, {0}) => | 1 1 1 |                                     |
|     (0, {1}) => | -1 0 2 |                                    |
|     (0, {2}) => | -1 0 2 |                                    |
|     (0, {3}) => | 1 -1 1 |                                    |
|                                                               |
|o2 : Character                                                 |
+---------------------------------------------------------------+
|i3 : I = ideal(x_1+x_2+x_3,x_1*x_2+x_1*x_3+x_2*x_3,x_1*x_2*x_3)|
|                                                               |
|o3 = ideal (x  + x  + x , x x  + x x  + x x , x x x )          |
|             1    2    3   1 2    1 3    2 3   1 2 3           |
|                                                               |
|o3 : Ideal of R                                                |
+---------------------------------------------------------------+
|i4 : S3 = {matrix{{x_2,x_3,x_1}},                              |
|           matrix{{x_2,x_1,x_3}},                              |
|           matrix{{x_1,x_2,x_3}} }                             |
|                                                               |
|o4 = {| x_2 x_3 x_1 |, | x_2 x_1 x_3 |, | x_1 x_2 x_3 |}       |
|                                                               |
|o4 : List                                                      |
+---------------------------------------------------------------+
|i5 : Q = R/I                                                   |
|                                                               |
|o5 = Q                                                         |
|                                                               |
|o5 : QuotientRing                                              |
+---------------------------------------------------------------+
|i6 : A = action(Q,S3)                                          |
|                                                               |
|o6 = QuotientRing with 3 actors                                |
|                                                               |
|o6 : ActionOnGradedModule                                      |
+---------------------------------------------------------------+
|i7 : character(A,0,3) === regRep                               |
|                                                               |
|o7 = true                                                      |
+---------------------------------------------------------------+

Caveat
======

This constructor implements basic consistency checks, but it is still be
possible to construct objects that are not actually characters (not even
virtual).

See also
========

  * character -- compute characters of finite group action

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

  * character(PolynomialRing,ZZ,HashTable)
    -- construct a character

character(CharacterDecomposition,CharacterTable) -- recover character from decomposition
****************************************************************************************

Synopsis
========

  * Function: character,
  * Usage:
        character(d,T)
        d*T
  * Inputs:
      * d, an instance of the type CharacterDecomposition,
      * T, an instance of the type CharacterTable,
  * Outputs:
      * an instance of the type Character,

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

This function is provided by the package BettiCharacters.

Use this function to recover a character from its decomposition into a linear
combination of the irreducible characters in a character table. The shortcut
d*T is equivalent to the command character(d,T).

As an example, we construct the character table of the symmetric group on 3
elements, then use it to decompose the character of the action of the same
symmetric group permuting the variables of a standard graded polynomial ring.

+-----------------------------------------------------------------------------+
|i1 : s = {2,3,1}                                                             |
|                                                                             |
|o1 = {2, 3, 1}                                                               |
|                                                                             |
|o1 : List                                                                    |
+-----------------------------------------------------------------------------+
|i2 : M = matrix{{1,1,1},{-1,0,2},{1,-1,1}}                                   |
|                                                                             |
|o2 = | 1  1  1 |                                                             |
|     | -1 0  2 |                                                             |
|     | 1  -1 1 |                                                             |
|                                                                             |
|              3        3                                                     |
|o2 : Matrix ZZ  <--- ZZ                                                      |
+-----------------------------------------------------------------------------+
|i3 : R = QQ[x_1..x_3]                                                        |
|                                                                             |
|o3 = R                                                                       |
|                                                                             |
|o3 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i4 : P = {1,2,3}                                                             |
|                                                                             |
|o4 = {1, 2, 3}                                                               |
|                                                                             |
|o4 : List                                                                    |
+-----------------------------------------------------------------------------+
|i5 : T = characterTable(s,M,R,P)                                             |
|                                                                             |
|o5 = Character table over R                                                  |
|                                                                             |
|         |   2   3  1                                                        |
|     ----+-----------                                                        |
|     X0  |   1   1  1                                                        |
|     X1  |  -1   0  2                                                        |
|     X2  |   1  -1  1                                                        |
|                                                                             |
|o5 : CharacterTable                                                          |
+-----------------------------------------------------------------------------+
|i6 : acts = {matrix{{x_2,x_3,x_1}},matrix{{x_2,x_1,x_3}},matrix{{x_1,x_2,x_3 |
|                                                                             |
|o6 = {| x_2 x_3 x_1 |, | x_2 x_1 x_3 |, | x_1 x_2 x_3 |}                     |
|                                                                             |
|o6 : List                                                                    |
|-----------------------------------------------------------------------------|
|}}}                                                                          |
+-----------------------------------------------------------------------------+
|i7 : A = action(R,acts)                                                      |
|                                                                             |
|o7 = PolynomialRing with 3 actors                                            |
|                                                                             |
|o7 : ActionOnGradedModule                                                    |
+-----------------------------------------------------------------------------+
|i8 : c = character(A,0,10)                                                   |
|                                                                             |
|o8 = Character over R                                                        |
|                                                                             |
|     (0, {0}) => | 1 1 1 |                                                   |
|     (0, {1}) => | 0 1 3 |                                                   |
|     (0, {2}) => | 0 2 6 |                                                   |
|     (0, {3}) => | 1 2 10 |                                                  |
|     (0, {4}) => | 0 3 15 |                                                  |
|     (0, {5}) => | 0 3 21 |                                                  |
|     (0, {6}) => | 1 4 28 |                                                  |
|     (0, {7}) => | 0 4 36 |                                                  |
|     (0, {8}) => | 0 5 45 |                                                  |
|     (0, {9}) => | 1 5 55 |                                                  |
|     (0, {10}) => | 0 6 66 |                                                 |
|                                                                             |
|o8 : Character                                                               |
+-----------------------------------------------------------------------------+
|i9 : d = c/T                                                                 |
|                                                                             |
|o9 = Decomposition table                                                     |
|                                                                             |
|                |  X0  X1  X2                                                |
|     -----------+------------                                                |
|      (0, {0})  |   1   0   0                                                |
|      (0, {1})  |   1   1   0                                                |
|      (0, {2})  |   2   2   0                                                |
|      (0, {3})  |   3   3   1                                                |
|      (0, {4})  |   4   5   1                                                |
|      (0, {5})  |   5   7   2                                                |
|      (0, {6})  |   7   9   3                                                |
|      (0, {7})  |   8  12   4                                                |
|      (0, {8})  |  10  15   5                                                |
|      (0, {9})  |  12  18   7                                                |
|     (0, {10})  |  14  22   8                                                |
|                                                                             |
|o9 : CharacterDecomposition                                                  |
+-----------------------------------------------------------------------------+
|i10 : c === d*T                                                              |
|                                                                             |
|o10 = true                                                                   |
+-----------------------------------------------------------------------------+

See also
========

  * characterTable -- construct a character table
  * decomposeCharacter -- decompose a character into
    irreducible characters

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

  * character(CharacterDecomposition,CharacterTable)
    -- recover
    character from decomposition

Character operations -- shift, direct sum, dual, and tensor product
*******************************************************************

The BettiCharacters, package contains several functions for working
with characters. See links below for more details.

See also
========

  * Character Array -- homological shift
  * directSum(Character) -- direct sum of
    characters
  * dual(Character,RingMap) -- dual character
  * tensor(Character,Character), --
    tensor product of characters

characterTable -- construct a character table
*********************************************

Synopsis
========

  * Usage:
        T = characterTable(s,M,R,conj)
        T = characterTable(s,M,R,perm)
  * Inputs:
      * s, a list (Macaulay2Doc), of conjugacy class sizes
      * M, a matrix (Macaulay2Doc), with character table entries
      * R, a polynomial ring (Macaulay2Doc), over a field
      * conj, a ring map (Macaulay2Doc), conjugation in
        coefficient field
      * perm, a list (Macaulay2Doc), permutation of conjugacy
        classes
  * Optional inputs (Macaulay2Doc),:
      * Labels, => ..., default value {}, custom labels for
        irreducible characters
  * Outputs:
      * T, an instance of the type CharacterTable,

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

This function is provided by the package BettiCharacters.

Use the characterTable, method to construct the character
table of a finite group.

The first argument is a list containing the cardinalities of the conjugacy
classes of the group.

The second argument is a square matrix whose entry in row $i$ and column $j$ is
the value of the $i$-th irreducible character of the group at an element of the
$j$-th conjugacy class.

The third argument is a polynomial ring over a field, the same ring over which
the modules and resolutions are defined whose characters are to be decomposed
against the character table. Note that the matrix in the second argument must
be liftable to this ring.

Assuming the polynomial ring in the third argument has a coefficient field F
which is a subfield of the complex numbers, then the fourth argument is the
restriction of complex conjugation to F.

For example, we construct the character table of the alternating group $A_4$
considered as a subgroup of the symmetric group $S_4$. The conjugacy classes
are represented by the identity, and the permutations $(12)(34)$, $(123)$, and
$(132)$, in cycle notation. These conjugacy classes have cardinalities: 1, 3,
4, 4. The irreducible characters can be constructed over the field
$\mathbb{Q}[w]$, where $w$ is a primitive third root of unity. Complex
conjugation restricts to $\mathbb{Q}[w]$ by sending $w$ to $w^2$.

+-------------------------------------------------------------+
|i1 : F = toField(QQ[w]/ideal(1+w+w^2))                       |
|                                                             |
|o1 = F                                                       |
|                                                             |
|o1 : PolynomialRing                                          |
+-------------------------------------------------------------+
|i2 : s = {1,3,4,4}                                           |
|                                                             |
|o2 = {1, 3, 4, 4}                                            |
|                                                             |
|o2 : List                                                    |
+-------------------------------------------------------------+
|i3 : M = matrix{{1,1,1,1},{1,1,w,w^2},{1,1,w^2,w},{3,-1,0,0}}|
|                                                             |
|o3 = | 1 1  1    1    |                                      |
|     | 1 1  w    -w-1 |                                      |
|     | 1 1  -w-1 w    |                                      |
|     | 3 -1 0    0    |                                      |
|                                                             |
|             4       4                                       |
|o3 : Matrix F  <--- F                                        |
+-------------------------------------------------------------+
|i4 : R = F[x_1..x_4]                                         |
|                                                             |
|o4 = R                                                       |
|                                                             |
|o4 : PolynomialRing                                          |
+-------------------------------------------------------------+
|i5 : conj = map(F,F,{w^2})                                   |
|                                                             |
|o5 = map (F, F, {- w - 1})                                   |
|                                                             |
|o5 : RingMap F <--- F                                        |
+-------------------------------------------------------------+
|i6 : T = characterTable(s,M,R,conj)                          |
|                                                             |
|o6 = Character table over R                                  |
|                                                             |
|         |  1   3        4        4                          |
|     ----+-------------------------                          |
|     X0  |  1   1        1        1                          |
|     X1  |  1   1        w  - w - 1                          |
|     X2  |  1   1  - w - 1        w                          |
|     X3  |  3  -1        0        0                          |
|                                                             |
|o6 : CharacterTable                                          |
+-------------------------------------------------------------+

By default, irreducible characters in a character table are labeled as X0, X1,
..., etc. The user may pass custom labels in a list using the option
Labels.

When working over a splitting field for a finite group $G$ in the non modular
case, the irreducible characters of $G$ form an orthonormal basis for the space
of class functions on $G$ with the scalar product given by $$\langle \chi_1,
\chi_2 \rangle = \frac{1}{|G|} \sum_{g\in G} \chi_1 (g) \chi_2 (g^{-1}).$$ Over
the complex numbers, the second factor in the summation is equal to
$\overline{\chi_2 (g)}$. Thus the scalar product can be computed using the
conjugation function provided by the user.

If working over coefficient fields of positive characteristic or if one wishes
to avoid defining conjugation, one may replace the fourth argument by a list
containing a permutation $\pi$ of the integers $1,\dots,r$, where $r$ is the
number of conjugacy classes of the group. The permutation $\pi$ is defined as
follows: if $g$ is an element of the $j$-th conjugacy class, then $g^{-1}$ is
an element of the $\pi (j)$-th class.

In the case of $A_4$, the identity and $(12)(34)$ are their own inverses, while
$(123)^{-1} = (132)$. Therefore the permutation $\pi$ is the transposition
exchanging 3 and 4. Hence the character table of $A_4$ may also be constructed
as follows, with $\pi$ represented in one-line notation by a list passed as the
fourth argument.

+------------------------------------+
|i7 : perm = {1,2,4,3}               |
|                                    |
|o7 = {1, 2, 4, 3}                   |
|                                    |
|o7 : List                           |
+------------------------------------+
|i8 : T' = characterTable(s,M,R,perm)|
|                                    |
|o8 = Character table over R         |
|                                    |
|         |  1   3        4        4 |
|     ----+------------------------- |
|     X0  |  1   1        1        1 |
|     X1  |  1   1        w  - w - 1 |
|     X2  |  1   1  - w - 1        w |
|     X3  |  3  -1        0        0 |
|                                    |
|o8 : CharacterTable                 |
+------------------------------------+
|i9 : T' === T                       |
|                                    |
|o9 = true                           |
+------------------------------------+

Caveat
======

This constructor checks orthonormality of the table matrix under the standard
scalar product of characters. However, it may still be possible to construct a
table that is not an actual character table. Note also that there are no
further checks when using a character table to decompose characters.

See also
========

  * decomposeCharacter -- decompose a character into
    irreducible characters

Ways to use characterTable :
============================

  * "characterTable(List,Matrix,PolynomialRing,List)"
  * "characterTable(List,Matrix,PolynomialRing,RingMap)"

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

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

CharacterTable -- the class of all character tables of finite groups
********************************************************************

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

This class is provided by the package BettiCharacters.

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

  * characterTable -- construct a character table
  * "characterTable(List,Matrix,PolynomialRing,List)" -- see
    characterTable, -- construct a character table
  * "characterTable(List,Matrix,PolynomialRing,RingMap)" -- see
    characterTable, -- construct a character table
  * symmetricGroupTable -- character table of the
    symmetric group

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

  * character(CharacterDecomposition,CharacterTable)
    -- recover
    character from decomposition
  * "CharacterDecomposition * CharacterTable" -- see
    character(CharacterDecomposition,CharacterTable),
    -- recover
    character from decomposition
  * "Character / CharacterTable" -- see decomposeCharacter,
    -- decompose a character into irreducible characters
  * "decomposeCharacter(Character,CharacterTable)" -- see
    decomposeCharacter, -- decompose a character into
    irreducible characters
  * net(CharacterTable) -- format for printing,
    as a net

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

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

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

Synopsis
========

  * Function: net (Macaulay2Doc),

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

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

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

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

Labels -- custom labels for irreducible characters
**************************************************

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

This optional input is used with the method characterTable,
provided by the package BettiCharacters.

By default, irreducible characters in a character table are labeled as X0, X1,
..., etc. The user may pass custom labels in a list using this option.

The next example sets up the character table of the dihedral group $D_4$,
generated by an order 4 rotation $r$ and an order 2 reflection $s$ with the
relation $srs=r^3$. The representatives of the conjugacy classes are, in order:
the identity, $r^2$, $r$, $s$, and $rs$. Besides the trivial representation,
$D_4$ has three irreducible one-dimensional representations, corresponding to
the three normal subgroups of index two: $\langle r\rangle$, $\langle
r^,,s\rangle$, and $\langle r^2,rs\rangle$. The characters of these
representations send the elements of the corresponding subgroup to 1, and the
other elements to -1. We denote those characters rho1,rho2,rho3. Finally, there
is a unique irreducible representation of dimension 2.

+------------------------------------------------------+
|i1 : R = QQ[x,y]                                      |
|                                                      |
|o1 = R                                                |
|                                                      |
|o1 : PolynomialRing                                   |
+------------------------------------------------------+
|i2 : D8 = { matrix{{x,y}},                            |
|            matrix{{-x,-y}},                          |
|            matrix{{-y,x}},                           |
|            matrix{{x,-y}},                           |
|            matrix{{y,x}} }                           |
|                                                      |
|o2 = {| x y |, | -x -y |, | -y x |, | x -y |, | y x |}|
|                                                      |
|o2 : List                                             |
+------------------------------------------------------+
|i3 : M = matrix {{1,1,1,1,1},                         |
|         {1,1,1,-1,-1},                               |
|         {1,1,-1,1,-1},                               |
|         {1,1,-1,-1,1},                               |
|         {2,-2,0,0,0}};                               |
|                                                      |
|              5        5                              |
|o3 : Matrix ZZ  <--- ZZ                               |
+------------------------------------------------------+
|i4 : T = characterTable({1,1,2,2,2},M,R,{1,2,3,4,5},  |
|         Labels=>{"triv","rho1","rho2","rho3","dim2"})|
|                                                      |
|o4 = Character table over R                           |
|                                                      |
|           |  1   1   2   2   2                       |
|     ------+-------------------                       |
|     triv  |  1   1   1   1   1                       |
|     rho1  |  1   1   1  -1  -1                       |
|     rho2  |  1   1  -1   1  -1                       |
|     rho3  |  1   1  -1  -1   1                       |
|     dim2  |  2  -2   0   0   0                       |
|                                                      |
|o4 : CharacterTable                                   |
+------------------------------------------------------+

The same labels are automatically used when decomposing characters against a
labeled character table.

+----------------------------------------------+
|i5 : A = action(R,D8)                         |
|                                              |
|o5 = PolynomialRing with 5 actors             |
|                                              |
|o5 : ActionOnGradedModule                     |
+----------------------------------------------+
|i6 : c = character(A,0,8)                     |
|                                              |
|o6 = Character over R                         |
|                                              |
|     (0, {0}) => | 1 1 1 1 1 |                |
|     (0, {1}) => | 2 -2 0 0 0 |               |
|     (0, {2}) => | 3 3 -1 1 1 |               |
|     (0, {3}) => | 4 -4 0 0 0 |               |
|     (0, {4}) => | 5 5 1 1 1 |                |
|     (0, {5}) => | 6 -6 0 0 0 |               |
|     (0, {6}) => | 7 7 -1 1 1 |               |
|     (0, {7}) => | 8 -8 0 0 0 |               |
|     (0, {8}) => | 9 9 1 1 1 |                |
|                                              |
|o6 : Character                                |
+----------------------------------------------+
|i7 : decomposeCharacter(c,T)                  |
|                                              |
|o7 = Decomposition table                      |
|                                              |
|               |  triv  rho1  rho2  rho3  dim2|
|     ----------+------------------------------|
|     (0, {0})  |     1     0     0     0     0|
|     (0, {1})  |     0     0     0     0     1|
|     (0, {2})  |     1     0     1     1     0|
|     (0, {3})  |     0     0     0     0     2|
|     (0, {4})  |     2     1     1     1     0|
|     (0, {5})  |     0     0     0     0     3|
|     (0, {6})  |     2     1     2     2     0|
|     (0, {7})  |     0     0     0     0     4|
|     (0, {8})  |     3     2     2     2     0|
|                                              |
|o7 : CharacterDecomposition                   |
+----------------------------------------------+

The labels are stored in the character table under the key labels.

See also
========

  * characterTable -- construct a character table
  * decomposeCharacter -- decompose a character into
    irreducible characters

Functions with optional argument named Labels :
===============================================

  * "characterTable(...,Labels=>...)"

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

The object Labels, is a symbol (Macaulay2Doc).

decomposeCharacter -- decompose a character into irreducible characters
***********************************************************************

Synopsis
========

  * Usage:
        decomposeCharacter(c,T)
        c/T
  * Inputs:
      * c, an instance of the type Character, of a finite
        group
      * T, an instance of the type CharacterTable, of
        the same finite group
  * Outputs:
      * an instance of the type CharacterDecomposition,

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

This function is provided by the package BettiCharacters.

Use the decomposeCharacter, method to decompose a
character into a linear combination of irreducible characters in a character
table. The shortcut c/T is equivalent to the command decomposeCharacter(c,T).

As an example, we construct the character table of the symmetric group on 3
elements, then use it to decompose the character of the action of the same
symmetric group permuting the variables of a standard graded polynomial ring.

+-----------------------------------------------------------------------------+
|i1 : s = {2,3,1}                                                             |
|                                                                             |
|o1 = {2, 3, 1}                                                               |
|                                                                             |
|o1 : List                                                                    |
+-----------------------------------------------------------------------------+
|i2 : M = matrix{{1,1,1},{-1,0,2},{1,-1,1}}                                   |
|                                                                             |
|o2 = | 1  1  1 |                                                             |
|     | -1 0  2 |                                                             |
|     | 1  -1 1 |                                                             |
|                                                                             |
|              3        3                                                     |
|o2 : Matrix ZZ  <--- ZZ                                                      |
+-----------------------------------------------------------------------------+
|i3 : R = QQ[x_1..x_3]                                                        |
|                                                                             |
|o3 = R                                                                       |
|                                                                             |
|o3 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i4 : P = {1,2,3}                                                             |
|                                                                             |
|o4 = {1, 2, 3}                                                               |
|                                                                             |
|o4 : List                                                                    |
+-----------------------------------------------------------------------------+
|i5 : T = characterTable(s,M,R,P)                                             |
|                                                                             |
|o5 = Character table over R                                                  |
|                                                                             |
|         |   2   3  1                                                        |
|     ----+-----------                                                        |
|     X0  |   1   1  1                                                        |
|     X1  |  -1   0  2                                                        |
|     X2  |   1  -1  1                                                        |
|                                                                             |
|o5 : CharacterTable                                                          |
+-----------------------------------------------------------------------------+
|i6 : acts = {matrix{{x_2,x_3,x_1}},matrix{{x_2,x_1,x_3}},matrix{{x_1,x_2,x_3 |
|                                                                             |
|o6 = {| x_2 x_3 x_1 |, | x_2 x_1 x_3 |, | x_1 x_2 x_3 |}                     |
|                                                                             |
|o6 : List                                                                    |
|-----------------------------------------------------------------------------|
|}}}                                                                          |
+-----------------------------------------------------------------------------+
|i7 : A = action(R,acts)                                                      |
|                                                                             |
|o7 = PolynomialRing with 3 actors                                            |
|                                                                             |
|o7 : ActionOnGradedModule                                                    |
+-----------------------------------------------------------------------------+
|i8 : c = character(A,0,10)                                                   |
|                                                                             |
|o8 = Character over R                                                        |
|                                                                             |
|     (0, {0}) => | 1 1 1 |                                                   |
|     (0, {1}) => | 0 1 3 |                                                   |
|     (0, {2}) => | 0 2 6 |                                                   |
|     (0, {3}) => | 1 2 10 |                                                  |
|     (0, {4}) => | 0 3 15 |                                                  |
|     (0, {5}) => | 0 3 21 |                                                  |
|     (0, {6}) => | 1 4 28 |                                                  |
|     (0, {7}) => | 0 4 36 |                                                  |
|     (0, {8}) => | 0 5 45 |                                                  |
|     (0, {9}) => | 1 5 55 |                                                  |
|     (0, {10}) => | 0 6 66 |                                                 |
|                                                                             |
|o8 : Character                                                               |
+-----------------------------------------------------------------------------+
|i9 : decomposeCharacter(c,T)                                                 |
|                                                                             |
|o9 = Decomposition table                                                     |
|                                                                             |
|                |  X0  X1  X2                                                |
|     -----------+------------                                                |
|      (0, {0})  |   1   0   0                                                |
|      (0, {1})  |   1   1   0                                                |
|      (0, {2})  |   2   2   0                                                |
|      (0, {3})  |   3   3   1                                                |
|      (0, {4})  |   4   5   1                                                |
|      (0, {5})  |   5   7   2                                                |
|      (0, {6})  |   7   9   3                                                |
|      (0, {7})  |   8  12   4                                                |
|      (0, {8})  |  10  15   5                                                |
|      (0, {9})  |  12  18   7                                                |
|     (0, {10})  |  14  22   8                                                |
|                                                                             |
|o9 : CharacterDecomposition                                                  |
+-----------------------------------------------------------------------------+

The results are shown in a table whose rows are indexed by pairs of homological
and internal degrees, and whose columns are labeled by the irreducible
characters. By default, irreducible characters in a character table are labeled
as X0, X1, ..., etc, and the same labeling is inherited by the character
decompsoition. The user may pass custom labels in a list using the option
Labels, when constructing the character table.

See also
========

  * characterTable -- construct a character table

Ways to use decomposeCharacter :
================================

  * "decomposeCharacter(Character,CharacterTable)"

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

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

CharacterDecomposition -- the class of all finite group character decompositions
********************************************************************************

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

This class is provided by the package BettiCharacters.

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

  * "Character / CharacterTable" -- see decomposeCharacter,
    -- decompose a character into irreducible characters
  * decomposeCharacter -- decompose a character into
    irreducible characters
  * "decomposeCharacter(Character,CharacterTable)" -- see
    decomposeCharacter, -- decompose a character into
    irreducible characters

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

  * character(CharacterDecomposition,CharacterTable)
    -- recover
    character from decomposition
  * "CharacterDecomposition * CharacterTable" -- see
    character(CharacterDecomposition,CharacterTable),
    -- recover
    character from decomposition
  * net(CharacterDecomposition), --
    format for printing, as a net

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

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

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

Synopsis
========

  * Function: net (Macaulay2Doc),

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

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

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

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

symmetricGroupActors -- permutation action of the symmetric group
*****************************************************************

Synopsis
========

  * Usage:
        symmetricGroupActors(R)
  * Inputs:
      * R, a polynomial ring (Macaulay2Doc),
  * Outputs:
      * a list (Macaulay2Doc),

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

This function is provided by the package BettiCharacters.

Returns a list of of matrices, each representing an element of the symmetric
group permuting the variables of the polynomial ring in the input. This
simplifies the setup for symmetric group actions with the action,
command.

The output list contains one element for each conjugacy class of the symmetric
group. The conjugacy classes are determined by their cycle type and are in
bijection with the partitions of $n$, where $n$ is the number of variables.
Therefore the first element of the list will always be a cycle of length $n$,
and the last element will be the identity.

+-----------------------------------------------------------------------------+
|i1 : R=QQ[x_1..x_4]                                                          |
|                                                                             |
|o1 = R                                                                       |
|                                                                             |
|o1 : PolynomialRing                                                          |
+-----------------------------------------------------------------------------+
|i2 : symmetricGroupActors(R)                                                 |
|                                                                             |
|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 : partitions 4                                                            |
|                                                                             |
|o3 = {Partition{4}, Partition{3, 1}, Partition{2, 2}, Partition{2, 1, 1},    |
|     ------------------------------------------------------------------------|
|     Partition{1, 1, 1, 1}}                                                  |
|                                                                             |
|o3 : List                                                                    |
+-----------------------------------------------------------------------------+

See also
========

  * BettiCharacters Example 1 -- Specht
    ideals / subspace arrangements
  * BettiCharacters Example 2 -- Symbolic
    powers of star configurations

Ways to use symmetricGroupActors :
==================================

  * "symmetricGroupActors(PolynomialRing)"

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

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

symmetricGroupTable -- character table of the symmetric group
*************************************************************

Synopsis
========

  * Usage:
        symmetricGroupTable(R)
  * Inputs:
      * R, a polynomial ring (Macaulay2Doc),
  * Outputs:
      * an instance of the type CharacterTable,

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

This function is provided by the package BettiCharacters.

Returns the character table of the symmetric group $S_n$, where $n$ is the
number of variables of the polynomial ring in the input. The irreducible
characters are indexed by the partitions of $n$ written using a compact
notation where an exponent indicates how many times a part is repeated. The
computation uses the recursive Murnaghan-Nakayama formula.

+---------------------------------+
|i1 : R=QQ[x_1..x_4]              |
|                                 |
|o1 = R                           |
|                                 |
|o1 : PolynomialRing              |
+---------------------------------+
|i2 : symmetricGroupTable(R)      |
|                                 |
|o2 = Character table over R      |
|                                 |
|             |   6   8   3   6  1|
|     --------+-------------------|
|        (4)  |   1   1   1   1  1|
|      (3,1)  |  -1   0  -1   1  3|
|         2   |                   |
|       (2 )  |   0  -1   2   0  2|
|         2   |                   |
|     (2,1 )  |   1   0  -1  -1  3|
|         4   |                   |
|       (1 )  |  -1   1   1  -1  1|
|                                 |
|o2 : CharacterTable              |
+---------------------------------+

See also
========

  * BettiCharacters Example 1 -- Specht
    ideals / subspace arrangements
  * BettiCharacters Example 2 -- Symbolic
    powers of star configurations

Ways to use symmetricGroupTable :
=================================

  * "symmetricGroupTable(PolynomialRing)"

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

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

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

In this example, we identify the Betti characters of the Specht ideal
associated        with the partition (5,2). 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 6-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 explicitly. As an alternative, the ideal can
be obtained using the function spechtPolynomials 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 : I1=ideal apply({4,5,6,7}, i -> (x_1-x_2)*(x_3-x_i));                    |
|                                                                             |
|o2 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i3 : I2=ideal apply(subsets({3,4,5,6,7},2), s ->                             |
|                                                                             |
|o3 : Ideal of R                                                              |
|-----------------------------------------------------------------------------|
|(x_1-x_(s#0))*(x_2-x_(s#1)));                                                |
+-----------------------------------------------------------------------------+
|i4 : I=I1+I2                                                                 |
|                                                                             |
|o4 = ideal (x x  - x x  - x x  + x x , x x  - x x  - x x  + x x , x x  - x x |
|             1 3    2 3    1 4    2 4   1 3    2 3    1 5    2 5   1 3    2 3|
|     ------------------------------------------------------------------------|
|     - x x  + x x , x x  - x x  - x x  + x x , x x  - x x  - x x  + x x ,    |
|        1 6    2 6   1 3    2 3    1 7    2 7   1 2    2 3    1 4    3 4     |
|     ------------------------------------------------------------------------|
|     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 3    1 5    3 5   1 2    2 4    1 5    4 5   1 2    2 3    1 6|
|     ------------------------------------------------------------------------|
|     + x x , x x  - x x  - x x  + x x , x x  - x x  - x x  + x x , x x  -    |
|        3 6   1 2    2 4    1 6    4 6   1 2    2 5    1 6    5 6   1 2      |
|     ------------------------------------------------------------------------|
|     x x  - x x  + x x , x x  - x x  - x x  + x x , x x  - x x  - x x  +     |
|      2 3    1 7    3 7   1 2    2 4    1 7    4 7   1 2    2 5    1 7       |
|     ------------------------------------------------------------------------|
|     x x , x x  - x x  - x x  + x x )                                        |
|      5 7   1 2    2 6    1 7    6 7                                         |
|                                                                             |
|o4 : Ideal of R                                                              |
+-----------------------------------------------------------------------------+
|i5 : RI=res I                                                                |
|                                                                             |
|      1      14      35      35      14      1                               |
|o5 = R  <-- R   <-- R   <-- R   <-- R   <-- R  <-- 0                         |
|                                                                             |
|     0      1       2       3       4       5      6                         |
|                                                                             |
|o5 : ChainComplex                                                            |
+-----------------------------------------------------------------------------+
|i6 : betti RI                                                                |
|                                                                             |
|            0  1  2  3  4 5                                                  |
|o6 = total: 1 14 35 35 14 1                                                  |
|         0: 1  .  .  .  . .                                                  |
|         1: . 14 35 35 14 .                                                  |
|         2: .  .  .  .  . 1                                                  |
|                                                                             |
|o6 : 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. Representatives for the conjugacy
classes of the symmetric group acting on a polynomial ring by permuting the
variables can be obtained via symmetricGroupActors.
Once the action is set up, we compute the Betti
characters.

+-----------------------------------------------------------------------------+
|i7 : S7 = symmetricGroupActors R                                             |
|                                                                             |
|o7 = {| 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 |}|
|                                                                             |
|o7 : List                                                                    |
+-----------------------------------------------------------------------------+
|i8 : A = action(RI,S7)                                                       |
|                                                                             |
|o8 = ChainComplex with 15 actors                                             |
|                                                                             |
|o8 : ActionOnComplex                                                         |
+-----------------------------------------------------------------------------+
|i9 : elapsedTime c = character A                                             |
| -- 1.40236 seconds elapsed                                                  |
|                                                                             |
|o9 = Character over R                                                        |
|                                                                             |
|     (0, {0}) => | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 |                           |
|     (1, {2}) => | 0 -1 1 -1 0 0 0 -1 2 0 2 2 2 6 14 |                       |
|     (2, {3}) => | 0 1 0 0 -1 1 -1 -1 -1 -1 -1 1 -1 5 35 |                   |
|     (3, {4}) => | 0 -1 0 0 1 1 1 -1 -1 1 -1 -1 -1 -5 35 |                   |
|     (4, {5}) => | 0 1 -1 -1 0 0 0 -1 2 0 2 -2 2 -6 14 |                     |
|     (5, {7}) => | 1 -1 -1 1 -1 1 -1 1 1 -1 1 -1 1 -1 1 |                    |
|                                                                             |
|o9 : Character                                                               |
+-----------------------------------------------------------------------------+

To make sense of these characters we decompose them against     the character
table of the symmetric group, which can be computed using the function
symmetricGroupTable. The irreducible characters are
indexed by the partitions of 7, which are written using a compact notation (the
exponents indicate how many times a part is repeated).

+-----------------------------------------------------------------------------+
|i10 : T = symmetricGroupTable R                                              |
|                                                                             |
|o10 = Character table over R                                                 |
|                                                                             |
|                |  720  840  504  504  420  630  210  280  210  420  70  105 |
|      ----------+------------------------------------------------------------|
|           (7)  |    1    1    1    1    1    1    1    1    1    1   1    1 |
|         (6,1)  |   -1    0   -1    1   -1    0    2    0   -1    1   3    0 |
|         (5,2)  |    0   -1    1   -1    0    0    0   -1    2    0   2    2 |
|            2   |                                                            |
|        (5,1 )  |    1    0    0    0    1   -1    1    0   -1   -1   3   -3 |
|         (4,3)  |    0    0   -1   -1    1    0   -2    2   -1    1  -1    0 |
|       (4,2,1)  |    0    1    0    0   -1    1   -1   -1   -1   -1  -1    1 |
|            3   |                                                            |
|        (4,1 )  |   -1    0    0    0    0    0    0    2    2    0   2    0 |
|          2     |                                                            |
|        (3 ,1)  |    0    0    1    1   -1   -1   -1    0    1    1  -3   -3 |
|            2   |                                                            |
|        (3,2 )  |    0    0   -1    1    1   -1    1    0    1   -1  -3    3 |
|            2   |                                                            |
|      (3,2,1 )  |    0   -1    0    0    1    1    1   -1   -1    1  -1   -1 |
|            4   |                                                            |
|        (3,1 )  |    1    0    0    0   -1   -1   -1    0   -1    1   3    3 |
|          3     |                                                            |
|        (2 ,1)  |    0    0    1   -1   -1    0    2    2   -1   -1  -1    0 |
|         2  3   |                                                            |
|       (2 ,1 )  |    0    1   -1   -1    0    0    0   -1    2    0   2   -2 |
|            5   |                                                            |
|        (2,1 )  |   -1    0    1    1    1    0   -2    0   -1   -1   3    0 |
|            7   |                                                            |
|          (1 )  |    1   -1   -1    1   -1    1   -1    1    1   -1   1   -1 |
|                                                                             |
|o10 : CharacterTable                                                         |
|-----------------------------------------------------------------------------|
| 105  21   1                                                                 |
|------------                                                                 |
|   1   1   1                                                                 |
|   2   4   6                                                                 |
|   2   6  14                                                                 |
|                                                                             |
|  -1   5  15                                                                 |
|   2   4  14                                                                 |
|  -1   5  35                                                                 |
|                                                                             |
|  -4   0  20                                                                 |
|                                                                             |
|   1   1  21                                                                 |
|                                                                             |
|   1  -1  21                                                                 |
|                                                                             |
|  -1  -5  35                                                                 |
|                                                                             |
|  -1  -5  15                                                                 |
|                                                                             |
|   2  -4  14                                                                 |
|                                                                             |
|   2  -6  14                                                                 |
|                                                                             |
|   2  -4   6                                                                 |
|                                                                             |
|   1  -1   1                                                                 |
+-----------------------------------------------------------------------------+
|i11 : decomposeCharacter(c,T)                                                |
|                                                                             |
|o11 = Decomposition table                                                    |
|                                                                             |
|                |                             2     2  3     7               |
|                |  (7)  (5,2)  (4,2,1)  (3,2,1 )  (2 ,1 )  (1 )              |
|      ----------+----------------------------------------------              |
|      (0, {0})  |    1      0        0         0        0     0              |
|      (1, {2})  |    0      1        0         0        0     0              |
|      (2, {3})  |    0      0        1         0        0     0              |
|      (3, {4})  |    0      0        0         1        0     0              |
|      (4, {5})  |    0      0        0         0        1     0              |
|      (5, {7})  |    0      0        0         0        0     1              |
|                                                                             |
|o11 : CharacterDecomposition                                                 |
+-----------------------------------------------------------------------------+

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

Finally, we can observe the Gorenstein duality of the resolution and its
character. We construct the character of the sign representation concentrated
in homological degree 0, internal degree 7. Then we dualize the character of
the resolution previously computed, shift its homological degree by the length
of the resolution, and twist it by the sign character just constructed: the
result is the same as the character of the resolution.

+--------------------------------------------------------------+
|i12 : sign = character(R,15,hashTable {(0,{7}) =>             |
|              matrix{{1,-1,-1,1,-1,1,-1,1,1,-1,1,-1,1,-1,1}}})|
|                                                              |
|o12 = Character over R                                        |
|                                                              |
|      (0, {7}) => | 1 -1 -1 1 -1 1 -1 1 1 -1 1 -1 1 -1 1 |    |
|                                                              |
|o12 : Character                                               |
+--------------------------------------------------------------+
|i13 : dual(c,id_QQ)[-5] ** sign === c                         |
|                                                              |
|o13 = true                                                    |
+--------------------------------------------------------------+

The second argument in the dual command is the restriction of complex
conjugation to the field of definition of the characters. For more information,
see dual(Character,RingMap).

BettiCharacters 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.

First, we construct the ideal and compute its minimal free resolution and 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. Representatives for the conjugacy
classes of the symmetric group acting on a polynomial ring by permuting the
variables can be obtained via symmetricGroupActors.
After setting up the action, we compute the Betti
characters.

+-----------------------------------------------------------------------------+
|i5 : S6 = symmetricGroupActors R                                             |
|                                                                             |
|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,S6)                                                         |
|                                                                             |
|o6 = ChainComplex with 11 actors                                             |
|                                                                             |
|o6 : ActionOnComplex                                                         |
+-----------------------------------------------------------------------------+
|i7 : elapsedTime c=character A                                               |
| -- 1.52847 seconds elapsed                                                  |
|                                                                             |
|o7 = Character over R                                                        |
|                                                                             |
|     (0, {0}) => | 1 1 1 1 1 1 1 1 1 1 1 |                                   |
|     (1, {5}) => | 0 1 0 2 0 1 3 0 2 4 6 |                                   |
|     (1, {7}) => | 0 0 0 0 0 1 3 0 4 16 60 |                                 |
|     (1, {9}) => | 0 0 0 0 2 2 2 0 4 8 20 |                                  |
|     (2, {6}) => | -1 0 -1 1 -1 0 2 -1 1 3 5 |                               |
|     (2, {8}) => | 0 0 -1 -1 0 0 6 -3 1 33 165 |                             |
|     (2, {10}) => | 0 0 0 0 0 1 3 0 4 16 60 |                                |
|     (3, {9}) => | 0 0 0 -2 0 -1 3 0 -6 20 150 |                             |
|     (3, {11}) => | 0 0 0 0 0 -1 3 0 -4 8 60 |                               |
|     (4, {10}) => | 0 0 1 -1 0 0 0 3 -3 3 45 |                               |
|     (4, {12}) => | 0 0 0 0 2 0 2 0 -4 0 20 |                                |
|                                                                             |
|o7 : Character                                                               |
+-----------------------------------------------------------------------------+

Next, we decompose the characters against       the character table of the
symmetric group, which can be computed using the function
symmetricGroupTable. The irreducible characters are
indexed by the partitions of 6, which are written using a compact notation (the
exponents indicate how many times a part is repeated).

+-------------------------------------------------------------------+
|i8 : T = symmetricGroupTable R                                     |
|                                                                   |
|o8 = Character table over R                                        |
|                                                                   |
|              |  120  144  90  90  40  120  40  15  45  15   1     |
|     ---------+-----------------------------------------------     |
|         (6)  |    1    1   1   1   1    1   1   1   1   1   1     |
|       (5,1)  |   -1    0  -1   1  -1    0   2  -1   1   3   5     |
|       (4,2)  |    0   -1   1  -1   0    0   0   3   1   3   9     |
|          2   |                                                    |
|      (4,1 )  |    1    0   0   0   1   -1   1  -2  -2   2  10     |
|          2   |                                                    |
|        (3 )  |    0    0  -1  -1   2    1  -1  -3   1   1   5     |
|     (3,2,1)  |    0    1   0   0  -2    0  -2   0   0   0  16     |
|          3   |                                                    |
|      (3,1 )  |   -1    0   0   0   1    1   1   2  -2  -2  10     |
|          3   |                                                    |
|        (2 )  |    0    0  -1   1   2   -1  -1   3   1  -1   5     |
|       2  2   |                                                    |
|     (2 ,1 )  |    0   -1   1   1   0    0   0  -3   1  -3   9     |
|          4   |                                                    |
|      (2,1 )  |    1    0  -1  -1  -1    0   2   1   1  -3   5     |
|          6   |                                                    |
|        (1 )  |   -1    1   1  -1   1   -1   1  -1   1  -1   1     |
|                                                                   |
|o8 : CharacterTable                                                |
+-------------------------------------------------------------------+
|i9 : decomposeCharacter(c,T)                                       |
|                                                                   |
|o9 = Decomposition table                                           |
|                                                                   |
|                |                         2     2                3 |
|                |  (6)  (5,1)  (4,2)  (4,1 )  (3 )  (3,2,1)  (3,1 )|
|     -----------+--------------------------------------------------|
|      (0, {0})  |    1      0      0       0     0        0       0|
|      (1, {5})  |    1      1      0       0     0        0       0|
|      (1, {7})  |    1      2      2       1     1        1       0|
|      (1, {9})  |    1      1      1       0     1        0       0|
|      (2, {6})  |    0      1      0       0     0        0       0|
|      (2, {8})  |    1      4      4       4     2        3       1|
|     (2, {10})  |    1      2      2       1     1        1       0|
|      (3, {9})  |    0      2      3       4     1        3       2|
|     (3, {11})  |    0      1      1       2     0        1       1|
|     (4, {10})  |    0      0      1       1     0        1       1|
|     (4, {12})  |    0      0      0       1     0        0       1|
|                                                                   |
|o9 : CharacterDecomposition                                        |
+-------------------------------------------------------------------+

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. To compare
that description with the results obtained here, one may use the
Littlewood-Richardson rule to decompose induced representations into a direct
sum of irreducibles.

BettiCharacters 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}$.

+-----------------------------------------------------------------------------+
|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};                                      |
+-----------------------------------------------------------------------------+

We compute the action of this group on the two resolutions above. Notice how
the group action is passed as a list of square matrices (instead of one-row
substitution matrices as in BettiCharacters Example 1,
and BettiCharacters Example 2); to
enable this, we set the option Sub, to false.

+--------------------------------------------------+
|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 a1 = character A1               |
| -- 3.68979 seconds elapsed                       |
|                                                  |
|o19 = Character over R                            |
|                                                  |
|      (0, {0}) => | 1 1 1 1 1 1 |                 |
|      (1, {8}) => | 3 -1 0 1 a4+a2+a -a4-a2-a-1 | |
|      (2, {11}) => | 1 1 1 1 1 1 |                |
|      (2, {13}) => | 1 1 1 1 1 1 |                |
|                                                  |
|o19 : Character                                   |
+--------------------------------------------------+
|i20 : elapsedTime a2 = character A2               |
| -- 151.247 seconds elapsed                       |
|                                                  |
|o20 = Character over R                            |
|                                                  |
|      (0, {0}) => | 1 1 1 1 1 1 |                 |
|      (1, {16}) => | 6 2 0 0 -1 -1 |              |
|      (2, {19}) => | 3 -1 0 1 a4+a2+a -a4-a2-a-1 ||
|      (2, {21}) => | 3 -1 0 1 a4+a2+a -a4-a2-a-1 ||
|      (3, {24}) => | 1 1 1 1 1 1 |                |
|                                                  |
|o20 : Character                                   |
+--------------------------------------------------+

Next we set up the character table of the group and decompose the Betti
characters of the resolutions. The arguments are: a list with the cardinality
of the conjugacy classes, a matrix with the values of the irreducible
characters, the base polynomial ring, and the complex conjugation map
restricted to the field of coefficients. See characterTable,
for more details.

+----------------------------------------------------------------+
|i21 : s = {1,21,56,42,24,24}                                    |
|                                                                |
|o21 = {1, 21, 56, 42, 24, 24}                                   |
|                                                                |
|o21 : List                                                      |
+----------------------------------------------------------------+
|i22 : m = matrix{{1,1,1,1,1,1},                                 |
|          {3,-1,0,1,a^4+a^2+a,-a^4-a^2-a-1},                    |
|          {3,-1,0,1,-a^4-a^2-a-1,a^4+a^2+a},                    |
|          {6,2,0,0,-1,-1},                                      |
|          {7,-1,1,-1,0,0},                                      |
|          {8,0,-1,0,1,1}};                                      |
|                                                                |
|               6        6                                       |
|o22 : Matrix kk  <--- kk                                        |
+----------------------------------------------------------------+
|i23 : conj = map(kk,kk,{a^6})                                   |
|                                                                |
|                       5    4    3    2                         |
|o23 = map (kk, kk, {- a  - a  - a  - a  - a - 1})               |
|                                                                |
|o23 : RingMap kk <--- kk                                        |
+----------------------------------------------------------------+
|i24 : T = characterTable(s,m,R,conj)                            |
|                                                                |
|o24 = Character table over R                                    |
|                                                                |
|          |  1  21  56  42                 24                 24|
|      ----+-----------------------------------------------------|
|      X0  |  1   1   1   1                  1                  1|
|          |                        4    2         4    2        |
|      X1  |  3  -1   0   1        a  + a  + a  - a  - a  - a - 1|
|          |                    4    2                 4    2    |
|      X2  |  3  -1   0   1  - a  - a  - a - 1        a  + a  + a|
|      X3  |  6   2   0   0                 -1                 -1|
|      X4  |  7  -1   1  -1                  0                  0|
|      X5  |  8   0  -1   0                  1                  1|
|                                                                |
|o24 : CharacterTable                                            |
+----------------------------------------------------------------+
|i25 : a1/T                                                      |
|                                                                |
|o25 = Decomposition table                                       |
|                                                                |
|                 |  X0  X1                                      |
|      -----------+--------                                      |
|       (0, {0})  |   1   0                                      |
|       (1, {8})  |   0   1                                      |
|      (2, {11})  |   1   0                                      |
|      (2, {13})  |   1   0                                      |
|                                                                |
|o25 : CharacterDecomposition                                    |
+----------------------------------------------------------------+
|i26 : a2/T                                                      |
|                                                                |
|o26 = Decomposition table                                       |
|                                                                |
|                 |  X0  X1  X3                                  |
|      -----------+------------                                  |
|       (0, {0})  |   1   0   0                                  |
|      (1, {16})  |   0   0   1                                  |
|      (2, {19})  |   0   1   0                                  |
|      (2, {21})  |   0   1   0                                  |
|      (3, {24})  |   1   0   0                                  |
|                                                                |
|o26 : CharacterDecomposition                                    |
+----------------------------------------------------------------+

Since X0 is the trivial character, this computation shows that the free module
in homological degree two in the resolution of the defining ideal of the Klein
configuration is a direct sum of two trivial representations, one in degree 11
and one in degree 13. It follows that its second exterior power is a trivial
representation concentrated in degree 24. 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).

Alternatively, 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.

+-------------------------------------+
|i27 : needsPackage "SymbolicPowers"  |
|                                     |
|o27 = SymbolicPowers                 |
|                                     |
|o27 : Package                        |
+-------------------------------------+
|i28 : Is2 = symbolicPower(I,2);      |
|                                     |
|o28 : Ideal of R                     |
+-------------------------------------+
|i29 : M = Is2 / I2;                  |
+-------------------------------------+
|i30 : B = action(M,G,Sub=>false)     |
|                                     |
|o30 = Module with 6 actors           |
|                                     |
|o30 : ActionOnGradedModule           |
+-------------------------------------+
|i31 : elapsedTime b = character(B,21)|
| -- 69.0019 seconds elapsed          |
|                                     |
|o31 = Character over R               |
|                                     |
|      (0, {21}) => | 1 1 1 1 1 1 |   |
|                                     |
|o31 : Character                      |
+-------------------------------------+
|i32 : b/T                            |
|                                     |
|o32 = Decomposition table            |
|                                     |
|                 |  X0               |
|      -----------+------             |
|      (0, {21})  |   1               |
|                                     |
|o32 : CharacterDecomposition         |
+-------------------------------------+