$ \newcommand{\qPochhammer}[3][\infty]{\left( #2;#3 \right)_{#1}} \newcommand{\setZ}{\mathbb{Z}} $ Via jupytext this file can be shown as a jupyter notebook.
)cd ..
)read input/jfricas-test-support.input )quiet
The current FriCAS default directory is /home/hemmecke/backup/git/qeta All user variables and function definitions have been cleared. All )browse facility databases have been cleared. Internally cached functions and constructors have been cleared. )clear completely is finished. The current FriCAS default directory is /home/hemmecke/backup/git/qeta/tmp
)set output algebra on
)set output formatted off
Problem formulation¶
Let $p(n)$ denote the number of partitions of the natural number $n$. Show that for every natural number $k$ the expression $p(11k+6)$ is divisible by 11.
The solution is described in Hemmecke_DancingSambaRamanujan_2018:
@Article{Hemmecke_DancingSambaRamanujan_2018,
author = {Ralf Hemmecke},
title = {Dancing Samba with {R}amanujan Partition
Congruences},
journal = {Journal of Symbolic Computation,
year = 2018,
JournalUrl = {https://www.sciencedirect.com/science/journal/07477171},
URL = {https://www.sciencedirect.com/science/article/pii/S0747717117300147},
DOI = {10.1016/j.jsc.2017.02.001},
volume = {84},
pages = {14--24},
ISSN = {0747-7171},
keywords = {Partition identities, Number theoretic algorithm,
Subalgebra basis},
abstract = {The article presents an algorithm to compute a
$C[t]$-module basis $G$ for a given subalgebra $A$
over a polynomial ring $R=C[x]$ with a Euclidean
domain $C$ as the domain of coefficients and $t$ a
given element of $A$. The reduction modulo $G$
allows a subalgebra membership test. The algorithm
also works for more general rings $R$, in particular
for a ring $R\subset C((q))$ with the property that
$f\in R$ is zero if and only if the order of $f$ is
positive. As an application, we algorithmically
derive an explicit identity (in terms of quotients
of Dedekind eta-functions and Klein's
$j$-invariant) that shows that $p(11n+6)$ is
divisible by 11 for every natural number $n$ where
$p(n)$ denotes the number of partitions of $n$.}
}
The article is also available as RISC report 16-06.
Let's first define $F$ as on top of page 251 of Radu_RamanujanKolberg_2015, i.e. $$ F(\tau) = q^{\frac{13}{24}} \frac{\eta(\tau)^{10}\eta(2\tau)^2\eta(11\tau)^{11}} {\eta(22\tau)^{22}} \sum_{k=0}^{\infty}p(11k+6)q^k. $$ This is a modular function for $\Gamma_0(22)$.
Below, we demonstrate
- how we compute a linear combinations of eta-quotients that are modular for $\Gamma_0(22)$ and have only a pole at infinity,, and
- how we can find the eta-quotient prefactor $ \frac{\eta(\tau)^{10}\eta(2\tau)^2\eta(11\tau)^{11}} {\eta(22\tau)^{22}}$ such that $F(\tau)$ is a modular function for $\Gamma_0(22)$ with only a pole at $\infty$.
-------------------------------------------------------------------
--setup
-------------------------------------------------------------------
)set mess type on
)set mess time on
-------------------------------------------------------------------
--endsetup
-------------------------------------------------------------------
Simple solution by the findIdentity command¶
-------------------------------------------------------------------
--test:findIdentity
-------------------------------------------------------------------
The generating function of the partition numbers $(p(n))_{n\ge0}$ is given by \begin{align*} \sum_{n=0}^\infty p(n) &= \qPochhammer{q}{q}^{-1} = \left(\prod_{k=1}^\infty (1-q^k)\right)^{-1}. \end{align*}
dissect := choose(11, 6) generatingFunction(qP(q,q)^(-1), 'p)
We specify the domain of coefficients for the resulting identity. Since we want to show divisibility by 11 we try rational numbers whose denominators are not divisible by 11, i.e. $C=\setZ_{(11)}$
C ==> IntegerLocalizedAtPrime 11
For finding a divisibility witness for $p(11n+6)$, we actually compute with modular functions for $\Gamma_0(22)$.
MG ==> MGAMMA0 22
In QEta, we usually work with Dedekind eta-functions. Some functions need hints for which of those functions to use. That can be done by indices, i.e. the multiplier $\delta$ of $\tau$ in $\eta(\delta\tau)$. These are usually the divisors of the group level and can easily be computed by the following function.
idxs := etaFunctionIndices 22
The identity can be found by the following command.
id := findId(C,MG)(dissect, idxs);
-- == z:=[zinhom=[], zhom=[], zfree=[]] -- >= z:=[zinhom=[[4, -1, 1], [5, -1, 2], [4, -1, 2]], zhom=[[3, -1, 0], [4, -1, 1], [1, -1, 1], [2, -1, 1], [3, -1, 1], [0, -1, 1], [2, 0, 1]], zfree=[]] -- numOfGaps:=[216, 2] -- numOfGaps:=[216, 2] -- numOfGaps:=[162, 2] -- numOfGaps:=[162, 2] -- numOfGaps:=[109, 2] -- numOfGaps:=[109, 2] -- numOfGaps:=[56, 2] -- numOfGaps:=[56, 2] -- numOfGaps:=[2, 2]
The computation yields a data structure from which various information can be extracted.
The identiy can be shown like this
qEquation id
or with $q=\exp(2\pi i \tau)$ as follows.
etaEquation id
In fact, if the left-hand side is abbreviated by the symbol $F$ then we have
idpol := identityPolynomial id;
0 = idpol
where the $M_i$ stand for the following eta-quotients.
mspecs := monoidSpecifications id;
[M[i]::OF = numer(s)::OF/denom(s)::OF for i in 1..#mspecs for s in mspecs]
Due to a different reduction strategy in a newer implementation of Samba, we don't get exactly the same result as in Hemmecke_DancingSambaRamanujan_2018.
The right-hand side and the left-hand side of
etaEquation id
are both modular functions for $\Gamma_0(22)$.
[qModular?(C,MG)(lhs etaEquation id), qModular?(C,MG)(rhs etaEquation id)]
idpolExpectedArticle := _
(11^2*(-3068)*M7+(11^2*(-3)*M1+11^2*(-4236))*M6+(11*(-285)*M1_
+11^2*(-5972))*M5+(11*(-1/8)*M1^2+11^2*(-4497/8)*M1+11^3*(-789/2))*M4_
+(11*(-1867)*M1+11^2*(-2476))*M3+11*1/8*M1^3+11*1011/8*M1^2_
+11^2*1647/2*M1+F+11^3*1360)$Pol(C);
idpolExpected := (11*(_
(M1+11^2*7)*M5 _
+(3*M1+11^2*5)*M4 _
+((-1/4)*M1^2 + (-245/8)*M1+11^2*(-1/8))*M3 _
+(5/4*M1^2+11*(-49/8)*M1+11^4*1/8)*M2 _
+(-1)*M1^3+3*M1^2+11*(-13)*M1+11^3*(-1)) _
+F)$Pol(C);
assertEquals(idpol, idpolExpected)
We can compute the expansion of the left-hand side at the cusp $\infty$ and do the same with the right-hand side.
spexlhs := lhs qEquation id;
alhs := spexMA1(C,MG)(spexlhs)
spexrhs := rhs qEquation id;
arhs := spexMA1(C,MG)(spexrhs)
Their difference is a modular function for $\Gamma_0(22)$ that has no pole at any cusp, and, since the constant term vanishes, must be identically zero.
zser := arhs - alhs
assertTrue(zero? zser)
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------
Relations in terms of the $M_i$'s¶
-------------------------------------------------------------------
--test:Hemmecke
-------------------------------------------------------------------
This section does the computation from above in a little more detail.
Since we want to show divisibility by 11 of $p(11k+6)$ for every $k$ where $p$ is the partition function, the main computation is done with a coefficient ring $C=\mathbb{Z}_{(11)}$ being integers localized at 11, i.e. rational numbers that have no denominator divisible by 11.
Furthermore, we deal with eta-quotients that are modular for $\Gamma_0(22)$.
C ==> IntegerLocalizedAtPrime 11
nn := 22;
MG ==> MGAMMA0 nn
By the help of the program 4ti2,
we compute the the generators of the eta-quotients of level
22 that have at most a pole at the cusp $\infty$.
They are given by these exponents for the eta-functions
(with arguments being the divisors of 22).
The variable rgens corresponds to the generators of
$R^*(22)$ from
Radu_RamanujanKolberg_2015
with the additional property of at most a pole at $\infty$.
idxs := etaFunctionIndices nn
mspecs := mSPECSInf(MG)(idxs)
rgensExpected: List List ZZ := [_
[- 4, 8, 4, - 8], [- 1, 1, 11, - 11], [7, - 3, 3, - 7],_
[- 2, 6, 6, - 10], [0, 4, 8, - 12], [2, 2, 10, - 14], [4, 0, 12, - 16]];
rgens := [pureExponents x for x in mspecs]
assertEquals(rgens, rgensExpected)
The expansions of the eta-quotients look like this.
agens := [specMA1(C,MG)(x) for x in mspecs]
assertEquals([qetaGrade x for x in agens], [5, 5, 5, 6, 7, 8, 9])
Let X be an algebra that can be used with the algorithm samba,
but which has a polynomial attached to record the operations that
have been done with the original element. This simulates a
similar idea as attaching a unit matrix to a matrix and then
computing the row echelon form of the matrix. The unit matrix turns
into the transformation matrix.
If we attach a variable $M_i$ to each of the generator eta-quotients,
we can later (at the end of the computation) read of how an element
is represented in term of those eta-quotients.
msyms := indexedSymbols("M", #agens)
assertEquals(msyms, [M1, M2, M3, M4, M5, M6, M7])
xgens := [toX1(C, x, s) for x in agens for s in msyms]; -- List X1 C
We take a minimal (in terms the order in $q$) element from the
generators and make it special. Then we compute an algebra basis
for $C[f_1,\ldots,f_7]$ where the $f_i$ correspond to the
elements of agens (or xgens) in the same order.
Note that due to different sorting the correspondence between the $M_i$ and the actual eta-quotients in Hemmecke_DancingSambaRamanujan_2018 is not the same.
19-Feb-2020: Interestingly, it does not work (i.e. we do not find a witness identity for divisibility by 11) for the element corresponding to $[- 1, 1, 11, - 11]$. We choose the exponent vector corresponding to $[- 4, 8, 4, - 8]$.
first mspecs
xab := samba(xgens)$QSAMBA(C,X1,QTOPRED)
-- numOfGaps:=[216, -1] -- numOfGaps:=[216, -1] -- numOfGaps:=[162, -1] -- numOfGaps:=[162, -1] -- numOfGaps:=[109, -1] -- numOfGaps:=[109, -1] -- numOfGaps:=[56, -1] -- numOfGaps:=[56, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1]
Due to another critical element selection strategy, the resulting polynomial differs from the one given in the article Hemmecke_DancingSambaRamanujan_2018.
bas := sort(smallerGrade?, basis xab);
xabExpectedArticle := [1/128*M7-5/128*M6+21/128*M5_
+(-1/1024*M1+11*213/1024)*M4-85/128*M3+1/1024*M1^2+505/1024*M1,_
1/8*M4-1/8*M1, M3, M5, M6] -- LPol C
xabExpected := [3/8*M3+11*(-1/8)*M2+M1, -1/3*M2+1/3*M1, M4, M5, M6]
assertEquals([x1Pol(C, x) for x in bas], xabExpected)
assertEquals(# bas, 5)
Relation for divisibility of $p(11k+6)$ by 11¶
Let's take $F(\tau)$ from above.
dissect := (choose(11, 6) generatingFunction(qP(q,q)^(-1), 'p))::QGFSPEC
spexmonf := eqSPEC(e1^10 * e2^2 * e11^11 / e22^22) * lift(dissect)
It is modular with respect to $\Gamma_0(22)$.
qModular?(C,MG) spexmonf
The expansion is as follows.
af := spexMA1(C,MG)(spexmonf); -- A1 C
xf := toX1(C, af, F) --: X1 C
Now we can reduce this element xf by the respective algebra
basis, taking into account that xt=xgens.1 is our special $t$
that we used in the construction of the algebra basis of the
eta-quotients that are modular for $\Gamma_0(22)$ and have at
most a pole at $\infty$.
As can be seen from the sorted monomials of the representaion, $F$ can be expressed as $F=11p(M_1,\ldots, M_7)$ where $p$ is a polynomial having coefficient denominators not divisible by 11.
xr := reduce(xf, xab)$QTOPRED(C,X1)
assertTrue(zero? xr)
Due to a different reduction strategy in a newer implementation of Samba, we don't get exactly the same result as in Hemmecke_DancingSambaRamanujan_2018.
mxr := [(inv(unitPart leadingCoefficient x)::C)*x _
for x in monomials(x1Pol(C, xr))]
mxrExpectedArticle := _
[F, 11*M1^2, 11*M1^3, 11*M1*M3, 11*M1^2*M4, 11*M1*M5, 11^2*M1, 11^2*M3,_
11^2*M1*M4, 11^2*M5, 11^2*M1*M6, 11^2*M6, 11^2*M7, 11^3, 11^3*M4]$LPol(C)
mxrExpected := _
[F, 11*M1^2, 11*M1^3, 11*M1^2*M2, 11*M1*M3, 11*M1^2*M3, 11*M1*M4, _
11*M1*M5, 11^2*M1, 11^2*M1*M2, 11^3*M3, 11^3*M4, 11^3*M5, 11^4, 11^5*M2]$LPol(C)
smaller11(x: Pol(C), y: Pol(C)):Boolean == _
exponent leadingCoefficient x < exponent leadingCoefficient y
assertEquals(sort(smaller11, mxr), mxrExpected)
Function declaration smaller11 : (Polynomial(IntegerLocalizedAtPrime(11)), Polynomial(IntegerLocalizedAtPrime(11))) -> Boolean has been added to workspace.
Compiling function smaller11 with type (Polynomial(IntegerLocalizedAtPrime(11 )), Polynomial(IntegerLocalizedAtPrime(11))) -> Boolean
Let's normalize the leading coefficient of $F$ to 1.
xrq := x1Pol(C, xr);
cxfq := coefficient(xrq, 'F, 1)
lcxfq := leadingCoefficient cxfq
lcfxqArticle := -1/1360
assertEquals(lcxfq, 1)
ilcxfq := (inv lcxfq)::C
xrq := ilcxfq * xrq
xrqExpectedArticle := _
(11^2*(-3068)*M7+(11^2*(-3)*M1+11^2*(-4236))*M6+(11*(-285)*M1_
+11^2*(-5972))*M5+(11*(-1/8)*M1^2+11^2*(-4497/8)*M1+11^3*(-789/2))*M4_
+(11*(-1867)*M1+11^2*(-2476))*M3+11*1/8*M1^3+11*1011/8*M1^2_
+11^2*1647/2*M1+F+11^3*1360)$Pol(C)
xrqExpected := (11*(_
(M1+11^2*7)*M5 _
+(3*M1+11^2*5)*M4 _
+((-1/4)*M1^2 + (-245/8)*M1+11^2*(-1/8))*M3 _
+(5/4*M1^2+11*(-49/8)*M1+11^4*1/8)*M2 _
+(-1)*M1^3+3*M1^2+11*(-13)*M1+11^3*(-1)) _
+F)$Pol(C)
assertEquals(xrq, xrqExpected)
Let's plug in the original eta-quotients into xrq.
sers := cons(first xf, agens) --: List A1 C
-- Note that after some changes to the sorting order in the
-- implementation, the old Mi correspond to other new Mi.
sersArticle := cons(first xf, [agens.i for i in [3,1,4,2,5,6,7]])
ezArticle := eval(xrqExpectedArticle, cons('F, msyms), sersArticle)_
$ PolynomialEvaluation(C, A1 C)
assertTrue(zero? ezArticle)
ez := eval(xrq, cons('F,msyms), sers) $ PolynomialEvaluation(C, A1 C)
assertTrue(zero? ez)
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------
Checking modularity¶
-------------------------------------------------------------------
--test:modularity
-------------------------------------------------------------------
We are looking for an expression of $S=\sum_{k=0}^{\infty}p(11k+6)q^k$ in terms of Dedekind eta-functions.
Note that the partition series is (up to a factor of $q^{1/24}$)
given by $\eta(\tau)^{-1}$. This -1 is used in the specification
rspec. The cofactor exponent
from the $F$ given at the beginning of the previous section is
$s=(10,2,11,-22)$ and corresponds to the divisors $\{1,2,11,22\}$
of $N=22$.
The following function, checks whether all the data corresponding to $F$ from above indeed leads to a modular function for $\Gamma_0(22)$.
rspec := eqSPEC(1, [-1])
sspec := eqSPEC(22, [10,2,11,-22])
assertTrue(modular?(sspec,rspec,11,6)$MGAMMA0(22))
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------
Express in Klein's $j$-invariant¶
-----------------------------------------------------------------
--NONWORKING test:Klein
-----------------------------------------------------------------
The test is currently disabled, because for some reason it takes too long (26000sec) in newer versions (2.0) of QEta. It also does no longer find a witness for divisibility by 11.
Let $$ U(v):=t^v q \prod_{n=1}^{\infty}(1-q^{11n})\sum_{k=0}^{\infty}p(11k+6)q^k. $$
Below, we show that $U(7)=11 t^2 h(t, j, j_p)$ where $j$, $j_p$, and $t$ are Laurent series with integer coefficients and $h$ is a polynomial with rational coefficients having no denominator that is divisible by 11. In other words, we can give a relation $z U(7) = 11 t^2 k(t, j, j_p)$ with an integer polynomial $k$ and an integer $z$ such that $\gcd(z,11)=1$.
We choose Klein's $j$-invariant (https://en.wikipedia.org/wiki/J-invariant#The_q-expansion_and_moonshine) expressed as a Laurent series in terms of $q = \exp(2\pi i \tau)$ as the series $j$ above.
The series $j_p$ is given by replacing $q$ by $q^{11}$ in $j$.
The series $t$ is given by $$ t = \left(\frac{\eta(\tau)}{\eta(11\tau)}\right)^{12} $$ (again in terms of $q = \exp(2\pi i \tau)$) where $\eta$ is Dedekind's eta-function (https://en.wikipedia.org/wiki/Dedekind_eta_function#Definition).
Construction of Klein's $j$-invariant¶
Klein's $j$-invariant can be given by the expression $$j(\tau) = E_4^3/\Delta$$ where $$\Delta=\frac{E_4^3-E_6^2}{1728}=\eta(\tau)^{24}$$ and the normalize Eisenstein series $E_4$ and $E_6$ are given by $$E_4=1+240 \sum_{n=1}^\infty \sigma_3(n)q^n$$ and $$E_6=1-504 \sum_{n=1}^\infty \sigma_5(n)q^n$$ where $q = \exp(2\pi i\tau)$ and $\sigma_k(n)$ denotes the sum of the $k$-th power of the positive divisors of $n$.
All the above are series with integers coefficients. For our computation, however, we compute with integers localized at the prime 11, i.e. these are rational numbers with denominators not divisible by 11.
The following function simply maps the integer coefficients of the series into the localized coefficient domain and eventually creates an object that attaches the indeterminate $J$ to the series.
C ==> IntegerLocalizedAtPrime 11
i := kleinJInvariant()$QFunctions(C, A1 C); --: A1 C
j := toX1(C, i, J); --: X1 C
x1A1(C, j)
x1Pol(C, j)
ip := multiplyExponents(i, 11)$A1(C); --: A1 C
jp := toX1(C, ip, Jp); --: X1 C
x1A1(C, jp)
x1Pol(C, jp)
The series $t$¶
The value $t$ is given by $$t = \left(\frac{\eta(\tau)}{\eta(11\tau)}\right)^{12}$$ in terms of $q = \exp(2\pi i \tau)$.
MG ==> MGAMMA0 11
tt := specMA1(C,MG)(eqSPEC([[1,12],[11,-12]])); --: A1 C
t := toX1(C, tt, T); --: X1 C
x1A1(C, t)
x1Pol(C, t)
Construct elements suitable for the samba algorithm¶
m1 := t; --: X1 C
We need some auxiliary values $m_2$ and $m_3$.
m2 := j*t^3; --: X1 C
m3 := jp*t; --: X1 C
We want yet another value to end up in an algebra basis of orders -2 and -3.
We ignore this for now, because with the data that produces a relation among $F$, $J$, $J_p$, and $T$, the computation did not finish.
m := jp; mp := j;
while (d := qetaGrade(m)$X1(C)) > 0 repeat (_
c := qetaLeadingCoefficient(m)$X1(C);_
e := d::NN;_
m := m-c*j^e;_
mp := mp-c*jp^e)
mp
[-q^(-121)+O(q^(-110)),_
-Jp^11_
+11*744*Jp^10_
+11(-2570796)*Jp^9_
+11*4880620256*Jp^8_
+11*(-5550817150590)*Jp^7_
+11^2*351821430873072*Jp^6_
+11^2*(-147929969197380488)*Jp^5_
+11^2*35519316022933293120*Jp^4_
+11^2*(-4373015221856525734395)*Jp^3_
+11^2*224874476512864841450600*Jp^2_
+11^2*(-3096214928567780111700972)*Jp_
+J]
mgens := [m1,m2,m3]
The algebra basis computation¶
Then we compute the algebra basis for the elements $t=m_1$, $m_2$, and $m_3$.
Since we compute in an extended algebra. The second component of each entry in the basis gives its expression in terms of the original generators.
WARNING: The following computation does not complete. :-( It leads to an $11^{151}$ leading coefficient for some series starting with $q^{-7}$.
)set stream calc 0
step! ==> oneVerboseStep!(2,513,1,3)$QCOMP(C,X1,QTOPRED)
ab := samba(mgens,step!)$QSAMBA(C,X1,QTOPRED);
assertEquals(# basis ab, 12)
Show the powers of 11 in the coefficients of the representation (in terms of J, Jp, T) of the algebra basis elements.
bas := basis ab;
pows := [[exponent(x) for x in coefficients x1Pol(C, bas.n)] for n in 2..#bas];
powsExpected := [_
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,_
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 0, 0,_
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1,_
1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 3, 0, 0,_
1, 1, 1, 0, 3, 3, 0, 0, 0, 3, 1, 3, 4, 4, 4, 5, 4, 6, 6, 6, 8, 8],_
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,_
0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 1, 0,_
0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 3, 2, 0, 1, 0, 1,_
0, 2, 2, 3, 0, 1, 0, 1, 0, 3, 3, 1, 2, 3, 1, 3, 4, 1, 1, 1, 4, 4, 2, 2,_
4, 4],_
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,_
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 2, 0, 0,_
0, 0, 0, 2, 2, 0, 0, 2, 0, 2, 3, 0, 0, 0, 3, 4, 3, 4, 3],_
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1,_
0, 2, 1, 1, 1, 1, 1, 1, 2, 3, 0, 2, 0, 3, 3, 1, 3, 1, 3, 3, 1, 1, 3, 3,_
2, 2, 3],_
[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,_
0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 0, 1, 2, 0, 0, 0, 0, 0, 2, 2, 2, 0, 1,_
0, 1, 0, 2, 3, 0, 0, 3, 0, 3, 4, 1, 1, 1, 3, 3, 2, 2, 3],_
[0, 0, 0],_
[0],_
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 3, 2, 0, 2,_
0, 2, 2, 0, 2, 0, 2, 2, 2, 2, 1, 1],_
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 2, 1, 0, 1, 0,_
1, 1, 0, 0, 1, 1],_
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],_
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]$List(List NN)
assertEquals(sort pows, sort powsExpected)
The (absolute value of the) order and the power of 11 in the leading coefficient of the elements in the algebra basis.
gl := [[qetaGrade i, unitCanonical qetaLeadingCoefficient i] for i in basis ab];
glExpected := [[7, 11^18], [8, 11^8], [9, 11^4], [11, 11^3],_
[12, 11^3], [13, 11^3], [14, 1], [16, 1], [17, 11^2], [18, 11],_
[11*2, 1], [23, 1]]$List(List C)
assertEquals(sort gl, sort glExpected)
We define $$ U(v):=t^v q \prod_{n=1}^{\infty}(1-q^{11n})\sum_{k=0}^{\infty}p(11k+6)q^k. $$
Let's do this step by step. We take the partition series.
ps := partitionSeries(1)$QFunctions(ZZ, A1 ZZ) --: A1 ZZ
We also take the sub-series given by the (11n+6)-th term of ps as
defined earlier. The coefficients of the series r11 we want to
check for divisibility by 11.
r11 := choose(11, 6, ps) --: A1 ZZ
The following function simply maps the integer coefficients of the series into the localized coefficient domain or into the rational number domain Q.
abfmap(A, B, f, x) ==> map(f, x)$QEtaLaurentSeriesFunctions2(A, B)
abffmap(A, B, f, x) ==> abfmap(A, B, f, x::L1(A))::A1(B)
abmap(A, B, x) ==> abffmap(A, B, (c: A): B +-> c::B, x)
zcmap(x) ==> abmap(ZZ, C, x)
cqmap(x) ==> abmap(C, QQ, x)
zqmap(x) ==> abmap(ZZ, QQ, x)
Putting all together (except the factor $t^v$) gives the following expression.
q := monomial(1, 1)$A1(ZZ)
fz := q*eulerFunction(11)$QFunctions(ZZ, A1 ZZ)*r11; --: A1 ZZ
f := embed(zcmap fz, F)$X1(C)
Now let's check what the smallest $v>0$ is such that $U(v)=t^v f$
is in the $\mathbb{Q}[t]$-module generated by $\{1, z_1, \ldots,
z_{12}\}$ where the $z_i$ are given by the list ab.
Although for the coefficient domain $\mathbb{Q}$ we find $v=3$, with the coefficients being in $C=\mathbb{Z}_{(11)}$, the reduction to zero only starts to work with $v=7$.
--qab := [cqmap first x for x in basis ab];
--qt := cqmap first t
--qreds := [zero? reduce(cqmap(first(t^v * f)), qt, qab)_
-- $ QTOPRED(QQ, A1)_
-- for v in 1..7]
qredsExpected := [false, false, true, true, true, true, true]
assertEquals(qreds, qredsExpected)
With $v=3$ the reduction does not lead to 0 in case the coefficients are non-rational, but rather lie in $\mathbb{Z}_{(11)}$.
assertTrue(not zero? reduce(t^3*f, ab)$QTOPRED(C,X1))
assertEquals(_
[zero? reduce(t^v * f, ab)$QTOPRED(C, X1) for v in 1..10],_
[false, false, false, false, false, false, true, true, true, true])
Version 4+ gives false for t^7f, but true for t^8f.
assertEquals(_
[zero? reduce(t^v * f, ab)$QTOPRED(C, X1) for v in 1..10],_
[false, false, false, false, false, false, false, true, true, true])
Since all involved series in the algebra basis ab have their
representation in terms of $J$, $Jp$, and $T$ attached, we have
found a relation in $F$, $J$, $Jp$, and $T$.
result := reduce(t^8 * f, ab)$QTOPRED(C, X1);
assertTrue(zero? result)
res := x1Pol(C, result);
assertEquals(variables res, [T, Jp, J, F])
The leading coefficient is a rational number whose numerator and
denominator are not divisible by 11, i.e., the exponent (of 11)
of the coefficient is zero.
cf := coefficient(res, 'F, 1);
lcf := leadingCoefficient cf
assertTrue(zero? exponent lcf)
Let's normalize the coefficient in front of the variable $F$ such that it becomes 1, i.e., we multiply by the inverse of the coefficient.
r := (inv(unitPart lcf)::C)*res;
Let us investigate the coefficients of all monomials of $r$.
mr := [(inv(unitPart leadingCoefficient x)::C)*x for x in monomials r];
smaller11(x: Pol(C), y: Pol(C)):Boolean == _
exponent leadingCoefficient x < exponent leadingCoefficient y
sort(smaller11, mr)
smallerT(x: Pol(C), y: Pol(C)):Boolean == degree(x, 'T) < degree(y, 'T)
sort(smallerT, mr)
The above shows that we have found a relation $$ U(7):=t^7 q \prod_{n=1}^{\infty}(1-q^{11n}) \sum_{k=0}^{\infty}p(11k+6)q^k = 11 t^2 h(t,j,j_p) $$ where $h$ is a polynomial in $\mathbb{Z}_{(11)}[t,j,j_p]$.
Let us create output that can directly pasted into a journal paper.
tups := [(d:=degree(x, [T,J,Jp]); [d.1-2,d.2,d.3]) for x in rest sort(smaller11, mr)];
assertEquals(#tups, 161)
tupsExpected: List List ZZ := [_
[0, 0, 0], [0, 0, 1], [0, 0, 2],_
[1, 0, 0], [1, 0, 1], [1, 0, 2], [1, 0, 3],_
[2, 0, 0], [2, 0, 1], [2, 0, 2], [2, 0, 3], [2, 0, 4],_
[2, 1, 0], [2, 1, 1],_
[3, 0, 0], [3, 0, 1], [3, 0, 2], [3, 0, 3], [3, 0, 4],_
[3, 1, 0], [3, 1, 1], [3, 1, 2],_
[4, 0, 0], [4, 0, 1], [4, 0, 2], [4, 0, 3], [4, 0, 4],_
[4, 1, 0], [4, 1, 1], [4, 1, 2], [4, 1, 3],_
[4, 2, 0],_
[5, 0, 0], [5, 0, 1], [5, 0, 2], [5, 0, 3], [5, 0, 4],_
[5, 1, 0], [5, 1, 1], [5, 1, 2], [5, 1, 3],_
[5, 2, 0], [5, 2, 1],_
[6, 0, 0], [6, 0, 1], [6, 0, 2], [6, 0, 3], [6, 0, 4],_
[6, 1, 0], [6, 1, 1], [6, 1, 2], [6, 1, 3],_
[6, 2, 0], [6, 2, 1], [6, 2, 2],_
[7, 0, 0], [7, 0, 1], [7, 0, 2], [7, 0, 3], [7, 0, 4],_
[7, 1, 0], [7, 1, 1], [7, 1, 2], [7, 1, 3],_
[7, 2, 0], [7, 2, 1], [7, 2, 2],_
[7, 3, 0],_
[8, 0, 0], [8, 0, 1], [8, 0, 2], [8, 0, 3], [8, 0, 4],_
[8, 1, 0], [8, 1, 1], [8, 1, 2], [8, 1, 3],_
[8, 2, 0], [8, 2, 1], [8, 2, 2],_
[8, 3, 0], [8, 3, 1],_
[9, 0, 0], [9, 0, 1], [9, 0, 2], [9, 0, 3],_
[9, 1, 0], [9, 1, 1], [9, 1, 2], [9, 1, 3],_
[9, 2, 0], [9, 2, 1], [9, 2, 2],_
[9, 3, 0], [9, 3, 1],_
[10, 0, 0], [10, 0, 1], [10, 0, 2], [10, 0, 3],_
[10, 1, 0], [10, 1, 1], [10, 1, 2], [10, 1, 3],_
[10, 2, 0], [10, 2, 1], [10, 2, 2],_
[10, 3, 0], [10, 3, 1],_
[10, 4, 0],_
[11, 0, 0], [11, 0, 1], [11, 0, 2],_
[11, 1, 0], [11, 1, 1], [11, 1, 2],_
[11, 2, 0], [11, 2, 1], [11, 2, 2],_
[11, 3, 0], [11, 3, 1],_
[11, 4, 0],_
[12, 0, 0], [12, 0, 1], [12, 0, 2],_
[12, 1, 0], [12, 1, 1], [12, 1, 2],_
[12, 2, 0], [12, 2, 1], [12, 2, 2],_
[12, 3, 0], [12, 3, 1],_
[12, 4, 0],_
[13, 0, 0], [13, 0, 1],_
[13, 1, 0], [13, 1, 1],_
[13, 2, 0], [13, 2, 1],_
[13, 3, 0], [13, 3, 1],_
[13, 4, 0],_
[14, 0, 0], [14, 0, 1],_
[14, 1, 0], [14, 1, 1],_
[14, 2, 0], [14, 2, 1],_
[14, 3, 0], [14, 3, 1],_
[14, 4, 0],_
[15, 0, 0], [15, 1, 0], [15, 2, 0], [15, 3, 0], [15, 4, 0],_
[16, 0, 0], [16, 1, 0], [16, 2, 0], [16, 3, 0], [16, 4, 0]];
assertEquals(sort tups, tupsExpected)
Size of numerator and denominators of the coefficients of the linear combination of the powerproducts.
sz(x) ==> floor((log(abs(numer(x::QQ)::Float))/log(10.0))::Float)::ZZ
sizes := remove(0, sort [sz x for x in coefficients r])
assertEquals(min sizes, 2324)
assertEquals(max sizes, 2395)
degs := sort [degree(x, T) for x in mr]
degsExpected: List NN := _
[2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6,_
6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8,_
8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10,_
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11,_
11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,_
12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14,_
14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15,_
16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18]
assertEquals(degs, degsExpected)
Check the relation¶
Plugging in the series $f$, $j$, $j_p$, $t$, for the indeterminates $F$, $J$, $J_p$, $T$ in $r$ should result in the zero series.
-- approx. 45 seconds
fjjpt: List Symbol := [F, J, Jp, T];
z := eval(r, fjjpt, [first f, first j, first jp, first t])_
$ PolynomialEvaluation(C, A1(C))
assertTrue(zero? z)
Let's check whether the relation interpreted with rational
coefficients also yields zero. This checks against bugs in
IntegerLocalizedAtPrime.
-- approx. 30 seconds
rq := r::Polynomial(Fraction Integer);
zq := eval(rq, fjjpt, [cqmap first f, cqmap i, cqmap ip, zqmap tz])_
$ PolynomialEvaluation(QQ, A1 QQ)
assertTrue(zero? zq)
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------
The same algorithm can be used over the rational numbers $\mathbb{Q}$¶
-------------------------------------------------------------------
--test:Klein_rational
-------------------------------------------------------------------
However, that computation leads to only 5 elements in the algebra basis.
nn := 11
idxs := etaFunctionIndices nn
C ==> QQ
MG ==> MGAMMA0 11
i0 := kleinJInvariant()$QFunctions(QQ, A1 QQ); --: A1 QQ
i1 := multiplyExponents(i0, 11); --: A1 QQ
xj0 := toX1(QQ, i0, J0); --: X1 QQ
xj1 := toX1(QQ, i1, J1); --: X1 QQ
tt := specMA1(QQ,MG) eqSPEC(nn,[12,-12])
xt := toX1(QQ, tt, T); --: X1 QQ
xgens := [xt, xj0*xt^3, xj1*xt]; --: List X1 Q
xab := samba(xgens)$QSAMBA(QQ,X1,QRED);
assertEquals(# basis xab, 4)
-- numOfGaps:=[384, -1] -- numOfGaps:=[291, -1] -- numOfGaps:=[197, -1] -- numOfGaps:=[106, -1] -- numOfGaps:=[15, -1] -- numOfGaps:=[14, -1] -- numOfGaps:=[13, -1] -- numOfGaps:=[12, -1] -- numOfGaps:=[11, -1] -- numOfGaps:=[10, -1] -- numOfGaps:=[9, -1] -- numOfGaps:=[8, -1] -- numOfGaps:=[7, -1] -- numOfGaps:=[6, -1] -- numOfGaps:=[5, -1] -- numOfGaps:=[5, -1] -- numOfGaps:=[5, -1] -- numOfGaps:=[5, -1] -- numOfGaps:=[5, -1] -- numOfGaps:=[5, -1] -- numOfGaps:=[5, -1] -- numOfGaps:=[5, -1] -- numOfGaps:=[5, -1] -- numOfGaps:=[5, -1] -- numOfGaps:=[5, -1] -- numOfGaps:=[5, -1]
bas := sort(smallerGrade?, basis xab);
degs := [[qetaGrade i, unitCanonical qetaLeadingCoefficient i] for i in bas]
degsExpected := [[7, 1], [8, 1], [9, 1], [11, 1]]$List(List QQ)
assertEquals(degs, degsExpected)
rspec := eqSPEC(1,[-1]); m := 11; t := 6;
sspec := cofactInf(MG)(idxs, rspec, m, t)
xf := toX1(QQ, specMA1(QQ,MG)(sspec,rspec,m,t), F) --: X1 C
-- == z:=[zinhom=[[0]], zhom=[], zfree=[]]
As we have seen above, $U(3)$ lies in the $\mathbb{Q}[t]$-module generated by 1 and the elements of the algebra basis.
qreds := [zero? reduce(xt^v * xf, xab)$QTOPRED(QQ,X1) for v in 1..7]
qredsExpected := [false, true, true, true, true, true, true]
assertEquals(qreds, qredsExpected)
xr := reduce(xt^2 * xf, xab)$QTOPRED(QQ,X1);
assertTrue(zero? xr)
pol := x1Pol(QQ, xr);
cfq := coefficient(pol, 'F, 1)
lcfq := leadingCoefficient cfq
rq := inv(lcfq)*pol - F*T^2
fl := factors factor rq;
assertEquals(fl.1.factor, T)
assertEquals(fl.1.exponent, 2)
cfs := coefficients fl.2.factor
No denominator is divisible by 11.
zdens := [zero? positiveRemainder(denom x, 11) for x in cfs]
assertEquals(removeDuplicates zdens, [false])
There are, however, some numerators that are not divisible by 11, so the relation does not reveal a divisibility by 11 for p(11n+6).
znums := [zero? positiveRemainder(numer x, 11) for x in cfs]
assertTrue(member?(false, znums))
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------
The relation in $M_i$'s with integer coefficients¶
-----------------------------------------------------------------
--test:integer
-----------------------------------------------------------------
Let's take $F(\tau)$ from above.
Here $\mathbb{Z}$ is considered as a Euclidean domain wrt the absolute value as the Euclidean size function.
C ==> ZZ
nn := 22;
MG ==> MGAMMA0 nn
idxs := etaFunctionIndices nn;
mspecs := mSPECSInf(MG)(idxs);
agens := [specMA1(C,MG)(spec) for spec in mspecs]
msyms := indexedSymbols("M", #agens)
xgens := [toX1(C, x, s) for x in agens for s in msyms]
-- We only achieve a relation that shows divisibility by 11 with xgens.3.
xt := xgens.3
xab := samba(cons(xt, xgens))$QSAMBA(C,X1,QTOPRED)
assertEquals(# basis xab, 5)
-- numOfGaps:=[216, -1] -- numOfGaps:=[216, -1] -- numOfGaps:=[216, -1] -- numOfGaps:=[216, -1] -- numOfGaps:=[216, -1] -- numOfGaps:=[162, -1] -- numOfGaps:=[162, -1] -- numOfGaps:=[109, -1] -- numOfGaps:=[109, -1] -- numOfGaps:=[56, -1] -- numOfGaps:=[56, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1]
dissect := choose(11, 6) generatingFunction(qP(q,q)^(-1), 'p)
-- rspec := eqSPEC(1,[-1]); nn := 22; m := 11; t := 6;
-- sspec: SPEC := cofactInf(MG)(idxs, rspec, m, t)
sspec: SPEC := cofactInf(MG)(idxs, dissect)
assertEquals(sspec, eqSPEC(e1^10 * e2^2 * e11^11 * e22^(-22)))
xf := toX1(C, specMA1(C,MG)(sspec,dissect), F)
-- == z:=[zinhom=[], zhom=[], zfree=[]] -- >= z:=[zinhom=[[4, -1, 1], [5, -1, 2], [4, -1, 2]], zhom=[[3, -1, 0], [4, -1, 1], [1, -1, 1], [2, -1, 1], [3, -1, 1], [0, -1, 1], [2, 0, 1]], zfree=[]]
Interestingly, we have to multiply by 4, because otherwise the reduction would not return 0.
xr := reduce(4*xf, xab)$QTOPRED(ZZ,X1)
assertTrue(zero? xr)
pol := x1Pol(C, xr)
polExpected := (11*(_
(-1800*M3-1734656)*M5_
+ (-4696*M3+6504960)*M4_
- 4*M3^3_
+ (16*M2-12*M1-12529)*M3^2_
+ (50633*M2-74080*M1-1492480)*M3_
- 37566144*M2_
+ 10284032*M1_
- 47703040)_
+ 4*F)$Pol(ZZ);
assertEquals(pol, polExpected)
lcxr := [leadingCoefficient x for x in monomials(pol-4*F)];
divisibility11 := removeDuplicates [positiveRemainder(x, 11) for x in lcxr]
assertEquals(divisibility11, [0])
We have just found a witness for the divisibility by 11 of $F(\tau)$ and, therefore, for $p(11n+6)$.
factor(pol-4*F)
Let us replace $F$ and the $M_i$ by their respective $q$-series expansions.
e := eval(pol, cons('F, msyms), cons(first xf, agens))_
$ PolynomialEvaluation(ZZ, A1(ZZ))
assertTrue(zero? e)
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------
Paule's proof via computation in $C[t,f]$¶
-----------------------------------------------------------------
--test:Paule
-----------------------------------------------------------------
Note that here the definition of $f$ is different from the $F(\tau)$ the beginning of this notebook and, additionally, we work over $\Gamma_0(11)$ instead of $\Gamma_0(22)$
Now we define \begin{align*} t &= q^{-5} \qPochhammer{q}{q}^{12} \qPochhammer{q^{11}}{q^{11}}^{12} \\ f &= q^{-4} \qPochhammer{q}{q}^{12} \qPochhammer{q^{11}}{q^{11}}^{11} \sum_{k=0}^{\infty}p(11k+6)q^k. \end{align*}
C ==> ZZ
MG ==> MGAMMA0 11
dissect := choose(11,6) generatingFunction(qP(q)^(-1)) :: QGFSPEC
spexmont := (qPower(-5) * qP(q)^12 / qP(q^11)^12) :: SPEXMON
spexmonf := qPower(-4) * qP(q)^12 / qP(q^11)^11 * dissect
Both functions are modular for $\Gamma_0(11)$.
[qModular?(C,MG) spexmont, qModular?(C,MG) spexmonf]
MG ==> MGAMMA0 22
xf := toX1(C, spexMA1(C,MG)(spexmonf), 'F)
xt := toX1(C, spexMA1(C,MG)(spexmont), 'T)
xab := samba([xt, xf])$QSAMBA(C,X1,QTOPRED);
assertEquals(# basis xab, 4)
pols := sort((x,y)+->degree x < degree y, [x1Pol(C, x) for x in basis xab])
-- numOfGaps:=[120, -1] -- numOfGaps:=[120, -1] -- numOfGaps:=[120, -1] -- numOfGaps:=[120, -1] -- numOfGaps:=[120, -1] -- numOfGaps:=[120, -1] -- numOfGaps:=[120, -1] -- numOfGaps:=[120, -1] -- numOfGaps:=[120, -1] -- numOfGaps:=[120, -1] -- numOfGaps:=[120, -1] -- numOfGaps:=[120, -1]
polsExpected := [F, F^2, F^3, F^4]$List(Pol(C))
assertEquals(pols, polsExpected)
xr := reduce(xf^5, xab)$QTOPRED(C,X1)
assertTrue(zero? xr)
pol := x1Pol(C, xr)
c := coefficient(pol, F, 5)
polExpected := (-F^5_
+ 5*11^4*F^4_
+ 11^4*(251*T-2*5*11^4)*F^3_
+ 11^3*(4093*T^2+2*3*5*11^5*31*T+2*5*11^9)*F^2_
+ 11^4*(3*41*T^3-2^2*3*11^3*1289*T^2+2*5*11^8*17*T-5*11^12)*F_
+ 11^5*(T+11^4)*(T^3+11^2*1321*T^2-3*7*11^7*T+11^11))$Pol(ZZ);
assertEquals(-pol, polExpected)
The above polynomial agrees with the relation that Peter Paule has shown on his Slide 32 of hia talk at "The 2016 International Number Theory Conference in honor of Krishna Alladi's 60th birthday" (Gainesville, March 17-21, 2016). Compare with formula (8) in Hemmecke_DancingSambaRamanujan_2018.
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------
With $\mathbb{Z}_{(11)}$ and division by 11¶
-----------------------------------------------------------------
--test:Hemmecke2
-----------------------------------------------------------------
TODO: Introduce vectors in the second component so that we can track whether the just reduced element is divisible by 11.
C ==> IntegerLocalizedAtPrime 11
MG ==> MGAMMA0 22
nn := 22::PP; -- level
idxs := etaFunctionIndices nn
m := 11::PP;
rspec: SPEC := eqSPEC(1,[-1])
orbs := [orb for tt in 0..m-1 | (orb := modularOrbit(rspec,m,tt)$MG; one? # orb)]
t := first(first orbs) :: NN
Let's compute the expansion (at $\infty$) of $$ F(\tau) = g_r(\tau) q^{\frac{e}{24}} \sum_{k=0}^{\infty}p(m k + t)q^k. $$
Create modular series for p(11n+6)¶
sspec := cofactInf(MG)(idxs, rspec, m, t)
xf := toX1(C, specMA1(C,MG)(sspec,rspec,m,t), 'F)
-- == z:=[zinhom=[], zhom=[], zfree=[]] -- >= z:=[zinhom=[[4, -1, 1], [5, -1, 2], [4, -1, 2]], zhom=[[3, -1, 0], [4, -1, 1], [1, -1, 1], [2, -1, 1], [3, -1, 1], [0, -1, 1], [2, 0, 1]], zfree=[]]
The generators of the eta-quotients of level 22 are given by these exponents for the eta-functions (with arguments being the divisors of 22).
mspecs := mSPECSInf(MG)(idxs);
agens := [specMA1(C,MG)(spec) for spec in mspecs]
msyms := indexedSymbols("M", #mspecs)
xgens := [toX1(C, x, sym) for x in agens for sym in msyms];
xgens := cons(toX1(C, agens.1, 'T), rest xgens);
xt := xgens.1
xab := samba(xgens)$QSAMBA(C,X1,QTOPRED)
-- numOfGaps:=[216, -1] -- numOfGaps:=[216, -1] -- numOfGaps:=[162, -1] -- numOfGaps:=[162, -1] -- numOfGaps:=[109, -1] -- numOfGaps:=[109, -1] -- numOfGaps:=[56, -1] -- numOfGaps:=[56, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1]
Due to another critical element selection strategy, the resulting polynomial is a bit different.
be := basisElements xab
bas := sort(smallerGrade?, basis xab);
We show that the basis element of degree 3 has coefficients that are all divisible by 11. So we can divide it by 11. The method is to multiply by t and track the cofactors of the basis elements used in this reduction. That this reduction should give 0 is clear, since xab is an algebra basis.
x3 := xt*be.3.1 _
- 11*(be.3.2 + 6*be.2.1 +10*be.1.1 + 10*xt - 11*be.4.1_
- ((1/3)::C)*be.3.1 -11::C*1$X1(C))
assertTrue(zero? x3)
It's still not a representation in terms of the $M_i$.
p := x1Pol(C, x3)
l := [[e, x] for x in monomials(p)| zero?(e:=exponent leadingCoefficient x)]
assertTrue(not empty? l)
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------
With $\mathbb{Z}_{(11)}$ and different strategy¶
-----------------------------------------------------------------
--test:Hemmecke3
-----------------------------------------------------------------
This test shows divisibility by 11, but uses a specifically tailored computation of an algebra basis and additional manual reduction.
C ==> IntegerLocalizedAtPrime 11
MG ==> MGAMMA0 22
nn := 22::PP; -- level
idxs := etaFunctionIndices nn
m := 11::PP;
rspec: SPEC := eqSPEC(1,[-1])
orbs := [orb for tt in 0..m-1 | (orb := modularOrbit(rspec,m,tt)$MG; one? # orb)]
t := first(first orbs) :: NN
Let's compute the expansion (at $\infty$) of $$ F(\tau) = g_r(\tau) q^{\frac{e}{24}} \sum_{k=0}^{\infty}p(m k + t)q^k. $$
Create modular series for $p(11n+6)$¶
sspec := cofactInf(MG)(idxs, rspec, m, t)
xf := toX1(C, specMA1(C,MG)(sspec,rspec,m,t), 'F)
-- == z:=[zinhom=[], zhom=[], zfree=[]] -- >= z:=[zinhom=[[4, -1, 1], [5, -1, 2], [4, -1, 2]], zhom=[[3, -1, 0], [4, -1, 1], [1, -1, 1], [2, -1, 1], [3, -1, 1], [0, -1, 1], [2, 0, 1]], zfree=[]]
The generators of the eta-quotients of level 22 are given by
these exponents for the eta-functions (with arguments being the
divisors of 22). The variable mspecs corresponds to the generators
of $R^\infty(22)$.
mspecs := mSPECSInf(MG)(idxs);
agens := [specMA1(C,MG)(spec) for spec in mspecs]
msyms := indexedSymbols("M", #mspecs)
xgens := [toX1(C, x, sym) for x in agens for sym in msyms];
xgens := cons(toX1(C, agens.1, 'T), rest xgens);
Because we observed that using all generators of grade 5 leads to a
series (of grade 3) with leading coefficient 11 in the basis, we
compute a basis with just one of those generators. Of course,
we cannot expect that this leads to a basis by which we can reduce
xf to zero. However, we hope that we arrive at a zero reduction
if we later use the other grade 5 elements.
#xgens
xgens0 := [xgens.i for i in [1,4,5,6,7]]
xab0 := samba(xgens0)$QSAMBA(C,X1,QTOPRED)
-- numOfGaps:=[216, -1] -- numOfGaps:=[163, -1] -- numOfGaps:=[110, -1] -- numOfGaps:=[57, -1] -- numOfGaps:=[4, -1] -- numOfGaps:=[4, -1] -- numOfGaps:=[4, -1] -- numOfGaps:=[4, -1] -- numOfGaps:=[4, -1] -- numOfGaps:=[4, -1] -- numOfGaps:=[4, -1] -- numOfGaps:=[4, -1] -- numOfGaps:=[4, -1] -- numOfGaps:=[4, -1] -- numOfGaps:=[4, -1]
bas := sort(smallerGrade?, basis xab0);
[qetaGrade x for x in bas]
xr0 := reduce(xf,xab0)$QTOPRED(C,X1)
As was to be expected that reduction does not lead to zero.
Now, however, we compute the algebra basis with all
generators and continue the reduction of xr0.
xab := samba(xgens)$QSAMBA(C,X1,QTOPRED);
xr := reduce(xr0,xab)$QTOPRED(C,X1)
-- numOfGaps:=[216, -1] -- numOfGaps:=[216, -1] -- numOfGaps:=[162, -1] -- numOfGaps:=[162, -1] -- numOfGaps:=[109, -1] -- numOfGaps:=[109, -1] -- numOfGaps:=[56, -1] -- numOfGaps:=[56, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1] -- numOfGaps:=[2, -1]
And, voila, we have a representation that reveals divisibility by 11.
pol := x1Pol(C, xr)
fpol := F - ((1/coefficient(pol,'F,1))::C)*pol
assertTrue(not member?('F, variables(fpol)))
c11s := [exponent leadingCoefficient m for m in monomials fpol]
assertEquals(removeDuplicates [x>0 for x in c11s], [true])
syms := cons('T, rest msyms)
rf := eval(fpol, syms, agens)$PolynomialEvaluation(C,A1 C)
assertTrue(zero?(x1A1(C, xf) - rf))
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------