Macaulay2 » Documentation
Packages » BettiCharacters » Character class
next | previous | forward | backward | up | index | toc

Character class -- internal representation of graded characters

Version 2.5 of the BettiCharacters package introduces a new internal representation of graded characters. Although character printouts look the same as in previous versions, this new representation is incompatible with the one from earlier versions of the package. The earlier representation was not sufficient to compute tensor products of characters of the semidirect product of a finite group with a torus (see Semidirect). Not only the new representation makes this possible, it also generally makes character operations more natural and sets the groundwork for functionality to be added in future versions.

To understand how characters are stored, consider the following example.

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 : Q = R/I

o3 = Q

o3 : QuotientRing
i4 : S2 = symmetricGroupActors R

o4 = {| y z x |, | y x z |, | x y z |}

o4 : List
i5 : A = action(Q,S2)

o5 = QuotientRing with 3 actors

o5 : ActionOnGradedModule
i6 : a = character(A,0,10)

o6 = Character over QQ
      
     (0, {0})  |   1   1  1
     (0, {1})  |  -1   0  2
     (0, {2})  |  -1   0  2
     (0, {3})  |   1  -1  1

o6 : Character

The quotient ring Q is a module concentrated in homological degree zero. It is an Artinian ring with nonzero components in degrees zero, one, two, and three. Hence, the printout of the character of Q shows four rows indexed by pairs (h,d), with h the homological degree and d the internal degree.

Internally, the character stores a single matrix for each homological degree. To separate the internal degrees, the character uses elements from the degreesMonoid of the ambient ring of Q. Factoring out the monomials of the monoid of degrees, gives the characters of the graded components.

i7 : a.characters

o7 = HashTable{0 => | 1-T-T2+T3 1-T3 1+2T+2T2+T3 |}

o7 : HashTable
i8 : coefficients a.characters#0

o8 = (| 1 T T2 T3 |, {0} | 1  1  1 |)
                     {1} | -1 0  2 |
                     {2} | -1 0  2 |
                     {3} | 1  -1 1 |

o8 : Sequence

With this setup, the character in each homological degree is a matrix with values in a "character ring". This character ring is constructed as F[M], where F is the field of coefficients of R and M is the degreesMonoid of R. The character ring is stored with each action and character, and in the cache table of the polynomial ring under the key degreesRing.

i9 : A.degreesRing

o9 = QQ[T]

o9 : PolynomialRing
i10 : a.degreesRing

o10 = QQ[T]

o10 : PolynomialRing
i11 : R.cache#degreesRing

o11 = QQ[T]

o11 : PolynomialRing

When different characters are combined with methods such as directSum(Character) or tensor(Character,Character), the package checks that all characters have values in the same character ring. All actions and characters of objects (rings, ideals, modules, resolutions) over the same ambient ring automatically share the same character ring.

The character ring can be defined just as well when the ambient ring is multigraded and in the presence of actions by the semidirect product of a finite group and the torus responsible for the multigrading.

i12 : S = QQ[u,v,w,Degrees=>{{1,0,0},{0,1,0},{0,0,1}}]

o12 = S

o12 : PolynomialRing
i13 : J = ideal(u^2,v^2,w^2,u*v*w)

              2   2   2
o13 = ideal (u , v , w , u*v*w)

o13 : Ideal of S
i14 : RJ = res J

       1      4      6      3
o14 = S  <-- S  <-- S  <-- S
                            
      0      1      2      3

o14 : Complex
i15 : S3 = symmetricGroupActors(S)

o15 = {| v w u |, | v u w |, | u v w |}

o15 : List
i16 : B = action(RJ,S3,Semidirect=>{uniquePermutations,rsort})

o16 = Complex with 3 actors

o16 : ActionOnComplex
i17 : b = character B

o17 = Character over QQ
       
      (0, {0, 0, 0})  |  1   1  1
      (1, {1, 1, 1})  |  1   1  1
      (1, {2, 0, 0})  |  0   1  3
      (2, {2, 1, 1})  |  0   1  3
      (2, {2, 2, 0})  |  0  -1  3
      (3, {2, 2, 1})  |  0  -1  3

o17 : Character
i18 : b.characters

o18 = HashTable{0 => | 1 1 1 |                                                                                         }
                1 => | T_0T_1T_2 T_2^2+T_0T_1T_2 T_0^2+T_1^2+T_2^2+T_0T_1T_2 |
                2 => | 0 -T_0^2T_1^2+T_0T_1T_2^2 T_0^2T_1^2+T_0^2T_1T_2+T_0^2T_2^2+T_0T_1^2T_2+T_0T_1T_2^2+T_1^2T_2^2 |
                3 => | 0 -T_0^2T_1^2T_2 T_0^2T_1^2T_2+T_0^2T_1T_2^2+T_0T_1^2T_2^2 |

o18 : HashTable
i19 : b.degreesRing

o19 = QQ[T ..T ]
          0   2

o19 : PolynomialRing

Caveat

To avoid issues such as incompatible character rings or character rings being recreated over and over, the handling of character rings is currently not exposed to the user.


The source of this document is in /build/reproducible-path/macaulay2-1.26.05+ds/M2/Macaulay2/packages/BettiCharacters.m2:3859:0.