Emmanuel Briand, Departamento Matemática Aplicada 1, Universidad de Sevilla. Version of july 2019.
This notebook implements some of the calculations presented in the preprint On the growth of the Kronecker coefficients (Emmanuel Briand, Amarpreet Rattan, Mercedes Rosas; 2016 (reference [On the growth] below)
References:
URL for this notebook: http://emmanuel.jean.briand.free.fr/publications/HookStability.ipynb
You may also:
Some functions to deal with partitions and compute stable (=reduced) Kronecker coefficients are provided by the attached files stableKroneckerCoefficients.sage
and operations_on_partitions.sage
, that are loaded by the commands below, provided that the files have been downloaded with the notebook, and set in the same directory.
load("StableKroneckerCoefficients.sage")
load("operations_on_partitions.sage")
The following functions are loaded: - partitions_intersection - stable_Kronecker_product_of_Schur_functions - stable_Kronecker_coefficient The following functions are loaded: - partitions_oplus - partitions_cut - partitions_hat - add_row - add_column
Here is a command provided by these files. It computes a stable Kronecker coefficient.
stable_Kronecker_coefficient([2, 1],[2, 1], [1, 1, 1]) ## test. Answer must be 5
5
Help is available for the functions just loaded.
partitions_oplus?
Signature: partitions_oplus(lam, i, j) Docstring: Given a non-empty partition, returns the partition obtained by adding to its diagram i boxes in the first row, and j boxes in the first column. Init docstring: x.__init__(...) initializes x; see help(type(x)) for signature File: Dynamically generated function. No source code available. Type: function
stable_Kronecker_product_of_Schur_functions?
Signature: stable_Kronecker_product_of_Schur_functions(lam, mu) Docstring: The stable product of s_{lambda} with , in the Schur basis. INPUT: * lambda, mu -- two integer partitions, or lists defining integer partitions. OUTPUT: A symmetric function, expanded in the Schur basis. EXAMPLES: sage: stable_Kronecker_product_of_Schur_functions( [ 1 ], [ 1 ] ) s[] + s[1] + s[1, 1] + s[2] ALGORITHM: The stable Kronecker product of Schur functions is computed by means of Littlewood's Formula that can be found in [Littlewood] or as Theorem 1.1 in [Thibon]. Note: Littllewood's Formula is not applied recursively. REFERENCES: [Littlewood] D. E. Littlewood. "The Kronecker product of symmetric group representations." J. London Math. Soc., 31:89-93, 1956. [Thibon] Jean-Yves Thibon. "Hopf algebras of symmetric functions and tensor products of symmetric group representations." Internat. J. Algebra Comput., 1(2):207-221, 1991. Init docstring: x.__init__(...) initializes x; see help(type(x)) for signature File: Dynamically generated function. No source code available. Type: function
We start with three partitions $\alpha$, $\beta$ and $\gamma$ and consider the stable Kronecker coefficients indexed by $\alpha + (1^a)$, $\beta + (1^b)$, $\gamma + (1^c)$ with $a$, $b$ and $c$ at least the length of $\alpha$, $\beta$ and $\gamma$ respectively. According to Theorem 5.2, there exist integers $k_1$, $k_2$, $k_3$ such that when
$$b+c-a \geq k_1, \\ a+c-b \geq k_2, \\ a+b -c \geq k_3$$
we have
$$\overline{g}_{\alpha + (1^a),\beta + (1^b),\gamma + (1^c)} = \overline{\overline{g}}_{\alpha, \beta, \gamma}.$$
We will illustrate this on an example.
Here are functions computing values for $k_i$ as given by Theorem A.1 in [appendix].
## The bounds for stability, for the linear forms b+c-a, a-b+c, a+b-c, are given by the following function
def bounds_k(alpha, beta, gamma):
r"""
Returns (k1, k2, k3).
"""
return bound_k1( alpha, beta, gamma), bound_k1(beta, alpha, gamma), bound_k1(gamma, alpha, beta)
## The three bounds k1, k2, k3 are obtained from k1 by permutation of their arguments. Here is the formula for k1.
def bound_k1(alpha, beta, gamma):
r"""
Returns k1.
"""
alpha = Partition( alpha )
beta = Partition( beta )
gamma = Partition( gamma )
if alpha <> Partition([]):
return alpha.size() + alpha[0] + beta.length() + gamma.length()
else:
return 0 + 0 + beta.length() + gamma.length()
Our example will be with
$$\alpha=(2), \quad \beta=(2), \quad \gamma=(1,1).$$
alpha = Partition([2])
beta = Partition([2])
gamma = Partition([1,1])
(k1, k2, k3 ) = bounds_k(alpha, beta, gamma)
print(k1, k2, k3)
(7, 7, 5)
We compute the $\overline{g}_{\alpha + (1^a),\beta + (1^b),\gamma + (1^c)}$ for $a$, $b$, $c$ between $0$ and $10$.
## WARNING: This takes some time.
M = dict([])
N = 10
for a in [0..N]:
for b in [0..N]:
P = stable_Kronecker_product_of_Schur_functions( add_column(alpha, a), add_column(beta, b) )
for c in [0..N]:
M[a,b,c] = P.coefficient( add_column(gamma, c) );
The attached file "html_table.sage" contains a function "html_table". This function produces, from a matrix, a html table. The cells fulfilling some condition specified as a parameter of the function, are colored in yellow. We will use it to display the stable Kronecker coefficients indexed by $\alpha+(1^a)$, $\beta+(1^b)$, $\gamma+(1^c)$ that we have just computed.
load("html_table.sage")
html_table?
Signature: html_table(M, rows_label='', columns_label='', condition=<function <lambda> at 0x7f43eececaa0>) Docstring: Given a matrix M, builds a html table that represents M. The cells that fulfill "condition" are colored in yellow. INPUT: * M -- a matrix. * rows_label -- a character string (default: ""). * columns_label -- a character string (default: ""). * condition -- a function of the pair i, j (default: the function that returns always False). OUTPUT: A character string in html. EXAMPLES: sage: M = matrix([[1,2], [3,4]]) sage: html_table(M, , condition = lambda i,j: i + j >= 1 ) <table cellpadding="5" cellspacing="5"><tr> <th></th> <th></th><th colspan="2"> </th></tr> <tr> <th></th> <th></th> <th>0</th><th>1</th></tr><tr> <th rowspan="2"></th> <th>0</th><td> 1</td><td bgcolor="#ffff00"> 2</td></tr><tr> <th>1</th><td bgcolor="#ffff00"> 3</td><td bgcolor="#ffff00"> 4</td></tr></table> Init docstring: x.__init__(...) initializes x; see help(type(x)) for signature File: Dynamically generated function. No source code available. Type: function
We now display the tables of the $\overline{g}_{\alpha + (1^a),\beta + (1^b),\gamma + (1^c)} $, each table corresponding to a fixed $a$.
La = alpha.length()
Lb = beta.length()
Lc = gamma.length()
for a in [0..N]:
print "For a={a}".format(a=a)
show(html_table(matrix(N+1,N+1,lambda b,c : M[a,b,c]),
rows_label="b",
columns_label="c",
condition = lambda b, c: (b+c-a >= k1 and a+b-c >= k3
and a+c-b >= k2 and a>= La
and b >= Lb and c >= Lc)
))
For a=0
c | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
b | 0 | 1 | 2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
2 | 1 | 3 | 2 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
3 | 0 | 1 | 2 | 3 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | |
4 | 0 | 0 | 0 | 2 | 3 | 2 | 0 | 0 | 0 | 0 | 0 | |
5 | 0 | 0 | 0 | 0 | 2 | 3 | 2 | 0 | 0 | 0 | 0 | |
6 | 0 | 0 | 0 | 0 | 0 | 2 | 3 | 2 | 0 | 0 | 0 | |
7 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 3 | 2 | 0 | 0 | |
8 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 3 | 2 | 0 | |
9 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 3 | 2 | |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 3 |
For a=1
c | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
b | 0 | 1 | 2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 2 | 2 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
2 | 2 | 5 | 4 | 4 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | |
3 | 1 | 3 | 3 | 7 | 5 | 1 | 0 | 0 | 0 | 0 | 0 | |
4 | 0 | 0 | 1 | 5 | 8 | 5 | 1 | 0 | 0 | 0 | 0 | |
5 | 0 | 0 | 0 | 1 | 5 | 8 | 5 | 1 | 0 | 0 | 0 | |
6 | 0 | 0 | 0 | 0 | 1 | 5 | 8 | 5 | 1 | 0 | 0 | |
7 | 0 | 0 | 0 | 0 | 0 | 1 | 5 | 8 | 5 | 1 | 0 | |
8 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 5 | 8 | 5 | 1 | |
9 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 5 | 8 | 5 | |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 5 | 8 |
For a=2
c | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
b | 0 | 1 | 3 | 2 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 2 | 5 | 4 | 4 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | |
2 | 4 | 13 | 13 | 17 | 8 | 1 | 0 | 0 | 0 | 0 | 0 | |
3 | 3 | 12 | 15 | 30 | 25 | 9 | 1 | 0 | 0 | 0 | 0 | |
4 | 1 | 4 | 7 | 26 | 38 | 27 | 9 | 1 | 0 | 0 | 0 | |
5 | 0 | 0 | 1 | 10 | 29 | 39 | 27 | 9 | 1 | 0 | 0 | |
6 | 0 | 0 | 0 | 1 | 10 | 29 | 39 | 27 | 9 | 1 | 0 | |
7 | 0 | 0 | 0 | 0 | 1 | 10 | 29 | 39 | 27 | 9 | 1 | |
8 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 29 | 39 | 27 | 9 | |
9 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 29 | 39 | 27 | |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 29 | 39 |
For a=3
c | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
b | 0 | 0 | 1 | 2 | 3 | 2 | 0 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 3 | 3 | 7 | 5 | 1 | 0 | 0 | 0 | 0 | 0 | |
2 | 3 | 12 | 15 | 30 | 25 | 9 | 1 | 0 | 0 | 0 | 0 | |
3 | 4 | 18 | 26 | 55 | 58 | 34 | 10 | 1 | 0 | 0 | 0 | |
4 | 3 | 13 | 20 | 56 | 80 | 69 | 36 | 10 | 1 | 0 | 0 | |
5 | 1 | 4 | 7 | 33 | 69 | 86 | 70 | 36 | 10 | 1 | 0 | |
6 | 0 | 0 | 1 | 10 | 36 | 70 | 86 | 70 | 36 | 10 | 1 | |
7 | 0 | 0 | 0 | 1 | 10 | 36 | 70 | 86 | 70 | 36 | 10 | |
8 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 70 | 86 | 70 | 36 | |
9 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 70 | 86 | 70 | |
10 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 70 | 86 |
For a=4
c | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
b | 0 | 0 | 0 | 0 | 2 | 3 | 2 | 0 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 1 | 5 | 8 | 5 | 1 | 0 | 0 | 0 | 0 | |
2 | 1 | 4 | 7 | 26 | 38 | 27 | 9 | 1 | 0 | 0 | 0 | |
3 | 3 | 13 | 20 | 56 | 80 | 69 | 36 | 10 | 1 | 0 | 0 | |
4 | 4 | 18 | 28 | 70 | 104 | 109 | 80 | 38 | 10 | 1 | 0 | |
5 | 3 | 13 | 20 | 59 | 99 | 121 | 115 | 81 | 38 | 10 | 1 | |
6 | 1 | 4 | 7 | 33 | 72 | 105 | 122 | 115 | 81 | 38 | 10 | |
7 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 122 | 115 | 81 | 38 | |
8 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 122 | 115 | 81 | |
9 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 122 | 115 | |
10 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 122 |
For a=5
c | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
b | 0 | 0 | 0 | 0 | 0 | 2 | 3 | 2 | 0 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 1 | 5 | 8 | 5 | 1 | 0 | 0 | 0 | |
2 | 0 | 0 | 1 | 10 | 29 | 39 | 27 | 9 | 1 | 0 | 0 | |
3 | 1 | 4 | 7 | 33 | 69 | 86 | 70 | 36 | 10 | 1 | 0 | |
4 | 3 | 13 | 20 | 59 | 99 | 121 | 115 | 81 | 38 | 10 | 1 | |
5 | 4 | 18 | 28 | 70 | 108 | 132 | 138 | 121 | 82 | 38 | 10 | |
6 | 3 | 13 | 20 | 59 | 99 | 125 | 138 | 139 | 121 | 82 | 38 | |
7 | 1 | 4 | 7 | 33 | 72 | 105 | 126 | 138 | 139 | 121 | 82 | |
8 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 | 139 | 121 | |
9 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 | 139 | |
10 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 |
For a=6
c | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
b | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 3 | 2 | 0 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 1 | 5 | 8 | 5 | 1 | 0 | 0 | |
2 | 0 | 0 | 0 | 1 | 10 | 29 | 39 | 27 | 9 | 1 | 0 | |
3 | 0 | 0 | 1 | 10 | 36 | 70 | 86 | 70 | 36 | 10 | 1 | |
4 | 1 | 4 | 7 | 33 | 72 | 105 | 122 | 115 | 81 | 38 | 10 | |
5 | 3 | 13 | 20 | 59 | 99 | 125 | 138 | 139 | 121 | 82 | 38 | |
6 | 4 | 18 | 28 | 70 | 108 | 132 | 142 | 144 | 140 | 121 | 82 | |
7 | 3 | 13 | 20 | 59 | 99 | 125 | 138 | 143 | 144 | 140 | 121 | |
8 | 1 | 4 | 7 | 33 | 72 | 105 | 126 | 138 | 143 | 144 | 140 | |
9 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 | 143 | 144 | |
10 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 | 143 |
For a=7
c | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
b | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 3 | 2 | 0 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 1 | 5 | 8 | 5 | 1 | 0 | |
2 | 0 | 0 | 0 | 0 | 1 | 10 | 29 | 39 | 27 | 9 | 1 | |
3 | 0 | 0 | 0 | 1 | 10 | 36 | 70 | 86 | 70 | 36 | 10 | |
4 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 122 | 115 | 81 | 38 | |
5 | 1 | 4 | 7 | 33 | 72 | 105 | 126 | 138 | 139 | 121 | 82 | |
6 | 3 | 13 | 20 | 59 | 99 | 125 | 138 | 143 | 144 | 140 | 121 | |
7 | 4 | 18 | 28 | 70 | 108 | 132 | 142 | 144 | 144 | 144 | 140 | |
8 | 3 | 13 | 20 | 59 | 99 | 125 | 138 | 143 | 144 | 144 | 144 | |
9 | 1 | 4 | 7 | 33 | 72 | 105 | 126 | 138 | 143 | 144 | 144 | |
10 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 | 143 | 144 |
For a=8
c | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
b | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 3 | 2 | 0 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 5 | 8 | 5 | 1 | |
2 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 29 | 39 | 27 | 9 | |
3 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 70 | 86 | 70 | 36 | |
4 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 122 | 115 | 81 | |
5 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 | 139 | 121 | |
6 | 1 | 4 | 7 | 33 | 72 | 105 | 126 | 138 | 143 | 144 | 140 | |
7 | 3 | 13 | 20 | 59 | 99 | 125 | 138 | 143 | 144 | 144 | 144 | |
8 | 4 | 18 | 28 | 70 | 108 | 132 | 142 | 144 | 144 | 144 | 144 | |
9 | 3 | 13 | 20 | 59 | 99 | 125 | 138 | 143 | 144 | 144 | 144 | |
10 | 1 | 4 | 7 | 33 | 72 | 105 | 126 | 138 | 143 | 144 | 144 |
For a=9
c | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
b | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 3 | 2 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 5 | 8 | 5 | |
2 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 29 | 39 | 27 | |
3 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 70 | 86 | 70 | |
4 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 122 | 115 | |
5 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 | 139 | |
6 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 | 143 | 144 | |
7 | 1 | 4 | 7 | 33 | 72 | 105 | 126 | 138 | 143 | 144 | 144 | |
8 | 3 | 13 | 20 | 59 | 99 | 125 | 138 | 143 | 144 | 144 | 144 | |
9 | 4 | 18 | 28 | 70 | 108 | 132 | 142 | 144 | 144 | 144 | 144 | |
10 | 3 | 13 | 20 | 59 | 99 | 125 | 138 | 143 | 144 | 144 | 144 |
For a=10
c | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | ||
b | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2 | 3 |
1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 5 | 8 | |
2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 29 | 39 | |
3 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 70 | 86 | |
4 | 0 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 122 | |
5 | 0 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 | |
6 | 0 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 | 143 | |
7 | 0 | 0 | 1 | 10 | 36 | 73 | 105 | 126 | 138 | 143 | 144 | |
8 | 1 | 4 | 7 | 33 | 72 | 105 | 126 | 138 | 143 | 144 | 144 | |
9 | 3 | 13 | 20 | 59 | 99 | 125 | 138 | 143 | 144 | 144 | 144 | |
10 | 4 | 18 | 28 | 70 | 108 | 132 | 142 | 144 | 144 | 144 | 144 |
As in Example 5.4, we compute the polynomials $Q^-$ indexed by three one-row shapes $(p)$, $(q)$ and $(r)$. Let $F(x_1,y_1,z_1)$ be their generating series:
$$F=\sum Q_{(p),(q),(r)}^- x_1^p y_1^q z_1^r.$$
Then $F$ has a very simple expression. Below we compute $F$ and extract from it the polynomials $Q^-$ that appear in Example 5.4 of [On the growth].
var('x1 y1 z1 x y z')
numerator = (1+z*x1*y1)*(1+x*y1*z1)*(1+y*z1*x1) * (1+x1*y)*(1+x*y1)*(1+x1*z)*(1+x*z1)*(1+y*z1)*(1+y1*z)
denominator = (1-x1*y1*z1) * (1-x1*y1)*(1-x1*z1)*(1-y1*z1)*(1-x1*y*z)*(1-x*y1*z)*(1-x*y*z1)*(1+x1/x)*(1+y1/y)*(1+z1/z)
F = numerator / denominator
## For developping in series with "series" I introduce a variable t
var('t')
G = F.subs({ x1 : t*x1, y1 : t*y1, z1 : t*z1 })
def Q_minus(p, q, r):
global x1, y1, z1, F, G, t, x, y, z;
N = p + q +r;
GG = G.series( t, N+1).truncate().subs( {t:1}).expand()
return GG.coefficient( x1, p).coefficient( y1, q).coefficient( z1, r)
Q_minus(0,0,0)
1
Q_minus(0,0,1)
x*y + x + y - 1/z
Q_minus(0,0,2)
x^2*y^2 + x^2*y + x*y^2 + x*y - x*y/z - x/z - y/z + 1/z^2
Q_minus(0,1,1)
x^2*y*z + x^2*y + x^2*z + 2*x*y*z + x^2 + x*y + x*z + y*z - x - x/y - x/z + 1/(y*z) - 1
Conjecture 5.11 states that for all triples of partitions $\lambda$, $\mu$, $\nu$ of the same weight,
$$g_{ \lambda , \mu , \nu }\leq g_{\lambda \oplus (1, 1), \mu \oplus (1, 1), \nu \oplus (1, 1)}$$
We checked this for weights up to $16$. Below we reproduce the computation up to weight $10$ (going up to weight $16$ is a bit longer).
def check_conjecture_5_11(N):
r"""
Check Conjecture 5.11 of [On the growth] for all triples of partitions with weight at most $N$.
"""
test = true ## will be false when a counter example is found
L = []
for (i, lam) in enumerate(Partitions(N)):
for (j, mu) in enumerate(Partitions(N)):
if j >= i:
P = s(lam).kronecker_product(s(mu))
Q = s(partitions_oplus(lam, 1, 1)).kronecker_product(s(partitions_oplus(mu, 1, 1)))
for (nu, c) in P:
nu_oplus_one_one = partitions_oplus(nu, 1, 1)
if not ( c <= Q.coefficient(nu_oplus_one_one) ):
L.append([lam, mu, nu])
print "Counter Example:", lam, mu, nu
test = false
return test
# Warning: this takes some time for N=8, N=9,N=10
for N in [1..10]:
print N, check_conjecture_5_11(N)
1 True 2 True 3 True 4 True 5 True 6 True 7 True 8 True 9 True 10 True
We reproduce Table 1 in Example 5.5 of [On the growth], about hook stability for the Kronecker coefficients indexed by $(3,3) \oplus(i|j)$ three times.
# WARNING: this takes some time
lam = Partition([3, 3])
Kronecker_square = lambda f : f.kronecker_product(f)
T = matrix(10,10, lambda i, j:
Kronecker_square(s(partitions_oplus(lam, i, j))).coefficient( partitions_oplus(lam, i, j) )
)
html_table(T, rows_label="i", columns_label="j", condition = lambda i,j : False)
j | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ||
i | 0 | 0 | 1 | 5 | 5 | 1 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 8 | 27 | 40 | 30 | 11 | 1 | 0 | 0 | 0 | |
2 | 1 | 15 | 53 | 89 | 91 | 64 | 33 | 11 | 1 | 0 | |
3 | 2 | 19 | 62 | 108 | 129 | 122 | 97 | 64 | 33 | 11 | |
4 | 2 | 19 | 63 | 112 | 138 | 141 | 135 | 122 | 97 | 64 | |
5 | 2 | 19 | 63 | 112 | 139 | 145 | 144 | 141 | 135 | 122 | |
6 | 2 | 19 | 63 | 112 | 139 | 145 | 145 | 145 | 144 | 141 | |
7 | 2 | 19 | 63 | 112 | 139 | 145 | 145 | 145 | 145 | 145 | |
8 | 2 | 19 | 63 | 112 | 139 | 145 | 145 | 145 | 145 | 145 | |
9 | 2 | 19 | 63 | 112 | 139 | 145 | 145 | 145 | 145 | 145 |
We want to color in this table the boxes corresponding to the $(i,j)$ such that the Hook Stability Condition (21) of [On the growth] are fulfilled. First we compute the explicit bounds $d$, $d_1$, $d_2$ and $d_3$ given in the proof of Theorem 5.7.
def first_part(lam):
r"""
First part of a partition, or 0 if the partition is empty.
"""
lam = Partition(lam)
if lam == Partition([ ]):
return 0
else:
return lam[0]
def bound_N0(lam, mu, nu):
r"""
Bound $N_0$ defined in Formula (9) from [On the growth].
"""
lam = Partition(lam)
mu = Partition(mu)
nu = Partition(nu)
return add(rho.size() + first_part(rho) for rho in (lam, mu, nu) )/2
def bounds_d(lam, mu, nu):
r"""
Returns the values of $d$, $d_1$, $d_2$, $d_3$ defined in the proof of Theorem 5.7 in [On the growth].
"""
lam = Partition(lam)
mu = Partition(mu)
nu = Partition(nu)
N = lam.size() ## common weight of all three partitions
ell = dict([])
ell[1] = lambda a,b,c : a+b-c
ell[2] = lambda a,b,c : a+c-b
ell[3] = lambda a,b,c : b+c-a
k = dict([])
(k[1], k[2], k[3]) = bounds_k(partitions_hat(lam), partitions_hat(mu), partitions_hat(nu))
d = dict([])
for i in [1,2,3]:
d[i] = k[i] - ell[i](lam.length(), mu.length(), nu.length()) +1
dd = ( bound_N0(partitions_hat(lam), partitions_hat(mu), partitions_hat(nu))
+ (lam.length() + mu.length()+ nu.length())/2
- N)
return (dd, d[1], d[2], d[3])
In the example under consideration, the bounds $d$, $d_1$, $d_2$ and $d_3$ are
bounds_d([3,3], [3,3], [3,3])
(3, 5, 5, 5)
In that example, $a=b=c=j$ and $m = i+j$. The condition (21) of [On the growth] writes:
$$ j \geq 5, \text{ and } i -j/2 \geq 3, \text{ and } i \geq 0.$$
The positions in the table that fulfill this condition are represented in yellow below (in gray in [On the growth]).
html_table(T,
rows_label="i",
columns_label="j",
condition = lambda i,j : j >= 5 and i - j/2 >= 3)
j | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ||
i | 0 | 0 | 1 | 5 | 5 | 1 | 0 | 0 | 0 | 0 | 0 |
1 | 1 | 8 | 27 | 40 | 30 | 11 | 1 | 0 | 0 | 0 | |
2 | 1 | 15 | 53 | 89 | 91 | 64 | 33 | 11 | 1 | 0 | |
3 | 2 | 19 | 62 | 108 | 129 | 122 | 97 | 64 | 33 | 11 | |
4 | 2 | 19 | 63 | 112 | 138 | 141 | 135 | 122 | 97 | 64 | |
5 | 2 | 19 | 63 | 112 | 139 | 145 | 144 | 141 | 135 | 122 | |
6 | 2 | 19 | 63 | 112 | 139 | 145 | 145 | 145 | 144 | 141 | |
7 | 2 | 19 | 63 | 112 | 139 | 145 | 145 | 145 | 145 | 145 | |
8 | 2 | 19 | 63 | 112 | 139 | 145 | 145 | 145 | 145 | 145 | |
9 | 2 | 19 | 63 | 112 | 139 | 145 | 145 | 145 | 145 | 145 |
The stability domain (all coefficients $145$) is a little bit bigger than the stable domain guaranteed by Theorem 5.7 (in yellow).
Remember the following generating series :
Here we compute some of these coefficients (small ones) using Sage's construction of tensor products of the algebra of Symmetric functions.
Sym = SymmetricFunctions(QQ)
p = Sym.powersum()
s = Sym.schur()
h = Sym.homogeneous()
The algebra $\operatorname{Sym} \otimes \operatorname{Sym} \otimes \operatorname{Sym}$.
SymSymSym = tensor([p, p, p])
The file "plethystic.sage" contains the definition of a class Specialization whose objects represent the morphisms from $\operatorname{Sym}$ to $\operatorname{Sym} \otimes \operatorname{Sym} \otimes \operatorname{Sym}$.
load("plethystic.sage")
The following class is defined: - Specialization. The following functions are loaded: - pleth - change_basis - specialization_binomial - specialization_rank1 The following constants are defined: - specialization_X - specialization_Y - specialization_Z - specialization_epsilon
Specialization?
Init signature: Specialization(self, f) Docstring: Here a specialization is a morphism of QQ-algebras from operatorname{Sym} to operatorname{Sym} otimes operatorname{Sym} otimes operatorname{Sym}. INPUT: * f -- a function that associates to each positive integer i an element of operatorname{Sym} otimes operatorname{Sym} otimes operatorname{Sym}. OUTPUT: * the unique Specializationthat maps p_i to f(i). EXAMPLES: Here is an example of definition of a specialization. sage: A = Specialization( lambda i: ) Some standard specializations are predefined. specialization_X, specialization_Y and specialization_Z are the inclusions in the factors of the tensor product. sage: specialization_X Specialization of symmetric functions in the tensor product of three copies of Sym where: p[1] |-> p[1] # p[] # p[] p[2] |-> p[2] # p[] # p[] p[3] |-> p[3] # p[] # p[] p[4] |-> p[4] # p[] # p[] ... The binomial elements are those whose power sums are all equal to this element. sage: specialization_binomial(2) Specialization of symmetric functions in the tensor product of three copies of Sym where: p[1] |-> 2 p[] # p[] # p[] p[2] |-> 2 p[] # p[] # p[] p[3] |-> 2 p[] # p[] # p[] p[4] |-> 2 p[] # p[] # p[] ... It is possible to perform operations on specializations. sage: X*Z + Y*Z Specialization of symmetric functions in the tensor product of three copies of Sym where: p[1] |-> p[] # p[1] # p[1] + p[1] # p[] # p[1] p[2] |-> p[] # p[2] # p[2] + p[2] # p[] # p[2] p[3] |-> p[] # p[3] # p[3] + p[3] # p[] # p[3] p[4] |-> p[] # p[4] # p[4] + p[4] # p[] # p[4] ... The function pleth makes the symmetric functions act on the morphisms. sage: pleth( h[3], X*Z + Y*Z) 1/6*p[] # p[1, 1, 1] # p[1, 1, 1] + 1/2*p[] # p[2, 1] # p[2, 1] + 1/3*p[] # p[3] # p[3] + 1/2*p[1] # p[1, 1] # p[1, 1, 1] + 1/2*p[1] # p[2] # p[2, 1] + 1/2*p[1, 1] # p[1] # p[1, 1, 1] + 1/6*p[1, 1, 1] # p[] # p[1, 1, 1] + 1/2*p[2] # p[1] # p[2, 1] + 1/2*p[2, 1] # p[] # p[2, 1] + 1/3*p[3] # p[] # p[3 Init docstring: Here a specialization is a morphism of QQ-algebras from operatorname{Sym} to operatorname{Sym} otimes operatorname{Sym} otimes operatorname{Sym}. INPUT: * f -- a function that associates to each positive integer i an element of operatorname{Sym} otimes operatorname{Sym} otimes operatorname{Sym}. OUTPUT: * the unique Specializationthat maps p_i to f(i). EXAMPLES: Here is an example of definition of a specialization. sage: A = Specialization( lambda i: ) Some standard specializations are predefined. specialization_X, specialization_Y and specialization_Z are the inclusions in the factors of the tensor product. sage: specialization_X Specialization of symmetric functions in the tensor product of three copies of Sym where: p[1] |-> p[1] # p[] # p[] p[2] |-> p[2] # p[] # p[] p[3] |-> p[3] # p[] # p[] p[4] |-> p[4] # p[] # p[] ... The binomial elements are those whose power sums are all equal to this element. sage: specialization_binomial(2) Specialization of symmetric functions in the tensor product of three copies of Sym where: p[1] |-> 2 p[] # p[] # p[] p[2] |-> 2 p[] # p[] # p[] p[3] |-> 2 p[] # p[] # p[] p[4] |-> 2 p[] # p[] # p[] ... It is possible to perform operations on specializations. sage: X*Z + Y*Z Specialization of symmetric functions in the tensor product of three copies of Sym where: p[1] |-> p[] # p[1] # p[1] + p[1] # p[] # p[1] p[2] |-> p[] # p[2] # p[2] + p[2] # p[] # p[2] p[3] |-> p[] # p[3] # p[3] + p[3] # p[] # p[3] p[4] |-> p[] # p[4] # p[4] + p[4] # p[] # p[4] ... The function pleth makes the symmetric functions act on the morphisms. sage: pleth( h[3], X*Z + Y*Z) 1/6*p[] # p[1, 1, 1] # p[1, 1, 1] + 1/2*p[] # p[2, 1] # p[2, 1] + 1/3*p[] # p[3] # p[3] + 1/2*p[1] # p[1, 1] # p[1, 1, 1] + 1/2*p[1] # p[2] # p[2, 1] + 1/2*p[1, 1] # p[1] # p[1, 1, 1] + 1/6*p[1, 1, 1] # p[] # p[1, 1, 1] + 1/2*p[2] # p[1] # p[2, 1] + 1/2*p[2, 1] # p[] # p[2, 1] + 1/3*p[3] # p[] # p[3 File: Type: classobj
Below $X$, $Y$ and $Z$ represent three independant alphabets, one for each factor of the tensor product of copies of $\operatorname{Sym}$. The file plethystic.sage defines some standard specializations. We give them short names.
X = specialization_X
Y = specialization_Y
Z = specialization_Z
epsilon = specialization_rank1(-1)
b = specialization_binomial
X
Specialization of symmetric functions in the tensor product of three copies of Sym where: p[1] |-> p[1] # p[] # p[] p[2] |-> p[2] # p[] # p[] p[3] |-> p[3] # p[] # p[] p[4] |-> p[4] # p[] # p[] ...
epsilon
Specialization of symmetric functions in the tensor product of three copies of Sym where: p[1] |-> -p[] # p[] # p[] p[2] |-> p[] # p[] # p[] p[3] |-> -p[] # p[] # p[] p[4] |-> p[] # p[] # p[] ...
b(2)
Specialization of symmetric functions in the tensor product of three copies of Sym where: p[1] |-> 2*p[] # p[] # p[] p[2] |-> 2*p[] # p[] # p[] p[3] |-> 2*p[] # p[] # p[] p[4] |-> 2*p[] # p[] # p[] ...
Below we define
$$ \sigma_k = \sum_{n=0}^k h_n $$
as an approximation for
$$\sigma = \sum_{n=0}^{\infty} h_n.$$
def sigma(k):
return add( h[i] for i in [0..k])
import sage.libs.lrcalc.lrcalc as lrcalc
Let us compute all non--zero Littlewood-Richardson coefficients $c_{\mu, \nu}^{\lambda}$ for $|\lambda| \leq 3$.
L = change_basis(pleth(sigma(3), X*Z+Y*Z), s)
for (( mu, nu, lam),c) in L.monomial_coefficients().items():
print c, lrcalc.lrcoef(lam, mu, nu), (lam, mu, nu)
1 1 ([2], [1], [1]) 1 1 ([1, 1, 1], [1, 1], [1]) 1 1 ([1, 1, 1], [], [1, 1, 1]) 1 1 ([2], [], [2]) 1 1 ([1, 1, 1], [1], [1, 1]) 1 1 ([1, 1], [1], [1]) 1 1 ([1, 1], [], [1, 1]) 1 1 ([3], [], [3]) 1 1 ([1], [1], []) 1 1 ([3], [3], []) 1 1 ([2, 1], [2], [1]) 1 1 ([1, 1, 1], [1, 1, 1], []) 1 1 ([2], [2], []) 1 1 ([2, 1], [], [2, 1]) 1 1 ([1], [], [1]) 1 1 ([2, 1], [1], [2]) 1 1 ([3], [2], [1]) 1 1 ([2, 1], [1, 1], [1]) 1 1 ([], [], []) 1 1 ([3], [1], [2]) 1 1 ([1, 1], [1, 1], []) 1 1 ([2, 1], [2, 1], []) 1 1 ([2, 1], [1], [1, 1])
We now compare the Littlewood-Richardson coefficients $c_{\mu, \nu}^{\lambda}$ for $|\lambda| \leq 6$, with those given by lrcalc. Of course, they should coincide.
L = change_basis(pleth(sigma(6), X*Z+Y*Z), s)
for (( mu, nu, lam),c) in L:
if c != lrcalc.lrcoef(lam, mu, nu):
print (lam, mu, nu), c, lrcalc.lrcoef(lam, mu, nu)
break
else:
print "All correct."
All correct.
We compute the Kronecker coefficients $g_{\lambda, \mu, \nu}$ for $|\lambda| = |\mu| = |\nu| \leq 7$, and check they are correct.
N = 7
L = change_basis(pleth(sigma(N), X*Y*Z), s)
for ((lam, mu, nu),c) in L:
if c != s(lam).kronecker_product(s(mu)).coefficient(nu):
print (lam, mu, nu), c, s(lam).kronecker_product(s(mu)).coefficient(nu)
break
else:
print "All correct."
All correct.
The series
$$ \sum_{k=0}^n h_k[XYZ+XY+XZ+YZ]\text{ and } \sigma[XYZ+XY+XZ+YZ] $$ coincide in all total degrees $ < 2(n+1)$.
So, we can use the truncated series to compute the stable Kronecker coefficients indexed by partitions $\alpha$, $\beta$, $\gamma$ with $|\alpha|+|\beta|+|\gamma| < 2(n+1)$. We compare our results to the results given by stable_Kronecker_product
.
# WARNING: it takes some time.
N = 6
L = change_basis(pleth(sigma(N), X*Y*Z + X*Z + Y*Z + X*Y), s)
for ((lam, mu, nu),c) in L:
if lam.size() + mu.size() + nu.size() < 2*(N+1) and c != stable_Kronecker_coefficient(lam, mu, nu):
print (lam, mu, nu), c, stable_Kronecker_coefficient(lam, mu, nu)
break
else:
print "All correct."
All correct.
The coefficient $\overline{\overline{g}}_{\alpha, \beta, \gamma}$ is a coefficient of
$$\sigma[XYZ+(1-\epsilon)(XY+XZ+YZ+X+Y+Z)].$$
Tables 1 and 2 of [appendix] display all coefficients $\overline{\overline{g}}_{\alpha, \beta, \gamma}$ whose indexing partitions have weight at most $3$. It is too costly to compute them using the same strategy as for the stable Kronecker coefficients above (it would imply expanding $\sigma_9$). Instead we approximate
$$\sigma[XYZ+(1-\epsilon)(XY+XZ+YZ+X+Y+Z)]$$
by
$$\sigma_3[XYZ] \cdot \sigma_3[(1-\epsilon)XY] \cdot \sigma_3[(1-\epsilon)XZ] \cdot \sigma_3[(1-\epsilon)YZ] \cdot \sigma_3[(1-\epsilon)X] \cdot \sigma_3[(1-\epsilon)Y] \cdot\sigma_3[(1-\epsilon)Z].$$
def projection(f, d):
r"""
Projection onto the direct sum of the homogeneous components of Sym of degrees <= d.
"""
return add( f.homogeneous_component(k) for k in [0..d])
N = 3
g_barbar=dict([])
series_gbarbar = pleth(sigma(N),X*Y*Z)
for M in [X*Y, X*Z, Y*Z, X, Y, Z]:
series_gbarbar = series_gbarbar * pleth(sigma(N), (b(1)-epsilon) * M)
series_gbarbar = series_gbarbar.apply_multilinear_morphism(lambda a, b, c: tensor([projection(a,N),
projection(b,N),
projection(c,N)]) )
## after each product we simplify by projecting.
series_gbarbar = change_basis(series_gbarbar, s)
for ((alpha, beta, gamma),c) in series_gbarbar:
g_barbar[(alpha, beta, gamma)] = c
if alpha >= beta and beta >= gamma:
print("{alpha:10} {beta:10} {gamma:10} {c}".format(gamma=vector(gamma),
beta=vector(beta),
alpha=vector(alpha),
c=c)
)
(1, 1, 1) (1, 1) (1) 84 (2, 1) () () 2 (2) (1, 1) (1) 66 (1) () () 2 (2, 1) (2) (1, 1) 382 (3) (2) (1) 84 (3) (2) (1, 1, 1) 320 (2) (2) (1) 66 (3) (1, 1, 1) (1, 1, 1) 565 (3) (3) (1) 122 (2, 1) (1, 1, 1) (1, 1, 1) 1056 (2) (1, 1, 1) () 16 (2) (1, 1, 1) (1, 1, 1) 326 (2, 1) (1) (1) 64 (1, 1) (1, 1) (1) 66 (1, 1) (1, 1) (1, 1) 144 (3) (3) (1, 1) 320 () () () 1 (2) (2) () 14 (3) (1, 1) (1) 84 (3) (1, 1) (1, 1) 206 (3) (2, 1) () 38 (2, 1) (2) (1, 1, 1) 610 (2, 1) (1, 1) () 28 (2, 1) (1) () 12 (2) (1) (1) 34 (3) (3) (2) 326 (2) (2) (1, 1, 1) 204 (2, 1) (2, 1) (2, 1) 3933 (1, 1) () () 2 (2, 1) (1, 1) (1) 152 (2, 1) (2, 1) (2) 1168 (3) (1, 1, 1) () 22 (3) (2, 1) (2) 610 (1, 1, 1) (1, 1) (1, 1) 204 (3) (3) (3) 565 (3) (2, 1) (2, 1) 2037 (3) (2, 1) (1, 1) 610 (3) (1, 1, 1) (1, 1) 326 (3) (2, 1) (1, 1, 1) 1056 (2) (1, 1) () 14 (1, 1) (1) (1) 34 (3) (3) (2, 1) 1056 (3) (2) (2) 206 (2, 1) (2) (2) 382 (3) (1) (1) 38 (2) (2) (1, 1) 144 (1, 1, 1) (1, 1) () 16 (1) (1) (1) 21 (2) (1, 1) (1, 1) 145 (2, 1) (1, 1) (1, 1) 382 (3) (3) () 22 (2) (2) (2) 145 (2, 1) (2) (1) 152 (3) (1, 1, 1) (1) 122 (2, 1) (1, 1, 1) (1) 224 (3) (3) (1, 1, 1) 544 (1, 1, 1) (1) () 8 (2, 1) (2, 1) (1) 428 (1, 1, 1) () () 2 (2, 1) (1, 1, 1) (1, 1) 610 (3) (1) () 8 (2) (1) () 8 (2) (1, 1, 1) (1, 1) 206 (1, 1, 1) (1, 1, 1) () 22 (3) (2, 1) (1) 224 (3) (1, 1) () 16 (1, 1, 1) (1, 1, 1) (1) 122 (2, 1) (1, 1, 1) () 38 (1, 1) (1) () 8 (3) (2) (1, 1) 204 (1, 1) (1, 1) () 14 (2, 1) (2, 1) () 74 (1, 1, 1) (1) (1) 38 (2, 1) (2) () 28 (1, 1, 1) (1, 1, 1) (1, 1, 1) 544 (1, 1, 1) (1, 1, 1) (1, 1) 320 (2) (1, 1, 1) (1) 84 (3) () () 2 (2) () () 2 (2, 1) (2, 1) (1, 1) 1168 (3) (2) () 16 (2, 1) (2, 1) (1, 1, 1) 2037 (1) (1) () 6
Similarly, we compute the coefficients $A$, $B$ and $C$ appearing in Tables 1 and 2 of [appendix].
First, the coefficients $A$, obtained by coefficient extraction from:
$$\sigma[XYZ+2(XY+XZ+YZ+X+Y+Z)].$$
N = 3
A=dict([])
series_A = 1
for M in [X*Y*Z, b(2)*X*Y, b(2)*X*Z, b(2)*Y*Z, b(2)*X, b(2)*Y, b(2)*Z]:
series_A = series_A*pleth(sigma(N), M)
series_A = series_A.apply_multilinear_morphism(lambda a, b, c: tensor([projection(a,N),
projection(b,N),
projection(c,N)]) )
series_A = change_basis(series_A, s)
for ((alpha, beta, gamma),c) in series_A:
A[(alpha, beta, gamma)] = c
if alpha >= beta and beta >= gamma:
print "{alpha:10} {beta:10} {gamma:10} {c}".format(gamma=vector(gamma),
beta=vector(beta),
alpha=vector(alpha),
c=c)
(1, 1, 1) (1, 1) (1) 54 (3) (1, 1, 1) (1) 80 (2, 1) () () 2 (1) () () 2 (2, 1) (2) (1, 1) 378 (3) (2) (1, 1, 1) 250 (1, 1) (1, 1) (1) 54 (2) (2) (1) 86 (3) (3) (1) 240 (2, 1) (1, 1, 1) (1, 1, 1) 736 (2) (1, 1, 1) (1, 1, 1) 240 (2, 1) (1) (1) 64 (3) (1) (1) 59 (3) (2) (1) 138 (1, 1) (1, 1) (1, 1) 110 (1, 1, 1) (1, 1) () 10 (3) (3) (1, 1) 478 (2) (2) () 20 (3) (1, 1) (1) 98 (1, 1) () () 1 (3) (1, 1) (1, 1) 220 (3) (2, 1) () 50 (2, 1) (1, 1) () 26 (2, 1) (1) () 12 (2) (1) (1) 40 (3) (3) (2) 640 (2) (2) (1, 1, 1) 134 (2, 1) (2, 1) (2, 1) 3933 (2, 1) (1, 1) (1) 140 (3) () () 4 (2, 1) (2, 1) (2) 1242 (3) (1, 1, 1) () 10 (2) (1, 1, 1) () 6 (3) (2, 1) (2) 824 (1, 1, 1) (1, 1) (1, 1) 134 (3) (3) (3) 1243 (3) (2, 1) (2, 1) 2465 (3) (2, 1) (1, 1) 700 (3) (1, 1, 1) (1, 1) 260 (3) (2, 1) (1, 1, 1) 928 (2) (1, 1) () 12 (1, 1) (1) (1) 28 (3) (3) (2, 1) 1632 (3) (2) (2) 348 (2, 1) (2) (2) 442 (2) () () 3 (3) (1, 1, 1) (1, 1, 1) 451 (2) (2) (1, 1) 150 (1) (1) (1) 21 (2) (1, 1) (1, 1) 131 (2, 1) (1, 1) (1, 1) 330 (3) (3) () 50 (2) (2) (2) 203 (2, 1) (2) (1) 164 (2, 1) (1, 1, 1) (1) 160 (3) (3) (1, 1, 1) 506 (1, 1, 1) (1) () 2 (2, 1) (2, 1) (1) 428 (3) (1, 1) () 18 (2, 1) (1, 1, 1) (1, 1) 444 (3) (1) () 14 (2) (1) () 10 (2) (1, 1, 1) (1, 1) 144 (1, 1, 1) (1, 1, 1) () 18 (3) (2, 1) (1) 288 (1, 1, 1) (1, 1, 1) (1) 88 (2, 1) (1, 1, 1) () 26 (1, 1) (1) () 6 (3) (2) (1, 1) 258 (2, 1) (2, 1) () 74 (2) (1, 1) (1) 62 (1, 1, 1) (1) (1) 17 () () () 1 (2, 1) (2) () 30 (2, 1) (2) (1, 1, 1) 472 (1, 1, 1) (1, 1, 1) (1, 1, 1) 322 (1, 1, 1) (1, 1, 1) (1, 1) 206 (2) (1, 1, 1) (1) 46 (2, 1) (2, 1) (1, 1) 1094 (1, 1) (1, 1) () 12 (3) (2) () 30 (2, 1) (2, 1) (1, 1, 1) 1609 (1) (1) () 6
Now the coefficients $C$, from
$$\sigma[XYZ+(1+\epsilon)(XY+XZ+YZ+X+Y+Z)].$$
N = 3
C =dict([])
series_C = 1
for M in [X*Y*Z, (b(1)+epsilon)*X*Y, (b(1)+epsilon)*X*Z, (b(1)+epsilon)*Y*Z,
(b(1)+epsilon)*X, (b(1)+epsilon)*Y, (b(1)+epsilon)*Z]:
series_C = series_C*pleth(sigma(N), M)
series_C = series_C.apply_multilinear_morphism(lambda a, b, c: tensor([projection(a,N),
projection(b,N),
projection(c,N)]) )
series_C = change_basis(series_C, s)
for ((alpha, beta, gamma),c) in series_C:
C[(alpha, beta, gamma)] = c
if alpha >= beta and beta >= gamma:
print "{alpha:10} {beta:10} {gamma:10} {c}".format(gamma=vector(gamma),
beta=vector(beta),
alpha=vector(alpha),
c=c)
(1, 1) (1, 1) () 2 (3) (3) (1, 1, 1) -4 (1, 1) (1, 1) (1, 1) -4 (2) (2) () 2 (1, 1, 1) (1) (1) -1 (3) (3) (3) 5 (1, 1) () () -1 (3) (2, 1) (2, 1) 1 (2) (2) (1, 1) -4 (2, 1) (2, 1) (2, 1) 1 (1, 1, 1) (1, 1, 1) (1) 2 (3) (1, 1, 1) (1, 1, 1) 5 (2) (1, 1) (1, 1) 5 (1) (1) (1) 1 (2) () () 1 (3) (1, 1, 1) (1) -2 (2, 1) (2, 1) (1, 1, 1) 1 (3) (1) (1) 1 (3) (3) (1) 2 (2) (2) (2) 5 () () () 1 (2) (1, 1) () -2 (1, 1, 1) (1, 1, 1) (1, 1, 1) -4
For the $B$ coefficients we have the following form of the generating series:
$$\frac{3}{4} \sigma[XYZ+2W]+\frac{1}{4} \sigma[XYZ+(1+\varepsilon) W]+\sigma[XYZ+2W] \left(\chi[YZ-X]-\frac{1}{2}\chi[W] \right)$$
def chi(k):
return add(p[i] for i in [1..k])
N = 3
B =dict([])
W = X*Y + X*Z + Y*Z + X + Y + Z
series_B = pleth(chi(N),Y*Z-X)-1/2*pleth(chi(N),W)
series_B = series_A*series_B
series_B = series_B.apply_multilinear_morphism(lambda a, b, c: tensor([projection(a,N),
projection(b,N),
projection(c,N)]) )
series_B = 3/4*series_A + 1/4*series_C + series_B
series_B = change_basis(series_B, s)
for ((alpha, beta, gamma),c) in series_B:
B[(alpha, beta, gamma)] = c
if beta >= gamma:
print "{alpha:10} {beta:10} {gamma:10} {c}".format(gamma=vector(gamma), beta=vector(beta), alpha=vector(alpha), c=c)
(2) (1) (1) -25 (1, 1) (1, 1, 1) (1, 1, 1) -27 (3) (2, 1) (1, 1) -738 (1, 1, 1) (1, 1) (1) -42 (3) (1, 1) (1) -118 (3) (1, 1, 1) (1) -85 (3) (3) (2) -820 (1, 1) (2, 1) (1, 1) -128 (1, 1) (2, 1) (1, 1, 1) -116 () (1) () 1 (2, 1) () () -3 (1, 1) (2, 1) (2, 1) -435 (1, 1) (3) (2) -170 (3) (2) (2) -435 (1, 1, 1) (3) (2) -250 (2, 1) (2) (1, 1) -371 (1, 1, 1) (1) (1) -15 (1, 1) (3) (1, 1, 1) -110 (1, 1) (2, 1) () -15 (1) (3) () -6 (3) (2, 1) () -66 () (2) () 1 (2, 1) (3) (1) -344 (2, 1) (2) (1, 1, 1) -394 (1, 1, 1) (3) (2, 1) -832 (3) (1) (1) -78 () (3) (1, 1, 1) 3 (2) (3) (3) -500 (1, 1, 1) (1, 1) () -8 (3) (2) (1, 1, 1) -250 (2, 1) (2, 1) (2, 1) -3470 (3) (1, 1) () -24 () (3) (1) 1 (2) (2, 1) () -21 (1, 1, 1) (1, 1, 1) (1) -59 () (2) (1, 1, 1) 3 (2, 1) (1) () -15 (1, 1) (1, 1) (1) -21 (2, 1) (1, 1) (1, 1) -293 (1, 1, 1) (3) () -12 (2) (3) (1) -109 (1, 1) (2) () -8 (1, 1) () () -1 (2, 1) (1, 1, 1) () -24 (1, 1) (1) () -3 (2, 1) (3) (1, 1, 1) -832 (1, 1, 1) (2, 1) (2) -394 () (2, 1) (1, 1) 11 (2, 1) (3) (3) -1888 (2, 1) (1, 1) (1) -139 (1, 1, 1) (3) (1) -85 (2) (2) (1, 1) -84 (2) (2) (1) -57 (3) (2) () -42 (2) (3) (1, 1, 1) -125 (1, 1) (1, 1, 1) (1) -15 () (3) (3) 3 () (2) (2) 6 (1, 1) (1, 1, 1) (1, 1) -30 (2) (2) (1, 1, 1) -54 (1, 1, 1) (2) () -6 (1, 1) (2) (2) -84 (1, 1, 1) (1, 1) (1, 1) -97 (1, 1) (1) (1) -13 () (2, 1) (1) 3 (3) (1, 1, 1) () -12 (2, 1) (1, 1) () -28 (2) (2, 1) (1, 1) -182 (1) (3) (1) -19 (1) (1, 1, 1) (1) 2 (3) (2) (1, 1) -299 (1, 1, 1) (2) (2) -121 (2) (1, 1) () -8 (1) (1, 1) (1) 1 (2, 1) (3) (2) -938 () (1, 1) (1) 3 (1, 1) (3) () -15 (3) (2) (1) -178 (1, 1, 1) (2, 1) (1) -136 () (1, 1) (1, 1) 8 (1, 1, 1) (1, 1, 1) (1, 1, 1) -175 (2, 1) (3) (1, 1) -738 (2) (3) (2) -261 () (2, 1) (1, 1, 1) 15 (1) (2, 1) (2) -17 (1) (2) (1, 1, 1) 4 (1) (1, 1) (1, 1) 6 (3) (3) (1) -321 (2) (2, 1) (2, 1) -597 () (3) (2) 3 (3) (2, 1) (2, 1) -2515 (1, 1) (2, 1) (1) -69 () (3) (2, 1) 9 () (1, 1, 1) (1, 1) 7 (2) (2, 1) (2) -256 (2) (1, 1, 1) (1) -19 () (3) (1, 1) 3 (1) (3) (1, 1) -20 (2, 1) (1, 1, 1) (1, 1, 1) -480 (1, 1) (3) (3) -335 (1, 1, 1) (3) (3) -521 (1, 1, 1) (2, 1) () -24 (1) (2, 1) (1) -8 (2, 1) (3) (2, 1) -2515 (3) (3) () -72 (1, 1, 1) (1, 1, 1) (1, 1) -130 (1, 1, 1) (2) (1, 1) -117 (3) (3) (3) -1597 (1) (3) (2, 1) -56 (1) (2) (2) -14 (2) (1, 1, 1) (1, 1, 1) -48 (1) (2, 1) (1, 1) 1 (2, 1) (1) (1) -72 (1) (3) (2) -40 (2, 1) (2, 1) (1, 1) -982 (1) (2, 1) (2, 1) -5 (1, 1) (3) (2, 1) -388 (3) () () -6 (3) (2, 1) (1) -344 (2) (2) (2) -133 (1, 1) (2) (1) -33 (2) () () -2 () (2, 1) (2) 9 (2) (3) () -27 (1) (1, 1, 1) (1, 1) 12 (3) (1, 1, 1) (1, 1, 1) -355 (2) (2, 1) (1) -99 (1, 1, 1) (2) (1, 1, 1) -168 () (2) (1) 3 (3) (1, 1, 1) (1, 1) -240 (1, 1, 1) (3) (1, 1) -240 (3) (2, 1) (1, 1, 1) -832 (1) (3) (3) -81 (1, 1) (1, 1, 1) () -3 (2, 1) (1, 1, 1) (1) -136 (2, 1) (2, 1) (2) -1218 (1, 1) (3) (1, 1) -125 (3) (2, 1) (2) -938 (1) (2, 1) (1, 1, 1) 24 () (1, 1, 1) (1, 1, 1) 15 (1, 1, 1) (1) () -2 (1, 1) (3) (1) -69 (2) (3) (2, 1) -526 (3) (3) (1, 1, 1) -521 (1, 1) (1, 1) (1, 1) -38 () (2) (1, 1) 4 (2, 1) (2, 1) (1) -433 (2, 1) (2) (2) -477 (3) (3) (1, 1) -574 () () () 1 (1) (2, 1) () -3 (2, 1) (2) () -36 (2) (2) () -14 (1) (2) () -2 (1, 1) (2) (1, 1) -55 (2) (2, 1) (1, 1, 1) -158 (1, 1, 1) (2, 1) (1, 1, 1) -480 () (2, 1) (2, 1) 30 (1, 1) (1, 1) () -4 (2) (1, 1, 1) () -3 (2) (1, 1) (1) -33 () (1) (1) 3 (1) (2) (1, 1) -2 (2, 1) (2) (1) -181 (1) (1, 1, 1) (1, 1, 1) 29 (1, 1) (2, 1) (2) -182 (1, 1, 1) (3) (1, 1, 1) -355 (2, 1) (1, 1, 1) (1, 1) -338 (3) (3) (2, 1) -1888 (1) (3) (1, 1, 1) -5 (2) (3) (1, 1) -170 (2, 1) (2, 1) (1, 1, 1) -1221 (3) (1, 1) (1, 1) -235 (2, 1) (2, 1) () -81 (1, 1, 1) (2, 1) (2, 1) -1221 () (1, 1, 1) (1) 1 (3) (1) () -20 (2) (1, 1) (1, 1) -55 (1) (2) (1) -5 (1, 1, 1) (2) (1) -42 (2) (1) () -7 (2, 1) (3) () -66 (2) (1, 1, 1) (1, 1) -45 (1, 1, 1) (2, 1) (1, 1) -338 (1, 1, 1) (1, 1, 1) () -12 (1, 1) (2) (1, 1, 1) -45
We use the results of the previous computatiions to provide a table LaTeX of the coefficients indexed by partitions of weight at most $3$. Note that the coefficients $A$, $C$ and $\overline{\overline{g}}$ are symmetric in their three arguments. The coefficients $B$ are only symmetric in their last two arguments.
def phi(S,lam, mu, nu):
if (lam, mu, nu) in S:
return S[lam, mu, nu]
else:
return 0
res=("""\\begin{array}[ccccccccc]\\\\
\\alpha
& \\beta
& \\gamma
& \\overline{\\overline{g}}_{\\alpha, \\beta, \\gamma}
& A_{\\alpha, \\beta, \\gamma}
& B_{\\alpha, \\beta, \\gamma}
& B_{\\beta, \\alpha, \\gamma}
& B_{\\gamma, \\alpha, \\beta}
& C_{\\alpha, \\beta, \\gamma}
\\\\\n""")
L = []
for i in [0..3]:
L.extend(Partitions(i))
for alpha in L:
for beta in L:
if alpha >= beta:
for gamma in L:
if beta >= gamma:
res += ("{alpha:9}&{beta:9}&{gamma:9}&{gbarbar:5}&{A:5}&{B1:5}&{B2:5}&{B3:5}&{C:5} \\\\ \n".
format(alpha=vector(alpha),
beta=vector(beta),
gamma=vector(gamma),
gbarbar=phi(g_barbar,alpha, beta, gamma),
A=phi(A,alpha, beta, gamma),
B1=phi(B,alpha,beta,gamma),
B2=phi(B, beta, alpha, gamma),
B3=phi(B,gamma, alpha, beta),
C=phi(C,alpha, beta, gamma))
)
res += "\\end{array}"
show(LatexExpr(res))