{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# On the growth of the Kronecker coefficients: Companion Worksheet in Sage.\n", "\n", "Emmanuel Briand, Departamento Matemática Aplicada 1, Universidad de Sevilla. *Version of july 2019.*\n", "\n", "\n", "\n", "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)\n", "\n", "---\n", "\n", "**References:**\n", "\n", "* **[On the growth]** *On the growth of the Kronecker coefficients*. Emmanuel Briand, Amarpreet Rattan, Mercedes Rosas [arXiv:1607.02887 [math.RT]](https://arxiv.org/abs/1607.02887) (2016). \n", "* **[appendix]** *On the growth of Kronecker coefficients: accompanying indices.* Emmanuel Briand, Amarpreet Rattan, Mercedes Rosas. [arXiv:1611.07348 [math.RT]](https://arxiv.org/abs/1611.07348) (2016).\n", "\n", "---\n", "\n", "URL for this notebook: http://emmanuel.jean.briand.free.fr/publications/HookStability.ipynb\n", "\n", "You may also:\n", "* [See this notebook online with nbviewer](https://nbviewer.jupyter.org/url/emmanuel.jean.briand.free.fr/publications/HookStability.ipynb)\n", "* [Download the notebook with the attached files in a zip archive](http://emmanuel.jean.briand.free.fr/publications/HookStability.zip)\n", "\n", "---\n", "\n", "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." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The following functions are loaded:\n", "- partitions_intersection\n", "- stable_Kronecker_product_of_Schur_functions\n", "- stable_Kronecker_coefficient\n", "\n", "The following functions are loaded:\n", "- partitions_oplus\n", "- partitions_cut\n", "- partitions_hat\n", "- add_row\n", "- add_column\n", "\n" ] } ], "source": [ "load(\"StableKroneckerCoefficients.sage\")\n", "load(\"operations_on_partitions.sage\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Here is a command provided by these files. It computes a stable Kronecker coefficient.

" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "5" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "stable_Kronecker_coefficient([2, 1],[2, 1], [1, 1, 1]) ## test. Answer must be 5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Help is available for the functions just loaded.

" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m \u001b[0mpartitions_oplus\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlam\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mi\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mj\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m \n", " Given a non-empty partition, returns the partition obtained by\n", " adding to its diagram i boxes in the first row, and j boxes in the\n", " first column.\n", "\u001b[0;31mInit docstring:\u001b[0m x.__init__(...) initializes x; see help(type(x)) for signature\n", "\u001b[0;31mFile:\u001b[0m Dynamically generated function. No source code available.\n", "\u001b[0;31mType:\u001b[0m function\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "partitions_oplus?" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m \u001b[0mstable_Kronecker_product_of_Schur_functions\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlam\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmu\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m \n", " The stable product of s_{lambda} with , in the Schur basis.\n", "\n", " INPUT:\n", "\n", " * lambda, mu -- two integer partitions, or lists defining\n", " integer partitions.\n", "\n", " OUTPUT:\n", "\n", " A symmetric function, expanded in the Schur basis.\n", "\n", " EXAMPLES:\n", "\n", " sage: stable_Kronecker_product_of_Schur_functions( [ 1 ], [ 1 ] )\n", " s[] + s[1] + s[1, 1] + s[2]\n", "\n", " ALGORITHM:\n", "\n", " The stable Kronecker product of Schur functions is computed by\n", " means of Littlewood's Formula that can be found in [Littlewood] or\n", " as Theorem 1.1 in [Thibon].\n", "\n", " Note: Littllewood's Formula is not applied recursively.\n", "\n", " REFERENCES:\n", "\n", " [Littlewood] D. E. Littlewood. \"The Kronecker product\n", " of symmetric group representations.\" J. London Math.\n", " Soc., 31:89-93, 1956.\n", "\n", " [Thibon] Jean-Yves Thibon. \"Hopf algebras of symmetric\n", " functions and tensor products of symmetric group\n", " representations.\" Internat. J. Algebra Comput.,\n", " 1(2):207-221, 1991.\n", "\u001b[0;31mInit docstring:\u001b[0m x.__init__(...) initializes x; see help(type(x)) for signature\n", "\u001b[0;31mFile:\u001b[0m Dynamically generated function. No source code available.\n", "\u001b[0;31mType:\u001b[0m function\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "stable_Kronecker_product_of_Schur_functions?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

 

\n", "

Theorem 5.2: Bounds for column stability for stable Kronecker coefficients (= reduced Kronecker coefficients).

\n", "

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

\n", "

$$b+c-a \\geq k_1, \\\\ a+c-b \\geq k_2, \\\\ a+b -c \\geq k_3$$

\n", "

we have

\n", "

$$\\overline{g}_{\\alpha + (1^a),\\beta + (1^b),\\gamma + (1^c)} = \\overline{\\overline{g}}_{\\alpha, \\beta, \\gamma}.$$

\n", "

We will illustrate this on an example.

\n", "

Here are functions computing values for $k_i$  as given by Theorem A.1 in [appendix].

" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "## The bounds for stability, for the linear forms b+c-a, a-b+c, a+b-c, are given by the following function\n", "\n", "def bounds_k(alpha, beta, gamma):\n", " r\"\"\"\n", " Returns (k1, k2, k3).\n", " \"\"\"\n", " return bound_k1( alpha, beta, gamma), bound_k1(beta, alpha, gamma), bound_k1(gamma, alpha, beta) \n", " \n", "## The three bounds k1, k2, k3 are obtained from k1 by permutation of their arguments. Here is the formula for k1.\n", " \n", "def bound_k1(alpha, beta, gamma):\n", " r\"\"\"\n", " Returns k1.\n", " \"\"\"\n", " alpha = Partition( alpha )\n", " beta = Partition( beta )\n", " gamma = Partition( gamma )\n", " if alpha <> Partition([]):\n", " return alpha.size() + alpha[0] + beta.length() + gamma.length()\n", " else:\n", " return 0 + 0 + beta.length() + gamma.length()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Our example will be with

\n", "

$$\\alpha=(2), \\quad \\beta=(2), \\quad \\gamma=(1,1).$$

" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(7, 7, 5)\n" ] } ], "source": [ "alpha = Partition([2])\n", "beta = Partition([2])\n", "gamma = Partition([1,1])\n", "\n", "(k1, k2, k3 ) = bounds_k(alpha, beta, gamma)\n", "print(k1, k2, k3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

We compute the $\\overline{g}_{\\alpha + (1^a),\\beta + (1^b),\\gamma + (1^c)}$ for $a$, $b$, $c$ between $0$ and $10$.

" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [], "source": [ "## WARNING: This takes some time.\n", "M = dict([])\n", "N = 10\n", "for a in [0..N]:\n", " for b in [0..N]:\n", " P = stable_Kronecker_product_of_Schur_functions( add_column(alpha, a), add_column(beta, b) )\n", " for c in [0..N]:\n", " M[a,b,c] = P.coefficient( add_column(gamma, c) );" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

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.

" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "load(\"html_table.sage\")" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mSignature:\u001b[0m \u001b[0mhtml_table\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mM\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrows_label\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m''\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolumns_label\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m''\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcondition\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m<\u001b[0m\u001b[0mfunction\u001b[0m \u001b[0;34m<\u001b[0m\u001b[0;32mlambda\u001b[0m\u001b[0;34m>\u001b[0m \u001b[0mat\u001b[0m \u001b[0;36m0x7f43eececaa0\u001b[0m\u001b[0;34m>\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m \n", " Given a matrix M, builds a html table that represents M. The cells\n", " that fulfill \"condition\" are colored in yellow.\n", "\n", " INPUT:\n", "\n", " * M -- a matrix.\n", "\n", " * rows_label -- a character string (default: \"\").\n", "\n", " * columns_label -- a character string (default: \"\").\n", "\n", " * condition -- a function of the pair i, j (default: the function\n", " that returns always False).\n", "\n", " OUTPUT:\n", "\n", " A character string in html.\n", "\n", " EXAMPLES:\n", "\n", " sage: M = matrix([[1,2], [3,4]])\n", " sage: html_table(M, , condition = lambda i,j: i + j >= 1 )\n", " \n", "
01
0\n", " 1 2
1\n", " 3 4
\n", "\u001b[0;31mInit docstring:\u001b[0m x.__init__(...) initializes x; see help(type(x)) for signature\n", "\u001b[0;31mFile:\u001b[0m Dynamically generated function. No source code available.\n", "\u001b[0;31mType:\u001b[0m function\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "html_table?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

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

" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "For a=0\n" ] }, { "data": { "text/html": [ "
c
012345678910
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
" ], "text/plain": [ "
c
012345678910
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
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "For a=1\n" ] }, { "data": { "text/html": [ "
c
012345678910
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
" ], "text/plain": [ "
c
012345678910
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
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "For a=2\n" ] }, { "data": { "text/html": [ "
c
012345678910
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
" ], "text/plain": [ "
c
012345678910
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
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "For a=3\n" ] }, { "data": { "text/html": [ "
c
012345678910
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
" ], "text/plain": [ "
c
012345678910
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
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "For a=4\n" ] }, { "data": { "text/html": [ "
c
012345678910
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
" ], "text/plain": [ "
c
012345678910
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
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "For a=5\n" ] }, { "data": { "text/html": [ "
c
012345678910
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
" ], "text/plain": [ "
c
012345678910
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
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "For a=6\n" ] }, { "data": { "text/html": [ "
c
012345678910
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
" ], "text/plain": [ "
c
012345678910
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
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "For a=7\n" ] }, { "data": { "text/html": [ "
c
012345678910
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
" ], "text/plain": [ "
c
012345678910
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
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "For a=8\n" ] }, { "data": { "text/html": [ "
c
012345678910
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
" ], "text/plain": [ "
c
012345678910
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
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "For a=9\n" ] }, { "data": { "text/html": [ "
c
012345678910
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
" ], "text/plain": [ "
c
012345678910
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
" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "For a=10\n" ] }, { "data": { "text/html": [ "
c
012345678910
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
" ], "text/plain": [ "
c
012345678910
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
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "La = alpha.length()\n", "Lb = beta.length()\n", "Lc = gamma.length()\n", "for a in [0..N]:\n", " print \"For a={a}\".format(a=a)\n", " show(html_table(matrix(N+1,N+1,lambda b,c : M[a,b,c]), \n", " rows_label=\"b\", \n", " columns_label=\"c\", \n", " condition = lambda b, c: (b+c-a >= k1 and a+b-c >= k3 \n", " and a+c-b >= k2 and a>= La \n", " and b >= Lb and c >= Lc)\n", " ))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Example 5.4: the polynomials $Q^-_{(p), (q), (r)}$.

\n", "

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:

\n", "

$$F=\\sum Q_{(p),(q),(r)}^- x_1^p y_1^q z_1^r.$$

\n", "

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

" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "var('x1 y1 z1 x y z')\n", "\n", "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)\n", "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)\n", "F = numerator / denominator\n", "\n", "## For developping in series with \"series\" I introduce a variable t\n", "var('t')\n", "G = F.subs({ x1 : t*x1, y1 : t*y1, z1 : t*z1 })\n", "\n", "def Q_minus(p, q, r):\n", " global x1, y1, z1, F, G, t, x, y, z;\n", " N = p + q +r;\n", " GG = G.series( t, N+1).truncate().subs( {t:1}).expand() \n", " return GG.coefficient( x1, p).coefficient( y1, q).coefficient( z1, r)" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "1" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q_minus(0,0,0)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "x*y + x + y - 1/z" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q_minus(0,0,1)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "x^2*y^2 + x^2*y + x*y^2 + x*y - x*y/z - x/z - y/z + 1/z^2" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q_minus(0,0,2)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "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" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Q_minus(0,1,1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Conjecture 5.11 on increasing Kronecker coefficients.

\n", "

 

\n", "

Conjecture 5.11 states that for all triples of partitions $\\lambda$, $\\mu$, $\\nu$ of the same weight,

\n", "

$$g_{ \\lambda , \\mu , \\nu }\\leq g_{\\lambda \\oplus (1, 1), \\mu \\oplus (1, 1), \\nu \\oplus (1, 1)}$$

\n", "

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

" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": [ "def check_conjecture_5_11(N):\n", " r\"\"\"\n", " Check Conjecture 5.11 of [On the growth] for all triples of partitions with weight at most $N$.\n", " \"\"\"\n", " test = true ## will be false when a counter example is found\n", " L = []\n", " for (i, lam) in enumerate(Partitions(N)):\n", " for (j, mu) in enumerate(Partitions(N)):\n", " if j >= i:\n", " P = s(lam).kronecker_product(s(mu))\n", " Q = s(partitions_oplus(lam, 1, 1)).kronecker_product(s(partitions_oplus(mu, 1, 1)))\n", " for (nu, c) in P:\n", " nu_oplus_one_one = partitions_oplus(nu, 1, 1)\n", " if not ( c <= Q.coefficient(nu_oplus_one_one) ):\n", " L.append([lam, mu, nu])\n", " print \"Counter Example:\", lam, mu, nu \n", " test = false\n", " return test" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 True\n", "2 True\n", "3 True\n", "4 True\n", "5 True\n", "6 True\n", "7 True\n", "8 True\n", "9 True\n", "10 True\n" ] } ], "source": [ "# Warning: this takes some time for N=8, N=9,N=10\n", "for N in [1..10]: \n", " print N, check_conjecture_5_11(N)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Table 1 in Example 5.5 illustrating Hook Stability.

\n", "

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.

" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
j
0123456789
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
" ], "text/plain": [ "
j
0123456789
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
" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# WARNING: this takes some time\n", "lam = Partition([3, 3])\n", "Kronecker_square = lambda f : f.kronecker_product(f)\n", "T = matrix(10,10, lambda i, j: \n", " Kronecker_square(s(partitions_oplus(lam, i, j))).coefficient( partitions_oplus(lam, i, j) )\n", " )\n", " \n", "html_table(T, rows_label=\"i\", columns_label=\"j\", condition = lambda i,j : False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

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.

" ] }, { "cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [], "source": [ "def first_part(lam):\n", " r\"\"\"\n", " First part of a partition, or 0 if the partition is empty.\n", " \"\"\"\n", " lam = Partition(lam)\n", " if lam == Partition([ ]):\n", " return 0\n", " else: \n", " return lam[0]\n", "\n", "def bound_N0(lam, mu, nu):\n", " r\"\"\"\n", " Bound $N_0$ defined in Formula (9) from [On the growth].\n", " \"\"\"\n", " lam = Partition(lam)\n", " mu = Partition(mu)\n", " nu = Partition(nu)\n", " return add(rho.size() + first_part(rho) for rho in (lam, mu, nu) )/2\n", "\n", "def bounds_d(lam, mu, nu):\n", " r\"\"\"\n", " Returns the values of $d$, $d_1$, $d_2$, $d_3$ defined in the proof of Theorem 5.7 in [On the growth].\n", " \"\"\"\n", " lam = Partition(lam)\n", " mu = Partition(mu)\n", " nu = Partition(nu)\n", " N = lam.size() ## common weight of all three partitions\n", " ell = dict([])\n", " ell[1] = lambda a,b,c : a+b-c\n", " ell[2] = lambda a,b,c : a+c-b\n", " ell[3] = lambda a,b,c : b+c-a\n", " k = dict([])\n", " (k[1], k[2], k[3]) = bounds_k(partitions_hat(lam), partitions_hat(mu), partitions_hat(nu))\n", " d = dict([])\n", " for i in [1,2,3]:\n", " d[i] = k[i] - ell[i](lam.length(), mu.length(), nu.length()) +1\n", " dd = ( bound_N0(partitions_hat(lam), partitions_hat(mu), partitions_hat(nu)) \n", " + (lam.length() + mu.length()+ nu.length())/2 \n", " - N)\n", " return (dd, d[1], d[2], d[3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

In the example under consideration, the bounds $d$, $d_1$, $d_2$ and $d_3$ are

" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(3, 5, 5, 5)" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "bounds_d([3,3], [3,3], [3,3])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

In that example,  $a=b=c=j$ and $m = i+j$. The condition (21) of [On the growth] writes:

\n", "

$$ j \\geq 5, \\text{ and } i -j/2 \\geq 3, \\text{ and } i \\geq 0.$$

\n", "

The positions in the table that fulfill this condition are represented in yellow below (in gray in [On the growth]).

" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
j
0123456789
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
" ], "text/plain": [ "
j
0123456789
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
" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "html_table(T, \n", " rows_label=\"i\", \n", " columns_label=\"j\", \n", " condition = lambda i,j : j >= 5 and i - j/2 >= 3)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

The stability domain (all coefficients $145$) is a little bit bigger than the stable domain guaranteed by Theorem 5.7 (in yellow).

\n", "

Computation of the coefficients .

\n", "

Remember the following generating series :

\n", "\n", "

Here we compute some of these coefficients (small ones) using Sage's construction of tensor products of the algebra of Symmetric functions.

" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": [ "Sym = SymmetricFunctions(QQ)\n", "p = Sym.powersum()\n", "s = Sym.schur()\n", "h = Sym.homogeneous()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

The algebra $\\operatorname{Sym} \\otimes \\operatorname{Sym} \\otimes \\operatorname{Sym}$.

" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [], "source": [ "SymSymSym = tensor([p, p, p])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

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

" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The following class is defined:\n", "- Specialization.\n", "\n", "The following functions are loaded:\n", "- pleth\n", "- change_basis\n", "- specialization_binomial\n", "- specialization_rank1\n", "\n", "The following constants are defined:\n", "- specialization_X\n", "- specialization_Y\n", "- specialization_Z\n", "- specialization_epsilon\n", "\n" ] } ], "source": [ "load(\"plethystic.sage\")" ] }, { "cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mInit signature:\u001b[0m \u001b[0mSpecialization\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mf\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m \n", " Here a specialization is a morphism of QQ-algebras from\n", " operatorname{Sym} to operatorname{Sym} otimes operatorname{Sym}\n", " otimes operatorname{Sym}.\n", "\n", " INPUT:\n", "\n", " * f -- a function that associates to each positive integer i an\n", " element of operatorname{Sym} otimes operatorname{Sym} otimes\n", " operatorname{Sym}.\n", "\n", " OUTPUT:\n", "\n", " * the unique Specializationthat maps p_i to f(i).\n", "\n", " EXAMPLES:\n", "\n", " Here is an example of definition of a specialization.\n", "\n", " sage: A = Specialization( lambda i: )\n", "\n", " Some standard specializations are predefined. specialization_X,\n", " specialization_Y and specialization_Z are the inclusions in the\n", " factors of the tensor product.\n", "\n", " sage: specialization_X\n", " Specialization of symmetric functions in the tensor product of three\n", " copies of Sym where:\n", " p[1] |-> p[1] # p[] # p[]\n", " p[2] |-> p[2] # p[] # p[]\n", " p[3] |-> p[3] # p[] # p[]\n", " p[4] |-> p[4] # p[] # p[]\n", " ...\n", "\n", " The binomial elements are those whose power sums are all equal to\n", " this element.\n", "\n", " sage: specialization_binomial(2)\n", " Specialization of symmetric functions in the tensor product of three\n", " copies of Sym where:\n", " p[1] |-> 2 p[] # p[] # p[]\n", " p[2] |-> 2 p[] # p[] # p[]\n", " p[3] |-> 2 p[] # p[] # p[]\n", " p[4] |-> 2 p[] # p[] # p[]\n", " ...\n", "\n", " It is possible to perform operations on specializations.\n", "\n", " sage: X*Z + Y*Z\n", " Specialization of symmetric functions in the tensor product of three\n", " copies of Sym where:\n", " p[1] |-> p[] # p[1] # p[1] + p[1] # p[] # p[1]\n", " p[2] |-> p[] # p[2] # p[2] + p[2] # p[] # p[2]\n", " p[3] |-> p[] # p[3] # p[3] + p[3] # p[] # p[3]\n", " p[4] |-> p[] # p[4] # p[4] + p[4] # p[] # p[4]\n", " ...\n", "\n", " The function pleth makes the symmetric functions act on the\n", " morphisms.\n", "\n", " sage: pleth( h[3], X*Z + Y*Z)\n", " 1/6*p[] # p[1, 1, 1] # p[1, 1, 1] + 1/2*p[] # p[2, 1] # p[2, 1] +\n", " 1/3*p[] # p[3] # p[3] + 1/2*p[1] # p[1, 1] # p[1, 1, 1] + 1/2*p[1] #\n", " p[2] # p[2, 1] + 1/2*p[1, 1] # p[1] # p[1, 1, 1] + 1/6*p[1, 1, 1] # p[]\n", " # p[1, 1, 1] + 1/2*p[2] # p[1] # p[2, 1] + 1/2*p[2, 1] # p[] # p[2, 1] +\n", " 1/3*p[3] # p[] # p[3\n", "\u001b[0;31mInit docstring:\u001b[0m\n", " Here a specialization is a morphism of QQ-algebras from\n", " operatorname{Sym} to operatorname{Sym} otimes operatorname{Sym}\n", " otimes operatorname{Sym}.\n", "\n", " INPUT:\n", "\n", " * f -- a function that associates to each positive integer i an\n", " element of operatorname{Sym} otimes operatorname{Sym} otimes\n", " operatorname{Sym}.\n", "\n", " OUTPUT:\n", "\n", " * the unique Specializationthat maps p_i to f(i).\n", "\n", " EXAMPLES:\n", "\n", " Here is an example of definition of a specialization.\n", "\n", " sage: A = Specialization( lambda i: )\n", "\n", " Some standard specializations are predefined. specialization_X,\n", " specialization_Y and specialization_Z are the inclusions in the\n", " factors of the tensor product.\n", "\n", " sage: specialization_X\n", " Specialization of symmetric functions in the tensor product of three\n", " copies of Sym where:\n", " p[1] |-> p[1] # p[] # p[]\n", " p[2] |-> p[2] # p[] # p[]\n", " p[3] |-> p[3] # p[] # p[]\n", " p[4] |-> p[4] # p[] # p[]\n", " ...\n", "\n", " The binomial elements are those whose power sums are all equal to\n", " this element.\n", "\n", " sage: specialization_binomial(2)\n", " Specialization of symmetric functions in the tensor product of three\n", " copies of Sym where:\n", " p[1] |-> 2 p[] # p[] # p[]\n", " p[2] |-> 2 p[] # p[] # p[]\n", " p[3] |-> 2 p[] # p[] # p[]\n", " p[4] |-> 2 p[] # p[] # p[]\n", " ...\n", "\n", " It is possible to perform operations on specializations.\n", "\n", " sage: X*Z + Y*Z\n", " Specialization of symmetric functions in the tensor product of three\n", " copies of Sym where:\n", " p[1] |-> p[] # p[1] # p[1] + p[1] # p[] # p[1]\n", " p[2] |-> p[] # p[2] # p[2] + p[2] # p[] # p[2]\n", " p[3] |-> p[] # p[3] # p[3] + p[3] # p[] # p[3]\n", " p[4] |-> p[] # p[4] # p[4] + p[4] # p[] # p[4]\n", " ...\n", "\n", " The function pleth makes the symmetric functions act on the\n", " morphisms.\n", "\n", " sage: pleth( h[3], X*Z + Y*Z)\n", " 1/6*p[] # p[1, 1, 1] # p[1, 1, 1] + 1/2*p[] # p[2, 1] # p[2, 1] +\n", " 1/3*p[] # p[3] # p[3] + 1/2*p[1] # p[1, 1] # p[1, 1, 1] + 1/2*p[1] #\n", " p[2] # p[2, 1] + 1/2*p[1, 1] # p[1] # p[1, 1, 1] + 1/6*p[1, 1, 1] # p[]\n", " # p[1, 1, 1] + 1/2*p[2] # p[1] # p[2, 1] + 1/2*p[2, 1] # p[] # p[2, 1] +\n", " 1/3*p[3] # p[] # p[3\n", "\u001b[0;31mFile:\u001b[0m \n", "\u001b[0;31mType:\u001b[0m classobj\n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Specialization?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

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.

" ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [], "source": [ "X = specialization_X\n", "Y = specialization_Y\n", "Z = specialization_Z\n", "epsilon = specialization_rank1(-1)\n", "b = specialization_binomial" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Specialization of symmetric functions in the tensor product of three copies of Sym where:\n", "p[1] |-> p[1] # p[] # p[]\n", "p[2] |-> p[2] # p[] # p[]\n", "p[3] |-> p[3] # p[] # p[]\n", "p[4] |-> p[4] # p[] # p[]\n", " ..." ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "X" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Specialization of symmetric functions in the tensor product of three copies of Sym where:\n", "p[1] |-> -p[] # p[] # p[]\n", "p[2] |-> p[] # p[] # p[]\n", "p[3] |-> -p[] # p[] # p[]\n", "p[4] |-> p[] # p[] # p[]\n", " ..." ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "epsilon" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Specialization of symmetric functions in the tensor product of three copies of Sym where:\n", "p[1] |-> 2*p[] # p[] # p[]\n", "p[2] |-> 2*p[] # p[] # p[]\n", "p[3] |-> 2*p[] # p[] # p[]\n", "p[4] |-> 2*p[] # p[] # p[]\n", " ..." ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Below we define

\n", "

$$ \\sigma_k = \\sum_{n=0}^k h_n $$

\n", "

as an approximation for

\n", "

$$\\sigma = \\sum_{n=0}^{\\infty} h_n.$$

" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [], "source": [ "def sigma(k):\n", " return add( h[i] for i in [0..k])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Example: Littlewood-Richardson coefficients.

" ] }, { "cell_type": "code", "execution_count": 31, "metadata": {}, "outputs": [], "source": [ "import sage.libs.lrcalc.lrcalc as lrcalc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Let us compute all non--zero Littlewood-Richardson coefficients $c_{\\mu, \\nu}^{\\lambda}$ for $|\\lambda| \\leq 3$.

" ] }, { "cell_type": "code", "execution_count": 32, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 1 ([2], [1], [1])\n", "1 1 ([1, 1, 1], [1, 1], [1])\n", "1 1 ([1, 1, 1], [], [1, 1, 1])\n", "1 1 ([2], [], [2])\n", "1 1 ([1, 1, 1], [1], [1, 1])\n", "1 1 ([1, 1], [1], [1])\n", "1 1 ([1, 1], [], [1, 1])\n", "1 1 ([3], [], [3])\n", "1 1 ([1], [1], [])\n", "1 1 ([3], [3], [])\n", "1 1 ([2, 1], [2], [1])\n", "1 1 ([1, 1, 1], [1, 1, 1], [])\n", "1 1 ([2], [2], [])\n", "1 1 ([2, 1], [], [2, 1])\n", "1 1 ([1], [], [1])\n", "1 1 ([2, 1], [1], [2])\n", "1 1 ([3], [2], [1])\n", "1 1 ([2, 1], [1, 1], [1])\n", "1 1 ([], [], [])\n", "1 1 ([3], [1], [2])\n", "1 1 ([1, 1], [1, 1], [])\n", "1 1 ([2, 1], [2, 1], [])\n", "1 1 ([2, 1], [1], [1, 1])\n" ] } ], "source": [ "L = change_basis(pleth(sigma(3), X*Z+Y*Z), s)\n", "for (( mu, nu, lam),c) in L.monomial_coefficients().items():\n", " print c, lrcalc.lrcoef(lam, mu, nu), (lam, mu, nu)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "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." ] }, { "cell_type": "code", "execution_count": 33, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "All correct.\n" ] } ], "source": [ "L = change_basis(pleth(sigma(6), X*Z+Y*Z), s)\n", "for (( mu, nu, lam),c) in L:\n", " if c != lrcalc.lrcoef(lam, mu, nu):\n", " print (lam, mu, nu), c, lrcalc.lrcoef(lam, mu, nu)\n", " break\n", "else:\n", " print \"All correct.\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Example: Kronecker coefficients.

\n", "\n", "

We compute the Kronecker coefficients $g_{\\lambda, \\mu, \\nu}$ for $|\\lambda| = |\\mu| = |\\nu| \\leq 7$, and check they are correct.

" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "All correct.\n" ] } ], "source": [ "N = 7\n", "L = change_basis(pleth(sigma(N), X*Y*Z), s)\n", "for ((lam, mu, nu),c) in L:\n", " if c != s(lam).kronecker_product(s(mu)).coefficient(nu):\n", " print (lam, mu, nu), c, s(lam).kronecker_product(s(mu)).coefficient(nu)\n", " break\n", "else:\n", " print \"All correct.\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Stable Kronecker coefficients.

\n", "

The series

\n", "

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

\n", "\n", "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`." ] }, { "cell_type": "code", "execution_count": 35, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "All correct.\n" ] } ], "source": [ "# WARNING: it takes some time.\n", "N = 6\n", "L = change_basis(pleth(sigma(N), X*Y*Z + X*Z + Y*Z + X*Y), s)\n", "for ((lam, mu, nu),c) in L:\n", " if lam.size() + mu.size() + nu.size() < 2*(N+1) and c != stable_Kronecker_coefficient(lam, mu, nu):\n", " print (lam, mu, nu), c, stable_Kronecker_coefficient(lam, mu, nu)\n", " break\n", "else:\n", " print \"All correct.\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Hook-stable Kronecker coefficients: Tables 1 and 2 in [appendix].

\n", "

The coefficient $\\overline{\\overline{g}}_{\\alpha, \\beta, \\gamma}$ is a coefficient of

\n", "

$$\\sigma[XYZ+(1-\\epsilon)(XY+XZ+YZ+X+Y+Z)].$$

\n", "

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

\n", "

$$\\sigma[XYZ+(1-\\epsilon)(XY+XZ+YZ+X+Y+Z)]$$

\n", "

by

\n", "

$$\\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].$$

\n", "

 

" ] }, { "cell_type": "code", "execution_count": 36, "metadata": {}, "outputs": [], "source": [ "def projection(f, d):\n", " r\"\"\"\n", " Projection onto the direct sum of the homogeneous components of Sym of degrees <= d. \n", " \"\"\"\n", " return add( f.homogeneous_component(k) for k in [0..d])" ] }, { "cell_type": "code", "execution_count": 37, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 1, 1) (1, 1) (1) 84\n", "(2, 1) () () 2\n", "(2) (1, 1) (1) 66\n", "(1) () () 2\n", "(2, 1) (2) (1, 1) 382\n", "(3) (2) (1) 84\n", "(3) (2) (1, 1, 1) 320\n", "(2) (2) (1) 66\n", "(3) (1, 1, 1) (1, 1, 1) 565\n", "(3) (3) (1) 122\n", "(2, 1) (1, 1, 1) (1, 1, 1) 1056\n", "(2) (1, 1, 1) () 16\n", "(2) (1, 1, 1) (1, 1, 1) 326\n", "(2, 1) (1) (1) 64\n", "(1, 1) (1, 1) (1) 66\n", "(1, 1) (1, 1) (1, 1) 144\n", "(3) (3) (1, 1) 320\n", "() () () 1\n", "(2) (2) () 14\n", "(3) (1, 1) (1) 84\n", "(3) (1, 1) (1, 1) 206\n", "(3) (2, 1) () 38\n", "(2, 1) (2) (1, 1, 1) 610\n", "(2, 1) (1, 1) () 28\n", "(2, 1) (1) () 12\n", "(2) (1) (1) 34\n", "(3) (3) (2) 326\n", "(2) (2) (1, 1, 1) 204\n", "(2, 1) (2, 1) (2, 1) 3933\n", "(1, 1) () () 2\n", "(2, 1) (1, 1) (1) 152\n", "(2, 1) (2, 1) (2) 1168\n", "(3) (1, 1, 1) () 22\n", "(3) (2, 1) (2) 610\n", "(1, 1, 1) (1, 1) (1, 1) 204\n", "(3) (3) (3) 565\n", "(3) (2, 1) (2, 1) 2037\n", "(3) (2, 1) (1, 1) 610\n", "(3) (1, 1, 1) (1, 1) 326\n", "(3) (2, 1) (1, 1, 1) 1056\n", "(2) (1, 1) () 14\n", "(1, 1) (1) (1) 34\n", "(3) (3) (2, 1) 1056\n", "(3) (2) (2) 206\n", "(2, 1) (2) (2) 382\n", "(3) (1) (1) 38\n", "(2) (2) (1, 1) 144\n", "(1, 1, 1) (1, 1) () 16\n", "(1) (1) (1) 21\n", "(2) (1, 1) (1, 1) 145\n", "(2, 1) (1, 1) (1, 1) 382\n", "(3) (3) () 22\n", "(2) (2) (2) 145\n", "(2, 1) (2) (1) 152\n", "(3) (1, 1, 1) (1) 122\n", "(2, 1) (1, 1, 1) (1) 224\n", "(3) (3) (1, 1, 1) 544\n", "(1, 1, 1) (1) () 8\n", "(2, 1) (2, 1) (1) 428\n", "(1, 1, 1) () () 2\n", "(2, 1) (1, 1, 1) (1, 1) 610\n", "(3) (1) () 8\n", "(2) (1) () 8\n", "(2) (1, 1, 1) (1, 1) 206\n", "(1, 1, 1) (1, 1, 1) () 22\n", "(3) (2, 1) (1) 224\n", "(3) (1, 1) () 16\n", "(1, 1, 1) (1, 1, 1) (1) 122\n", "(2, 1) (1, 1, 1) () 38\n", "(1, 1) (1) () 8\n", "(3) (2) (1, 1) 204\n", "(1, 1) (1, 1) () 14\n", "(2, 1) (2, 1) () 74\n", "(1, 1, 1) (1) (1) 38\n", "(2, 1) (2) () 28\n", "(1, 1, 1) (1, 1, 1) (1, 1, 1) 544\n", "(1, 1, 1) (1, 1, 1) (1, 1) 320\n", "(2) (1, 1, 1) (1) 84\n", "(3) () () 2\n", "(2) () () 2\n", "(2, 1) (2, 1) (1, 1) 1168\n", "(3) (2) () 16\n", "(2, 1) (2, 1) (1, 1, 1) 2037\n", "(1) (1) () 6\n" ] } ], "source": [ "N = 3\n", "g_barbar=dict([])\n", "series_gbarbar = pleth(sigma(N),X*Y*Z)\n", "for M in [X*Y, X*Z, Y*Z, X, Y, Z]:\n", " series_gbarbar = series_gbarbar * pleth(sigma(N), (b(1)-epsilon) * M)\n", " series_gbarbar = series_gbarbar.apply_multilinear_morphism(lambda a, b, c: tensor([projection(a,N),\n", " projection(b,N),\n", " projection(c,N)]) ) \n", " ## after each product we simplify by projecting.\n", "series_gbarbar = change_basis(series_gbarbar, s)\n", "for ((alpha, beta, gamma),c) in series_gbarbar:\n", " g_barbar[(alpha, beta, gamma)] = c\n", " if alpha >= beta and beta >= gamma:\n", " print(\"{alpha:10} {beta:10} {gamma:10} {c}\".format(gamma=vector(gamma), \n", " beta=vector(beta), \n", " alpha=vector(alpha), \n", " c=c)\n", " )" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Similarly, we compute the coefficients $A$, $B$ and $C$ appearing in Tables 1 and 2 of [appendix].

\n", "

 

\n", "

First, the coefficients $A$, obtained by coefficient extraction from:

\n", "

$$\\sigma[XYZ+2(XY+XZ+YZ+X+Y+Z)].$$

" ] }, { "cell_type": "code", "execution_count": 38, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 1, 1) (1, 1) (1) 54\n", "(3) (1, 1, 1) (1) 80\n", "(2, 1) () () 2\n", "(1) () () 2\n", "(2, 1) (2) (1, 1) 378\n", "(3) (2) (1, 1, 1) 250\n", "(1, 1) (1, 1) (1) 54\n", "(2) (2) (1) 86\n", "(3) (3) (1) 240\n", "(2, 1) (1, 1, 1) (1, 1, 1) 736\n", "(2) (1, 1, 1) (1, 1, 1) 240\n", "(2, 1) (1) (1) 64\n", "(3) (1) (1) 59\n", "(3) (2) (1) 138\n", "(1, 1) (1, 1) (1, 1) 110\n", "(1, 1, 1) (1, 1) () 10\n", "(3) (3) (1, 1) 478\n", "(2) (2) () 20\n", "(3) (1, 1) (1) 98\n", "(1, 1) () () 1\n", "(3) (1, 1) (1, 1) 220\n", "(3) (2, 1) () 50\n", "(2, 1) (1, 1) () 26\n", "(2, 1) (1) () 12\n", "(2) (1) (1) 40\n", "(3) (3) (2) 640\n", "(2) (2) (1, 1, 1) 134\n", "(2, 1) (2, 1) (2, 1) 3933\n", "(2, 1) (1, 1) (1) 140\n", "(3) () () 4\n", "(2, 1) (2, 1) (2) 1242\n", "(3) (1, 1, 1) () 10\n", "(2) (1, 1, 1) () 6\n", "(3) (2, 1) (2) 824\n", "(1, 1, 1) (1, 1) (1, 1) 134\n", "(3) (3) (3) 1243\n", "(3) (2, 1) (2, 1) 2465\n", "(3) (2, 1) (1, 1) 700\n", "(3) (1, 1, 1) (1, 1) 260\n", "(3) (2, 1) (1, 1, 1) 928\n", "(2) (1, 1) () 12\n", "(1, 1) (1) (1) 28\n", "(3) (3) (2, 1) 1632\n", "(3) (2) (2) 348\n", "(2, 1) (2) (2) 442\n", "(2) () () 3\n", "(3) (1, 1, 1) (1, 1, 1) 451\n", "(2) (2) (1, 1) 150\n", "(1) (1) (1) 21\n", "(2) (1, 1) (1, 1) 131\n", "(2, 1) (1, 1) (1, 1) 330\n", "(3) (3) () 50\n", "(2) (2) (2) 203\n", "(2, 1) (2) (1) 164\n", "(2, 1) (1, 1, 1) (1) 160\n", "(3) (3) (1, 1, 1) 506\n", "(1, 1, 1) (1) () 2\n", "(2, 1) (2, 1) (1) 428\n", "(3) (1, 1) () 18\n", "(2, 1) (1, 1, 1) (1, 1) 444\n", "(3) (1) () 14\n", "(2) (1) () 10\n", "(2) (1, 1, 1) (1, 1) 144\n", "(1, 1, 1) (1, 1, 1) () 18\n", "(3) (2, 1) (1) 288\n", "(1, 1, 1) (1, 1, 1) (1) 88\n", "(2, 1) (1, 1, 1) () 26\n", "(1, 1) (1) () 6\n", "(3) (2) (1, 1) 258\n", "(2, 1) (2, 1) () 74\n", "(2) (1, 1) (1) 62\n", "(1, 1, 1) (1) (1) 17\n", "() () () 1\n", "(2, 1) (2) () 30\n", "(2, 1) (2) (1, 1, 1) 472\n", "(1, 1, 1) (1, 1, 1) (1, 1, 1) 322\n", "(1, 1, 1) (1, 1, 1) (1, 1) 206\n", "(2) (1, 1, 1) (1) 46\n", "(2, 1) (2, 1) (1, 1) 1094\n", "(1, 1) (1, 1) () 12\n", "(3) (2) () 30\n", "(2, 1) (2, 1) (1, 1, 1) 1609\n", "(1) (1) () 6\n" ] } ], "source": [ "N = 3\n", "A=dict([])\n", "series_A = 1\n", "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]:\n", " series_A = series_A*pleth(sigma(N), M)\n", " series_A = series_A.apply_multilinear_morphism(lambda a, b, c: tensor([projection(a,N),\n", " projection(b,N),\n", " projection(c,N)]) )\n", "series_A = change_basis(series_A, s)\n", "for ((alpha, beta, gamma),c) in series_A:\n", " A[(alpha, beta, gamma)] = c\n", " if alpha >= beta and beta >= gamma:\n", " print \"{alpha:10} {beta:10} {gamma:10} {c}\".format(gamma=vector(gamma), \n", " beta=vector(beta), \n", " alpha=vector(alpha), \n", " c=c)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Now the coefficients $C$, from

\n", "

$$\\sigma[XYZ+(1+\\epsilon)(XY+XZ+YZ+X+Y+Z)].$$

" ] }, { "cell_type": "code", "execution_count": 39, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(1, 1) (1, 1) () 2\n", "(3) (3) (1, 1, 1) -4\n", "(1, 1) (1, 1) (1, 1) -4\n", "(2) (2) () 2\n", "(1, 1, 1) (1) (1) -1\n", "(3) (3) (3) 5\n", "(1, 1) () () -1\n", "(3) (2, 1) (2, 1) 1\n", "(2) (2) (1, 1) -4\n", "(2, 1) (2, 1) (2, 1) 1\n", "(1, 1, 1) (1, 1, 1) (1) 2\n", "(3) (1, 1, 1) (1, 1, 1) 5\n", "(2) (1, 1) (1, 1) 5\n", "(1) (1) (1) 1\n", "(2) () () 1\n", "(3) (1, 1, 1) (1) -2\n", "(2, 1) (2, 1) (1, 1, 1) 1\n", "(3) (1) (1) 1\n", "(3) (3) (1) 2\n", "(2) (2) (2) 5\n", "() () () 1\n", "(2) (1, 1) () -2\n", "(1, 1, 1) (1, 1, 1) (1, 1, 1) -4\n" ] } ], "source": [ "N = 3\n", "C =dict([])\n", "series_C = 1\n", "for M in [X*Y*Z, (b(1)+epsilon)*X*Y, (b(1)+epsilon)*X*Z, (b(1)+epsilon)*Y*Z, \n", " (b(1)+epsilon)*X, (b(1)+epsilon)*Y, (b(1)+epsilon)*Z]:\n", " series_C = series_C*pleth(sigma(N), M)\n", " series_C = series_C.apply_multilinear_morphism(lambda a, b, c: tensor([projection(a,N),\n", " projection(b,N),\n", " projection(c,N)]) )\n", "series_C = change_basis(series_C, s)\n", "for ((alpha, beta, gamma),c) in series_C:\n", " C[(alpha, beta, gamma)] = c\n", " if alpha >= beta and beta >= gamma:\n", " print \"{alpha:10} {beta:10} {gamma:10} {c}\".format(gamma=vector(gamma), \n", " beta=vector(beta), \n", " alpha=vector(alpha), \n", " c=c)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

For the $B$ coefficients we have the following form of the generating series:

\n", "

$$\\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)$$

" ] }, { "cell_type": "code", "execution_count": 40, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2) (1) (1) -25\n", "(1, 1) (1, 1, 1) (1, 1, 1) -27\n", "(3) (2, 1) (1, 1) -738\n", "(1, 1, 1) (1, 1) (1) -42\n", "(3) (1, 1) (1) -118\n", "(3) (1, 1, 1) (1) -85\n", "(3) (3) (2) -820\n", "(1, 1) (2, 1) (1, 1) -128\n", "(1, 1) (2, 1) (1, 1, 1) -116\n", "() (1) () 1\n", "(2, 1) () () -3\n", "(1, 1) (2, 1) (2, 1) -435\n", "(1, 1) (3) (2) -170\n", "(3) (2) (2) -435\n", "(1, 1, 1) (3) (2) -250\n", "(2, 1) (2) (1, 1) -371\n", "(1, 1, 1) (1) (1) -15\n", "(1, 1) (3) (1, 1, 1) -110\n", "(1, 1) (2, 1) () -15\n", "(1) (3) () -6\n", "(3) (2, 1) () -66\n", "() (2) () 1\n", "(2, 1) (3) (1) -344\n", "(2, 1) (2) (1, 1, 1) -394\n", "(1, 1, 1) (3) (2, 1) -832\n", "(3) (1) (1) -78\n", "() (3) (1, 1, 1) 3\n", "(2) (3) (3) -500\n", "(1, 1, 1) (1, 1) () -8\n", "(3) (2) (1, 1, 1) -250\n", "(2, 1) (2, 1) (2, 1) -3470\n", "(3) (1, 1) () -24\n", "() (3) (1) 1\n", "(2) (2, 1) () -21\n", "(1, 1, 1) (1, 1, 1) (1) -59\n", "() (2) (1, 1, 1) 3\n", "(2, 1) (1) () -15\n", "(1, 1) (1, 1) (1) -21\n", "(2, 1) (1, 1) (1, 1) -293\n", "(1, 1, 1) (3) () -12\n", "(2) (3) (1) -109\n", "(1, 1) (2) () -8\n", "(1, 1) () () -1\n", "(2, 1) (1, 1, 1) () -24\n", "(1, 1) (1) () -3\n", "(2, 1) (3) (1, 1, 1) -832\n", "(1, 1, 1) (2, 1) (2) -394\n", "() (2, 1) (1, 1) 11\n", "(2, 1) (3) (3) -1888\n", "(2, 1) (1, 1) (1) -139\n", "(1, 1, 1) (3) (1) -85\n", "(2) (2) (1, 1) -84\n", "(2) (2) (1) -57\n", "(3) (2) () -42\n", "(2) (3) (1, 1, 1) -125\n", "(1, 1) (1, 1, 1) (1) -15\n", "() (3) (3) 3\n", "() (2) (2) 6\n", "(1, 1) (1, 1, 1) (1, 1) -30\n", "(2) (2) (1, 1, 1) -54\n", "(1, 1, 1) (2) () -6\n", "(1, 1) (2) (2) -84\n", "(1, 1, 1) (1, 1) (1, 1) -97\n", "(1, 1) (1) (1) -13\n", "() (2, 1) (1) 3\n", "(3) (1, 1, 1) () -12\n", "(2, 1) (1, 1) () -28\n", "(2) (2, 1) (1, 1) -182\n", "(1) (3) (1) -19\n", "(1) (1, 1, 1) (1) 2\n", "(3) (2) (1, 1) -299\n", "(1, 1, 1) (2) (2) -121\n", "(2) (1, 1) () -8\n", "(1) (1, 1) (1) 1\n", "(2, 1) (3) (2) -938\n", "() (1, 1) (1) 3\n", "(1, 1) (3) () -15\n", "(3) (2) (1) -178\n", "(1, 1, 1) (2, 1) (1) -136\n", "() (1, 1) (1, 1) 8\n", "(1, 1, 1) (1, 1, 1) (1, 1, 1) -175\n", "(2, 1) (3) (1, 1) -738\n", "(2) (3) (2) -261\n", "() (2, 1) (1, 1, 1) 15\n", "(1) (2, 1) (2) -17\n", "(1) (2) (1, 1, 1) 4\n", "(1) (1, 1) (1, 1) 6\n", "(3) (3) (1) -321\n", "(2) (2, 1) (2, 1) -597\n", "() (3) (2) 3\n", "(3) (2, 1) (2, 1) -2515\n", "(1, 1) (2, 1) (1) -69\n", "() (3) (2, 1) 9\n", "() (1, 1, 1) (1, 1) 7\n", "(2) (2, 1) (2) -256\n", "(2) (1, 1, 1) (1) -19\n", "() (3) (1, 1) 3\n", "(1) (3) (1, 1) -20\n", "(2, 1) (1, 1, 1) (1, 1, 1) -480\n", "(1, 1) (3) (3) -335\n", "(1, 1, 1) (3) (3) -521\n", "(1, 1, 1) (2, 1) () -24\n", "(1) (2, 1) (1) -8\n", "(2, 1) (3) (2, 1) -2515\n", "(3) (3) () -72\n", "(1, 1, 1) (1, 1, 1) (1, 1) -130\n", "(1, 1, 1) (2) (1, 1) -117\n", "(3) (3) (3) -1597\n", "(1) (3) (2, 1) -56\n", "(1) (2) (2) -14\n", "(2) (1, 1, 1) (1, 1, 1) -48\n", "(1) (2, 1) (1, 1) 1\n", "(2, 1) (1) (1) -72\n", "(1) (3) (2) -40\n", "(2, 1) (2, 1) (1, 1) -982\n", "(1) (2, 1) (2, 1) -5\n", "(1, 1) (3) (2, 1) -388\n", "(3) () () -6\n", "(3) (2, 1) (1) -344\n", "(2) (2) (2) -133\n", "(1, 1) (2) (1) -33\n", "(2) () () -2\n", "() (2, 1) (2) 9\n", "(2) (3) () -27\n", "(1) (1, 1, 1) (1, 1) 12\n", "(3) (1, 1, 1) (1, 1, 1) -355\n", "(2) (2, 1) (1) -99\n", "(1, 1, 1) (2) (1, 1, 1) -168\n", "() (2) (1) 3\n", "(3) (1, 1, 1) (1, 1) -240\n", "(1, 1, 1) (3) (1, 1) -240\n", "(3) (2, 1) (1, 1, 1) -832\n", "(1) (3) (3) -81\n", "(1, 1) (1, 1, 1) () -3\n", "(2, 1) (1, 1, 1) (1) -136\n", "(2, 1) (2, 1) (2) -1218\n", "(1, 1) (3) (1, 1) -125\n", "(3) (2, 1) (2) -938\n", "(1) (2, 1) (1, 1, 1) 24\n", "() (1, 1, 1) (1, 1, 1) 15\n", "(1, 1, 1) (1) () -2\n", "(1, 1) (3) (1) -69\n", "(2) (3) (2, 1) -526\n", "(3) (3) (1, 1, 1) -521\n", "(1, 1) (1, 1) (1, 1) -38\n", "() (2) (1, 1) 4\n", "(2, 1) (2, 1) (1) -433\n", "(2, 1) (2) (2) -477\n", "(3) (3) (1, 1) -574\n", "() () () 1\n", "(1) (2, 1) () -3\n", "(2, 1) (2) () -36\n", "(2) (2) () -14\n", "(1) (2) () -2\n", "(1, 1) (2) (1, 1) -55\n", "(2) (2, 1) (1, 1, 1) -158\n", "(1, 1, 1) (2, 1) (1, 1, 1) -480\n", "() (2, 1) (2, 1) 30\n", "(1, 1) (1, 1) () -4\n", "(2) (1, 1, 1) () -3\n", "(2) (1, 1) (1) -33\n", "() (1) (1) 3\n", "(1) (2) (1, 1) -2\n", "(2, 1) (2) (1) -181\n", "(1) (1, 1, 1) (1, 1, 1) 29\n", "(1, 1) (2, 1) (2) -182\n", "(1, 1, 1) (3) (1, 1, 1) -355\n", "(2, 1) (1, 1, 1) (1, 1) -338\n", "(3) (3) (2, 1) -1888\n", "(1) (3) (1, 1, 1) -5\n", "(2) (3) (1, 1) -170\n", "(2, 1) (2, 1) (1, 1, 1) -1221\n", "(3) (1, 1) (1, 1) -235\n", "(2, 1) (2, 1) () -81\n", "(1, 1, 1) (2, 1) (2, 1) -1221\n", "() (1, 1, 1) (1) 1\n", "(3) (1) () -20\n", "(2) (1, 1) (1, 1) -55\n", "(1) (2) (1) -5\n", "(1, 1, 1) (2) (1) -42\n", "(2) (1) () -7\n", "(2, 1) (3) () -66\n", "(2) (1, 1, 1) (1, 1) -45\n", "(1, 1, 1) (2, 1) (1, 1) -338\n", "(1, 1, 1) (1, 1, 1) () -12\n", "(1, 1) (2) (1, 1, 1) -45\n" ] } ], "source": [ "def chi(k):\n", " return add(p[i] for i in [1..k])\n", "\n", "N = 3\n", "B =dict([])\n", "W = X*Y + X*Z + Y*Z + X + Y + Z\n", "series_B = pleth(chi(N),Y*Z-X)-1/2*pleth(chi(N),W)\n", "series_B = series_A*series_B\n", "series_B = series_B.apply_multilinear_morphism(lambda a, b, c: tensor([projection(a,N),\n", " projection(b,N),\n", " projection(c,N)]) )\n", "series_B = 3/4*series_A + 1/4*series_C + series_B\n", "series_B = change_basis(series_B, s)\n", "for ((alpha, beta, gamma),c) in series_B:\n", " B[(alpha, beta, gamma)] = c\n", " if beta >= gamma:\n", " print \"{alpha:10} {beta:10} {gamma:10} {c}\".format(gamma=vector(gamma), beta=vector(beta), alpha=vector(alpha), c=c)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "

Production of Tables 1 and 2 of [appendix].

\n", "

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.

" ] }, { "cell_type": "code", "execution_count": 41, "metadata": {}, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "\\begin{array}[ccccccccc]\\\\ \\alpha \n", " & \\beta \n", " & \\gamma \n", " & \\overline{\\overline{g}}_{\\alpha, \\beta, \\gamma} \n", " & A_{\\alpha, \\beta, \\gamma} \n", " & B_{\\alpha, \\beta, \\gamma} \n", " & B_{\\beta, \\alpha, \\gamma} \n", " & B_{\\gamma, \\alpha, \\beta} \n", " & C_{\\alpha, \\beta, \\gamma} \n", " \\\\\n", "() &() &() &1 &1 &1 &1 &1 &1 \\\\ \n", "(1) &() &() &2 &2 & 0&1 &1 & 0 \\\\ \n", "(1) &(1) &() &6 &6 & 0& 0&3 & 0 \\\\ \n", "(1) &(1) &(1) &21 &21 & 0& 0& 0&1 \\\\ \n", "(2) &() &() &2 &3 &-2 &1 &1 &1 \\\\ \n", "(2) &(1) &() &8 &10 &-7 &-2 &3 & 0 \\\\ \n", "(2) &(1) &(1) &34 &40 &-25 &-5 &-5 & 0 \\\\ \n", "(2) &(2) &() &14 &20 &-14 &-14 &6 &2 \\\\ \n", "(2) &(2) &(1) &66 &86 &-57 &-57 &-14 & 0 \\\\ \n", "(2) &(2) &(2) &145 &203 &-133 &-133 &-133 &5 \\\\ \n", "(2) &(2) &(1, 1) &144 &150 &-84 &-84 &-84 &-4 \\\\ \n", "(2) &(2) &(1, 1, 1)&204 &134 &-54 &-54 &-121 & 0 \\\\ \n", "(2) &(1, 1) &() &14 &12 &-8 &-8 &4 &-2 \\\\ \n", "(2) &(1, 1) &(1) &66 &62 &-33 &-33 &-2 & 0 \\\\ \n", "(2) &(1, 1) &(1, 1) &145 &131 &-55 &-55 &-55 &5 \\\\ \n", "(2) &(1, 1, 1)&() &16 &6 &-3 &-6 &3 & 0 \\\\ \n", "(2) &(1, 1, 1)&(1) &84 &46 &-19 &-42 &4 & 0 \\\\ \n", "(2) &(1, 1, 1)&(1, 1) &206 &144 &-45 &-117 &-45 & 0 \\\\ \n", "(2) &(1, 1, 1)&(1, 1, 1)&326 &240 &-48 &-168 &-168 & 0 \\\\ \n", "(1, 1) &() &() &2 &1 &-1 & 0& 0&-1 \\\\ \n", "(1, 1) &(1) &() &8 &6 &-3 & 0&3 & 0 \\\\ \n", "(1, 1) &(1) &(1) &34 &28 &-13 &1 &1 & 0 \\\\ \n", "(1, 1) &(1, 1) &() &14 &12 &-4 &-4 &8 &2 \\\\ \n", "(1, 1) &(1, 1) &(1) &66 &54 &-21 &-21 &6 & 0 \\\\ \n", "(1, 1) &(1, 1) &(1, 1) &144 &110 &-38 &-38 &-38 &-4 \\\\ \n", "(3) &() &() &2 &4 &-6 & 0& 0& 0 \\\\ \n", "(3) &(1) &() &8 &14 &-20 &-6 &1 & 0 \\\\ \n", "(3) &(1) &(1) &38 &59 &-78 &-19 &-19 &1 \\\\ \n", "(3) &(2) &() &16 &30 &-42 &-27 &3 & 0 \\\\ \n", "(3) &(2) &(1) &84 &138 &-178 &-109 &-40 & 0 \\\\ \n", "(3) &(2) &(2) &206 &348 &-435 &-261 &-261 & 0 \\\\ \n", "(3) &(2) &(1, 1) &204 &258 &-299 &-170 &-170 & 0 \\\\ \n", "(3) &(2) &(1, 1, 1)&320 &250 &-250 &-125 &-250 & 0 \\\\ \n", "(3) &(1, 1) &() &16 &18 &-24 &-15 &3 & 0 \\\\ \n", "(3) &(1, 1) &(1) &84 &98 &-118 &-69 &-20 & 0 \\\\ \n", "(3) &(1, 1) &(1, 1) &206 &220 &-235 &-125 &-125 & 0 \\\\ \n", "(3) &(3) &() &22 &50 &-72 &-72 &3 & 0 \\\\ \n", "(3) &(3) &(1) &122 &240 &-321 &-321 &-81 &2 \\\\ \n", "(3) &(3) &(2) &326 &640 &-820 &-820 &-500 & 0 \\\\ \n", "(3) &(3) &(1, 1) &320 &478 &-574 &-574 &-335 & 0 \\\\ \n", "(3) &(3) &(3) &565 &1243 &-1597&-1597&-1597&5 \\\\ \n", "(3) &(3) &(2, 1) &1056 &1632 &-1888&-1888&-1888& 0 \\\\ \n", "(3) &(3) &(1, 1, 1)&544 &506 &-521 &-521 &-521 &-4 \\\\ \n", "(3) &(2, 1) &() &38 &50 &-66 &-66 &9 & 0 \\\\ \n", "(3) &(2, 1) &(1) &224 &288 &-344 &-344 &-56 & 0 \\\\ \n", "(3) &(2, 1) &(2) &610 &824 &-938 &-938 &-526 & 0 \\\\ \n", "(3) &(2, 1) &(1, 1) &610 &700 &-738 &-738 &-388 & 0 \\\\ \n", "(3) &(2, 1) &(2, 1) &2037 &2465 &-2515&-2515&-2515&1 \\\\ \n", "(3) &(2, 1) &(1, 1, 1)&1056 &928 &-832 &-832 &-832 & 0 \\\\ \n", "(3) &(1, 1, 1)&() &22 &10 &-12 &-12 &3 & 0 \\\\ \n", "(3) &(1, 1, 1)&(1) &122 &80 &-85 &-85 &-5 &-2 \\\\ \n", "(3) &(1, 1, 1)&(1, 1) &326 &260 &-240 &-240 &-110 & 0 \\\\ \n", "(3) &(1, 1, 1)&(1, 1, 1)&565 &451 &-355 &-355 &-355 &5 \\\\ \n", "(2, 1) &() &() &2 &2 &-3 & 0& 0& 0 \\\\ \n", "(2, 1) &(1) &() &12 &12 &-15 &-3 &3 & 0 \\\\ \n", "(2, 1) &(1) &(1) &64 &64 &-72 &-8 &-8 & 0 \\\\ \n", "(2, 1) &(2) &() &28 &30 &-36 &-21 &9 & 0 \\\\ \n", "(2, 1) &(2) &(1) &152 &164 &-181 &-99 &-17 & 0 \\\\ \n", "(2, 1) &(2) &(2) &382 &442 &-477 &-256 &-256 & 0 \\\\ \n", "(2, 1) &(2) &(1, 1) &382 &378 &-371 &-182 &-182 & 0 \\\\ \n", "(2, 1) &(2) &(1, 1, 1)&610 &472 &-394 &-158 &-394 & 0 \\\\ \n", "(2, 1) &(1, 1) &() &28 &26 &-28 &-15 &11 & 0 \\\\ \n", "(2, 1) &(1, 1) &(1) &152 &140 &-139 &-69 &1 & 0 \\\\ \n", "(2, 1) &(1, 1) &(1, 1) &382 &330 &-293 &-128 &-128 & 0 \\\\ \n", "(2, 1) &(2, 1) &() &74 &74 &-81 &-81 &30 & 0 \\\\ \n", "(2, 1) &(2, 1) &(1) &428 &428 &-433 &-433 &-5 & 0 \\\\ \n", "(2, 1) &(2, 1) &(2) &1168 &1242 &-1218&-1218&-597 & 0 \\\\ \n", "(2, 1) &(2, 1) &(1, 1) &1168 &1094 &-982 &-982 &-435 & 0 \\\\ \n", "(2, 1) &(2, 1) &(2, 1) &3933 &3933 &-3470&-3470&-3470&1 \\\\ \n", "(2, 1) &(2, 1) &(1, 1, 1)&2037 &1609 &-1221&-1221&-1221&1 \\\\ \n", "(2, 1) &(1, 1, 1)&() &38 &26 &-24 &-24 &15 & 0 \\\\ \n", "(2, 1) &(1, 1, 1)&(1) &224 &160 &-136 &-136 &24 & 0 \\\\ \n", "(2, 1) &(1, 1, 1)&(1, 1) &610 &444 &-338 &-338 &-116 & 0 \\\\ \n", "(2, 1) &(1, 1, 1)&(1, 1, 1)&1056 &736 &-480 &-480 &-480 & 0 \\\\ \n", "(1, 1, 1)&() &() &2 & 0& 0& 0& 0& 0 \\\\ \n", "(1, 1, 1)&(1) &() &8 &2 &-2 & 0&1 & 0 \\\\ \n", "(1, 1, 1)&(1) &(1) &38 &17 &-15 &2 &2 &-1 \\\\ \n", "(1, 1, 1)&(1, 1) &() &16 &10 &-8 &-3 &7 & 0 \\\\ \n", "(1, 1, 1)&(1, 1) &(1) &84 &54 &-42 &-15 &12 & 0 \\\\ \n", "(1, 1, 1)&(1, 1) &(1, 1) &204 &134 &-97 &-30 &-30 & 0 \\\\ \n", "(1, 1, 1)&(1, 1, 1)&() &22 &18 &-12 &-12 &15 & 0 \\\\ \n", "(1, 1, 1)&(1, 1, 1)&(1) &122 &88 &-59 &-59 &29 &2 \\\\ \n", "(1, 1, 1)&(1, 1, 1)&(1, 1) &320 &206 &-130 &-130 &-27 & 0 \\\\ \n", "(1, 1, 1)&(1, 1, 1)&(1, 1, 1)&544 &322 &-175 &-175 &-175 &-4 \\\\ \n", "\\end{array}" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "def phi(S,lam, mu, nu):\n", " if (lam, mu, nu) in S:\n", " return S[lam, mu, nu]\n", " else:\n", " return 0\n", "\n", "res=(\"\"\"\\\\begin{array}[ccccccccc]\\\\\\\\\n", " \\\\alpha \n", " & \\\\beta \n", " & \\\\gamma \n", " & \\\\overline{\\\\overline{g}}_{\\\\alpha, \\\\beta, \\\\gamma} \n", " & A_{\\\\alpha, \\\\beta, \\\\gamma} \n", " & B_{\\\\alpha, \\\\beta, \\\\gamma} \n", " & B_{\\\\beta, \\\\alpha, \\\\gamma} \n", " & B_{\\\\gamma, \\\\alpha, \\\\beta} \n", " & C_{\\\\alpha, \\\\beta, \\\\gamma} \n", " \\\\\\\\\\n\"\"\")\n", "L = []\n", "for i in [0..3]:\n", " L.extend(Partitions(i))\n", "for alpha in L:\n", " for beta in L:\n", " if alpha >= beta:\n", " for gamma in L:\n", " if beta >= gamma:\n", " res += (\"{alpha:9}&{beta:9}&{gamma:9}&{gbarbar:5}&{A:5}&{B1:5}&{B2:5}&{B3:5}&{C:5} \\\\\\\\ \\n\".\n", " format(alpha=vector(alpha), \n", " beta=vector(beta), \n", " gamma=vector(gamma), \n", " gbarbar=phi(g_barbar,alpha, beta, gamma), \n", " A=phi(A,alpha, beta, gamma), \n", " B1=phi(B,alpha,beta,gamma), \n", " B2=phi(B, beta, alpha, gamma), \n", " B3=phi(B,gamma, alpha, beta), \n", " C=phi(C,alpha, beta, gamma))\n", " )\n", "res += \"\\\\end{array}\"\n", "\n", "show(LatexExpr(res))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
End of the worksheet.
" ] } ], "metadata": { "kernelspec": { "display_name": "SageMath 8.8", "language": "sage", "name": "sagemath" }, "language": "python", "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.15" } }, "nbformat": 4, "nbformat_minor": 2 }