July 17, 2026
We study the class \(\#\mathsf{L}\) of functions counting accepting paths of non-deterministic log-space Turing machines and construct methods to prove containment in \(\#\mathsf{L}\). We
prove that a large number of classical combinatorial and number theoretic functions belong to this class: classical functions from enumerative combinatorics (multinomial coefficients, Catalan numbers, linear extensions of trees, Stirling numbers, etc),
algebraic combinatorics (number of standard Young tableaux, etc), discrete geometry, number theoretic functions, representation theoretic multiplicities in a large class of cases. We show that \(\mathrm{GL}_2\)-plethysm
coefficients of bounded length outer partition can be counted by log\(^2\)-space polytime verifiers. We pose numerous questions and conjectures on \(\#\mathsf{L}\) containment and its
generalizations, that suggest venues for conditionally disproving \(\#\mathsf{P}\)-completeness. While studying which combinatorial functions are in \(\#\mathsf{P}\) provides a formal way of
(dis)proving the existence of combinatorial interpretations, the lower class \(\#\mathsf{L}\) serves as an analogue for functions computable in polynomial time.
Keywords: Counting complexity, combinatorial interpretations, logarithmic space, algebraic combinatorics, plethysm
MSC2020: 05A19, 68Q15, 05-04 (Primary); 05E10, 68R05, 11P81 (Secondary)
Algebraic Combinatorics studies objects and quantities originating in algebra, representation theory, and geometry using combinatorial tools. A typical problem that arises is
The values of the function \(X\) are the dimensions of vector spaces, and hence \(X\) outputs only non-negative integer values. Find a combinatorial interpretation for \(X\), i.e., a family of nice combinatorial objects which are counted by \(X\).
A flagship problem of this type that has been successfully resolved is the combinatorial interpretation of the Littlewood–Richardson coefficients. Yet many other quantities, like Kronecker and plethysm coefficients, remain mysterious.
The above question contains the undefined “nice combinatorial objects” and “combinatorial interpretation”. A way to formalize these concepts is to understand “combinatorial interpretation” as “being an element of the complexity class \(\#\mathsf{P}\)”, as considered in [1]. This brings computational complexity tools and provides ways to disprove the existence of combinatorial interpretations, see for example [2] and [3]. The survey [4] almost equates having a combinatorial interpretation with the membership in \(\#\mathsf{P}\), see [4], stating that these terms “usually coincide but can also differ in several special cases”. Indeed, \(\#\mathsf{P}\) by definition is the complexity class of counting [possibly exponentially many] witnesses, each verifiable in polynomial time, which does not always give aesthetically satisfying “combinatorial interpretations”. In many cases we have combinatorial functions computable in polynomial time, hence in \(\mathsf{FP}\subseteq \#\mathsf{P}\), but the emerging counting formula would just be the pre-computed integers themselves; for example the description \(\binom{n}{k} = \#\{x\in\N \mid k!\,(n-k)!\,x \leqslant n!\}\) places the binomial coefficient in \(\#\mathsf{P}\) without giving a satisfying combinatorial interpretation. It becomes fruitful to understand the lower counting complexity classes (counting complexity classes form a partially ordered set by inclusion) that important counting problems belong to. This direction has been pioneered in [5], and in [6] (where the counting problems have exponentially large input).
We study the complexity class \(\#\mathsf{L}\) of functions counting the number of accepting paths of a non-deterministic Turing machine that runs in logarithmic space. This is a subclass of \(\#\mathsf{P}\). We explicitly construct logarithmic space Turing machines to establish that the following functions are in \(\#\mathsf{L}\).
From enumerative combinatorics. Binomial and multinomial coefficients, as well as the factorial. Catalan, Narayana, Stirling, Fibonacci, and Euler numbers, and any sequence given by a 1- or 2-dimensional linear recursion. For partitions \(\lambda\) of a bounded length: the number of ballot sequences of type \(\lambda\), which also give standard and semistandard tableaux of shape \(\lambda\). The number of linear extensions of a rooted tree poset. The differences involved in the unimodality of binomial coefficients, and the log-concavity of binomial and Stirling coefficients. The number of permutations of a given cycle type, and the number of permutations of \(n\) which are involutions, the number of certain pattern avoiding permutations. The determinant of the distance matrix of a tree is even log-space computable.
From representation theory and geometry. The number of integer points in a polytope \(P\) of fixed dimension. The number of contingency tables where at least one dimension is constant. For fixed \(n\), the \(\mathrm{GL}_n\)-Littlewood–Richardson coefficients, \(\mathrm{GL}_n\)-Kostka numbers, and the product constants of monomial symmetric polynomials. In addition, one can compute in log-space the raising operator of crystals, Kashiwara’s tensor product rule, and decide whether a given element is a highest weight element of a prescribed weight.
From number theory. The partition function (which implies its non-trivial containment in \(\mathsf{FP}\)), the coefficients in \(q\) of the \(q\)-binomial and the \(q\)-multinomial. The Euler totient function, and the divisor function \(\sigma_k(n)\). Since one can perform Euclidean division in log-space and also decide the primality of a number, the divisor function \(\sigma_k(n)\) is even computable in log-space for each fixed \(k\). If for a given formula its \(p\)-adic valuation is log-space computable, then the formula is in \(\#\mathsf{L}\); this places the radical function and the factorial (again) in \(\#\mathsf{L}\), as well as the hook-length formula for the number of standard Young tableaux of shapes of unbounded length (strengthening the result from the section on enumerative combinatorics).
We then study a family of coefficients that are simultaneously \(\mathrm{GL}_2\)-plethysm coefficients and rectangular Kronecker coefficients [7], and which we call Hermite coefficients. Hinging on a combinatorial interpretation for these coefficients [8], we construct a non-deterministic \(\mathrm{poly}\)-time \(\mathrm{polylog}\)-space Turing machine that solves this problem. An even more general result is the following. See §2.5 for the precise definition of the complexity class.
Fix a constant \(C\in\N\). Let \(\mu\) be a partition of length at most \(C\). The function \[(1^{\mu_1}\,0\,1^{\mu_2}\,0\,\dots\,0\,1^{\mu_C}\,0\,1^k\,0\,1^r) \mapsto a_{\mu[k]}^{(|\mu|k-r,r)}\] is in \(\#\mathsf{TISP}(\mathrm{poly}(n),\log^2(n))\cap \mathsf{GapL}\).
We also propose open problems which complement existing conjectures related to other complexity classes.
Is the number of contingency tables of unbounded sizes \(\log^k\)-space computable for some \(k\)? If the answer is yes this would give evidence against their conjectured \(\#\mathsf{P}\)-completeness.
Is the number of skew standard Young tableaux in \(\#\mathsf{L}\)?
Are the Hermite coefficients \(a_{n[k]}^{(m+t,m)}\) in \(\#\mathsf{L}\)?
Are the coefficients of the principal specialisation of \(s_\lambda\) in \(\#\mathsf{L}\) when \(\ell(\lambda)\) is unbounded?
Are the \(\mathrm{GL}_2\)-plethysm coefficients \(a_{\mu[k]}^{(m+t,m)}\) \(\log^2\)-space computable when \(\ell(\mu)\) is unbounded?
In recent years there has been a growing interest for the interplay between complexity theory and algebraic combinatorics. One early and influential source is the Geometric Complexity Theory programme towards \(\mathsf{P}\ne\mathsf{NP}\) [9]. Mulmuley and Sohoni’s programme raises important questions about representation-theoretic constants that had already been studied since the 1930s: plethysm and Kronecker coefficients. Finding combinatorial interpretations for these constants constitute Problems 9 and 10 in Stanley’s influential list [10] of open problems in algebraic combinatorics. Motivated by the positive results for the Littlewood-Richardson coefficients, Mulmuley [1], [11] conjectured that these constants are in \(\#\mathsf{P}\), which is the complexity class of functions that count the number of accepting paths of a non-deterministic Turing machine that runs in polynomial time.
Stanley’s problem and Mulmuley’s conjecture have been subject to intense scrutiny. The simpler problem of deciding positivity of plethysm and Kronecker coefficients is shown to be \(\mathsf{NP}\)-hard in [12] and [13], hence determining their exact values is \(\#\mathsf{P}\)-hard. Plethysm and Kronecker coefficients are known to be in \(\mathsf{GapP}= \#\mathsf{P}-\#\mathsf{P}\), as first shown in [13], [14], respectively, and many other quantities are as well, see [15]. Kirillov’s 2004 conjecture about \(\#\mathsf{P}\) containment of so-called reduced Kronecker coefficients turned out to be equivalent to Stanley’s problem 10 [16]. A related representation-theoretic constant (character values squared) does not belong to \(\#\mathsf{P}\), as shown in [3], under standard complexity theoretic assumptions, which implies that there cannot be a positive combinatorial interpretation. Parallel to that Pak conjectured that the Kronecker coefficients would not be in \(\#\mathsf{P}\) [4] under standard complexity theoretic assumptions, and hence not have a nice positive combinatorial interpretation. Both plethysm and Kronecker coefficients are shown to be in a quantum analogue of \(\#\mathsf{P}\), namely \(\#\mathsf{BQP}\), in [17]–[19]. Further relationships, results and open problems on their complexity are described in [20]. While belonging to \(\#\mathsf{P}\) is an intriguing question for the plethysm and Kronecker coefficients, the \(\#\mathsf{P}\) membership question is too coarse for a large class of counting problems which trivially belong to \(\#\mathsf{P}\) but for which the combinatorial interpretations are interesting. For example, large families of Kronecker and plethysm coefficients are computable in poly-time and hence belong to \(\mathsf{FP}\subset \#\mathsf{P}\), see e.g. [21], yet there is no satisfactory positive combinatorial interpretation beyond computing the final answer itself. Hence, we study the containment in the counting class \(\#\mathsf{L}\subseteq \mathsf{FP}\).
The paper is organised as follows. In §2 we review the main complexity theory concepts that we use throughout. We discuss combinatorial functions in \(\#\mathsf{L}\) in §3, representation-theoretic functions in §4, and number-theoretic functions in §5. We finish by discussing \(\mathrm{GL}_2\)-plethysm coefficients and rectangular Kronecker coefficients in §6. We define the combinatorial objects as they arise, referring to [22], [23] for the necessary background in enumerative and algebraic combinatorics. We also state open problems and remarks on the various topics within their sections.
We primarily work over the alphabet \(\Sigma=\{0,1\}\) and languages \(L\) are subsets of finite length strings, i.e., \(L\subseteq\Sigma^*\). Following [24], define \[\mathsf{P}= \bigcup_{c\geqslant 1}\mathsf{DTIME}(n^c) \quad \text{and} \quad \mathsf{NP}= \bigcup_{c\geqslant 1}\mathsf{NTIME}(n^c)\] as the classes of decision problems solved by deterministic and non-deterministic poly-time Turing machines, respectively. In this paper, all nondeterministic Turing machines are required to halt on every input after a finite number of steps. An alternative and useful description of \(\mathsf{NP}\) can be given as follows: the class \(\mathsf{NP}\) is the class of languages \(L\) for which there is a polynomial \(p\) and a poly-time deterministic Turing machine \(M\) satisfying \[x\in L \iff \exists w\in\Sigma^{p(|x|)} : M(x,w) = \mathsf{yes}.\] We say \(M\) is a verifier \(\mathsf{NP}\) machine to distinguish it from the non-deterministic \(\mathsf{NP}\) machines considered above.
The class \(\mathsf{coNP}\) is the class of languages \(L\) for which there is a polynomial \(p\) and a poly-time deterministic Turing machine \(M\) satisfying \[x\not\in L \iff \exists w\in\Sigma^{p(|x|)} : M(x,w) = \mathsf{no}.\] It is a major open problem to show that \(\mathsf{NP}\ne \mathsf{coNP}\).
Following [24], define \[\mathsf{L}= \mathsf{SPACE}(\log(n)) \quad \text{and} \quad \mathsf{NL}= \mathsf{NSPACE}(\log(n)).\] To use a verifier approach for defining \(\mathsf{NL}\) one has to be careful (see [24], the discussion before [25], or [26]), see Figure 1.
The class \(\mathsf{NL}\) is the class of languages \(L\) for which there is a polynomial \(p\) and a log-space deterministic Turing machine \(M\) with an additional read-once, left-to-right input tape (dedicated to the witness) satisfying \[x\in L \iff \exists w\in\Sigma^{p(|x|)} : M(x,w) = \mathsf{yes}.\]
One can define \(\mathsf{coNL}\) in a similar manner. A groundbreaking result of Immerman [27] and Szlepcsényi [28] is that \(\mathsf{NL}= \mathsf{coNL}\).
The machines considered in Theorem [thm:NL32machine] are called verifier \(\mathsf{NL}\) machines. The additional input tape is called the witness tape. We illustrate a verifier \(\mathsf{NL}\) machine in Figure 1.
The “read-once, left-to-right” restriction on the witness tape of a verifier \(\mathsf{NL}\) machine plays an important role in Theorem [thm:NL32machine]. A verifier \(\mathsf{NP}\) machine can simply copy the witness onto the work tape, since the witness is polynomial in size. Once in the work tape, the witness can be read multiple times. Hence a verifier \(\mathsf{NP}\) machine with a read-once, left-to-right witness tape is simply a verifier \(\mathsf{NP}\) machine. However, these reductions are outside of the capabilities of a verifier \(\mathsf{NL}\) machine. If this “read-once, left-to-right” restriction is removed from the definition of verifier \(\mathsf{NL}\) machines, then the computational model is much more powerful: we recover the notion of a verifier \(\mathsf{NP}\) machine since one can record the successive states of the machine tape in the witness itself.
The content of the work tape is a binary string, which we call a binary-encoded counter. With this notion, all verifier \(\mathsf{NL}\)-machines can be assumed without loss of generality to run an algorithm of the form of Algorithm 2.
Nevertheless, there are three ways of relaxing the definition of a verifier \(\mathsf{NL}\) machine which prove to be very useful in practice. Firstly, we can suppose the alphabet of symbols \(\Sigma\) which can be written in the work and the witness tapes to be any alphabet of a fixed finite size \(s\). Any letter of this new alphabet can be simulated with \(\log_2(s)\) bits in the alphabet \(\{0,1\}\). If the machine \(M_\Sigma\) uses \(O(\log(n))\) space, then the simulated machine \(M'_{\{0,1\}}\) uses \(\log_2(s)\cdot O(\log(n))=O(\log(n))\) space.
Secondly, we can suppose that a verifier \(\mathsf{NL}\) machine has a constant number \(c\) of work tapes (as opposed to just one). One can simulate a machine \(M_c\) with a constant amount of log-space tapes with a machine \(M'_1\) that has just one tape, by using an alphabet that has \(|\Sigma|^c\) times as many letters, where \(\Sigma\) is the alphabet of symbols that each of the \(c\) work tapes uses. The entries of the work tape can thus be interpreted as \(c\)-tuples of letters of the original alphabet. That is, we represent the \(c\) tapes of \(M_c\) not next to each other, but “on top of each other” [29]. To simulate the positions of the \(c\) pointers, one increases the alphabet by another factor of \(2^c\), so that each cell contains the information about which simulated machine heads are currently at this position.
Thirdly, we can suppose that the machine \(M_C\) can read the witness tape a constant amount \(C\) of times, left-to-right [30]. To simulate this with a verifier \(\mathsf{NL}\) machine \(M'_1\) with a read-once witness tape, start by guessing the state of the work tape after the 1st, 2nd, …, \((C-1)\)st pass and store the guesses. Then, run \(C\) parallel computations in \(C\) different work tapes, all the while reading the witness once. Finally, check that the state of the \(i\)th work tape after the computation matches the predicted state that launched the \((i+1)\)st work tape.
In Figure 3 we illustrate this more general version of verifier \(\mathsf{NL}\) machines. See Algorithm 4 for the corresponding pseudo-code for this machine. All of the algorithms of this paper will be of the form of Algorithm 4 with only one exception in §6.
Most problems in algebraic combinatorics are counting problems. The study of the complexity of counting was initiated by Valiant in [31] and pioneered in algebraic combinatorics by Mulmuley [1].
The class \(\mathsf{FP}\) is the class of functions \(f:\Sigma^*\to\Sigma^*\) that are computable by a poly-time deterministic Turing machine with an output tape. The class \(\#\mathsf{P}\) is the class of functions counting the number of accepting paths of a non-deterministic \(\mathsf{NP}\) machine. The class \(\mathsf{FP}_{\geqslant 0}\) is the class of poly-time computable functions with non-negative output, namely \(\mathsf{FP}\cap\{f:\Sigma^*\to\N_0\}\). The class \(\mathsf{GapP}=\#\mathsf{P}- \#\mathsf{P}\) is the class of functions which can be expressed as the difference between two \(\#\mathsf{P}\) functions.
Equivalently, \(\#\mathsf{P}\) is the class of functions such that there exists a polynomial \(p\) and a verifier \(\mathsf{NP}\) machine \(M\) such that \[f(x) = \#\{ w\in\Sigma^{p(|x|)} \mid M(x,w) = \mathsf{yes} \}.\]
The class \(\mathsf{FL}\) is the class of functions \(f:\Sigma^*\to\Sigma^*\) that are computable by a log-space deterministic Turing machine with a write-only output tape. The class \(\#\mathsf{L}\) is the class of functions counting the number of accepting paths of a non-deterministic \(\mathsf{NL}\) machine. The class \(\mathsf{FL}_{\geqslant 0}\) is defined as \(\mathsf{FL}\cap\{f:\Sigma^*\to\N_0\}\). The class \(\mathsf{GapL}\) is \(\#\mathsf{L}- \#\mathsf{L}\).
The problem stCon for source-sink connectivity in directed graphs is \(\#\mathsf{L}\)-complete. The problem of computing the determinant of an integer matrix is complete for \(\mathsf{GapL}\), see [32], where containment in \(\mathsf{GapL}\) can be proved for example via a generalization of the Cayley–Hamilton theorem [33], and hardness follows from Valiant’s simulation of algebraic branching programs via determinants [34].
As an equivalent definition, \(\#\mathsf{L}\) is the class of functions such that there exists a polynomial \(p\) and a verifier \(\mathsf{NL}\) machine \(M\) such that \[f(x) = \#\{ w\in\Sigma^{p(|x|)} \mid M(x,w) = \mathsf{yes} \}.\] Recall that there exists a read-once constraint on the witness tape of verifier \(\mathsf{NL}\) machines. This notion of \(\#\mathsf{L}\) coincides with the one studied in [26], [35] and included in [36], but beware: it does not come from an application of the \(\#\) operators given in [25] (which are not well suited for subpolynomial classes, see also [25]).
In this section we illustrate some well-known facts about log-space reductions. Following [29], a language \(L\) is reducible to \(L'\) if there is a function \(R:\Sigma^*\to\Sigma^*\) computable by a deterministic log-space Turing machine with a write-only output tape and such that \[x\in L \iff R(x)\in L'.\] We call \(R\) a log-space reduction and the machine that computes \(R\) a log-space transducer.
The classes \(\mathsf{L}\) and \(\mathsf{NL}\) are closed under log-space reduction [29], meaning that if \(L\) is reducible to a language \(L'\) in \(\mathsf{L}\) (resp. in \(\mathsf{NL}\)) then also \(L\) is in \(\mathsf{L}\) (resp. in \(\mathsf{NL}\)). We can illustrate this reduction as follows:
Figure 5:
.
There is one subtlety to point out: the input of tape non-deterministic machine might not fit in log-space, in which case the whole deterministic machine is run once for each bit of the input tape of the non-deterministic machine. Using the same idea, one can compose several log-space machines into a log-space machine. In particular, \(\mathsf{FL}\) is closed under composition:
Figure 6:
.
In this way we can show that \(\mathsf{FL}_{\geqslant 0}\subseteq\#\mathsf{L}\). Indeed, the following picture shows how to create a verifier \(\mathsf{NL}\) machine starting from a \(\mathsf{FL}\) machine \(M_1\) (in yellow). We do this by composing \(M_1\) with the verifier \(\mathsf{NL}\) machine \(M_2\) that takes an input \(x\) and a witness is a number \(k\), and outputs whether \(0\leqslant k < M_2(x)\) or not. \[\tag{1} \begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/sopjubwa.png}\tag{2}\end{figure}\scalebox{1.3}{\leftrightsquigarrow}\begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/elbxzywp.png}\tag{3}\end{figure}\]
In practice, we often want to compose more than one machine, so we would like a framework that allows for such compositions. The following very general result applies to a wide range of problems, specially useful for the analysis of combinatorial formulas.
Let \(f : \Sigma^*\to\N_0\) be a \(\#\mathsf{L}\) function. Let \(g : \Sigma^*\times\N_0 \to \Sigma^*\) be an \(\mathsf{FL}\) function. Let \(p : \Sigma^*\to\N_0\) be an \(\mathsf{FL}_{\geqslant 0}\) function whose output is at most polynomial in the size of the input. Then the function \[F : x \mapsto \prod_{i=1}^{p(x)} f(g(x,i))\] is in \(\#\mathsf{L}\).
Proof. We construct a verifier \(\mathsf{NL}\) machine for \(F\) based on the verifier \(\mathsf{NL}\) machine for \(f\). The witness is a concatenation of the witnesses for \(f(g(x,1)), f(g(x,2)), \ldots, f(g(x,p(x)))\), which we call \(w^1, w^2, \ldots, w^{p(x)}\).
Begin by composing with an \(\mathsf{FL}\) machine as in 1 to compute \(p(x)\) and store its output in a counter \(\mathtt{I}\). We can store this in binary, since \(\log(\mathrm{poly}(|x|)) = O(\log(|x|))\).
Initialise a counter \(\mathtt{i}=1\). While \(\mathtt{i} \leqslant\mathtt{I}\), compose with an \(\mathsf{FL}\) machine to compute \(g(x,\mathtt{i})\), then check the validity of \(w^{\mathtt{i}}\), and finally increase \(\mathtt{i}\) by \(1\). ◻
A very similar idea as in the proof of Theorem [thm:product] can be applied to more complicated functions than the product.
Let \(f : \Sigma^*\to\N_0\) be a \(\#\mathsf{L}\) function. Let \(g : \Sigma^*\times\N\times\N \to \Sigma^*\) be an \(\mathsf{FL}\) function. Let \(p : \Sigma^*\to\N_0\) be an \(\mathsf{FL}_{\geqslant 0}\) function whose output is at most polynomial in the size of the input. Then the function \[F : x \mapsto \det\begin{pmatrix} f(g(x,1,1)) & \cdots & f(g(x,1,p(x))) \\ \vdots&\ddots&\vdots \\ f(g(x,p(x),1)) & \cdots & f(g(x,p(x),p(x))) \end{pmatrix}\] is in \(\mathsf{GapL}\).
Proof. Let \({\det}_d\) be the polynomial \[{\det}_d \begin{pmatrix} y_{1,1} & \cdots & y_{1,d} \\ \vdots & \ddots & \vdots \\ y_{d,1} & \cdots & y_{d,d} \end{pmatrix} = \sum_{\pi\in S_d} \sgn(\pi) \prod_{i=1}^d y_{i,\pi(i)}.\] Define \(y_\bot := 0\). We crucially use the non-trivial fact (one can deduce this from the references in [32], see also the recent [33]) which is explicitly elaborated in [37] that there exist polynomials \({\det}_{d,+}(\mathbf{y})\) and \({\det}_{d,-}(\mathbf{y})\) with \({\det}_{d}={\det}_{d,+}-{\det}_{d,-}\) and functions \[t_+:\N\times\N\times\N\times\N \to (\N\times\N)\cup\{\bot\}, \qquad t_-:\N\times\N\times\N\times\N \to (\N\times\N)\cup\{\bot\}\] in \(\mathsf{FL}\) such that \[{\det}_{n,+}\begin{pmatrix} y_{1,1} & \cdots & y_{1,d} \\ \vdots & \ddots & \vdots \\ y_{d,1} & \cdots & y_{d,d} \end{pmatrix} = \sum_{\substack{1\leqslant q_0 \leqslant 2d\\1\leqslant q_1,\ldots,q_{d-1}\leqslant 2d^2}} \, \prod_{i=1}^d y_{t_+(d,i,q_{i-1},q_{i})}\] and \[{\det}_{d,-}\begin{pmatrix} y_{1,1} & \cdots & y_{1,d} \\ \vdots & \ddots & \vdots \\ y_{d,1} & \cdots & y_{d,d} \end{pmatrix} = \sum_{\substack{1\leqslant q_0 \leqslant 2d\\1\leqslant q_1,\ldots,q_{d-1}\leqslant 2d^2}} \, \prod_{i=1}^d y_{t_-(d,i,q_{i-1},q_{i})}.\] We discuss the witnesses for \({\det}_{d,+}\), where the witnesses for \({\det}_{d,-}\) are analogous. Let \(n:=|x|\). Let \(d:=p(x) \in \mathrm{poly}(n)\) and \(q_d:=1\). A witness is given by a list \((q_0,q_1,w^1,q_2,w^2,\ldots,q_d,w^d)\), where \(w^i\) is a witness for \(f(g(x,t_+(d,i,q_{i-1},q_i)))\). When traversing the witness, we have two counters in which we always store \(q_{i-1}\) and \(q_i\), which can be done in space \(O(\log(n))\), because \(q_i\leqslant 2d^2\in\mathrm{poly}(n)\). The witness \(w^i\) is then verified via composition as in 1 . ◻
One can take care of the signs and prove Theorem [thm:detofsharpL] for \(f \in \mathsf{GapL}\) instead of \(\#\mathsf{L}\) with an analogous proof, but we do not need it in this paper.
Let \(\#\mathsf{TISP}(f(n),g(n))\) denote the of functions counting the number of accepting paths of an \(\mathsf{NSPACE}(g(n))\) machine for which there exists a constant \(c\) such that the machine takes at most \(c\cdot f(n)\) steps on each computation path (TISP stands for TIme and SPace).
Let \(\mathrm{poly}(n)=n^{O(1)}\) and \(\mathrm{qpoly}(n)=n^{\mathrm{poly}(\log(n))}\), and let \(\mathsf{FQP}\) denote the set of functions computable in \(\mathrm{qpoly}(n)\) time. We will discuss the following counting complexity classes: \[\begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/kltomdyq.png}\label{nfhkgrvi}\end{figure}\tag{4}\]
A major open question is whether the containment \(\#\mathsf{L}\subseteq \#\mathsf{P}\) is strict.
If \(\#\mathsf{L}= \#\mathsf{P}\) then \(\mathsf{P}=\mathsf{NP}\).
Proof. If \(\#\mathsf{L}\subseteq \mathsf{FP}_{\geqslant 0} \subseteq \#\mathsf{P}= \#\mathsf{L}\) then \(\mathsf{FP}_{\geqslant 0}=\#\mathsf{P}\). The class \(\mathsf{P}\) can be identified with the subclass of \(\mathsf{FP}_{\geqslant 0}\) of functions with a 1-bit output. Given a function \(f\) in \(\#\mathsf{P}\), the decision problem \(f>^?0\) is at most as hard as computing \(f\) itself, hence we may write \(\mathsf{NP}\subseteq\#\mathsf{P}=\mathsf{FP}_{\geqslant 0}\). So \(\mathsf{NP}\) is a subset of \(\mathsf{FP}_{\geqslant 0}\) composed of functions with a \(1\)-bit output, that is \(\mathsf{NP}\subseteq \mathsf{P}\). ◻
We have \(\#\mathsf{L}\subseteq \mathsf{FP}\), but such a containment might not hold for \(\#\mathsf{TISP}(-,\log^2(n))\), as the following proposition shows.
If \(\#\mathsf{TISP}(\mathrm{poly}(n),\log^2(n))\subseteq \mathsf{FP}\), then #3Sat can be solved in time \(2^{O(\sqrt{n})}\). This violates the exponential time hypothesis (ETH).
Proof. Let \(\ast^a\) denote a sequence of \(a\) many arbitrary symbols. Consider the following counting function #padded3Sat. \[\mathrm{\small \#padded3Sat}(\varphi,\ast^{2^{\sqrt{n}}-|\varphi|-1}) = \mathrm{\small \#3Sat}(\varphi),\] where \(\varphi\) denotes the binary encoding of a Boolean formula on \(n\) variables and \(n\) clauses. The input length is \(N := 2^{\sqrt{n}}\), and a witness is a string of \(n=(\log(N))^2\) many bits that represents a truth assignment. Checking a witness can be done by copying it to the work tape and then going over all clauses in \(\varphi\). This can be done in polynomial time. Hence, \(\mathrm{\small \#padded3Sat}\in\#\mathsf{TISP}(\mathrm{poly}(n),\log^2(n))\). By assumption we have \(\#\mathsf{TISP}(\mathrm{poly}(n),\log^2(n))\subseteq\mathsf{FP}\), so there exists \(c\) such that \(\mathrm{\small \#padded3Sat}\) can be solved in time \(N^c = 2^{c\sqrt{n}}\). Hence, also \(\mathrm{\small \#3Sat}\) can be solved in time \(2^{c\sqrt{n}}\), using the same algorithm. ◻
For Kronecker and plethysm coefficients the problem whether they are non-zero is already \(\mathsf{NP}\)-hard (even if the input is encoded in unary) [12], [13], hence if their computation is in \(\mathsf{GapL}\) or \(\#\mathsf{L}\), which are subsets of \(\mathsf{FP}\), it follows that \(\mathsf{P}=\mathsf{NP}\). In our Theorem [thm:GL232in32L2], we study important subfamilies of inputs where the coefficients are in \(\mathsf{GapL}\).
To separate computational classes, we can check what is the largest growing function computable in a given class.
If \(f\in\#\mathsf{L}\) then \(\exists c : f \in O(2^{n^c})\).
Proof. An \(\mathsf{NL}\) machine with \(c\log(n)\) space in the work tape can have at most \(2^{c\log(n)} = n^c\) many configurations. Since the machine is not allowed to loop endlessly, the whole configuration graph must have no directed cycles. Since the non-deterministic guesses of non-deterministic Turing machines are in binary, a configuration can only lead to one of two possible configurations.
We claim that the graph with the most possible source-sink paths on \(N\) vertices and with the above contraints is the following: \[\bullet \rightrightarrows \bullet \rightrightarrows \bullet \cdots \bullet \rightrightarrows \bullet\] Indeed, suppose by induction that it is true for graphs on \(N-1\) vertices. Note that it has \(2^{N-1}\) source-sink paths. Consider a graph on \(N\) vertices now. Let \(s\) be the source and \(a, b\) be its children; let \(t\) be the sink. By induction hypothesis, the number of \(a\)-\(t\) paths is at most \(2^{N-1}\), and the number of \(b\)-\(t\) too by a similar argument. Since there are no cycles, there are at most \(2^N\) many \(s\)-\(t\) paths. The above graph realizes this maximum.
Since \(\#\mathsf{L}\) is the class of functions that count paths in the configuration graph, this count is bounded above by \(2^{n^c}\). ◻
If \(f\in\mathsf{FL}\) then \(f \in O(2^{n^c})\). Moreover, there exists \(f\in\mathsf{FL}\) such that \(f\in\Theta(2^{n^c})\).
Proof. The upper bound is given by the previous theorem. The existence is given by the following construction. Consider the machine that takes as input \(n\), computes and stores \(n^c\) in a counter \(\mathtt{a}\) (occupying \(c\log(n)\) bits). Then outputs a single \(1\), and while \(\mathtt{a} > 0\) it outputs a \(0\) then decreases \(\mathtt{a}\) by \(1\). ◻
The following lemma will be useful.
The functions \((x,y)\mapsto x+y\) and \((x,y)\mapsto xy\) are in \(\mathsf{FL}\), where the input and output are encoded in binary.
Proof. The elementary school algorithm suffices, with a minor modification for the multiplication: Instead of adding up all shifted products of a factor with the digits of the other factor, an additions is performed after every product of a digit with a factor. ◻
We begin by considering a problem in greater depth, in order to illustrate the remaining proofs of this section.
The function \((1^n \, 0 \, 1^k)\mapsto \binom{n}{k}\) is in \(\#\mathsf{L}\).
In the definition of the function, \(1^n\) denotes the string \(11\!\stackrel{n}{\ldots}\!1\), that is, a sequence of \(n\) many 1s. Any string which is not of the form \(11\!\stackrel{n}{\ldots}\!1011\!\stackrel{k}{\ldots}\!1\) is assumed to be mapped to \(0\) by the function.
Proof. The binomial coefficient \(\binom{n}{k}\) counts the number of \(k\)-subsets of \([n]\). Encode a \(k\)-subset \(S\) of \([n]\) as a word \(w_1w_2\ldots w_n\) where \(w_i = 1\) if \(i\in S\) and \(0\) otherwise. We construct a verifier \(\mathsf{NL}\) machine with \(2\) binary-encoded counters that takes as input \((1^n \, 0 \, 1^k)\) and a read-once left-to-right witness \(w\) as a \(\{0,1\}\)-string, and accepts if and only if \(w\) is encoding a \(k\)-subset of \(n\).
The first counter \(\mathtt{a}\) is allocated \(\log(n)\) space, and the second counter \(\mathtt{b}\) is allocated \(\log(k)\) space. Note that both are in \(O(\log(n+k+1))\)-space.
We begin by reading \(1^n\) and \(1^k\) and storing their values in the two counters \(\mathtt{a}\) and \(\mathtt{b}\). We then read \(w\) once left-to-right. For each \(w_i\), the first counter always decreases by one, and the second counter decreases by one only if \(w_i = 1\). After reading the whole witness \(w\), the machine accepts if and only if both counters are at \(0\). ◻
The pseudo-code of the above machine is included in Algorithm 7. This verifier \(\mathsf{NL}\) machine has been implemented in Ugarte’s Turing Machine Simulator [38] and is available at https://turingmachinesimulator.com/shared/ubutbvatkh.
By sequentially iterating this same basic algorithm, we can construct a verifier \(\mathsf{NL}\) machine for multinomial coefficients.
The function \((1^n\, 0\, 1^{a_1}\, 0\,\dots\, 0\, 1^{a_k}) \mapsto \binom{n}{a_1,\ldots,a_k}\) is in \(\#\mathsf{L}\). Here \(k\) is not assumed to be fixed.
Proof. We use the formula \(\binom{n}{a_1,\ldots,a_k}= \binom{n}{a_1} \binom{n-a_1}{a_2} \cdots = \binom{m_1}{a_1}\binom{m_2}{a_2}\cdots\) to reduce the problem to the setting of Theorem [thm:product].
The function \(f : (1^n\,0\,1^k) \mapsto \binom{n}{k}\) is in \(\#\mathsf{L}\) by Theorem [thm:binomial]. Next, we claim the function \[g : (x \,0\,0\, i) \mapsto (1^{n-a_1-\cdots-a_{i-1}}\,0\,1^{a_i})\] is in \(\mathsf{FL}\), where \(x=(1^n\, 0\, 1^{a_1}\, 0\,\dots\, 0\, 1^{a_k})\), \(k\leqslant n\), and \(1\leqslant i\leqslant k\) is encoded in binary. Initialise binary-encoded counters \(\mathtt{A} = 2n\) and \(\mathtt{b} = i\). Read the input \(x\) from the left until we read a \(0\), then decrease \(\mathtt{b}\) by \(1\) and keep reading. When \(\mathtt{b} = 0\) stop; we have found the \(i\)th \(0\) in \(x\). Now start reading from the current position and to the left; every time we find a \(1\) decrease \(\mathtt{A}\) by \(1\). When you reach the beginning of the input tape we have \(\mathtt{A}=n-a_1-\cdots-a_{i-1}\). Write a \(1\) in the output tape, decrease \(\mathtt{A}\) by \(1\), repeat until \(\mathtt{A}=0\). Then write a \(0\) in the output. Use the same technique to find the \(i\)th \(0\) of \(x\) again, and read to the right to set \(\mathtt{A} \leftarrow a_i\). Output \(\mathtt{A}\) in unary again to finish.
By similar considerations, the function \(p : x\mapsto k\) (the number of \(0\)s in \(x\), written in binary) is in \(\mathsf{FL}\) and its output is \(O(\log(|x|))\) in size. Hence we are in the hypotheses of Theorem [thm:product]. ◻
The machine constructed for binomial coefficients is part of a very simple family of combinatorial log-space machines. We include three more examples.
The function \((1^n) \mapsto \frac{1}{n+1}\binom{2n}{n}\) is in \(\#\mathsf{L}\).
Proof. Catalan numbers count the number of Dyck paths of length \(2n\). We construct an algorithm of the type of Algorithm 7. Encode a Dyck path as a binary string by interpreting \(1\) as an up-step and \(0\) as a down-step. Initialise two binary-encoded counters: \(\mathtt{a}=2n\) will check the length of the string and \(\mathtt{b}=0\) will check that the Dyck path stays at non-negative height. For each bit \(w_i\) in the witness: if \(w_i=1\) then decrease \(\mathtt{a}\) by one, increase \(\mathtt{b}\) by one; if \(w_i=0\) then decrease both counters by one. Then check that both counters are at least \(0\).
At the end, check that \(\mathtt{a}=0=\mathtt{b}\). ◻
The machine for Catalan numbers is generalised in Theorem [thm:ballots].
The function \((1^n\,0\,1^k) \mapsto \frac{1}{n}\binom{n}{k}\binom{n}{k-1}\) is in \(\#\mathsf{L}\).
Proof. The Narayana number \(N(n,k)\) counts the number of Dyck paths of length \(2n\) with exactly \(k\) peaks. We take the algorithm from Theorem [thm:catalan] and make a small modifications to it. We add one more binary-encoded counter \(\mathtt{c}\) initialised at \(k\), which will count the number of peaks. We also add a \(1\)-bit counter \(\mathtt{d}\) to detect these peaks.
In the main loop, if \(w_i=1\) then set \(\mathtt{d}=1\); if \(w_i=0\) and \(\mathtt{d}=0\) then do nothing; if \(w_i=0\) and \(\mathtt{d}=1\) then set \(\mathtt{d}=0\) and decrease \(\mathtt{c}\) by one.
At the end, check also that \(\mathtt{c}=0=\mathtt{d}\). ◻
The function \((1^n) \mapsto F_n\) is in \(\#\mathsf{L}\).
Proof. The Fibonacci number \(F_n\), with \(F_1=1,F_2=2\), counts domino sequences of \(n\): the number of \(\{1,2\}\)-strings which sum to \(n\). If each \(1\) and \(2\) is written in binary, then a domino sequence is a \(\{0,1\}\)-string of length \(n\) such that each \(0\) is preceded by a \(1\); this will be our witness. We construct an algorithm of the form of Algorithm 4.
Initialise a binary-encoded counter \(\mathtt{a}=n\) and a \(1\)-bit counter \(\mathtt{b}=0\) which we use to remember the last bit encountered. For each \(w_i\), decrease \(\mathtt{a}\) by one. If \(w_i=1\) then set \(\mathtt{b}=1\). If \(w_i=0\) then check \(\mathtt{b}=1\) (otherwise reject) and set \(\mathtt{b}=0\).
At the end, accept if \(\mathtt{a}=0\), otherwise reject. ◻
The machine for Fibonacci numbers is a special case of the following machine.
Let \(A(1), A(2), \ldots\) be a sequence of non-negative integers satisfying a linear recurrence \[A(n)= \sum_{i=1}^C D(n,i) A({n-i})\] with a constant number \(C\) of terms and whose coefficients \(D(n,i)\) are non-negative integers, of \(\mathrm{poly}(n)\) size, and such that \((1^n\,0\,1^i)\mapsto D(n,i)\) is in \(\mathsf{FL}_{\geqslant 0}\). Then the function \((1^n) \mapsto A(n)\) is in \(\#\mathsf{L}\). Here \(A(1), \ldots, A(C)\) are given constants.
Proof. Consider the directed multigraph whose vertices are the non-negative integers and with
\(D(k,i)\) arcs from \(k\) to \(k-i\) for each \(k>C\) and \(1\leqslant i\leqslant C\),
\(A(k)\) arcs from \(k\) to \(0\) for each \(1\leqslant k \leqslant C\).
Then \(\sum_{i=1}^C D(n,i) A({n-i}) = A(n)\) counts the number of paths from \(n\) to \(0\). For instance, the following is the graph associated to the Fibonacci numbers \(\{F_n\}_{n\geqslant 1}\), where the base cases are \(n=1\) and \(n=2\) for consistency: \[\begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/zepqjfiw.png}\label{tbzqeuiy}\end{figure}\tag{5}\]
A path \((p_0 = n, p_1, p_2, \ldots, p_\ell, 0)\) from \(n\) to \(0\) can be encoded with a tuple of numbers \[i_1, d_1, i_2, d_2, \ldots, i_\ell, d_\ell, a\] such that the \(1\leqslant i_j \leqslant C\) encode the jump sizes from a given node \(p_{j-1}\) of the path to the next node \(p_j = p_{j-1}-i_j\), the \(1 \leqslant d_j \leqslant D(p_{j-1},i_j)\) choose which of the arcs to use for this one step, and \(1\leqslant a\leqslant A(p_{\ell})\) chooses which of the arcs to take from \(p_{\ell}\) to \(0\). In the case of Fibonacci numbers we have \(d_j=1\) always, and the tuple of the \(i_j\in\{1,2\}\) is a domino sequence.
A sequence encodes a valid path if and only if \[\begin{cases} 1\leqslant i_j \leqslant C & \text{for all~}1\leqslant j\leqslant\ell,\\ 1\leqslant d_j \leqslant D(p_{j-1},i_j) & \text{for all~}1\leqslant j\leqslant\ell,\\ 1\leqslant a\leqslant A(p_{\ell}),\\ 1 \leqslant p_\ell \leqslant C < p_{\ell-1}. \end{cases}\] Note that these properties can be checked sequentially: first check the inequalities for \(j=1\), then for \(j=2\), etc. Two counters can be used to keep track of \(p_{j-1}\) and \(p_j = p_{j-1} - i_j\) at any given time. The parameters \(C\) and \(A(1),\ldots,A(C)\) are constants; the parameters \(D(k,i)\) are \(\mathrm{poly}(k)\) size (and so in particular \(\mathrm{poly}(n)\) size) and computable in \(O(\log(k+i)) = O(\log(n))\) space. Therefore all of these properties can be checked in log-space using an algorithm like the one in Algorithm 4. ◻
The function \((1^n) \mapsto n!\) is in \(\#\mathsf{L}\).
First proof of Corollary [cor:factorial]. We have \(n! = n\cdot(n-1)!\) and thus it follows from the previous theorem. ◻
Second proof of Corollary [cor:factorial]. The factorial is in the hypotheses of Theorem [thm:product], where \(f = p : (1^n) \mapsto n\) is in \(\mathsf{FL}_{\geqslant 0}\) and poly-size, and \(g : (1^n\,0\,1^i) \mapsto i\) in \(\mathsf{FL}\). ◻
In the first proof of Corollary [cor:factorial], the graph for \(n!\) is the following: \[\begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/rmbczkiw.png}\label{eutwckld}\end{figure}\tag{6}\] The witness that one constructs is a Lehmer code, namely a list \((a_1, a_2, \ldots, a_n)\) such that \(1\leqslant a_i \leqslant i\) for all \(i\).
In the second proof, one constructs the same witness.
The above recursion only applies to sequences. We can show a similar result for for \(2\)-dimensional or higher dimensional recursions. The quintessential example are the binomial coefficients, which are subject to the Pascal identity \(\binom{n}{k} = \binom{n-1}{k} + \binom{n-1}{k-1}\). The binomial coefficients are in \(\#\mathsf{L}\) by Theorem [thm:binomial].
Let \(A(1,1), A(1,2), A(2,1), \ldots\) be a 2-dimensional array of non-negative integers satisfying a linear recurrence \[A(n,k) = \sum_{\ell=1}^C D(n,k,i_\ell,j_\ell) A(n-i_\ell,k-j_\ell)\] for some fixed set of \(C\) pairs \((i_1,j_1), \ldots, (i_C,j_C)\) such that \((n-i_\ell,k-j_\ell)<_{\mathrm{lex}}(n,k)\) for all \(n,k,\) and \(\ell\). Suppose that the coefficients \(D(n,k,i,j)\) are positive integers of \(\mathrm{poly}(n+k)\) size and the function \((1^n\,0\,1^k\,0\,1^i\,0\,1^j)\mapsto D(n,k,i,j)\) is in \(\mathsf{FL}_{\geqslant 0}\). Then the function \[(1^n\,0\,1^k) \mapsto A(n,k)\] is in \(\#\mathsf{L}\). Here, the set of base cases \(\{A(x,y)\mid (x,y)\in B\}\) is given and its elements are constants.
Proof. The witness is a sequence \((n_0,k_0,d_0),(n_1,k_1,d_1),\ldots,(n_m,k_m,d_m)\), where the numbers \(n_i,k_i,d_i\) are encoded in binary. They are subject to \[\begin{cases} (n_0,k_0) = (n,k)\\ \exists \ell=\ell(s) : (n_s,k_s) = (n_{s-1}-i_\ell, k_{s-1}-j_\ell) &\text{for all}~1\leqslant s < m,\\ 1\leqslant d_{s-1} \leqslant D(n_{s-1},k_{s-1},i_{\ell(s)},j_{\ell(s)})&\text{for all}~1\leqslant s < m,\\ (n_m,k_m)\in B,\\ 1\leqslant d_m \leqslant A(n_m,k_m). \end{cases}\]
We keep 4 main counters \(\mathtt{a},\mathtt{b},\mathtt{c},\mathtt{d}\). Initialise \((\mathtt{a},\mathtt{b}) \leftarrow (n_0, k_0)\) and check that they are equal to \(n\) and \(k\) respectively. In the \(s\)th step, the counters \((\mathtt{a},\mathtt{b})\) store \((n_{s-1}, k_{s-1})\) and we read \((\mathtt{c},\mathtt{d}) \leftarrow (n_s, k_s)\). Check the local validity of the witness: for \(\ell=1,\ldots,C\) check if \((\mathtt{c},\mathtt{d}) = (\mathtt{a} - i_\ell, \mathtt{b} - j_\ell)\). If all checks fail, then reject the witness. If on the contrary a pair \((i_\ell,j_\ell)\) is found, compute and store \(\mathtt{D}\leftarrow D(n,k,i_\ell,j_\ell)\) and check that \(1\leqslant d_{s-1}\leqslant\mathtt{D}\). If \((\mathtt{c},\mathtt{d})\in B\) is a base case, then check \(1\leqslant d_s \leqslant A(\mathtt{c},\mathtt{d})\) and that this is the last entry of the witness. Otherwise reassign \((\mathtt{a}, \mathtt{b}) \leftarrow (\mathtt{c}, \mathtt{d})\) and repeat. ◻
The above theorem places many more well-known functions in \(\#\mathsf{L}\). We highlight two that are of interest later in the paper.
The functions sending \((1^n\,0\,1^k)\) to the Stirling numbers of the first type \(c(n,k)\) and second type \(S(n,k)\) are both in \(\#\mathsf{L}\).
Proof. They are subject to the \(2\)-dimensional recursions \[c(n+1,k) = n\, c(n,k) + c(n,k-1) \quad\text{and}\quad S(n+1,k) = k\, S(n,k) + S(n,k-1),\] and thus the result follows from Theorem [thm:2-dim]. ◻
The witnesses obtained for the Stirling numbers are classical combinatorial interpretations. On the one hand, by [39], we can express the Stirling numbers of the first kind as the specialisation of some elementary symmetric polynomial, \(c(n,k) = e_{n-k}(1,2,\ldots,n-1)\). Hence Stirling numbers of the first kind count sequences \[T_1, a_1, T_2, a_2, \ldots, T_{n-k}, a_{n-k}\] such that \(0 < T_1 < T_2 < \cdots < T_{n-k} < n\) and \(1\leqslant a_i \leqslant T_i\) for all \(i\).
On the other hand, Corollary [cor:stirling] implies that \(c(n,k)\) counts sequences \[n, k_0, d_0, n-1, k_1, d_1, n-2, k_2, d_2,\ldots\] where \(n-s\geqslant k_s\geqslant 1\), we have \(k_{s+1}\in\{k_s, k_s+1\}\), and where \(d_s\) is \(1\) if \(k_{s+1}=k_s\) or a number between \(1\) and \(n-s\) otherwise.
These two sets are in bijection, where the \(T_i\) are precisely the values \(k_{s+1}\) where there is a jump, \(k_{s+1} \ne k_s\), and the \(a_i\) get mapped to the \(d_s\).
The situation with Stirling numbers of the second kind is analogous.
Let \(C\) be a constant and let \(\mathbf{a}:=(a_1 \geqslant\cdots \geqslant a_C)\) be a sequence of non-negative integers encoded in unary. Let \(b_n(\mathbf{a})\) be the number of \(\mathbf{a}\)-shifted ballot sequence \(w_1,\ldots,w_n\) with \(w_i\in\{1,\ldots,C\}\), that is, sequences such that for every \(1\leqslant i < C\) and \(j\leqslant n\) we have \[\#\{k\mid w_k =i,\, k\leqslant j\} +a_i \geqslant\#\{k\mid w_k=i+1,\, k\leqslant j\}+a_{i+1}\] for every \(k\). Then the function \((\mathbf{a}, 1^n) \to b_n(\mathbf{a})\) is in \(\#\mathsf{L}\).
Proof. Initialize a counter \(\mathtt{j}=0\) and \(C\) many counters \(\mathtt{b}_i = a_i\) for \(i=1,\ldots,C\) encoded in binary in \(O(\log(n+|\mathbf{a}|))\) space. The witness is the sequence \(w_1,\ldots,w_n\) encoded with the \(C\) symbols: \(1,2,\ldots,C\). We read the witness symbol by symbol. At each new symbol \(w_j\) increase \(\mathtt{j}\) by one (so that \(\mathtt{j} = j\)). Set \(i:=w_{\mathtt{j}}\) and increase \(\mathtt{b}_i\) by one, then, if \(i>1\), check if \(\mathtt{b}_i\leqslant\mathtt{b}_{i-1}\). If that check fails then the witness is not a ballot sequence. When the witness has been fully read, check \(\mathtt{j}=n\). ◻
The Young diagram of a partition \(\lambda\) is the set \([\lambda]=\{(i,j)\mid 1\leqslant j \leqslant\lambda_i\}\), which we represent by the English convention [22]. The transpose of \(\lambda\) is the partition with Young diagram \([\lambda']=\{(j,i)\mid (i,j)\in[\lambda]\}\). If \(\lambda\vdash n\), a standard Young tableaux of shape \(\lambda\) is a bijection \(T:[\lambda]\to[n]\) which is increasing along the rows and down the columns. Let \(\mathrm{SYT}(\lambda)\) be the set of standard Young tableaux of shape \(\lambda\). The cardinality of \(\mathrm{SYT}(\lambda)\) is given by the hook-length formula [23] \[\#\mathrm{SYT}(\lambda) = \frac{n!}{\prod_{c\in[\lambda]} \mathsf{hl}_\lambda(c)}\] where \(\mathsf{hl}_\lambda(i,j) = \lambda_i+\lambda_j' - i - j + 1\). As a corollary of the previous theorem, we obtain \(\#\mathrm{SYT}(\lambda)\) in \(\#\mathsf{L}\) when the length (or the width) of \(\lambda\) is bounded. In Theorem [thm:hook-length] we will see how to place \(\#\mathrm{SYT}(\lambda)\) in \(\#\mathsf{L}\) without any constraints.
Let \(C\) be a fixed constant and let \(\lambda\) be a partition of \(n\) with \(C\) parts. The function \((1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots \,0\,1^{\lambda_C}) \mapsto \# \mathrm{SYT}(\lambda)\) is in \(\#\mathsf{L}\). Similarly, let \(\lambda\) be a partition of \(n\) with \(\lambda_1\leqslant C\). The function \((1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots) \mapsto \# \mathrm{SYT}(\lambda)\) is in \(\#\mathsf{L}\).
Proof. Standard Young tableaux of a given shape are in correspondence to ballot sequences as follows. An SYT \(T\) gives the ballot sequence \(w(T)\) where \(w(T)_i\) is equal to the row number of the row where the box with entry \(i\) in \(T\) is. Apply the algorithm from Theorem [thm:ballots] with \(a_i=0\) and adding a check that \(\mathtt{b}_i=\lambda_i\) in the end.
If the width of \(\lambda\) is bounded instead, then change the role of rows for columns in the previous correspondence. Compose the \(\mathsf{FL}\) function from Lemma [lem:transposition] and the verifier \(\mathsf{NL}\) machine of Theorem [thm:ballots] as in 1 . ◻
Fix a constant \(C\). The transposition of partitions of length at most \(C\) is a log-space operation. More precisely, the function \[(1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots\,0\,1^{\lambda_C}\,0) \mapsto (1^{\lambda'_1}\,0\,1^{\lambda'_2}\,0\,\dots\,0\,1^{\lambda'_{\lambda_1}}\,0)\] is in \(\mathsf{FL}\). Similarly, the transposition of partitions of width at most \(C\) is a log-space operation.
Proof. Suppose \(\ell(\lambda)\leqslant C\). The output of the function can be rewritten as \[\Big(\underbrace{ \underline{1^C\,0}~ \underline{1^C\,0}~ \dots \underline{1^C\,0} }_{\lambda_C~\text{times}} \, \dots \, \underbrace{ \underline{1^2\,0}~ \underline{1^2\,0}~ \dots \underline{1^2\,0} }_{\lambda_2-\lambda_3~\text{times}} \, \underbrace{ \underline{1\,0}~ \underline{1\,0}~ \dots \underline{1\,0} }_{\lambda_1-\lambda_2~\text{times}} \Big)\,.\] Initialise \(C\) counters \(\mathtt{a}_1 = \lambda_1, \dots, \mathtt{a}_C = \lambda_C\). While \(\mathtt{a}_C > 0\), write \(1^C\,0\) in the output tape and decrease all counters by one. Once the while-loop is finished, delete the counter \(\mathtt{a}_C\). At this stage we have \(\mathtt{a}_i = \lambda_i-\lambda_C\) for all \(i\). Run a new while-loop, this time controlled by \(\mathtt{a}_{C-1} > 0\), and writing \(1^{C-1}\,0\) in each iteration. After this second while-loop, \(\mathtt{a}_i = \lambda_i-\lambda_{C-1}\) for all \(i\). Iterate this process until all counters have been deleted.
Suppose now \(\lambda_1\leqslant C\). Initialise a counter \(\mathtt{a}=1\). For each run of \(1\)s in the input, if the run is of length at least \(\mathtt{a}\) then write a \(1\) in the output tape. Then write a \(0\) in the output, increase \(\mathtt{a}\), and repeat. Once \(\mathtt{a} > \lambda_1\), stop. ◻
A permutation \(\sigma\) is an involution if \(\sigma^2\) is the identity. The number of permutations of \(S_n\) that are involutions is given by \(\sum_{\lambda\vdash n} \#\mathrm{SYT}(\lambda)\) [40].
The function \((1^n) \mapsto \sum_{\lambda\vdash n} \#\mathrm{SYT}(\lambda)\) is in \(\#\mathsf{L}\).
Proof. This function satisfies the recursion \(F(n) = F(n-1) + (n-1)F(n-2)\) and so the claim follows from Theorem [thm:recurrence]. ◻
A semistandard Young tableau of shape \(\lambda\) and entries in \([N]\) is a map \(T:[\lambda]\to[N]\) such that \(T(i,j) \leqslant T(i,j+1)\) and \(T(i,j) < T(i+1,j)\) whenever the expressions are defined. The set \(\mathrm{SSYT}_N(\lambda)\) of semistandard Young tableaux of shape \(\lambda\) and entries in \([N]\) is counted by the hook-content formula [23] \[\#\mathrm{SSYT}_N(\lambda) = \prod_{c\in[\lambda]} \frac{N+\mathsf{ct}(c)}{\mathsf{hl}_\lambda(c)}\] where \(\mathsf{ct}(i,j) = j-i\).
Let \(C\) be a fixed constant and let \(\lambda\) be a partition of \(n\) with \(C\) parts. Let \(N\) be an integer no larger than \(n\). Then the function \((1^N\,0\,1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots\,0\,1^{\lambda_C}) \mapsto \# \mathrm{SSYT}_N(\lambda)\) is in \(\#\mathsf{L}\).
Similarly, let \(\lambda\) be a partition with \(\lambda_1\leqslant C\), then the function \((1^N\,0\,1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots) \mapsto \# \mathrm{SSYT}_N(\lambda)\) is in \(\#\mathsf{L}\).
Proof. Suppose that the length of \(\lambda\) is bounded by \(C\). It is well known that SSYTs of shape \(\lambda\) and entries \(\{1,\ldots,m\}\) correspond via standardization to SYTs of shape \(\lambda\) with at most \(m-1\) descents and set \(R \subset [n]\) of \(m\) elements, such that the descents of \(T\) are a subset of \(R\) and \(n\in R\). Here \(i\) is a descent of \(T\) if it appears in a higher row than \(i+1\) in \(T\). Thus SSYTs with entries \(\leqslant N\) are in bijection with \[\Big\{(S,R, T) \,\Big|\, \begin{array}{ll} S \subseteq [N], ~R \subseteq [n],~ |S|=|R| \geqslant\ell(\lambda), \\[-.6em] T\in\mathrm{SYT}(\lambda),~\text{ descents of T are \subseteq R} \end{array} \Big\}.\] The correspondence is as follows: Given an SSYT \(P\), let \(S=\{s_1,\ldots,s_m\}\) be the labels of the elements which appear at least once in \(P\). Then \(T\) is the standardization of \(P\): reading the smallest entries with values \(s_1\) left-to-right, replace them with \(1,2,\ldots,a_1\) in that order and put \(a_1\) in the set \(R\). Then read the elements equal to \(s_2\), left-to-right, replace them with \(a_1+1,\ldots,a_2\), add \(a_2\) to \(R\) and continue. Since entries of the same values in \(Q\) form horizontal strips, their standardized values would not form any descents in \(T\).
Here our witness is thus an indicator sequence giving the set \(S\) and a ballot sequence \(w\) corresponding to an SYT \(T\) as in Corollary [cor:syt95fixed95ell] with some symbols ‘\(r\)’ between entries in \(w_i\). Set a counter \(\mathtt{m}=|S|\). While reading the ballot sequence \(w\) we set \(\mathtt{m} \leftarrow \mathtt{m}-1\) every time \(w_{i+1}>w_{i}\) as this is equivalent to \(i\) being a descent of the corresponding \(T\) or if we have the symbol ‘\(r\)’ written between \(w_i\) and \(w_{i+1}\) with \(w_i\geqslant w_{i+1}\), which corresponds to an entry in the set \(R\) that does not come from a descent (if ‘\(r\)’ is between \(w_i> w_{i+1}\) we consider the witness invalid). In the end we should have \(\mathtt{m}=1\).
Suppose now the width of \(\lambda\) is bounded instead. Then encode the tableau \(T\) by its column ballot sequence \(w\) instead. Now there is a descent if \(w_i \geqslant w_{i+1}\). The rest of the algorithm works similarly. ◻
While on the topic of hook-length formulas, we consider the following result of Knuth [41], which expresses the number of linear extensions of a rooted tree poset \(T\) (in computer science this is also called the number of topological orderings of a rooted tree \(T\)) as \[e(T) = \frac{n!}{\prod_{v\in T} \mathsf{hl}_T(v)},\] where the hook-length \(\mathsf{hl}_T(v)\) of a node \(v\) is the number of descendants (including the node itself).
A plane rooted tree \(T\) can be encoded by its Depth-First-Search traversal \(\mathrm{dfs}(T)\), a sequence of \(0\)s and \(1\)s in which each \(1\) represents going down an edge away from the root and a \(0\) represents returning towards the root. For instance, \[T = \scalebox{.8}{ \begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/wruqlixy.png}\label{zvnmwrao}\end{figure} } \quad{\scalebox{1.5}{\leftrightsquigarrow}}\quad \mathrm{dfs}(T) = 1101001011100100\,.\tag{7}\]
Let \(T\) be a rooted tree poset. The function \(\mathrm{dfs}(T) \mapsto e(T)\) is in \(\#\mathsf{L}\).
Proof. Let \(n\) be the number of vertices of \(T\). We have \(|\mathrm{dfs}(T)| = 2(n-1) \in O(n)\), and hence we need a verifier \(\mathsf{NL}\) machine in \(O(\log(n))\) space.
Let \(r\) be the root of \(T\), let \(\Delta(r) = (v_1,v_2,\ldots,v_{\delta(r)})\) be its children. Knuth’s formula admits the recursion \[e(T) = \binom{\mathsf{hl}_T(r)-1}{\mathsf{hl}_T(v_1),\ldots,\mathsf{hl}_T(v_{\delta(r)})} \prod_{v_i\in\Delta(r)} e(T_{v_i}),\] where \(T_v\) is the subtree rooted at \(v\) (and thus \(T_v\) has \(\mathsf{hl}_T(v)\) nodes). Use \(\mathrm{Coeff}_T(r)\) to denote the multinomial coefficient in this formula. We then have \[e(T) = \prod_{v\in T} \mathrm{Coeff}_T(v).\] Since the multinomial coefficients are in \(\#\mathsf{L}\) (Theorem [thm:multinomial]), we are almost in the hypotheses of Theorem [thm:product]; it remains to show that the hook-lengths are \(\mathsf{FL}\) computable.
Let \(v_1, v_2, \ldots, v_n\) be the nodes of \(T\), ordered by their first visit in \(\mathrm{dfs}(T)\). That is, \(v_1\) is the root, and for each \(1\) in \(\mathrm{dfs}(T)\) we find a new node. To compute \(\mathsf{hl}_T(v_i)\) initialise two counters \(\mathtt{a}=1\) and \(\mathtt{b}=1\). Scan \(\mathrm{dfs}(T)\) left-to-right starting at \(v_i\). For each \(1\) increase \(\mathtt{a}\) and \(\mathtt{b}\). For each \(0\) decrease \(\mathtt{b}\). When \(\mathtt{b}=0\) we have scanned through all of \(T_{v_i}\) and return \(\mathtt{a} = \mathsf{hl}_T(v_i)\).
Apply Theorem [thm:product] to conclude. ◻
As corollaries of the hook-length and hook-content formulas, we can establish unimodality and (strong1) log-concavity of the binomial coefficients injectively.
The function \((1^n\,0\,1^k)\mapsto\binom{n}{k}-\binom{n}{k-1}\) for \(2k\leqslant n\) is in \(\#\mathsf{L}\).
Proof. It is shown in [42] that the difference \(\binom{n}{k}-\binom{n}{k-1}\) counts the number of \(k\)-subsets of \([n]\) whose encoding word \(w\) is a ballot sequence: for each prefix \(w_1\ldots w_i\) there are at most as many \(1\)s as \(0\)s. We apply now the algorithm from Theorem [thm:ballots] with \(a_i=0\) and an additional counter \(\mathtt{k}\) which reads the number of \(1\)s.
Alternatively, notice that \(\#\mathrm{SYT}((n-k,k)) = \binom{n}{k}-\binom{n}{k-1}\) and the result follows from Corollary [cor:syt95fixed95ell]. ◻
For the next two results, we need to define the Schur polynomials \(s_\lambda(x_1, \ldots, x_N)\), which are the generating functions of semistandard Young tableaux, \[s_\lambda(x_1,\ldots,x_N) = \sum_{T\in\mathrm{SSYT}_N(\lambda)} \prod_{u\in[\lambda]} x_{T(u)}.\] They are symmetric polynomials, and hence some linear combinations of elementary symmetric polynomials (similarly, of complete homogeneous symmetric polynomials). We point to [23] for a general reference.
The functions sending \((1^n\,0\,1^a\,0\,1^b)\) where \(1 \leqslant a \leqslant b \leqslant n\) to the differences \[\binom{n}{a}\binom{n}{b}-\binom{n}{a-1}\binom{n}{b+1} \quad\text{and}\quad \binom{n+a}{n}\binom{n+b}{n}-\binom{n+a-1}{n}\binom{n+b+1}{n}\] are both in \(\#\mathsf{L}\).
Proof. By the dual and the primal Jacobi–Trudi identities [23], the differences equal \[\#\mathrm{SSYT}_n((b,a)') \quad\text{and}\quad \#\mathrm{SSYT}_n((b,a)),\] respectively. The results follow therefore from Corollary [cor:ssyt95fixed95ell]. ◻
The functions sending \((1^n\,0\,1^a\,0\,1^b)\) where \(1 \leqslant a \leqslant b \leqslant n\) to the differences \[\begin{gather} c(n,a)c(n,b)-c(n,a-1)c(n,b+1) \\\text{and}\quad S(n+a,n)S(n+b,n)-S(n+a-1,n)S(n+b+1,n) \end{gather}\] involving Stirling numbers of the first and second type are both in \(\#\mathsf{L}\).
Proof. By [39], we can express the Stirling numbers as the specialisation of some elementary or complete homogeneous symmetric polynomials, \[c(n,k) = e_{n-k}(1,2,\ldots,n-1) ~~\text{and}~~ S(n,k) = h_{n-k}(1,2,\ldots,k).\] By the dual and the primal Jacobi–Trudi identities [23], the differences in the statement equal specialisations of Schur polynomials \[s_{(n-a,n-b)'}(1,2,\ldots,n-1) \quad\text{and}\quad s_{(b,a)}(1,2,\ldots,n),\] respectively. Recall that \(s_\lambda(x_1, \ldots, x_n)\) is the generating function of \(\mathrm{SSYT}_n(\lambda)\), which is in bijection with \[\Big\{(S,R, T) \,\Big|\, \begin{array}{ll} S \subseteq [N], ~R \subseteq [n],~ |S|=|R| \geqslant\ell(\lambda), \\[-.6em] T\in\mathrm{SYT}(\lambda),~\text{ descents of T are \subseteq R} \end{array} \Big\}\] as in the proof of Corollary [cor:ssyt95fixed95ell]. Hence the specialisation \(s_{(a,b)}(1,2,\ldots,n)\) counts the number of tuples \((S,R,W,C)\) such that
\((S,R,T)\) belong to the set above,
\(W\) is the (row) ballot sequence of \(T\),
if the descents of \(W\) are at positions \(d_1, d_2, \ldots, d_{m-1}\) then for all \(1\leqslant j\leqslant m\) we have \(1\leqslant c_i \leqslant s_j\) for all \(d_{j-1} < i \leqslant d_j\). (Here \(i_0\) is set to \(0\).)
To encode this as a witness, we order it as \[\begin{gather} w_1, *, \begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/wrxkdqaz.png}\tag{10}\end{figure} , c_1, w_2, *, c_2, \ldots, w_{d_1}, *, c_{d_1},\\ w_{d_1+1}, \begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/wrxkdqaz.png}\tag{10}\end{figure} , *, c_{d_1+1}, \ldots, w_{d_2}, *, c_{d_2}, \\ \ldots, w_{d_{m-1}+1}, \begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/wrxkdqaz.png}\tag{10}\end{figure} , *, c_{d_{m-1}+1}, \ldots, w_{d_m}, *, c_{d_m} \end{gather}\] where each \(*\) is either a 0 or a symbol ‘\(r\)’. That is, we alternate \(W\), the indicator function for \(R\), and \(C\), and we place the \(j\)th element of \(S\) right after the \((j-1)\)st descent \((w_{d_{j-1}}, w_{d_j})\) of \(W\).
The elements of \(S\) are written in increasing order. The validity of \((S,R,T)\) can be checked in log-space as in the proof of Corollary [cor:ssyt95fixed95ell]. To check the validity of \(C\), initialize a counter \(\mathtt{b}=1\). After the \(j\)th descent, set \(\mathtt{b} = s_j\). Use one work tape to check \(W\) is a ballot sequence, use another work tape to check when there is a descent, another to check \(1 \leqslant c_i \leqslant\mathtt{b}\) for each \(c_i\) read, and another to check \(S\) is an increasing tuple. Each work tape takes up log-space (as they appear either in the machines of Corollaries [cor:factorial], [cor:stirling] or [cor:ssyt95fixed95ell]).
For the Stirling numbers of the first kind, the proof is similar, using column ballot sequences instead. ◻
Establishing Stirling unimodality injectively is open (it is not even known where the peak of the sequences is).
The number of permutations in \(S_n\) of a given cycle type \(\alpha=(1^{m_1}2^{m_2}\ldots n^{m_n})\) is given by \[\frac{n!}{z_\alpha} = \frac{ n!}{\prod_{i=1}^n i^{m_i} m_i!}.\] The size of the permutation is recovered from \(\alpha\) via \(n = \sum_i m_i i\).
The number of permutations of cycle type \(\alpha=(1^{m_1}2^{m_2}\ldots)\) is in \(\#\mathsf{L}\) as the function \((1^{m_1}\,0\,1^{m_2}\,0\,\dots) \mapsto n!/z_\alpha\).
Proof. Suppose that we have to choose from \(N\) many elements to arrange into \(m\) many cycles of length \(i\) each. Assume the elements are chosen from \([N]\). Choose integers \(1 \leqslant a_1<a_2< \cdots <a_{m} \leqslant N\), then choose a set \(S_1 \subset [a_1-1]\) of \(i-1\) many elements, arrange them in \((i-1)!\) many ways, with \(a_1\) at the beginning these form the first cycle of length \(i\). Then choose the \(i-1\) many elements \(S_2\) from the \(a_2-i-1\) remaining elements and so on. The number of cycles with maximal elements \(a_1,\ldots,a_{m}\) is then \[\begin{gather} Z(N,m,i;\,a_1, \ldots, a_{m}) := \\ \binom{a_1-1}{i-1} (i-1)! \binom{a_2-i-1}{i-1} (i-1)! \cdots \binom{a_{m} - (m-1)i -1}{i-1} (i-1)!. \end{gather}\]
To create a permutation of \(n\) with cycle type \(\alpha\), choose the elements in \(1\)-cycles from \([n]\), the elements in \(2\)-cycles from \([n-m_1]\), those in \(3\)-cycles from \([n-m_1-2m_2]\), etc. We obtain \[\frac{n!}{z_\alpha} = \prod_{i=1}^n ~\sum_{\mathbf{a}\in\binom{[N_i]}{m_i}} Z(N_i,m_i,i;\,\mathbf{a})\] where \(N_i = n- \sum_{j=1}^{i-1} j m_j = N_{i-1} - (i-1) m_{i-1}\).
If \(x=(1^{m_1}\,0\,1^{m_2}\,0\,\dots)\) denotes the input, the functions sending \((1^i\,0\, x)\) to \(N_i\) and \(m_i\) are in \(\mathsf{FL}\). We now show that \[(1^N\,0\,1^m\,0\,1^i)\mapsto \sum_{\mathbf{a}\in\binom{[N]}{m}} Z(N,m,i;\,\mathbf{a})\] is in \(\#\mathsf{L}\), after which the proof concludes by an application of Theorem [thm:product].
The algorithm then proceeds as follows. We keep counters \(\mathtt{a}, \mathtt{A}, \mathtt{b}\). The witness encodes \(m\) elements \(a_1,\ldots,a_{m}\) and the witnesses for binomials and factorials which we have constructed in Theorem [thm:binomial] and Corollary [cor:factorial]. The witness is ordered \[\textstyle a_1,~ \mathtt{witness}\big(\binom{a_1-1}{i-1}\big),~ \mathtt{witness}((i-1)!);\quad a_2,~ \mathtt{witness}\big(\binom{a_2-i-1}{i-1}\big),~ \mathtt{witness}((i-1)!);~~ \ldots\] Set \(\mathtt{a}=a_1\) and \(\mathtt{A} = \mathtt{a}-1\). Check that the next two blocks of the witness are a witness for \(\binom{\mathtt{A}}{i-1}\) and \((i-1)!\). Then set \(\mathtt{b}=\mathtt{a}\) and read \(\mathtt{a}\leftarrow a_2\). Check \(\mathtt{b}<\mathtt{a}\leqslant N\). Set \(\mathtt{A} \leftarrow \mathtt{A}+(\mathtt{a}-\mathtt{b}) - i\) and once again check that the next two blocks of the witness are a witness for \(\binom{\mathtt{A}}{i-1}\) and \((i-1)!\). Repeat until having read all of the witness. ◻
The number of permutations with a given descent set \(D=\{d_1,d_2,\ldots,d_k\}\) is denoted by \(\beta_n(D)\) and can be defined as \[\beta_n(D):=\#\{ w\in S_n: w_i>w_{i+1} \text{ iff }i\in D\}.\] By the formula from [22] we have that, setting \(d_{k+1}=n\) and \(d_0=0\), \[\beta_n(D) = \det \left[ \binom{n-d_i}{d_{j+1}-d_i} \right]_{i,j=0}^k =n! \det \left[ \frac{1}{(d_{j+1}-d_i)!}\right]_{i,j=0}^{k} \,.\]
The function \((1^n01^{d_1}01^{d_2}0\cdots) \mapsto \beta_n(d_1,d_2,\ldots)\) is in \(\mathsf{GapL}\).
Proof. The coefficients of the determinant are computable in \(\#\mathsf{L}\) per Theorem [thm:binomial]. The determinant is then in \(\mathsf{GapL}\) from Theorem [thm:detofsharpL]. ◻
A particular case of interest here are the alternating (zig-zag) permutations, corresponding to descent sets \(D=\{1,3,5,\ldots\}\). The Euler numbers count the numbers of zigzag permutations, \(E_n=\#\{ w\in S_n: w_1>w_2<w_3>\cdots\}\). We refer to [22] for their properties listed below. Their exponential generating function is not rational and is given by \[\sum_{n\geqslant 0} E_n \frac{x^n}{n!} = \sec(x) + \tan(x)\] This gives a quadratic and a signed recurrence relation, but neither allows us to see \(\#\mathsf{L}\) containment easily. A refinement of these numbers are the Entringer numbers \(E(n,k)=\#\mathcal{E}(n,k)\) for \(\mathcal{E}(n,k)=\{ w\in S_{n+1}: k+1=w_1>w_2<w_3>\cdots\}\) as defined in [43] with \(E(1,1)=1\), \(E(1,0)=0\) and \(E(n,0)=0\) for \(n>1\). Note that \(E_n=E(n,n)\), by mapping \(w\in\mathcal{E}(n,k)\) with \(w_1=n+1\) to the zigzag permutation \((n+1-w_2)>(n+1-w_3)<\cdots (n+1-w_{n+1})\). These numbers satisfy the following recurrence \[\label{eq:euler} E(n,k) = E(n,k-1) + E(n-1,n-k).\tag{11}\] One way to see this identity is as follows. Let \(w \in \mathcal{E}(n,k)\), so \(w_1=k+1>w_2\). If \(w_2=k\), this corresponds to permutations \((n-k+1)>(n+1 - w_3')<(n+1-w_4')>\cdots \in \mathcal{E}(n-1,n-k)\), where \(w'_i = w_i\) if \(w_i <k\) and \(w'_i = w_i-1\) if \(w_i >k+1\) for \(i\geqslant 3\). If \(w_2 <k\), then the permutation \(w\) corresponds to \(w(1,j) \in \mathcal{E}(n,k-1)\), where \(j\) is the index for which \(w_j=k\).
The function \((1^n\,0\,1^k) \mapsto E(n,k)\) is in \(\#\mathsf{L}\). In particular, computing the Euler numbers \(E_n=E(n,n)\) is in \(\#\mathsf{L}\).
Proof. The idea is similar to Theorem [thm:2-dim], but it does not follow directly because of the term \(E(n-1,n-k)\) of slightly different form. The witness is a sequence \({(n_0,k_0),(n_1,k_1),\ldots,(n_m,k_m)}\), where the numbers \(n_i,k_i\) are encoded in binary. We keep 4 counters \(\mathtt{a},\mathtt{b},\mathtt{c},\mathtt{d}\). Read the witness \(\mathtt{a} \leftarrow n_0\), \(\mathtt{b}\leftarrow k_0\) and check that they are equal to \(n\) and \(k\) respectively. Next read \(\mathtt{c}\leftarrow n_1\), \(\mathtt{d}\leftarrow k_1\) and check the local validity of the witness: if \(\mathtt{a}=1\) and \(\mathtt{b}=1\) we stop and accept the witness, and if \(\mathtt{b}=0\) we reject the witness; otherwise if \(\mathtt{a}>1\) check if \(\mathtt{c} = \mathtt{a}\) and \(\mathtt{d}= \mathtt{b}-1>0\) or else if \(\mathtt{c}=\mathtt{a}-1\) and \(\mathtt{d}=\mathtt{a}-\mathtt{b}>0\). If neither condition is satisfied, reject the witness; otherwise assign \(\mathtt{a} \leftarrow \mathtt{c}, \mathtt{b} \leftarrow \mathtt{d}\), and read into \((\mathtt{c},\mathtt{d}) \leftarrow (n_2,k_2)\). Perform the checks and continue with the reassignments of counter values and reading the witness. The end of the witness should be \((0,0)\), we then stop. The number of pairs that are read is \(m<n^2\) and the witness is polynomially sized. ◻
A related vast topic in enumerative combinatorics is counting pattern avoiding permutations. Let \(\sigma \in S_k\) be a permutation, denote \[{\rm Av}_n(\sigma):=\{ w \in S_n: \nexists \; i_1<i_2<\cdots<i_k \;\forall 1\leqslant j < l \leqslant k : w_{i_j}<w_{i_l} \Leftrightarrow \sigma_j<\sigma_l \},\] the set of permutations avoiding the pattern \(\sigma\). That is, permutations where there is no subsequence of elements which have the same relative ordering as \(\sigma\). A classical fact is that \({\rm Av}_n(\sigma)=C_n\) for every pattern \(\sigma\) of length 3. At the same time \(\#{\rm Av}_n(1324)\) remains unsolved in the sense that there is no explicit generating function or formula known, and no algorithm to compute them that runs in \(\mathrm{poly}(n)\) time. In general, we know that the size grows exponentially. We have that \(\#{\rm Av}_n(\sigma) \leqslant C_\sigma^n\) for some constant \(C_\sigma\) depending on \(\sigma\); this is the famous Stanley–Wilf conjecture proven by Marcus and Tardos [44]. At the same time, since permutations avoiding the initial pattern \(\sigma_1\sigma_2\sigma_3\) also avoid \(\sigma\), we have that \(\#{\rm Av}_n(\sigma) \geqslant C_n \sim \frac{4^n}{\sqrt{\pi}n^{3/2}}\). For many patterns \(\sigma\) of fixed length there is a poly-time algorithm computing \(\#{\rm Av}_n(\sigma)\), yet this is not known in general to be true. Containment in \(\#\mathsf{L}\) would imply that, and so we ask the following question.
For which patterns \(\sigma\) of fixed length \(k\geqslant 4\) is the function \((1^n001^{\sigma_1}01^{\sigma_2}0\cdots01^{\sigma_k}) \mapsto \#{\rm Av}_n(\sigma)\) in \(\#\mathsf{L}\)? For which cases is it in \(\mathsf{GapL}\)?
Note that the case \(k=3\) is given by the Catalan numbers which we already showed to be in \(\#\mathsf{L}\), see Theorem [thm:catalan].
A special subproblem concerns patterns \(\sigma=12\ldots k\), which is the equivalent problem of counting permutations with longest increasing subsequence at most \(k-1\).
Let \(k\) be a fixed integer. The function mapping \((1^n) \mapsto \#{\rm Av}_n(12\ldots k)\) is in \(\#\mathsf{L}\).
Proof. A crucial part of the problem is that we cannot encode a permutation directly as a witness, as we cannot check if it is indeed a sequence of distinct numbers by reading the witness only a fixed number of times. In this case, the RSK algorithm, which maps permutations \(w\) to SYTs \((P,Q)\) of the same shape \(\lambda\), gives that the length of the longest increasing subsequence of \(w\) is equal to the length of the first row, i.e. \(\lambda_1\) via Greene’s theorem, see e.g. [22]. Since \(\#\mathrm{SYT}(\lambda) = \#\mathrm{SYT}(\lambda')\), we can consider instead having \(\ell(\lambda) <k\). So \[\#{\rm Av}_n(1\ldots k) = \sum_{\lambda \vdash n, \ell(\lambda)<k} (\#\mathrm{SYT}(\lambda))^2.\] Then our witness consists of the partition \(\lambda\) encoded as \((1^{\lambda_1}\,0\,1^{\lambda_2}\,0\dots0\,1^{\lambda_\ell})\) and two witnesses for \(\# \mathrm{SYT}(\lambda)\) from Corollary [cor:syt95fixed95ell]. It is crucial that the partition \(\lambda\) can be stored in memory with a fixed number of log-space counters (encoded in binary): \(\mathtt{\lambda_1,\lambda_2,\ldots,\lambda_{\ell}}\) with \(\ell<k\) and the partition can thus be read many times to verify the shapes of the two SYTs. ◻
We finish with a problem on trees. Given a tree \(T\) with vertex set \([n]\), let \(D(T) = (d(i,j))_{1\leqslant i,j\leqslant n}\) be its distance matrix. The Graham–Pollak formula gives \(\det D(T) = (-1)^{n-1} (n-1)2^{n-2}\), which remarkably does not depend on the tree structure [45].
Let \(T\) be a plane rooted tree on \(n\) vertices. The function \(\mathrm{dfs}(T) \mapsto (-1)^{n-1}(n-1)2^{n-2}\) is in \(\mathsf{FL}\), where the output’s first bit denotes the sign of the binary-encoded output integer.
Proof. The length of the input is \(2(n-1)\), so we can initialize a counter \(\mathtt{a}\leftarrow n-1\). Output the least significant digit of \(\mathtt{a}\); that is the sign \((-1)^{n-1}\). Copy \(\mathtt{a}\) to the output tape. Then, while \(\mathtt{a} > 1\), write a \(0\) in the output tape and decrease \(\mathtt{a}\) by \(1\). ◻
There are several generalisations of the Graham–Pollak formula obtained by placing weights on the tree in various ways. It is shown in [46] that all (additive) generalisations of the determinant in the literature count weighted unital arrowflows (a choice of edge \(e\in E(T)\) and an orientation of \(T\setminus\{e\}\)). To place such a formula in \(\#\mathsf{L}\) requires us to witness an orientation of a tree in log-space. One possible way of encoding an orientation is by alternating the bits of \(\mathrm{dfs}(T)\) with some extra symbols (for instance \(\uparrow\) for arcs oriented towards the root, \(\downarrow\) otherwise). Each edge appears twice in \(\mathrm{dfs}(T)\), and hence one has to check that the two symbols associated to this edge are equal; this in general requires \(O(n)\) many counters. We do not know if there is any better way of encoding an orientation so that it can be witnessed by a verifier \(\mathsf{NL}\) machine.
A fundamental object arising in this section and beyond is the set of integer points in a polytope.
Consider the polytope \(P\) of points \(\mathbf{x} \in \mathbb{R}^n\) given by inequalities \(A \mathbf{x} \leqslant\mathbf{b}\) where \(A\) is an \(m \times n\) integer matrix and \(\mathbf{b} \in \mathbb{Z}^m\). For fixed \(n\) the function \((A,\mathbf{b}) \mapsto \#\{ \mathbf{x} \in \mathbb{Z}^n \cap P\}\) is in \(\#\mathsf{L}\), where \(A_{i,j}\) and \(b_j\) are encoded in unary, with one extra bit to indicate their sign.
Proof. Here, the input size is \(N = \sum_{i,j} |A_{i,j}|+ \sum_i |b_i| + 2nm+2m\). The witness is \(\mathbf{x}=(x_1,\ldots,x_n)\) with each integer encoded in binary. Note that a rough upper bound on the coordinates is \(|x_i|<(Nn)^n\). We will read the witness into \(n\) counters \(\mathtt{x_i} \leftarrow x_i\). Keep counters \(\mathtt{s}, \mathtt{a}, \mathtt{i}, \mathtt{j}, \mathtt{b}\) in \(\log(N)\)-space encoded in binary. Set \(\mathtt{i}=1\), \(\mathtt{s}=0\) and \(\mathtt{j}=1\). Read \(\mathtt{a} \leftarrow A_{i,j}\), set \(\mathtt{s} \leftarrow \mathtt{s} + \mathtt{a}*\mathtt{x_j}\), see Lemma [lem:elementary], and keep increasing \(\mathtt{j}\) until it reaches \(n\). Read \(\mathtt{b}\leftarrow b_i\) and check if \(\mathtt{s} \leqslant\mathtt{b}\). Increase \(\mathtt{i}\) by 1, reset the counters and repeat. ◻
If \(n\) is fixed, then Theorem [thm:polytopes] implies that counting the integer points in a polytope is in \(\mathsf{FP}\), which is generally true for fixed dimensional polytopes via Barvinok’s algorithm [47], but allows inputs encoded in binary. If \(n\) (and hence \(m\)) are not fixed then the number of integer points is \(\#\mathsf{P}\)-complete even when the entries of \(A\) and \(\mathbf{b}\) are bounded, as \(\#\mathrm{\small SAT}\) can be reduced to that problem.
Let \(P=\{A\mathbf{x}\leqslant\mathbf{b}\}\) be a polytope as in Theorem [thm:polytopes]. For fixed \(n\) and \(m\) the Ehrhart function \((A, \mathbf{b},1^k)\mapsto\mathrm{ehr}_P(k) = \#\{\mathbf{x}\in\ZZ^n\cap kP\}\) is in \(\#\mathsf{L}\).
Proof. We have \(kP = \#\{A\mathbf{x}\leqslant k\mathbf{b}\}\). Compose the function \((1^{b_i},1^k) \mapsto (1^{kb_i})\) (which is in \(\mathsf{FL}\)) with the verifier \(\mathsf{NL}\) machine of Theorem [thm:polytopes]. ◻
An important class of polytopes are the transportation polytopes. Their integer points correspond to contingency tables, which play a role in algebraic combinatorics, as shown below.
Given two compositions \(\alpha=(\alpha_1,\ldots,\alpha_n), \beta=(\beta_1,\ldots,\beta_m)\) of the same integer and \(n, m\) many parts, respectively, a contingency table with marginals \(\alpha, \beta\) is an \(n \times m\) matrix \(A\) with \(A_{i,j} \in \mathbb{N}_0\), such that \[\sum_i A_{ij} = \beta_j \text{ for j=1,\ldots,m}, \qquad \sum_j A_{ij} =\alpha_i \text{ for i=1,\ldots,n}.\] We denote the set of such matrices by \(CT(\alpha,\beta)\). A 0-1 contingency table, sometimes referred to as “binary”, is such a matrix \(A\) with the additional requirement that \(A_{i,j}\in\{0,1\}\). We denote the set of such 0-1 matrices by \(CT_0(\alpha,\beta)\). To view these as integer points in a polytope, we can convert the linear equalities \(a=b\) into inequalities \(a\leqslant b\) and \(-a \leqslant-b\).
These quantities appear in the theory of symmetric functions as the transfer coefficients between the complete homogenous/elementary symmetric functions and the monomial symmetric functions [23]. Namely, \[h_\lambda = \sum_{\mu} \#CT(\lambda,\mu) m_\mu, \qquad e_\lambda = \sum_\mu \#CT_0(\lambda,\mu) m_\mu.\]
The following comes directly from Theorem [thm:polytopes] as the polytopes are of dimensions \(mn\), the variables corresponding to \(A_{ij}\)’s, and the number of inequalities is \(2(m+n) + 2mn\).
Let \(m,n\) be constant integers. Then the functions sending \[(1^{\alpha_1}\,0\,1^{\alpha_2}\,0\,\cdots \,0\,1^{\alpha_n}\,0\,0\,1^{\beta_1}\,0\,\cdots\,0\,1^{\beta_m})\] to \(\# CT(\alpha,\beta)\) and \(\# CT_0(\alpha,\beta)\) are in \(\#\mathsf{L}\).
However, here we can say more, these functions are still in \(\#\mathsf{L}\) when one of the dimensions is a variable. The result implies the well-known belonging to \(\mathsf{FP}\), which is usually shown with dynamic programming.
Let \(m\) be a constant. The functions sending \[(1^n\,0\,0\,1^{\alpha_1}\,0\,1^{\alpha_2}\,0\,\cdots \,0\,1^{\alpha_n}\,0\,0\,1^{\beta_1}\,0\,\cdots\,0\,1^{\beta_m})\] to \(\# CT(\alpha,\beta)\) and \(\# CT_0(\alpha,\beta)\) are in \(\#\mathsf{L}\).
Proof. The input size is \(N = 2|\alpha|+n+m\) since for a valid input we should have \(|\beta|=|\alpha|\). We consider the general case, the 0-1 contingency tables are treated in the same way. The witness is \[w = A_{1,1},A_{1,2},A_{1,3},\cdots,A_{1,m};A_{2,1},A_{2,2},\ldots,A_{2,m};\ldots;A_{n,1},\ldots,A_{n,m},\] with \(A_{i,j}\) encoded in unary and we use the symbols \(,\) and \(;\) as delimiters. In the algorithm we keep \(m\) many counters \(\mathtt{b_i}\) initialized at \(0\) for \(i=1,\ldots,m\), counters \(\mathtt{a}\) and \(\mathtt{A}\), indices \(\mathtt{i},\mathtt{j}\) and \(\mathtt{m},\mathtt{n}\). We read the first \(n\) bits from \(w\) into \(\mathtt{n}\) recorded in \(\log(n)\) space in binary. Next read \(\mathtt{a} \leftarrow \alpha_1\) in binary. Set \(\mathtt{i}\leftarrow 1, \mathtt{j} \leftarrow 1\). Read \(\mathtt{A} \leftarrow A_{1,1}\) (i.e. the first part of \(w\) before the first \(,\)) in binary, set \(\mathtt{a} \leftarrow \mathtt{a}-\mathtt{A}\). Set \(\mathtt{b_j} \leftarrow \mathtt{b_j}+\mathtt{A}\). Next, increase \(\mathtt{j}\) by 1, and repeat the last steps: \(\mathtt{A} \leftarrow A_{1,2}\), \(\mathtt{a} \leftarrow \mathtt{a} - \mathtt{A}\), \(\mathtt{b_j} \leftarrow \mathtt{b_j}+\mathtt{A}\). When reaching the first \(;\) we check if \(\mathtt{a}=0\), otherwise the witness is invalid. Then increase \(\mathtt{i}\), reset \(\mathtt{j}\leftarrow 1\), read the input \(\mathtt{a} \leftarrow \alpha_i\) and repeat the above steps. In the end we have the counters \(\mathtt{b_1},\ldots,\mathtt{b_m}\) and we check if \(\mathtt{b_j}=\beta_j\) from reading the input. ◻
It is a classical result that counting contingency tables is \(\#\mathsf{P}\)-complete when the marginals are encoded in binary [48] and at least one dimension is variable. Pak and Panova had conjectured that counting contingency tables of non-fixed sizes and unary input (so input size is \(O(m+n+\sum |A_{i,j}|)\)) is still \(\#\mathsf{P}\)-complete, see e.g. [20]. One way of disproving such conjecture, conditionally, would be to consider \(\#\mathsf{TISP}(-,\log^k(n))\) containment.
Let \(m\) and \(n\) be arbitrary. Is the function sending \[(1^n\,0\,0\,1^{\alpha_1}\,0\,1^{\alpha_2}\,0\,\cdots \,0\,1^{\alpha_n}\,0\,0\,1^{\beta_1}\,0\,\cdots\,0\,1^{\beta_m})\] to \(\# CT(\alpha,\beta)\) and \(\# CT_0(\alpha,\beta)\) in \(\#\mathsf{TISP}(\infty,\log^k(n))\subseteq \mathsf{FQP}\) for some \(k\)?
The different bases of the algebra \(\Lambda[x_1,\ldots,x_n]\) of symmetric polynomials in \(n\) variables are labelled by partitions of length or width at most \(n\). For a given basis \(\{b_\lambda\}\), the structure constants are the coefficients in the expansion \[b_\mu(x_1,\ldots,x_n) \circledast b_\nu(x_1,\ldots,x_n) = \sum_\lambda d_{\mu,\nu}^\lambda b_\lambda(x_1,\ldots,x_n)\] of a certain binary operation \(\circledast\) on the basis. For instance, if \(\circledast\) is the usual product and the basis is the Schur basis, then the structure constants are the \(\mathrm{GL}_n\)-Littlewood–Richardson coefficients.
In this section we study problems that take as input a tuple of partitions encoded in unary via \[\lambda \leftrightsquigarrow (1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots\,0\,1^{\lambda_{\ell(\lambda)}}).\] Note that one cannot store a partition of \(k\) in \(\log(k)\) space2. However, for any fixed \(n\), one can encode a partition of \(k\) of length at most \(n\) with \(n\) many \(\log(k)\) counters.
Fix \(n\). Let \(\lambda, \mu, \nu\) be partitions of length at most \(n\). Then, the function \[(1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots\,0\,1^{\lambda_n}\,0 \,1^{\mu_1}\,0\dots\,0\,1^{\mu_n} \dots\,1^{\nu_1}\,0\dots\,0\,1^{\nu_n}) \mapsto c_{\mu,\nu}^\lambda\] is in \(\#\mathsf{L}\).
Proof. Littlewood–Richardson coefficients count integer points in the hive polytope which is a triangular array of variables with local inequalities and boundary conditions. The dimension of the polytope is \(\binom{n}{2}\), the inequalities are of the type \(a+c \geqslant b+d\) for all rhombi in a triangular grid of the variables. The boundary conditions give that the variables on the sides are \(\lambda\), \(\mu\), \(\nu\), respectively. Then the resulting polytope has a fixed number of variables, inequalities, the linear inequalities have constant coefficients \(\{-1,0,1\}\) and the vector \(b\) has entries \(0\) or \(\in \{\lambda_i,\mu_i,\nu_i, i=1,\ldots,n\}\). Theorem [thm:polytopes] then applies and the result follows. ◻
The Kostka numbers are a special case of the LR numbers, see e.g. [49], so we have the following corollary.
For fixed \(n\), the function \[(1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots\,0\,1^{\lambda_n}\,0 \,1^{\alpha_1}\,0\dots\,0\,1^{\alpha_n}) \mapsto K_{\lambda,\alpha}\] is in \(\#\mathsf{L}\).
It is worth noting the following relation, corollary of the RSK correspondence: \[\sum_\lambda K_{\lambda \alpha}K_{\lambda \beta} = \#CT(\alpha,\beta).\] If it is possible to construct a verifier \(\mathsf{NL}\) machine which checks if two tableaux are SSYTs of the same shape and types \(\alpha\), \(\beta\) respectively for variable lengths of \(\alpha\), \(\beta\) we would have \(\#CT(\alpha,\beta) \in \#\mathsf{L}\), which would generalize Theorem [thm:contingencytables].
Recall that a composition is a finite sequence of positive integers, and a weak composition is a finite sequence of non-negative integers. Let \(\mathrm{Comp}\) and \(\mathrm{WComp}\) be the sets of compositions and weak compositions.
For fixed \(n\), the structure constants for the product of the monomial basis of \(\Lambda[x_1,\ldots,x_n]\) are in \(\#\mathsf{L}\).
Proof. We have \[m_\mu\cdot m_\nu(x_1,\ldots,x_n) = \sum k_{\mu,\nu}^\lambda m_\lambda(x_1,\ldots,x_n),\] where \[k_{\mu,\nu}^\lambda = \#\{ (\alpha,\beta)\in\mathrm{WComp}^2 \mid \mathrm{sort}(\alpha) = \mu, ~ \mathrm{sort}(\beta) = \nu, ~ \alpha + \beta = \lambda \}.\]
We construct a machine taking input \(\lambda,\mu,\nu\) in unary and witness \(w\), which checks if \(w\) is in the above set. Initialize \(3n\) counters \[\mathtt{c_1^\lambda}, \ldots, \mathtt{c_n^\lambda}, \mathtt{c_1^\mu}, \ldots, \mathtt{c_n^\mu}, \mathtt{c_1^\nu}, \ldots, \mathtt{c_n^\nu}\] to the values of the parts of \(\lambda,\mu\) and \(\nu\). We then read the witness and use another \(2n\) (fixed number) counters to store \(\alpha\) and \(\beta\). With another index counter \(\mathtt{i}\) we check that \(\mathtt{\alpha_i}+\mathtt{\beta_i}=\lambda_i.\) We then sort \(\mathtt{\alpha}\) and \(\mathtt{\beta}\) using bubblesort and check if they are equal to \(\mu,\nu\), respectively. ◻
Another rich source of combinatorial rules and formulas related to symmetric polynomials is the theory of crystals. For a Lie algebra \(\mathfrak{g}\), the \(\mathfrak{g}\)-crystal of a representation \(V\) is a certain directed graph. Its edges are best understood by Kashiwara’s tensor product rule. See [50] for a reference on crystals as combinatorial objects.
The tensor product rule for \(\mathfrak{sl}_2\)-crystal is much older and is often attributed to Clebsch and Gordan (for the algebra) or Greene and Kleitman (for the combinatorics). The \(\mathfrak{sl}_2\)-crystal for \((\CC^2)^{\otimes m}\) is denoted \(\mathbb{B}_2^{\otimes m}\) and is naturally identified with a symmetric chain decomposition
(SCD) of the Boolean lattice. Elements of the lattice are strings of length \(m\) with two symbols, ‘(’ and ‘)’, with )))…) being the initial object and
(((…( being the terminal object. Pair up parentheses following the usual grammatical rules of English. In the SCD, there is an directed edge from \(x\) to \(y\) if
\(x\) is created from \(y\) by flipping the right-most unpaired ‘)’ to a ‘(’. We say that \(E\,.\,x = y\) and call \(E\) the raising operator. If there is no unpaired ‘)’ in \(x\), then the previous algorithm is undefined; we write \(E\,.\,x=0\) and say
\(x\) is a highest-weight element. An analogous algorithm (flipping the left-most unpaired ‘(’ to a ‘)’ instead) defines the lowering operator \(F\,.\,y
= x\).
Now consider the \(\mathfrak{sl}_n\)-crystal \(\mathbb{B}_n^{\otimes m}\). Vertices of the crystal are strings of length \(m\) of \(n\) different symbols \(1, 2, \ldots, n\). There are \(n-1\) raising operators \(E_1, \ldots, E_{n-1}\). To compute \(E_i\,.\,x\), begin by changing every instance in \(x\) of the symbol \(i\) to a ‘(’ and every instance of \(i+1\)
to a ‘)’. Then compute the \(\mathfrak{sl}_2\)-raising operator on this substring, as before. Revert the change of symbols to obtain \(y = E_i\,.\,x\). Again, if this process is
not well defined, then we write \(E_i\,.\,x=0\) and say \(x\) is a highest-weight element.
Let \(x\in[n]^m\) be a vertex of \(\mathbb{B}_n^{\otimes m}\). The function \[(1^n\,0\,1^m\,0\,1^i\,0\,x_1\,x_2\,\ldots\,x_m) \mapsto E_i\,.\,x\] is in \(\mathsf{FL}\), where each \(x_j\) is encoded in binary taking up \(\lceil\log_2(n)\rceil\)-many bits.
Proof. Initialise two binary-encoded counters \(\mathtt{i}=i\) and \(\mathtt{I}=i+1\); these will require at most \(\log(n)\)-space each. Initialise two more counters: \(\mathtt{a}=0\) to keep track of which parentheses pair up, and \(\mathtt{j}=1\) that will be used to keep track of the position of the last open bracket ever read; these will require at most \(\log(m)\)-space each.
We read \(x\) from left to right. If the current entry \(x_k\) is not equal to \(\mathtt{i}\) nor \(\mathtt{I}\), do nothing. If \(x_k = \mathtt{i}\), then increase \(\mathtt{a}\) by \(1\). If \(x_k = \mathtt{I}\) and \(\mathtt{a}>0\), then decrease \(\mathtt{a}\) by \(1\). If \(x_k = \mathtt{I}\) and \(\mathtt{a}=0\), then set \(\mathtt{j} \leftarrow k\).
When we have read the whole of \(x\), the counter \(\mathtt{j}\) points to the right-most unpaired closing bracket. Read through \(x\) once again, copying everything to the output tape. Except, when at \(x_\mathtt{j}\), copy \(\mathtt{i}\) to the output tape instead. ◻
The rule of matching parentheses and swapping one of them is called the signature rule. The same signature rule generalises to all finite type crystals.
The standard crystal \(\mathbb{B}_n\) of \(\mathfrak{sl}_n\) is \[1 \xrightarrow{1} 2 \xrightarrow{2} 3 \xrightarrow{3} \cdots \xrightarrow{n-1} n\] where the arrow \(\xrightarrow{i}\) corresponds to the lowering operator \(F_i\). This standard crystal governs the signature rule: it is the reason \(i\) can only ever raise to \(i+1\). For other finite type crystals, the \(\mathsf{FL}\) machine would need to be governed by a different standard crystal instead. We avoid doing this for simplicity.
Moreover, Theorem [thm:crystal32operator] also works in the same way for the crystal \(\mathcal{B}_\lambda\) of semistandard Young tableaux of shape \(\lambda\vdash m\) and entries from \(\{1,\ldots,n\}\).
Let \(x\in[n]^m\) be a vertex of \(\mathbb{B}_n^{\otimes m}\). The function \((1^n\,0\,1^m\,x_1\,\ldots\, x_m) \mapsto\) ‘is \(x\) a highest weight element?’ is in \(\mathsf{L}\).
Proof. Loop through \(\mathtt{i}=1,\ldots,n-1\). Then compose with the \(\mathsf{FL}\) function from Theorem [thm:crystal32operator] to compute \(E_{\mathtt{i}}\,.\,x\). Accept if \(E_{\mathtt{i}}\,.\,x=0\) for all \(\mathtt{i}\). ◻
The weight of a highest weight element \(x\) is the partition \(\lambda\) where \(\lambda_i\) counts the number of instances of \(i\) in \(x\).
Let \(x\in[n]^m\) be a vertex of \(\mathbb{B}_n^{\otimes m}\). The function sending \[(1^n\,0\,1^m\,0\,x_1\,\ldots\, x_m\,0\,1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\ldots)\] to ‘is \(x\) a highest weight element of weight \(\lambda\)?’ is in \(\mathsf{L}\).
Proof. Begin by asking ‘is \(x\) a highest weight element?’, which we can do in \(\mathsf{L}\) by Corollary [cor:highest32weight].
Then, for \(\mathtt{i}=1,2,\ldots,n\), initialise a counter \(\mathtt{b}=\lambda_\mathtt{i}\). Read through \(x\) again; if \(x_k=\mathtt{i}\) then \(\mathtt{b}\leftarrow\mathtt{b}-1\). When \(x\) is fully read, check \(\mathtt{b}=0\); otherwise reject. ◻
Let \(\lambda\) be a partition of \(n\). It is a consequence of Schur–Weyl duality [50] that the number of highest weight elements of weight \(\lambda\) in \(\mathbb{B}_{n}^{\otimes n}\) is \(\#\mathrm{SYT}(\lambda)\). However, this does not place \(\#\mathrm{SYT}(\lambda)\) in \(\#\mathsf{L}\), since the machine of Corollary [cor:hw32of32lambda] reads the element \(O(n)\) times, even if the length of \(\lambda\) is bounded.
See Corollary [cor:syt95fixed95ell] and Theorem [thm:hook-length] for successful approaches for this problem.
Kashiwara’s tensor product rule says that if \(\mathcal{B}\) and \(\mathcal{C}\) are \(\mathfrak{sl}_n\)-crystals then \[E_i\,.\,(x\otimes y) = \begin{cases} (E_i\,.\,x)\otimes y & \text{if}~\varphi_i(y) < \varepsilon_i(x),\\ x\otimes(E_i\,.\,y) & \text{if}~\varphi_i(y) \geqslant\varepsilon_i(x)\\ \end{cases}\] defines an \(\mathfrak{sl}_n\)-crystal \(\mathcal{B}\otimes\mathcal{C}\) on the Cartesian product of the vertex sets, where \(\varphi_i(y) = \max\{r\mid F_i^r\,.\,y \ne 0\}\) and \(\varepsilon_i(x) = \max\{r\mid E_i^r\,.\,x \ne 0\}\).
If the raising operators of two \(\mathfrak{sl}_n\)-crystals \(\mathcal{B}\) and \(\mathcal{C}\) are in \(\mathsf{FL}\) then the raising operator of \(\mathcal{B}\otimes\mathcal{C}\) is in \(\mathsf{FL}\).
Here, raising operators are encoded as in Theorem [thm:crystal32operator], since there exists \(m\) such that \(\mathcal{B}\subseteq\mathbb{B}_n^{\otimes m}\), and similarly for the other crystals.
Proof. We adapt the machine from Theorem [thm:crystal32operator] to compute \(\varepsilon_i(x)\). To do this,
we add a counter \(\mathtt{e}=0\). Whenever \(\mathtt{a}=0\) in the machine of Theorem [thm:crystal32operator], we have found an unpaired ‘)’ and thus we increase \(\mathtt{e}\) by \(1\). When we finish reading \(x\) we have \(\mathtt{e}=\varepsilon_i(x)\). Output this value instead of \(E_i\,.\,x\).
A similar machine can be constructed for computing \(\varphi_i(y)\), by reading \(y\) right-to-left. Store it in a counter \(\mathtt{f}\).
Both of these values are upper-bounded by the length of \((x,y)\).
Finally output \(E_i\,.\,x\) followed by \(y\) if \(\mathtt{f} < \mathtt{e}\), or \(x\) followed by \(E_i\,.\,y\) otherwise. ◻
In the following, we discuss several number theoretic functions \(f(n)\). To interpret them as counting problems, we encode \(n\) in unary.
The function \((1^n) \mapsto \#\mathrm{Par}(n)\) is in \(\#\mathsf{L}\).
Proof. The witness is a partition \(\lambda_1, \lambda_2, \ldots\) written in binary. A counter is used to check that \(\sum_i \lambda_i = n\). Another two counters check that \(\lambda_i \leqslant\lambda_{i-1}\) for all \(i\). ◻
We remark that the above theorem implies the following result. We note however, that establishing the corollary by itself is non-trivial; a naive algorithm does not work, and one has to use e.g. Euler’s pentagonal theorem.
The function \((1^n) \mapsto \#\mathrm{Par}(n)\) is in \(\mathsf{FP}\).
The same approach would not work to show that \(\#\mathrm{Par}(n)\) is in \(\mathsf{FL}\), since it relies on a recursion which computes exponentially large values that cannot be stored in log-space. It is conceivable though that the machine could write the sequence of \(0,1\)s encoding the number of partitions in binary on the output tape without storing all of them on the work tape, and hence we cannot exclude the possibility of \(\#\mathrm{Par}(n)\) in \(\mathsf{FL}\).
The function \[(1^n\,0\,1^\ell\,0\,1^k)\mapsto p_n(\ell\times k) := \#\{\lambda\in\mathrm{Par}(n) \mid \ell(\lambda)\leqslant\ell, ~\lambda_1\leqslant k\}\] is in \(\#\mathsf{L}\).
Proof. Take the verifier \(\mathsf{NL}\) machine from Theorem [thm:partition]. Add one counter to check the length of \(\lambda\) is less than \(\ell\). Add another counter to check that \(\lambda_1\leqslant k\). ◻
Define the \(q\)-integer \((n)_q = (1-q^n)/(1-q)\), the \(q\)-factorial \((n)_q! = (n)_q\cdot(n-1)_q\cdots(1)_q\), and \(q\)-binomial \(\binom{n+m}{n}_{\!q} = (m+n)_q! / ((n)_q!(m)_q!)\). More generally, the \(q\)-multinomial \[\binom{n}{a_1,\ldots,a_k}_{\!\!q} = \binom{n}{a_1}_{\!\!q} \binom{n-a_1}{a_2}_{\!\!q} \cdots\,.\]
The function \[(1^n\,0\,1^r\,0\,1^{a_1}\,0\,1^{a_2}\,0\,\cdots\,0\,1^{a_k}\,) \mapsto \mathrm{coeff}_{q^r}\binom{n}{a_1,a_2,\ldots,a_k}_{\!\!q}\] giving the coefficient at \(q^r\) in the \(q\)-multinomial coefficient is in \(\#\mathsf{L}\).
Proof. We first observe that \[\binom{n}{a}_{\!\!q} = \sum_r p_r( (n-a) \times a)\cdot q^r\] and therefore \[\binom{n}{a_1,\ldots,a_k}_{\!\!q} = \sum_{r_1,r_2,\ldots} p_{r_1}((n-a_1)\times a_1) p_{r_2}( (n-a_1-a_2) \times a_2) \cdots q^{r_1+r_2+\cdots} .\] We proceed like in the proof of Theorem [thm:product]. The witness is a sequence of the witnesses \(w^{(1)},w^{(2)},\ldots\) from Corollary [cor:partitions32in32a32box], together with integers \(r_i\), so \(w=r_1, w^1; r_2, w^2; \cdots\). We initialise counters \(\mathtt{n}=n\), \(\mathtt{i}=1,\mathtt{R}=0,\mathtt{d}=0\). After reading \(\mathtt{d}\leftarrow r_\mathtt{i}\), we set \(\mathtt{R} \leftarrow \mathtt{R} + \mathtt{d}\). Read and check the validity of \(w^{\mathtt{i}}\) as a witness for \(p_{\mathtt{r_i}}((\mathtt{n}-a_{\mathtt{i}})\times a_\mathtt{i})\). Then increase \(\mathtt{i}\) by \(1\), set \(\mathtt{n}\leftarrow\mathtt{n}- a_\mathtt{i}\), and repeat. In the end check \(\mathtt{R}=r\). ◻
The function \[(1^n\,0\,1^k)\mapsto(\lfloor{n/k}\rfloor,\, n-k\lfloor{n/k}\rfloor)\] is in \(\mathsf{FL}\).
Proof. Initialise two binary-encoded counters \(\mathtt{n}=n\) and \(\mathtt{k}=k\). Initialise one more binary-encoded counters \(\mathtt{q}\). While \(\mathtt{q}*\mathtt{k} \leqslant\mathtt{n}\), increase \(\mathtt{q}\) by 1. Once \(\mathtt{q}*\mathtt{k} > \mathtt{n}\), decrease \(\mathtt{q}\) by 1. Return \(\mathtt{q}\) and \(\mathtt{n}-\mathtt{q}*\mathtt{k}\). Multiplication, comparison, and difference require an extra auxiliary counter, so in total 4 counters are needed. ◻
The decision problem \((1^n) \mapsto\) ‘is \(n\) prime?’ is in \(\mathsf{L}\).
Proof. Create a counter \(\mathtt{n}=n\). Loop through \(\mathtt{k}=2,\ldots,n-1\). Perform Euclidean division \(n/\mathtt{k}\) to find a remainder. If at any point the remainder is \(0\), reject. Otherwise, accept. ◻
We continue discussing some classical multiplicative functions.
The function \(\sigma_k(n)\) given by \((1^n\,0\,1^k) \mapsto \sum_{d|n} d^k\) is in \(\#\mathsf{L}\).
Proof. The witness is a tuple \(d, q, a_1, a_2, \ldots, a_{k}\) of \(k+2\) integers in binary, such that \(1 \leqslant d \leqslant n = dq\), and such that \(1\leqslant a_i \leqslant d\) for all \(i\). ◻
We can also consider deterministic computations of the divisor function. The asymptotic growth of \(\sigma_k(n)\) as \(n\to\infty\) is upper bounded by \(n^k \zeta(k)\) where \(\zeta\) is the Riemann zeta function. We have \(\zeta(k)=1 + O(2^{-k})\). But if \(k\) is part of the input \(x\) of the divisor function, then the intermediate sums involved in a naive computation of \(\sigma_k(n) \in O(n^k\zeta(k)) = O(n^k) = O(2^{|x|\log(|x|)})\) are too big for a \(\mathsf{FL}\) machine to store in the work tape. We thus fix \(k\) in our next result. (Note that \((1^n\,0\,1^k) \mapsto \sigma_k(n)\) might still be in \(\mathsf{FL}\), as its growth is inside the range of Theorem [thm:FL32upper32bound].)
Fix a non-negative integer \(k\). The function \(\sigma_k(n)\) given by \((1^n) \mapsto \sum_{d|n} d^k\) is in \(\mathsf{FL}\).
Proof. For \(\mathtt{d}=1,\ldots,n\) call the \(\mathsf{FL}\) machine from Theorem [thm:euclidean32div] to compute \(n/\mathtt{d}\). If the remainder is \(0\), add \(\mathtt{d}^k\) to a cumulative counter \(\mathtt{c}\). At the end, output \(\mathtt{c}\). ◻
The function \(\varphi(n)\) given by \[(1^n) \mapsto \#\{k \in [n] \mid k~\text{coprime with}~n\}\] is in \(\#\mathsf{L}\).
Proof. The witness is \(k\). Compute the greatest common divisor of \(n\) and \(k\) by successive applications of the Euclidean division algorithm from Theorem [thm:euclidean32div]. Accept if \(\gcd(k,n) = 1\) and \(k\leqslant n\). ◻
The next result, although easy, will serve to motivate a new proof technique.
The function \((1^n) \mapsto \prod_{p|n~\text{prime}} p\) is in \(\#\mathsf{L}\).
Proof. The statement follows by an application of Theorem [thm:product]. The function \(f : (1^p)\mapsto p\) is clearly in \(\#\mathsf{L}\). Set \(f(\emptyset)=1\). The function \[\label{eq:is32prime32divisor} g : (1^n\,0\,1^p) \mapsto \begin{cases} 1^p & \text{if p|n and p is prime},\\ \emptyset & \text{otherwise} \end{cases}\tag{12}\] is in \(\mathsf{FL}\) by Theorems [thm:euclidean32div] and [primes]. The radical of \(n\) is the function \((1^n)\mapsto\prod_{p=1}^n f(g(1^n\,0\,1^p))\), which is therefore in \(\#\mathsf{L}\). ◻
Let \(p\) be a prime. The \(p\)-adic valuation \(v_p(n)\) of an integer \(n\) is the largest power of \(p\) that divides \(n\). We have \(v_p(nm) = v_p(n) + v_p(m)\) and \(v_p(n/m) = v_p(n) - v_p(m)\). A proof technique suggested to us by ChatGPT is to use \(p\)-adic valuations to turn rational formulas into product formulas via \[n = \prod_{p|n~\text{prime}} p^{v_p(n)},\] which in conjunction with Theorem [thm:product] (for products of \(\#\mathsf{L}\) functions), gives a new way of checking containment in \(\#\mathsf{L}\). For instance, we can give a third proof of Corollary [cor:factorial] which places the factorial in \(\#\mathsf{L}\).
Third proof of Corollary [cor:factorial]. Fix a prime \(p\). Legendre’s formula gives \(v_p(n!) = \lfloor n/p\rfloor + \lfloor n/p^2\rfloor + \lfloor n/p^3\rfloor + \cdots\). Note that the sum is finite. We can therefore compute \(v_p(n!)\) in \(O(\log(n))\)-space by adding the results of Euclidean divisions of \(n\) by the successive powers \(p^k\) of \(p\), while \(p^k \leqslant n\). The function \((1^n)\mapsto p^{v_p(n!)}\) is in \(\#\mathsf{L}\), a witness being a tuple of \(v_p(n!)\)-many numbers \(1\leqslant a_i \leqslant p\). (Here we are applying Theorem [thm:product], where the number of factors is \(\log_p(n!) = O(n \log (n))\), and hence can be stored in \(O(\log_2(\log_p(n!))) = O(\log_2(n))\)-space.)
All prime divisors of \(n!\) are smaller or equal than \(n\). Hence the formula \[n! = \prod_{p\leqslant n~\text{prime}} p^{v_p(n!)}\] is in the hypotheses of Theorem [thm:product]. ◻
The Maya diagram of a partition \(\lambda\) is the \(\{0,1\}\)-string \(\mathrm{Maya}(\lambda)\) which reads the outline of \([\lambda]\) (starting in the bottom-left, ending in the top-right), encoding an up-step as a 1 and a right-step as a 0. For instance, \[\ytableausetup{boxsize={.96em}} [\lambda] = \ydiagram{7,7,6,4,3,2,2} \begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/owvtbulx.png}\label{nxjypegr}\end{figure} \leftrightsquigarrow ~~ \mathrm{Maya}(\lambda) = 00110101001011\,.\tag{13}\] Then \([\lambda]\) is in bijection with the set of \((0,1)\)-pairs of (non-necessarily consecutive) entries in the Maya diagram, where the \(0\) precedes the \(1\).
Let \(\lambda\) be a partition. The function \(\mathrm{Maya}(\lambda) \mapsto |\lambda|\) is in \(\mathsf{FL}\).
Proof. The input is of length \(m=\lambda_1+\ell(\lambda) = O(|\lambda|)\), so we need to construct a \(\log(|\lambda|)\)-space machine. We count the number of \((0,1)\) ordered pairs.
Initialise a counter \(\mathtt{v}=0\). Read \(x=\mathrm{Maya}(\lambda)\) from right to left, keeping track of the position with a counter \(\mathtt{i}\) in a loop, starting with \(\mathtt{i} = m\).
If \(x_{\mathtt{i}}=0\), set \(\mathtt{i}\leftarrow \mathtt{i}-1\). If \(x_{\mathtt{i}}=1\), start another counter \(\mathtt{j}=\mathtt{i}-1\) which performs an inner loop. Check if \(x_{\mathtt{j}} = 0\), in which case \(\mathtt{v}\leftarrow\mathtt{v}+1\); otherwise do nothing. Then decrease \(\mathtt{j}\) by \(1\) and repeat. When \(\mathtt{j}<0\), stop this inner \(\mathtt{j}\)-loop; we have added to \(\mathtt{v}\) the number of 0s to the left of the 1 at \(x_\mathtt{i}\); this corresponds to the number of boxes in \([\lambda]\) in one row. \[\ytableausetup{boxsize={.96em}} \ydiagram{7,7,6,4,3,2,2}*[*(blue!30)]{0,0,0,0,3} \begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/wzptklsd.png}\label{iazmqxrj}\end{figure}\tag{14}\] Then set \(\mathtt{i}\leftarrow \mathtt{i}-1\) and repeat until \(\mathtt{i}=0\).
At the end, output the value of \(\mathtt{v}\). ◻
For each \(r\in\N_0\), the \(r\)-abacus of \(\lambda\) is the array \(\mathrm{abc}_r(\lambda)\) of width \(r\) created by splitting the Maya diagram of \(\lambda\) into consecutive blocks of length \(r\). Now 1s represent beads of an abacus and 0s represent empty spaces (holes). For instance, if \(\lambda\) is the partition from the previous example, then the following is the \(3\)-abacus of \(\lambda\). \[\mathrm{abc}_3(\lambda) = \begin{array}{ccc} 0&0&1\\[-.5em] 1&0&1\\[-.5em] 0&1&0\\[-.5em] 0&1&0\\[-.5em] 1&1& \end{array}\begin{figure}\includegraphics[width=0.8\textwidth]{_pdflatex/biaxjsuz.png}\label{rhgfzkdy}\end{figure} \begin{array}{ccc} &&\textcolor{white}{1}\\[-.5em] \textcolor{white}{1}&& \textcolor{white}{1}\\[-.5em] &\textcolor{white}{1}&\\[-.5em] &\textcolor{white}{1}&\\[-.5em] \textcolor{white}{1}& \textcolor{white}{1}& \end{array} {\,} \smallskip\tag{15}\] A cell of \([\lambda]\) with hook-length divisible by \(r\) becomes a now a pair (bead, hole) in \(\mathrm{abc}_r(\lambda)\) both in the same column (runner), with the hole above the bead [51]. The following proof is suggested to us by Michał Szwej.
Fix a prime \(p\). Let \(\lambda\) be a partition. The function \(\mathrm{Maya}(\lambda) \mapsto v_p(\prod_{c\in[\lambda]}\mathsf{hl}_\lambda(c))\) is in \(\mathsf{FL}\).
Proof. Let \(n = |\lambda|\). The input is of length \(\lambda_1+\ell(\lambda) = O(n)\), so we need to construct a \(\log(n)\)-space machine. To do so, we interpret \(\mathrm{Maya}(\lambda)\) as a \(p\)-abacus, count the number of beads below holes, then interpret it as a \(p^2\)-abacus, count the number of beads below holes, etc.
Initialise two counters \(\mathtt{r}=p\) and \(\mathtt{v}=0\). Read \(x=\mathrm{Maya}(\lambda)\) from right to left, keeping track of the position with a counter \(\mathtt{i}\) in a loop.
Now perform the \(\mathtt{i}\)-loop and the \(\mathtt{j}\)-inner loop described in the proof of Lemma [lem:maya32size], except that \(\mathtt{j}\) is initialised at \(\mathtt{i}-\mathtt{r}\) and decreased by \(\mathtt{r}\) each time.
At the end of the \(\mathtt{i}\)-loop, the value of \(\mathtt{v}\) counts the cells of \([\lambda]\) whose hook-length is divisible by \(\mathtt{r} = p\). Set \(\mathtt{r} \leftarrow \mathtt{r}*p\) and repeat, adding to the same counter \(\mathtt{v}\). Whenever \(\mathtt{r} > |x|\), the value of \(\mathtt{v}\) is \(v_p(\prod_{c\in[\lambda]}\mathsf{hl}_\lambda(c))\).
The maximum value that \(\mathtt{v}\) can attain is upper-bounded by \(\log_p(\prod \mathsf{hl}_\lambda(c))\), which by the hook-length formula is upper bounded by \(\log_p(n!) = O(n\log(n)) = O(n^2)\) and hence can be stored in \(O(\log_2(n))\)-space. ◻
The function \(\mathrm{Maya}(\lambda)\mapsto\#\mathrm{SYT}(\lambda)\) is in \(\#\mathsf{L}\).
Proof. Write \[\#\mathrm{SYT}(\lambda) = \frac{n!}{\prod_{c\in[\lambda]} \mathsf{hl}_\lambda(c)} = \prod_{p\leqslant n~\text{prime}} p^{v_p(n!) - v_p(\prod_{c\in[\lambda]} \mathsf{hl}_\lambda(c))},\] where we used that the prime divisors of \(n!\) are at most \(n\), and since \(\#\mathrm{SYT}(\lambda)\) is an integer the same holds for the denominator. The function sending \(\mathrm{Maya}(\lambda)\) to \(v_p(n!) - v_p(\prod_{c\in[\lambda]} \mathsf{hl}_\lambda(c))\) is in \(\mathsf{FL}\), as we saw in the third proof of Corollary [cor:factorial] and in Lemma [lem:hl32val]. The function \((1^p) \mapsto p\) is trivially in \(\#\mathsf{L}\) (where we set \(\emptyset \mapsto 1\)). Hence by Theorem [thm:product], given any fixed \(p\) the function \[\mathrm{Maya}(\lambda) \mapsto p^{v_p(n!) - v_p(\prod_{c\in[\lambda]} \mathsf{hl}_\lambda(c))}\] is in \(\#\mathsf{L}\). The function sending \((1^p)\) to \((1^p)\) if \(p\) is a prime or \(\emptyset\) otherwise is in \(\mathsf{FL}\) by Theorem [primes]. Apply Theorem [thm:product] again to conclude. ◻
A similar proof can also show that if the partition \(\lambda\) is encoded as \((1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots)\), then the function \(\#\mathrm{SYT}(\lambda)\) is also in \(\#\mathsf{L}\). The idea is again to use prime factorization, either via the hook-length formula or Young’s quotient formula \[\#\mathrm{SYT}(\lambda) = |\lambda|!~\frac{\prod_{i<j}(\lambda_i-i-\lambda_j+j)}{\prod_{i}(\lambda_i-i+\ell(\lambda))!} \,.\] Alternatively, it is easy to see that a log-space machine can produce the Maya diagram (bit by bit) from \((1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots)\) and using log-space reductions as in §2.4 apply the algorithm from Theorem [thm:hook-length]
Given a pair of partitions \(\lambda\), \(\mu\) encoded as \((1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\ldots\) \(\,0\,0\,1^{\mu_1}\,0\,1^{\mu_2}\,0\,\ldots)\), is the number of skew standard Young tableaux \(\#\mathrm{SYT}(\lambda/\mu)\) also in \(\#\mathsf{L}\)?
Our witness in Theorem [thm:hook-length] relies heavily on the presence of an explicit product formula instead of constructing SYTs, and the proof does not extend. In general there are no direct product formulas for the number of SYTs of skew shapes. They can be computed via Aitken’s determinantal formula [23], which gives only \(\mathsf{GapL}\), or as positive sums via the Littlewood–Richardson (LR) rule or via the Naruse hook-length formula for skew shapes (NHLF) as in [52]. Via the LR rule, we have \[f^{\lambda/\mu} = \sum_{\nu \vdash n} c^{\lambda}_{\mu\nu} f^\nu\] where \(n = |\lambda|-|\mu|\), and hence a candidate witness would come from a pair of LR tableaux and an SYT of shape \(\nu\). However, we do not believe that general LR coefficients (without a constant number of rows) are in \(\#\mathsf{L}\). The NHLF formula reads \[f^{\lambda/\mu}=\sum_{D \in E(\lambda/\mu)} \frac{n!}{\prod_{u \in [\lambda] \setminus D}\mathsf{hl}_\lambda(u)},\] where the sum is over certain excited diagrams \(D\). Here, however, the individual terms \(n!/\prod_u \mathsf{hl}_\lambda(u)\) are usually not integers, and so they do not count anything and are not in \(\#\mathsf{L}\).
The plethysm product and the Kronecker product of Schur polynomials correspond to very natural operations on representations. Namely, the plethysm product corresponds to the composition of \(\mathrm{GL}_n\)-representations; the Kronecker product corresponds to the tensor product of \(S_n\)-representations. The plethysm coefficients \(a_{\mu[\nu]}^\lambda\) and Kronecker coefficients \(g(\lambda,\mu,\nu)\) are the structure constants of these products. In terms of symmetric polynomials, \[s_\mu\circ s_\nu = \sum_\lambda a^\lambda_{\mu[\nu]} s_\lambda \quad\text{and}\quad s_\mu*s_\nu = \sum_\lambda g(\lambda,\mu,\nu) s_\lambda.\] A family of \(\mathrm{GL}_2\)-plethysm coefficients coincides with certain rectangular Kronecker coefficients, see e.q. [7]: \[\label{eq:arectkron} a_{n[k]}^{(\lambda_1,\lambda_2)} = g((\lambda_1,\lambda_2),(n^k),(n^k)),\tag{16}\] but the general relationship remains mysterious with only few known inequalities, see e.g. [53]. We refer to these as Hermite coefficients, since they describe the spaces of covariants and invariants appearing in Hermite’s law of reciprocity.
Hermite coefficients satisfy the following well-known formula \[\label{eq:plet32as32diff} a_{n[k]}^{(nk-r,r)} = g((nk-r,r),(n^k),(n^k)) = p_r(n\times k) - p_{r-1}(n\times k),\tag{17}\] where \(p_r(n\times k)\) is the number of partitions of size \(r\), of length at most \(k\), and of width at most \(n\). This formula places Hermite coefficients in \(\mathsf{FP}\), since \(p_r(n\times k)\) can be computed recursively in time \(O(nk)\). Moreover, we have seen that \(p_r(n\times k)\) is contained in \(\#\mathsf{L}\) (Corollary [cor:partitions32in32a32box]), which places Hermite coefficients in \(\mathsf{GapL}\), which is a subset of \(\mathsf{FP}\). Note that both \(\mathsf{FP}\) and \(\mathsf{GapL}\) are superclasses of \(\#\mathsf{L}\). In Theorem [thm:Hermite], we show that these coefficients belong to another superclass of \(\#\mathsf{L}\), namely the class \(\#\mathsf{TISP}(\mathrm{poly}(n),\log^2(n))\) of functions counting the number of accepting paths of a non-deterministic \(\mathrm{poly}\)-time \(\log^2\)-space machine (see §2.5).
The function \((1^n\,0\,1^k\,0\,1^r) \mapsto a_{n[k]}^{(nk-r,r)}\) is in \(\#\mathsf{TISP}(\mathrm{poly}(n),\log^2(n))\cap \mathsf{GapL}\).
Are Hermite coefficients in \(\#\mathsf{L}\)?
Any representation of \(\mathfrak{sl}_2\) has a crystal. But whereas Clebsch–Gordan’s rule (or, more generally, Kashiwara’s tensor product rule) constructs the crystal of the tensor product of two representations, no such rule exists for the plethysm product. In [54] a conjecturally correct construction for this rule is given. It is however likely that this would not help solving Question [q:Hermite], in the same way that having an \(\mathsf{FL}\) computable raising operator for tensor products (Theorem [thm:crystal32operator]) does not place the relevant structure constants in \(\#\mathsf{L}\) (see Note [note:crystal32operators]).
In this section we use work with quantum integers \([n]=(q^n-q^{-n})/({q-q^{-1}})\), quantum factorials \([n]!=[n]\cdot[n-1]\cdots[1]\), and quantum binomials \(\genfrac{[}{]}{0pt}{}{n+m}{n}=[n+m]!/([n]![m]!)\), see [55]. A celebrated combinatorial construction by O’Hara [56] gives rise to the KOH32formula for quantum binomials due to Zeilberger [57], [58] \[\label{KOH32formula} \genfrac{[}{]}{0pt}{}{a+b}{b} = \sum_{\mu\vdash b} \, \prod_{m_j(\mu)\ne0} \genfrac{[}{]}{0pt}{}{(a+2)j - 2|\mu'_{\leqslant j}| + m_j(\mu)}{m_j(\mu)}, \tag{18}\] where \(|\mu'_{\leqslant j}| = \mu_1' + \cdots + \mu_j'\). This recurrence relation allows for expressing quantum binomials as products and sums of smaller quantum binomials iteratively, which continues to this day to facilitate the derivation of important consequences [59]–[61]. Of interest to us, it gives a positive combinatorial \(\#\mathsf{P}\)-formula for 16 , see Proposition [p:polytime] below.
A KOH tree (see Figure 8) is a rooted tree described as follows. Each vertex is labelled by a tuple \((\mu,a,b)\), where \(\mu \vdash b\) is a partition, and \(a\geqslant 0\) and \(b>0\) are integers. Each edge is labelled by a positive integer. If \(\mu = r^{m_r}\ldots2^{m_2}1^{m_1}\), then the vertex has a child for each \(m_j\ne 0\). Let \(J\) be the set of distinct row lengths of \(\mu\). Note that \(J\) indexes the set of children. The labels satisfy the following constraints:
The vertex is a leaf if and only if \(|\mu|=1\). In which case, we abbreviate the label as \(a\).
A vertex \((\mu,a,b)\) has an outgoing edge labelled \(j\) for each distinct row length \(m_{j}(\mu)\ne0\). The corresponding child is labelled by \((\mu^{(j)},a^{(j)},m_{j}),\) where \(\mu^{(j)}\vdash m_{j}\) and \[\label{eq:KOHtreea} a^{(j)} = (a+2)j - 2|\mu'_{\leqslant j}|.\tag{19}\]
This defines what a KOH tree is. Defining the left-to-right order of edges for a KOH tree makes it a plane tree, which then induces a left-to-right order on the leaves. In [8] the order is arbitrary, but for us it is beneficial to order the edges lexicographically from left to right with one notable exception: every edge labelled \(1\) is always the right-most edge, see Figure 8. In this way, the bijection in Proposition [p:bijection] preserves the order of the leaves. A marked KOH tree of type \((n,k,r)\) is a KOH tree whose root label is some tuple \((-,n,k)\) (i.e., the first entry of the tuple is an arbitrary partition of \(k\)) and in which each leaf \(a_i\) is marked by an integer \(t_i\) satisfying \(t_1=0\),
\(t_{i-1}\leqslant t_i\leqslant a_i + t_{i-1}\), and
\(t_i\leqslant\big(\sum_{j=1}^{i-1} a_j\big) - t_{i-1}\),
for all \(1 < i \leqslant K\), and \(t_K = r+\big(\sum_{j=1}^{K} a_j\big)/2-nk/2\).
Let \(\mathcal{T}(n,k,r)\) be the set of marked KOH trees of type \((n,k,r)\). In [8], it is shown that Hermite coefficients are counted by these trees: \[g((nk-r,r),(n^k),(n^k)) = a_{n[k]}^{(nk-r,r)} = \#\mathcal{T}(n,k,r).\] This is a \(\#\mathsf{P}\) formula. It is natural to ask whether this construction can be modified to give a \(\#\mathsf{L}\) formula. That is, whether there exists a verifier \(\mathsf{NL}\) machine which checks the validity of a KOH tree. A naive approach is to encode a KOH tree via its Depth-First-Search traversal and check the defining conditions above. There are several obstacles to this approach. For instance, we saw in §4 how one cannot store the partition labelling the root in a log-space machine. Moreover, KOH trees can be polynomially deep, requiring a polynomial amount of counters just to traverse them. In the rest of this section we partially overcome these technical difficulties and prove Theorem [thm:Hermite], which gives a \(\log^2\)-space verifiable formula.
We define below a compressed version of a KOH tree, which is logarithmically deep. We also avoid using partitions as labels of the nodes, by invoking the next elementary lemma about the frequency notation of partitions.
Fix \(n\). The map \[\lambda \mapsto \big(m_1(\lambda), m_2(\lambda), \ldots, m_{\lambda_1}(\lambda),0^{n -\lambda_1}\big)\] is a bijection from the set of partitions of \(n\) to the set \[\textstyle \{(m_1,\ldots,m_{n })\mid \sum_j j m_j=n \} \subset (\N_0)^{n }.\] We have \(\ell(\lambda)=\sum_i m_i(\lambda)\) and \(\lambda_j' = \ell(\lambda) - \sum_{i=1}^{j-1} m_i(\lambda)\) and \(|\lambda| = \sum_j j\cdot m_j(\lambda) = n\).
Proof. Clear from the definition of a partition. ◻
For example, the partition \((5,3,3,1,1,1,1)=(5^1\,3^2\,1^4)\) has a frequency vector (i.e., the list of exponents) \((4,0,2,0,1)\) and hence Lemma [lem:partition] maps \((5,3,3,1,1,1,1,0,\ldots,0)\) to \((4,0,2,0,1,0,\ldots,0)\).
Next, we present a lemma that allows for the computation of the values \(a\) in the label of an internal node (a non-leaf node) of a KOH tree from the remaining available information. Given a node \(v\) in an edge-labelled rooted tree, we denote by \(v\mathord{\uparrow}\) its parent, and by \(v\mathord{\downarrow}_j\) its child via the edge labelled \(j\). For any list of edge labels \((j_1,\ldots,j_y)\) we write \(v\mathord{\downarrow}_{(j_1,\ldots,j_y)} := (v\mathord{\downarrow}_{(j_1,\ldots,j_{y-1})})\mathord{\downarrow}_{j_y}\). For any two nodes \(V\) and \(v\) in \(T\), if there is a path from \(V\) to \(v\), then it is unique and we denote it by \(P_T(V,v)\). For any node \(v\) of a KOH tree, define its main ancestor to be the earliest ancestor \(V\) of \(v\) such that the edges in the path \(P_T(V,v)\) have labels \((j\, 1^x)\) for some \(j\geqslant 1\) and some \(x\geqslant 0\). Note that \(v = V\mathord{\downarrow}_{j,1^x}\).
Let \(v\) be a node of a KOH tree \(T\) different from the root. Let \(V = (\mu,a,b)\) be the main ancestor of \(v\). Write \[\Big(\mu^{(j,1^y)}, a^{(j,1^y)}, b^{(j,1^y)}\Big)\] for the label of \(V\mathord{\downarrow}_{j,1^y}\). Then for all \(x\geqslant 0\) we have \[a^{(j,1^x)} = 2x + (a+2)j - 2|\mu'_{\leqslant j}| - 2\sum_{y=0}^{x-1} \ell(\mu^{(j,1^y)}).\]
Proof. In the base case \(x = 0\) the right-most sum is empty and the statement holds by 19 . For the induction step (\(x\geqslant 1\)), we calculate \[\begin{align} a^{(j,1^x)} &\stackrel{\eqref{eq:KOHtreea}}= (a^{(j,1^{x-1})}+2)\cdot1 - 2 \ell(\mu^{(j,1^{x-1})})\\ &\stackrel{\mathrm{ind.\,hyp.}}{=} 2x + (a+2)j - 2 |\mu'_{\leqslant j}| - 2 \sum_{y=0}^{x-1}\ell(\mu^{(j,1^{y})}). \qedhere \end{align}\] ◻
We are now ready to introduce the main object of study of this section, the small KOH witnesses. See Figure 8 for an example and Proposition [p:bijection] for a construction of small KOH witnesses from marked KOH trees.
A small KOH witness of type \((n, k, r)\) is a labelled plane rooted tree \(T\) and a subset \(L\) of its leaves, the so-called set of true leaves, such that
each edge is labelled by a pair \((j, x)\in\N\times\N_0\),
each true leaf \(v\) is labelled by a pair \((a,t)\in\N_0 \times\N_0\), where we say that \(a\) is the label and \(t(v)=t\) is the mark, and we define \(\ell(v)=1\), \(m_1(v)=1\), and \(b(v)=1\) (see 20 and [sw:a] for the definition of \(a(v)\)),
each of the remaining nodes (so-called internal nodes, even though these can be leaves, but not true leaves) is labelled by a triple \((\ell,m_1,b)\in\N\times\N_0\times\N\), and we set \(\ell(v)=\ell\), \(m_1(v)=m_1\), and \(b(v)=b\),
and the labels and marks are subject to the following numbered relations [sw:lex]–[sw:tK].
The outgoing edges of a node are lexicographically ordered.
Only the root may have an outgoing edge labelled \((1,0)\).
If a node has an outgoing edge labelled \((j,x)\) for some \(x>0\) then it also has an outgoing edge \((j,x-1)\).
If a node has an outgoing edge labelled \((j,x)\) then it has no other outgoing edge labelled \((j,x)\).
For any node \(v\) different to the root, let \(v\mathord{\uparrow}\) be its parent. For any node which is not a leaf, let \(v\mathord{\downarrow}_{j,x}\) be its unique child along an edge labelled \((j,x)\), if it exists. If \(w\) is not a well-defined node, let \(b(w) = 0\).
Let \(e(v) = (v\mathord{\uparrow}, v)\) be the unique incoming edge to \(v\). Let \(j(v)\) and \(x(v)\) be a shorthand for the labels of \(e(v)\).
For every non-root \(v\) it holds that \[b(v\mathord{\uparrow}\mathord{\downarrow}_{j(v),x(v)+1}) + \sum_{j>1} b(v\mathord{\downarrow}_{j,0}) = \ell(v).\]
For the root \(R\), it holds \(\sum_{j} j\cdot b(R\mathord{\downarrow}_{j,0}) = k\).
For each non-root \(v\) we have \[m_1(v\mathord{\downarrow}_{j,x})=b(v\mathord{\downarrow}_{j,x+1}).\] For the root \(v\), we have \(m_1(v)=b(v\mathord{\downarrow}_{1,0})\).
For any node with outgoing edges, it holds \[b(v\mathord{\uparrow}\mathord{\downarrow}_{j(v),x(v)+1}) + \sum_{j} j\cdot b(v\mathord{\downarrow}_{j,0}) = b(v).\]
For any node \(v\) and \(j\in\N\), define recursively the column sum operator \[c_\Sigma(v,1) = \ell(v)\] and \[c_\Sigma(v,j) = c_\Sigma(v,j-1) + \ell(v) -m_1(v) - \sum_{1<i<j} b(v\mathord{\downarrow}_{i,0}) .\] Define recursively \[\label{eq:a} a(v) = 2x(v) + \big(a(v\mathord{\uparrow}) + 2\big)j(v) - 2c_\Sigma(v\mathord{\uparrow},j(v)) - 2\sum_{y< x(v)}\ell(v\mathord{\uparrow}\mathord{\downarrow}_{j,y}),\tag{20}\] where the root \(R\) satisfies \(a(R) = n\).
While performing a left-to-right Depth-First-Search on the tree, at arrival to a true leaf \(v\), let \(\mathsf{left}(v)\) be the last encountered true leaf. If \(v_1\) is the first true leaf, then set \(s(v_1)=a(v_1)\) and for all remaining true leaves let \[s(v) = a(v) + s(\mathsf{left}(v)).\]
The first encountered true leaf \(v_1\) satisfies \(t(v_1)=0\).
For any other true leaf \(v\) it holds
\(t(\mathsf{left}(v))\leqslant t(v) \leqslant a(v) + t(\mathsf{left}(v))\), and
\(t(v)\leqslant s(\mathsf{left}(v)) - t(\mathsf{left}(v))\).
For the last true leaf \(v\) ever encountered, \(t(v) = r+\big(s(v)-nk\big)/2\).
Given a marked KOH tree \(T\), construct a new tree \(T'\) as follows.
There is a one-to-one correspondence between nodes of \(T\) and nodes of \(T'\). A leaf of \(T\) labelled \(((1),a,1)\) and marked with \(t\) corresponds to a true leaf with label \(a\) and mark \(t\) in \(T'\). The leaves in \(T\) from left to right appear in the same order as the true leaves in \(T'\). Any other node \((\mu,a,b)\) of \(T\) corresponds to an internal node of \(T'\) labelled \((\ell(\mu),m_1(\mu),b)\).
For each path \(P_T(u,v)\) whose edges are labelled \((j,1^x)\), \(j>1\), \(x\geqslant 0\), we create an edge \((u,v)\) in \(T'\) with label \((j,x)\), and for paths starting at the root we also do so for \(j=1\).
Turn the resulting graph into a plane rooted tree, where the root is the node of \(T'\) corresponding to the root of \(T\), and where outgoing edges of any given node are ordered lexicographically.
Then \(T'\) is a small KOH witness. Furthermore, this is a bijection between the set \(\mathcal{T}(n,k,r)\) of marked KOH trees and the set \(\mathcal{T}'(n,k,r)\) of small KOH witnesses of the same type.
Proof. Suppose \(T\) is a marked KOH tree of type \((n,k,r)\) and construct \(T'\). We begin by showing that \(T'\) is a small KOH witness of type \((n,k,r)\).
Conditions [sw:lex]–[sw:unique] of the definition of a small KOH witness are trivially satisfied. Condition [sw:len] holds since the outgoing edges of a node \((\mu,a,b)\) in \(T\) correspond to the various parts of \(\mu\), and the \(b\)-values of the children sum up to \(\ell(\mu)\). Similarly, conditions [sw:k] and [sw:b] hold because \(\sum_j j\cdot m_j(\mu) = |\mu|\). Condition [sw:mone] follows directly from Definition [de:KOH]. Condition [sw:a] holds by Lemma [lem:a]. Conditions [sw:t1]–[sw:tK] hold by definition of a marked KOH tree.
We now show how given a small KOH witness \(T'\) one can recover \(T\). First note that for any internal node \(v\) of \(T'\) different from the root one can recover the triple \((\mu,a,b)\) labelling the corresponding node of \(T\) as follows: \(a\) is given by the function \(a(v)\) (see Lemma [lem:a]), \(b\) is given by \(b(v)\) (Lemma [lem:partition]), and \(\mu\) is completely determined by the formulas \[\begin{align} \mu'_1 &= \ell(v),\\ \mu'_2 &= \ell(v) - b(v\mathord{\uparrow}\mathord{\downarrow}_{j(v),x(v)+1}),\\ \mu'_j &= \ell(v) - b(v\mathord{\uparrow}\mathord{\downarrow}_{j(v),x(v)+1}) - \sum_{1<i<j} b(v\mathord{\downarrow}_{i,0}) \end{align}\] for any \(j\geqslant 3\) (again by Lemma [lem:partition]). For the root \(R\), a similar set of formulas hold, by replacing \(b(v\mathord{\uparrow}\mathord{\downarrow}_{j(v),x(v)+1})\) by \(b(v\mathord{\downarrow}_{1,0})\). Similarly, for any true leaf labelled with \(a\) and marked with \(t\), the corresponding leaf of \(T\) is labelled by \(((1),a,1)\) and marked by \(t\). For any edge \((u,v)\) labelled \((j,0)\) of \(T'\), create an edge labeled \(j\) between the node of \(T\) corresponding to \(u\) and the node of \(T\) corresponding to \(v\). For any edge \((u,v)\) labelled \((j,x)\) with \(x\geqslant 1\), create an edge labeled \(1\) between the node of \(T\) corresponding to \(u\mathord{\downarrow}_{j,x-1}\) and the node of \(T\) corresponding to \(v\).
Since \(b(v)=1\) for true leaves, a leaf of \(T\) must correspond to a partition of \(1\). Conditions [sw:root], [sw:x-1], and [sw:unique] ensure that any node of \(T\) has at most one outgoing edge labelled \(j\) for each \(j\). Conditions [sw:len]–[sw:b] ensure that for each node \((\mu,a,b)\) of \(T\), then \(\mu\) is a partition of \(b\) and the outgoing edges correspond to the distinct parts of \(\mu\) (see Lemma [lem:partition]). Condition [sw:a] checks the defining property of \(a\) is satisfied, thanks to Lemma [lem:a]. Finally, Condition [sw:lex] fixes an order of the leaves of \(T\) and [sw:t1]–[sw:tK] ensure that the marks of these leaves are consistent with those of a KOH tree.
It is clear that these two processes are inverse to each other. ◻
A small KOH witness of type \((n,k,r)\) has \(O(\log(k))\) depth.
Proof. Let \(T'\) be a small KOH witness and let \(T\) be the corresponding marked KOH tree. Recall that each node \(u\) of \(T'\) corresponds to a node of \(T\) labelled by a triple \((\mu,a,b)\). Suppose \(u\) is not the root. If \(v\) is a child of \(u\) in \(T'\), then there exists a path in \(T\) in which there is one edge labelled \(j>1\). Thus the partition labelling \(v\) in \(T\) is of size at most \(|\mu|/j = b/j \leqslant b/2\).
Consequently, a path from the root \((\lambda,n,k)\) to a leaf of \(T'\) can be of length at most \(\log_2(k)+1\). ◻
A small KOH witness of type \((n,k,r)\) has at most \(k\) true leaves.
Proof. We use Proposition [p:bijection] and instead show that a KOH tree of type \((n,k,r)\) has at most \(k\) leaves.
Let \(T(\mu,n,k)\) denote a marked KOH tree with root \((\mu,n,k)\). The proof is by induction on \(k\). If \(k=1\) then the tree \(T(\mu,n,k)\) consists of one vertex which is the leaf. Suppose the trees of type \((n',k',r')\) with \(k'\leqslant k-1\) have at most \(k'\) many leaves. Consider the children of the root of \(T(\mu,n,k)\). Let \(\mu=(1^{m_1}2^{m_2}\ldots r^{m_r})\). First, suppose that \(m_1 \neq k\) (have \(m_i \leqslant k/i <k\) for all \(i\geqslant 2\)). Then the children vertices are \(v_j = (\mu^{(j)}, a^{(j)}, m_j)\) for \(j\in J:=\{ j: m_j\geqslant 1\}\) (the set of row lengths of \(\mu\)). We have that \(\sum_j j m_j = |\mu|=k\) and hence \(\sum_j m_j \leqslant k\). Finally, the set of leaves of \(T(\mu,n,k)\) is the union of the sets of leaves of \(T(v_j)\). By induction, each \(T(v_j)\) has at most \(m_j<k\) many leaves and so the total number of leaves of \(T(\mu,n,k)\) is \(\leqslant\sum_j m_j \leqslant k\).
Next, suppose that \(m_1=k\). Then \(n_1=(n+2)1-2k=n +2(1-k)<n\) and there is exactly one child \((\mu^{(1)},a^{(1)},k)\). If \(\mu^{(1)} \neq (1^k)\) the above analysis applies. Otherwise we have a path of vertices \(( (1^k),a^{(j)},k)\) with \(a^{(j)}\) strictly decreasing until it branches out, at which point the above analysis applies, and the proof is done by induction. ◻
The sum of all values \(a\) at the true leaves of a small KOH witness, as well as a KOH tree, is at most \(nk\).
Proof. We use Proposition [p:bijection] and instead show that the sum of the \(a\)-values at all leaves of a KOH tree of type \((n,k,r)\) is at most \(nk\). To see the last part, we use the fact that the KOH tree definition from [8] is a direct unravelling of the KOH formula 18 , and the intermediate label \(a^{(j)}\) computed via equation 19 are the integers appearing in the binomials of 18 , so we have \[\genfrac{[}{]}{0pt}{}{a+b}{b} = \sum_{\mu\vdash b} \, \prod_{m_j(\mu)\ne0} \genfrac{[}{]}{0pt}{}{a^{(j)} + m_j(\mu)}{m_j(\mu)}.\] Since these are Laurent polynomials in \(q\) with positive coefficients, the maximal degrees of the products do not exceed the maximal degree on the left, which is \(ab\). So for every vertex labelled \((\mu,a,b)\) we have \[\sum_j a^{(j)}m_j(\mu) \leqslant ab,\] where the labels of its children are \((-,a^{(j)},m_j(\mu))\). The KOH formula is applied recursively to each quantum binomial coefficient, giving the branching in the vertices of the tree, and the leaves appear when \(b=1\). Expanding the above inequality along the tree we get that the sum of the leaf labels under the vertex \((\mu,a,b)\) is at most \(ab\), and the claim follows since the root has \((a,b) =(n,k)\). ◻
A KOH tree of type \((n,k,r)\) has depth \(O(nk)\).
Proof. We use the idea from the proof of Lemma [lem:sum32of32a32values]. For a vertex \(v\) labeled by \((\mu,a,b)\), let \(\phi(v) = ab\), we will show that the \(\phi\) values decrease strictly from a parent to a child as long as the child is not a leaf.
Let \(v\) be an internal vertex, so \(b>1\). First, suppose that \(\mu=(1^b)\), then \(v\) has only one child \(w\) with a label \((\mu^1,a_1,b_1)\) where \(\mu^1 \vdash b_1=b\) and \(a_1 = (a+2)1 -2b \leqslant a-2\) since \(b\geqslant 2\). Then \[\phi(w) =a_1b_1 \leqslant(a-2)b = \phi(v) -2b \leqslant\phi(v)-4.\]
Next, if \(\mu = (1^{m_1}2^{m_2}\ldots)\) with \(m_j \geqslant 1\) for some \(j>1\), we consider the children \(w^{(j)}\) corresponding to \(m_j \geqslant 1\) with labels \((\mu^{(j)}, a^{(j)},m_j)\). We have that \[\phi(w^{(j)}) = ( (a+2)j -2|\mu'_{\leqslant j}|)m_j =a\cdot(jm_j) -2m_j\cdot ( |\mu'_{\leqslant j}|-j).\] For \(j=1\), if \(m_1 >0\) we have \(\mu'_1=m_1+\cdots = \ell(\mu) \geqslant 2\), since the partition is not just a single row or column. At the same time, \(1m_1 = b - \sum_{j \geqslant 2} jm_j \leqslant b-2\), since \(m_j\geqslant 1\) for some \(j\geqslant 2\). So \(\phi(w^{(1)}) \leqslant a(1m_1)-2 \leqslant a (b-2)-2\leqslant ab -4=\phi(v) -4\).
For \(j>1\) with \(m_j>0\) we have that \(|\mu'_{\leqslant j}|= \sum_{i\leqslant j} (m_i+m_{i-1}+\cdots+m_b) >j\) unless \(\mu=(b)\) and so \(\phi(w^{(j)}) \leqslant a\cdot(jm_j)-2 \leqslant\phi(v)-2\). If \(\mu=(b)\) then \(w\) is a leaf and \(\phi(w)=\phi(v)\).
Hence in all cases, but possibly \(w\) being a leaf, we have that \(\phi(w) \leqslant\phi(v)-2\).
For every path from the root to a leaf \(v_0 \to v_1 \to v_2 \to \cdots \to v_s\) we have that \(nk-2s=\phi(v_0) -2s \geqslant\phi(v_1)-2(s-1) \geqslant\cdots \geqslant\phi(v_{s-1}) -2 \geqslant\phi(v_s)-2 \geqslant-2,\) so \(s < (nk+2)/2\), and the path has at most \(\lfloor nk/2 \rfloor+2\) many vertices. ◻
A small KOH witness and a KOH tree of type \((n,k,r)\) have \(O( nk^2 )\) many nodes.
Proof. From the bijection between nodes, the number of vertices in the small witness and the original tree are the same per Proposition [p:bijection]. We will bound the number of KOH tree vertices. First, the number of leaves in a KOH tree is at most \(k\), which is Lemma [lem:at32most32b32leaves]. For each leaf, consider the shortest path in the tree to the root, by Lemma [lem:koh32tree32depth] it has \(O(nk)\) vertices. Every vertex of the tree lies on (at least) one such path (a path that starts from a leaf below it), thus the total number of vertices is bound by the number of leaves times the maximal length of these paths, which gives \(O(nk^2)\). ◻
For the sake of concreteness, we present an encoding of a small KOH witness over a finite alphabet.
Tuples are encoded with parentheses () and commas, as in usual mathematical notation, and semicolons are used to separate the marks.
non-negative integers are encoded in their decimal presentation.
A true leaf is encoded as \(\texttt{trueleaf(}a\texttt{;}t\texttt{)}\), where \(a\) is the label and \(t\) is the mark.
The subtree of an internal node is encoded either as \[\texttt{rootlabel(}\ell_0\texttt{)}\] if it has no children, or otherwise as \[\begin{align} \texttt{tree(}&\texttt{rootlabel(}\ell_0\texttt{),}\\ &\texttt{edge(edgelabel(}\ell_1\texttt{),}t_1\texttt{),}\\ &\texttt{edge(edgelabel(}\ell_2\texttt{),}t_2\texttt{),}\ldots\texttt{)} \end{align}\] where \(\ell_0\) is the node label and \(\ell_i\) for \(i\geqslant 1\) are edge labels, and \(t_i\) are trees, i.e., either leaf nodes or subtrees of non-leaf nodes.
See Figure 9 for an example.
Given \(1^n\,0\,1^k\,0\,1^r\) on the input tape, we can read the encoding of a small KOH witness from left to right once and verify that it is a small KOH witness of type \((n,k,r)\) using only logarithmic space, as follows.
While reading, we ensure the syntactic correctness of the string of symbols. For this, we store the number of opened parentheses, and the labels of the unclosed functions, e.g., edge or edgelabel.
We always fully read and store what we read until we reach the closing parenthesis of a node label. We then check the validity and update the data, and then keep reading.
When visiting an edge in any level \(K\) of the tree, we check conditions [sw:lex], [sw:root], [sw:x-1], [sw:unique] before deleting the label of the previously visited edge in level \(K\).
When visiting a node \(v\), let \(P_T(R,v)\) be the path from root to \(v\). For each level of this path, we store
the current value of the sum \(\sum_{j=1}^{i} b(v\mathord{\downarrow}_{j,0})\),
the label \(\ell(v)\) of the last visited node and its parent edge, in case it is needed for [sw:len],
the label \(b(v)\)
the label \(m_1(v)\) and \(m_1(v\mathord{\uparrow}\mathord{\downarrow}_{j(v),x(v)-1})\) (the latter is used for verifying [sw:mone])
the current value of the sum \(\sum_{j=1}^{i} j\cdot b(v\mathord{\downarrow}_{j,0})\),
the current value of the sum \(c_\Sigma(v\mathord{\uparrow}, j(v))\),
the current value of the sum \(\sum_{y=1}^x \ell(v\mathord{\uparrow}\mathord{\downarrow}_{j,1^y})\).
We then check [sw:len], [sw:mone], and [sw:b]. We can now reset and update all counters for this level.
We keep a counter with the value of the last visited true leaf and the current value of the sum \(s(v_i) = a(v_1) + \cdots + a(v_i)\). When entering a true leaf, we check [sw:t1] and [sw:tK], and then update these counters. We also check [sw:a] and [sw:marks], which requires recursive computations of the value of \(a(-)\) at every node in the path to the root. Note that the value \(a(R)=n\) can be accessed multiple times.
The above Turing machine with a read-once left-to-right witness tape checks conditions [sw:lex]–[sw:tK] of Definition [de:witness] in \(O(\log(n+k+r)^2)\)-space.
Proof. We just need to bound the required space. Storing \(n\), \(k\), and \(r\) requires \(O(\log_2(n+k+r))\) space. For the counters checking the markings of true leafs, begin by noting that there are at most \(k\) true leaves (Lemma [lem:at32most32b32leaves]) and thus the counters are upper bounded by \(S := (a_1 + a_2 + \cdots + a_K) \leqslant nk\) by Lemma [lem:sum32of32a32values]. This is at most polynomial in \(n\) and \(k\) and thus takes \(O(\log_2(n+k))\) space to store.
For the remaining counters we introduce some notation. There is a family of counters per level of the small KOH witness \(T'\). Let \(T\) be the corresponding marked KOH tree. Let \(\mathcal{L}'_K\) be the set of nodes of \(T'\) at level \(K\), and let \(\mathcal{L}_K\) be the corresponding nodes in \(T\). Every other counter in level \(K+1\) is upper-bounded by the size of the largest partition \(\lambda^{(K)}\) among those appearing in the labels of \(\mathcal{L}_K\) (note that the \(a\)-values are not stored at a vertex, and only one column sum is stored at a vertex). In turn, this partition is of size at most \(|\lambda^{(K-1)}|/2\) for all \(K>1\), as we argued in the proof of Lemma [lem:log32depth], whereas \(|\lambda^{(1)}|\) and \(|\lambda^{(2)}|\) are at most \(k\). There is a constant amount of counters per level, so the total amount of space used is at most \[O\Big( \log_2(k) + \log_2(k/2) + \log_2(k/4) + \cdots + \log_2(k/2^{\log_2(k)})\Big)\] by Lemma [lem:log32depth]. Since there are \(\log_2(k)\) many summands, each of which is at most \(\log_2(k)\), this quantity simplifies to \(O(\log_2(k)^2)\). ◻
The above Turing machine with a read-once left-to-right witness tape checks conditions [sw:lex]–[sw:tK] of Definition [de:witness] in poly-time.
Proof. Let \(T\) be a small KOH witness. By Lemma [lem:poly32many32nodes], it has polynomially many nodes. After visiting each node, we update a constant number of counters, taking \(\mathrm{poly}\)-time for each counter. Hence the total time required is polynomial. ◻
Proof of Theorem [thm:Hermite]. The Hermite coefficients are in \(\mathsf{GapL}\) by Corollary [cor:partitions32in32a32box] and 17 . By [8], these coefficients count the number of KOH trees of type \((n,k,r)\). By Proposition [p:bijection], these are in bijection with small KOH witnesses. By Propositions [p:polylog] and [p:polytime], the Turing machine with a read-once left-to-right witness tape constructed in this section checks the validity of a small KOH witness in poly-time and \(\log(n+k+r)^2\)-space. ◻
We now consider the case of plethysm coefficients \(a^\lambda_{\mu[k]}\) for any partition \(\mu \vdash n\) and \(\lambda=(nk-r,r)\). As explained in [8], these cover all non-trivial cases of plethysms \(a^\lambda_{\mu[\nu]}\) when \(\lambda\) has two rows. In [8] it is shown that \(a^\lambda_{\mu[k]}\) count the number of certain marked GOH trees, which are rooted trees with subtrees given by the marked KOH trees and the markings respect inequalities relating them to each other and to the leaf labels. This section is dedicated to the proof of the following theorem.
Fix a constant \(C\). Let \(\mu\) be a partition of length at most \(C\). The function \((1^{\mu_1}\,0\,1^{\mu_2}\,0\,\dots\,0\,1^{k}\,0\,1^r) \mapsto a^\lambda_{\mu[k]}\) for \(\lambda=(nk-r,r)\) where \(|\mu|=n\) is in \(\#\mathsf{TISP}(\mathrm{poly}(n),\log^2(n))\cap \mathsf{GapL}\).
While the approach from Section 6.3 can be modified to give the GOH trees, here we will use the KOH verifier machine in a more direct manner as a blackbox.
Note that \[s_{(M+m,M)}(1,q) = q^{M} (1+q+\cdots+q^m) = q^M \frac{1-q^{m+1}}{1-q},\] to get \[\label{eq:pleth95schur} a^{(nk-r,r)}_{\mu[k]} =\mathrm{coeff}_{q^r}(1-q)s_\mu\circ s_k(1,q) =\mathrm{coeff}_{q^r}(1-q)s_\mu(1,q,\ldots,q^k).\tag{21}\] The \(q\)-analogue of the hook-content formula [23] is \[s_\lambda(1,q,\ldots,q^{k}) = q^{\sum_i(i-1)\lambda_i} \prod_{u \in [\lambda]} \frac{1-q^{k+1+\mathsf{ct}(u)}}{1-q^{\mathsf{hl}(u)}}\,.\] When expanded as a polynomial \(s_\lambda(1,q,\ldots,q^{k})= \sum_r c_r(\lambda,k) q^r\), the coefficients are given by \[c_r(\lambda,k) = \#\Big\{T\in\mathrm{SSYT}_{k+1}(\lambda) \Big| \sum_{u\in[\lambda]} \big(T(u)-1\big) = r\Big\}.\]
Expand the Schur function specialization \(s_\lambda(1,q,\ldots,q^{k}) = \sum_r c_r(\lambda,k) q^r\). Then the function \((1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots\,0\,0\,1^k\,0\,0\,1^{r}) \mapsto c_r(\lambda,k)\) is in \(\mathsf{GapL}\).
Proof. First note that we must have \(k+1\geqslant\ell(\lambda)\), as otherwise the Schur specialization is 0. The expression via the \(q\)-hook-content formula is a polynomial in \(q\), but it can be computed as an infinite series in \(q\) where it happens that the larger coefficients cancel. Namely, let \(C = \sum_i(i-1)\lambda_i\) and expand each term \(1/(1-q^{\mathsf{hl}(u)})\) as a geometric sum, we then have \[\begin{align} q^C \prod_{u \in [\lambda]} \frac{ 1-q^{k+1+\mathsf{ct}(u)}}{1-q^{\mathsf{hl}(u)}} = q^C \prod_{u \in [\lambda]} (1-q^{k+1+\mathsf{ct}(u)}) (1+q^{\mathsf{hl}(u)} +q^{2\mathsf{hl}(u)}+\cdots) \\ = \sum_{D \subseteq [\lambda]} (-1)^{|D|} \sum_{\mathbf{r}} q^C \prod_{u \in [\lambda]\setminus D} q^{r_u \mathsf{hl}(u)} \prod_{u \in D} q^{k+1+\mathsf{ct}(u) +r_u \mathsf{hl}(u)}, \end{align}\] where the sum is over subsets \(D\) of boxes in the Young diagram \([\lambda]\) and the vector \(\mathbf{r}\) contains one non-negative integer entry for every box \(u\in [\lambda]\). To obtain the coefficient \(c_r(\lambda,k)\) of \(q^r\) in \(s_\lambda(1,q,\ldots,q^{k})\) we need to equate the exponents to \(r\) and select only those. The positive terms are those indexed by a subset \(D\) of even cardinality; let \[c_+(r) = \#\Big\{ (D, \mathbf{r})\mid D \subseteq [\lambda], ~ |D|~\text{even}, ~C+\!\!\sum_{u \in [\lambda]} r_u \mathsf{hl}(u) + \!\sum_{u \in D} (k+1+\mathsf{ct}(u)) =r\Big\}\] and likewise, set \(c_-(r)\) for the subsets \(D\) of odd cardinality. Then \(c_r(\lambda,k) = c_+(r) - c_-(r)\), and we need to show that the functions sending \((1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots\,0\,0\,1^k\,0\,0\,1^{r})\) to \(c_+(r)\) and \(c_-(r)\) are in \(\#\mathsf{L}\).
The witness for \(c_+\) (for \(c_-\) is completely analogous) is a word of 5 symbols \(\{0,1,d,\mathrm{``},\mathrm{''},\mathrm{``};\mathrm{''}\}\) as follows: \(w=d^{e_1}r_1,d^{e_2}r_2,d^{e_3}r_3,d^{e_4}r_4,\ldots,r_{\lambda_1};r_{\lambda_1+1},\ldots\) with \(e_j=1\) if the \(j\)th cell is in \(D\) (reading row by row, where cells are separated by commas and rows by semicolons). To read and check the witness, the working tape has counters \(\mathtt{C},\mathtt{d}\leftarrow 0,\mathtt{i}\leftarrow 1,\mathtt{j}\leftarrow 1,\mathtt{h},\mathtt{R}, \mathtt{r}\). Set \(\mathtt{C}\leftarrow C\) in binary, which we can do because \(C\leqslant|\lambda|^2\). We read the witness row by row, where the row index counter \(\mathtt{i}\) starts from one, and at every semicolon increases by 1. The column index counter \(\mathtt{j}\) resets at 1 after every semicolon and is increased by 1 each time we read a comma. At each semicolon we check that \(\mathtt{j}=\lambda_i\). Initialise the counter \(\mathtt{R}\leftarrow r-\mathtt{C}\), which will keep track of the sum of exponents. Every time we read a symbol \(d\) we decrease \(\mathtt{R}\) by \(k+1+\mathtt{j}-\mathtt{i}\), and increase \(\mathtt{d}\) by 1. We also compute the hook length \(\mathtt{h} \leftarrow \lambda_i - \mathtt{i}+\lambda_j'-\mathtt{j}+1\) for the box at \((\mathtt{i},\mathtt{j})\) (read the number of 0s in the input every time there at least \(\mathtt{j}\) many 1s in the string between two 0s, that would give \(\lambda_j'\)). Set \(\mathtt{R} \leftarrow \mathtt{R} - \mathtt{h}*\mathtt{r}\), where \(\mathtt{r}\leftarrow r_u\) from the witness at that step. In the end, check if \(\mathtt{R}=0\) and \(\mathtt{d}\) is even to accept the witness. ◻
It is easy to see that if \(\ell(\lambda)\) is a constant then computing the coefficients \(c_r(\lambda,k)\) is in \(\#\mathsf{L}\).
Is the function \((1^{\lambda_1}\,0\,1^{\lambda_2}\,0\,\dots\,0\,0\,1^k\,0\,0\,1^{r}) \mapsto c_r(\lambda,k)\) in \(\#\mathsf{L}\) for partitions \(\lambda\) of unbounded length.
The function \((1^{\mu_1}\,0\,1^{\mu_2}\,0\,\dots\,0\,1^{k}\,0\,1^r) \mapsto a^\lambda_{\mu[k]}\) for \(\lambda=(nk-r,r)\) where \(|\mu|=n\) is in \(\mathsf{GapL}\).
Proof. From 21 we get \(a^\lambda_{\mu[k]}=c_r(\mu,k)-c_{r-1}(\mu,k)\). Use Theorem [thm:schur95q-specialization] to conclude. ◻
We now turn to show that \(\mathrm{GL}_2\)-plethysm coefficients are in \(\#\mathsf{TISP}(\mathrm{poly}(n),\log^2(n))\) (when \(\mu\) is of bounded length), which is the second half of Theorem [thm:GL232in32L2]. To show that we use equation 21 and the the formula for the evaluation of the Schur functions from [62] using the Kirillov–Reshetikhin formula [63]. It requires the following definition.
Let \(\lambda\) is a partition, let \(n = |\lambda|\) and \(\ell = \ell(\lambda)\). An admissible \(\lambda\)-configuration is a sequence of partitions \[\underline{\nu} = (\nu^{(0)}, \nu^{(1)}, \ldots, \nu^{(\ell)})\] such that
\(\nu^{(0)} = (1^n)\),
\(|\nu^{(i)}| = \sum_{j \geqslant i+1} \lambda_j\) for \(0 \leqslant i \leqslant\ell\) (so \(\nu^{(\ell)} = \emptyset\)), and
\(P_j^i(\underline{\nu}) := |\alpha^{(i+1)}_{\leqslant j}| - 2|\alpha^{(i)}_{\leqslant j}| + |\alpha^{(i-1)}_{\leqslant j}|\geqslant 0\) for all \(1 \leqslant i < \ell\) and \(1 \leqslant j \leqslant n\),
where we write \(\alpha^{(i)} := (\nu^{(i)})'\) for convenience.
Let \(\mathrm{AC}^\lambda_m\) be the set of \(\lambda\)-admissible configurations \(\underline{\nu}\) such that \(\ell(\nu^{(1)}) = m\).
The following identity shows the decomposition of a plethysm of Schur polynomials into products of quantum binomial coefficients, which establishes the unimodality directly.
Let \(\circ\) denote the plethysm product. Then \[s_\lambda\circ s_k (q,q^{-1}) = \sum_{m=0}^k \genfrac{[}{]}{0pt}{}{n+k-m}{k-m} \sum_{\underline{\nu}\in\mathrm{AC}^\lambda_m} \prod_{\substack{1 \leqslant i < \ell \\ 1 \leqslant j \leqslant n}} \genfrac{[}{]}{0pt}{}{P_j^i(\underline{\nu}) + m_j(\nu^{(i)})}{m_j(\nu^{(i)})}. \label{GOH}\tag{22}\]
Proof. The classical \(q\)-analogue of this identity expresses \(s_\lambda\circ s_k(1,q)\) as polynomial in \(q\)-binomials and is proven in [62]. The \(q\)-binomials are all centered around the same unimodal peak. Homogenise the original formula to obtain an expression for \(s_\lambda\circ s_k(t,q)\), then set \(t=q^{-1}\) to conclude. ◻
It is useful to introduce a shorthand for a special case of plethysm coefficients. Expanding a \(\mathrm{GL}_2\)-plethysm as a linear combination of quantum integers gives \[s_\mu\circ s_k(q,q^{-1}) = \sum_j a_{j}(\mu,k) \cdot [j].\] That is, if \(\mu\) is a partition of \(n\) then \(a_{\mu[k]}^{(nk-r,r)} = a_{nk-2r+1}(\mu,k)\).
We also introduce a notation for (multi-)Clebsch–Gordan coefficients. Let \(\mathbf{b} = (b_1, \ldots, b_t)\) be a vector of non-negative integers. Define a (Laurent) polynomial \(p(-;-)\) and integers \(\mathrm{CG}_{(-)}(-)\) via \[p(\mathbf{b};q) = \prod_{i=1}^K [b_i] = \sum_{k=1}^{|\mathbf{b}|} \mathrm{CG}_k(\mathbf{b}) \cdot[k]\,,\] where \(|\mathbf{b}| := b_1 + \cdots + b_t\).
Let \(\mathbf{b} = (b_1, \ldots, b_K)\) be a vector of non-negative integers. Then \(p(\mathbf{b}; q)\) is symmetric and unimodal, and \[\begin{gather} \mathrm{CG}_k(\mathbf{b}) = \\ \#\Bigg\{(t_1, \ldots, t_K) \in \mathbb{Z}^{K} \;\Bigg|\; \begin{array}{l} \textstyle t_1 = 0, ~~ t_{i-1} \leqslant t_i < b_i + t_{i-1}, ~~t_K = \frac{|\mathbf{b}|-K+1-k}{2}\\[-.5em] t_i \leqslant(\sum_{j=1}^{i-1} (b_j-1)) - t_{i-1}~~\text{for all}~1\leqslant i\leqslant K \end{array} \Bigg\} \end{gather}\] for \(0 \leqslant k \leqslant|\mathbf{b}|\).
This set should remind the reader of the conditions satisfied by the marks of a KOH tree in Definition [de:KOH].
Proof. The result follows from repeated applications of the Clebsch–Gordan rule \[[a][b] = [a+b-1] + [a+b-3] + \cdots + [|a-b|+1].\] This is done e.g. in [8] for the \(q\)-analogue version of the result. The proof of the quantum version is similar. ◻
With these tools, we can run the main computation of this section. Is the derivation of a formula for \(a_r(\lambda,k)\) in terms of Hermite coefficients. Hence, it allows to reduce Theorem [thm:GL232in32L2] to Theorem [thm:Hermite].
The \(\mathrm{GL}_2\)-plethysm coefficients can be expressed as the following polynomial of Hermite and Clebsch–Gordan coefficients, \[a_r(\mu, k) = \sum_{m=0}^k \sum_{\mathbf{b}} a_{b_0}(n,k-m) \, \mathrm{CG}_r(\mathbf{b}) \sum_{\underline{\nu}\in\mathrm{AC}^\mu_m} \prod_{\substack{1 \leqslant i < \ell(\mu) \\ 1 \leqslant j \leqslant|\mu|}}a_{b_{i,j}}(P_j^i(\underline{\nu}),m_j(\nu^{(i)})),\] where the sum ranges over sets of integers \(\mathbf{b} = \{b_0\} \cup \{b_{i,j}\}^{1\leqslant i < \ell(\mu)}_{1\leqslant j\leqslant|\mu|}\).
Proof. Let \(n=|\mu|\) and \(\ell=\ell(\mu)-1\). We use the identity \(s_n\circ s_m(q,q^{-1}) = \genfrac{[}{]}{0pt}{}{n+m}{n}\) together with 22 to write \[\begin{align} s_\mu\circ s_k&(q,q^{-1}) = \sum_{m=0}^k s_n\circ s_{k-m}(q,q^{-1}) \sum_{\underline{\nu}} \prod_{\substack{1 \leqslant i \leqslant\ell \\ 1 \leqslant j \leqslant n}} s_{P_j^i(\underline{\nu})} \circ s_{m_j(\nu^{(i)})} (q,q^{-1}) \\ &= \sum_{m=0}^k \sum_{b_0} a_{b_0}(n,k-m) \cdot [b_0] \sum_{\underline{\nu}} \prod_{\substack{1 \leqslant i \leqslant\ell \\ 1 \leqslant j \leqslant n}} \sum_{b_{i,j}} a_{b_{i,j}}(P_j^i(\underline{\nu}),m_j(\nu^{(i)})) \cdot [b_{i,j}] \\&= \sum_{m=0}^k \sum_{\mathbf{b}} a_{b_0}(n,k-m) \cdot [b_0] \sum_{\underline{\nu}} \prod_{\substack{1 \leqslant i \leqslant\ell \\ 1 \leqslant j \leqslant n}} a_{b_{i,j}}(P_j^i(\underline{\nu}),m_j(\nu^{(i)})) \cdot [b_{i,j}]\,. \end{align}\] Take the coefficient of \([r]\) in this expression. By the definition of \(\mathrm{CG}_k(\mathbf{b})\), we obtained the claimed formula. ◻
Proof of Theorem [thm:GL232in32L2]. Let \(n=|\mu|\) and \(\ell=\ell(\mu)-1\). By Theorem [plet32recursion], \(a_{\mu[k]}^{(nk-r,r)}=a_{nk-2r+1}(\mu,k)\) counts the number of tuples of KOH small witnesses \((T_0) \sqcup (T_{i,j})^{1 \leqslant i \leqslant\ell}_{1 \leqslant j \leqslant n}\) together with a sequence of integers which are a witness for the Clebsch–Gordan coefficient and which we also indexed similarly, \((t_0) \sqcup (t_{i,j})^{1 \leqslant i \leqslant\ell}_{1 \leqslant j \leqslant n}\). The tuples depend on a matrix of integers and an admissible configuration.
To encode an admissible configuration \(\underline{\nu}\), we consider the sequence of their transposes \(\alpha^{(1)}, \alpha^{(2)}, \ldots\) instead. We can recover \(m_j(\nu^{(i)})\) as \(\alpha_j^{(i)}-\alpha_{j+1}^{(i)}\). Our witness records these partitions as sequences of \(\ell\) terms, encoded in binary: \[\begin{gather} m\,;\, \alpha_1^{(1)}, \ldots, \alpha_1^{(\ell)}\,;\, b_0, T_0, t_{0}\,;\,\\ \alpha_2^{(1)}, \ldots, \alpha_2^{(\ell)}\,;\, b_{11}, \ldots, b_{\ell1}\,,\, T_{11},\ldots , T_{\ell1}\,,\, t_{11},\ldots , t_{\ell1}\,;\, \\ \alpha_3^{(1)}, \ldots, \alpha_3^{(\ell)}\,;\, b_{12}, \ldots, b_{\ell2}\,,\, T_{12},\ldots , T_{\ell2}\,,\, t_{12},\ldots , t_{\ell2}\,;\, \ldots \end{gather}\] Start by reading \(m\), storing \(\alpha_1^{(1)}, \ldots, \alpha_1^{(\ell)}\) for later, and \(b_0\), check that \(\alpha^{(\ell)}_j=0\) for each \(j\) for every row \(j\) we read. Check that \(T_0\) is a KOH small witness for \(a_{b_0}(n,k-m)=a^{((n(k-m)+b_0-1)/2,(n(k-m)-b_0+1)/2)}_{n[k-m]}\). Then read and store \(\alpha_2^{(1)}, \ldots, \alpha_2^{(\ell)}\,;\, b_{11}, \ldots, b_{\ell1}\) and check that \(\alpha_1^{(i)}\geqslant\alpha_2^{(i)}\) for every \(i=1,\ldots,\ell\). This is enough to compute \(P_1^i(\underline{\nu})\) and \(m_1(\nu^{(i)})\) for \(i=1,\ldots,\ell\) and check they are \(\geqslant 0\), remembering that in the computation of \(P\) we take \(\alpha^{(0)}_1=n\) and \(\alpha^{(0)}_i=0\) for \(i>1\). Check the validity of the KOH small witnesses \(T_{11}, \ldots, T_{\ell1}\). Check also that \(t_0, t_{11}, \ldots, t_{\ell1}\) satisfy the conditions of the first \(\ell+1\) elements of a witness of a Clebsch–Gordan coefficient (see Lemma [lem:q-int-product]). Now read and store \(\alpha_3^{(1)}, \ldots, \alpha_3^{(\ell)}\,;\, b_{12}, \ldots, b_{\ell2}\). This is enough to compute \(P_2^i(\underline{\nu})\) and \(m_2(\nu^{(i)})\) for \(i=1,\ldots,\ell\). Only now is it possible to forget \(\alpha_1^{(1)}, \ldots, \alpha_1^{(\ell)}\), and hence we need \(9\ell\) (fixed number) of counters just to keep track of the admissible configuration. The algorithm continues iterating the previous checks until the \(\ell\)’th row.
One needs another \(\ell\) counters to keep the partial sizes of the partitions \(\alpha^{(i)}\), and in the end check that the \(\alpha_j^{(i)}\) indeed do form an admissible configuration for condition (2) of Definition [de:AC]. All of these \(10\ell\) counters we have discussed are upper bounded by \(|\mu|\) and hence occupy log-space. They can be updated in polynomial time. The remaining checks have already been seen to be occupy at most \(\log^2\)-space and take at most poly-time. ◻
Are the \(\mathrm{GL}_2\)-plethysm coefficients \(a_{\mu[k]}^{(nk-r,r)}\) in \(\#\mathsf{TISP}(\mathrm{poly}(n),\log^2(n))\) for partitions \(\mu\) of unbounded length?
We can consider the easier computational problem \((1^r\,0\,1^k)\mapsto a_r(\mu,k)\) for fixed \(\mu\). For each fixed \(\mu\), the generating function \(A_\mu(z,q) = \sum_{r,k} a_r(\mu,k) z^k q^r\) is shown to be rational in [64]. In particular, the \(\mathrm{GL}_2\)-plethysm coefficients involved are subject to 2-dimensional linear recurrences. These recursions may involve signs. However, it is conjectured that there exist positive expressions [64], and the result is established for \(|\mu|\leqslant 5\).
For any fixed partition \(\mu\) of size at most \(5\), the function \((1^r\,0\,1^k)\mapsto a_r(\mu,k)\) is in \(\#\mathsf{L}\). If Conjecture 1.1 in [64] holds, then this result holds for all fixed partitions \(\mu\).
Proof. This follows from Theorem [thm:2-dim]. The coefficients involved in the linear recursion come from the coefficients in \(q^\bullet z^\bullet\) of the denominator of a simplified expression for \(A_\mu(z,q)\). These coefficients are at most polynomial, since the denominator only depends on \(\mu\), which is given and constant. ◻
If \(|\mu| = n\) then the denominator of \(A_\mu(z,q)\) divides \[d_{n}(z,q) = \begin{cases} (1-z)\prod_{i=1}^n (1-z^i) \prod_{i=1}^{\frac{n}{2}} (1-q^{2i} z), & \text{for n even,}\\[1ex] \prod_{i=1}^n (1-z^{2i}) \prod_{i=1}^{\frac{n+1}{2}} (1-q^{2i-1} z), & \text{for n odd} \end{cases}\] by [64].
For sequences of integers, strong log-concavity is equivalent to log-concavity.↩︎
The Hardy–Ramanujan asymptotic for the partition function shows that there are exponentially many partitions of \(k\). Hence no matter the encoding, one needs polynomial amounts of space to distinguish between all partitions.↩︎