$\newcommand{\setC}{\mathbb{C}}$ $\newcommand{\setQ}{\mathbb{Q}}$ Via jupytext this file can be shown as a jupyter notebook.

In [1]:
)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 
In [ ]:
)set output algebra on
)set output formatted off

This notebook contains supplement material to the article

Construction of Bases for Modular Functions for $\Gamma_0(121)$ related to $p(11n+6)$¶

by

Ralf Hemmecke, Peter Paule, and Silviu Radu.

@article{HemmeckePauleRadu_IntegralBasis_2021,
  author =       {Ralf Hemmecke and Peter Paule and Cristian-Silviu
                  Radu},
  title =        {Construction of Modular Function Bases for
                  $Gamma_0(121)$ related to $p(11n+6)$},
  journal =      {Integral Transforms and Special Functions},
  volume =       32,
  number =       {5--8},
  pages =        {512--527},
  year =         2021,
  publisher =    {Taylor \& Francis},
  issn =         {1065-2469},
  doi =          {10.1080/10652469.2020.1806261},
  URL =
                  {https://www.tandfonline.com/doi/abs/10.1080/10652469.2020.1806261},
  sponsor =      {FWF (SFB F50-06)},
  abstract =     {Motivated by arithmetic properties of partition
                  numbers $p(n)$, our goal is to find algorithmically
                  a Ramanujan type identity of the form
                  $\sum_{n=0}^{\infty}p(11n+6)q^n=R$, where $R$ is a
                  polynomial in products of the form
                  $e_\alpha:=\prod_{n=1}^{\infty}(1-q^{11^\alpha n})$
                  with $\alpha=0,1,2$. To this end we multiply the
                  left side by an appropriate factor such the result
                  is a modular function for $\Gamma_0(121)$ having
                  only poles at infinity. It turns out that
                  polynomials in the $e_\alpha$ do not generate the
                  full space of such functions, so we were led to
                  modify our goal. More concretely, we give three
                  different ways to construct the space of modular
                  functions for $\Gamma_0(121)$ having only poles at
                  infinity. This in turn leads to three different
                  representations of $R$ not solely in terms of the
                  $e_\alpha$ but, for example, by using as generators
                  also other functions like the modular invariant
                  $j$.}
}

Since some output is rather big, consider to search for the string "In [" within your browser.

This notebook shows how to compute an (order-complete) integral basis for $M^\infty(121)$ with 3 different methods. |

  • Preparatory steps

    • Monoid basis $\{t, u\}$ of $E^\infty(121)$

    • Order-complete basis for $\mathbb{Q}[t,u]$

    • The generating function $f$ for $p(11n+6)$

    • Order-complete basis for $\mathbb{Q}[t,u, f]$

    • Denominator polynomial $d(T)$ corresponding to $f$

    • The generating function $f_2$ for $p(121n+116)$

    • Show $f_2 \in \mathbb{Q}[t,u, f]$

  • Method 1: integral basis by using the Klein $j$ function

    • Order-complete integral basis for $\mathbb{Q}\lbrack t,u, j^{\infty}_0, j^{\infty}_2\rbrack$
  • Method 2: integral basis obtained with the trace map

    • Monoid basis of $E^\infty(242)$
    • Functions $g$ and $h$
    • Integral basis for $\mathbb{Q}[t,u, f, g]$
    • Order-complete basis for $\mathbb{Q}[t,u, g]$
    • integral basis for $\mathbb{Q}[t,u, g, h]$
    • Integral basis for $\mathbb{Q}[t,u, h]$
    • Denominator polynomial $d^*$ corresponding to $h$
  • Method 3: integral basis by using Maple's algcurves

Preparatory steps¶

In [2]:
-------------------------------------------------------------------
--setup
-------------------------------------------------------------------

First we locate the QEta package and load it together with some useful macros into a FriCAS session.

The following assumes that the QEta package has already been compiled via make compile-spad, i.e. all further computation is done inside /home/hemmecke/g/qeta/tmp.

In [3]:
)set mess type off
)set mess time off
In [4]:
C ==> QQ;
)read convenience.input )quiet
smallerMod5?(x, y) == _
  positiveRemainder(qetaGrade x, 5) < positiveRemainder(qetaGrade y, 5)

Monoid basis for $E^\infty(121)$¶

We do expansion at the cusp $\infty$ which corresponds to 1/nn in terms of our session variables.

In [5]:
nn: PP := 121;
idxs := etaFunctionIndices nn
trfs := cuspMatricesM0 nn;
Out[5]:
\[ \left[\left[1\right], \left[11\right], \left[121\right]\right] \]

Show only a few terms of the $q$-series expansion.

In [6]:
)set stream calculate 2

We use 4ti2 to find the monoid basis of the eta-quotients of level nn. We first compute the respective exponent vectors for the eta-quotients generators. The variable mspecss corresponds to the generators of $R^\infty(121)$.

The generators of the eta-quotients of level 121 having a pole only at infinity $E^\infty(121)$ are given by these exponents for the eta-functions (with arguments being the divisors of 121).

In [7]:
mspecs := mSPECSInfM0(nn, idxs);
rgensExpected: List List ZZ := [[1,0,-1],[-1,12,-11]]
assertEquals([pureExponents x for x in mspecs], rgensExpected)
Out[7]:
\[ \left[\left[1, 0, -1\right], \left[-1, 12, -11\right]\right] \]
Out[7]:
\[ \texttt{true} \]
In [8]:
ys := [specYM0EQn spec for spec in mspecs];
xiord := lcm [minimalRootOfUnity x for x in ys]
assertEquals(xiord, 44)
EXTENDEDCOEFFICIENTRING(C, xiord, CX, xi);
Out[8]:
\[ 44 \]
Out[8]:
\[ \texttt{true} \]

As can be seen in the above expansion, some cusps involves computation in $\mathbb{Q}[\xi]$ where $\xi$ is a primitive 44-th root of unity although the $q$-series expansion itself is eventually with rational coefficients.

The corresponding series are the following.

In [9]:
egens := [specM0A1(C)(spec) for spec in mspecs]
Out[9]:
\[ \left[{q}^{-5}-{q}^{-4}-{q}^{-3}+O\left({q}^{-2}\right), {q}^{-50}+{q}^{-49}+2\, {q}^{-48}+O\left({q}^{-47}\right)\right] \]

Naming convention¶

Our naming convention for elements of $M^\infty(121)$ corresponding to the article is as follows.

We prefix cf to the variable name of the article, if we simply consider its corresponding $q$-series.

We prefix the variable name with x to denote the corresponding $q$-series together with an indeterminate (a "polynomial part"). All module operations are then done on both parts of the pair so that we can easily extract relations among the elements by simply looking at the "polynomial part".

Note that in FriCAS a semicolon separates two expressions and (if given at the end of a line) inhibits the output of the last computation.

xab=samba($\{t, u\}$) --- Samba with t and u¶

In this section, we compute a $\mathbb{C}[t]$-module basis of the space of eta-quotients $\mathbb{C}[E^\infty(121)]=\mathbb{C}[t, u]$.

In [10]:
xgens := [toX1(C, egens.1, 'T), toX1(C, egens.2, 'U)]
Out[10]:
\[ \left[\left[{q}^{-5}-{q}^{-4}-{q}^{-3}+O\left({q}^{-2}\right), T\right], \left[{q}^{-50}+{q}^{-49}+2\, {q}^{-48}+O\left({q}^{-47}\right), U\right]\right] \]

We take a minimal (in terms the pole order in q) element from the generators and make it special, here xt of order -5. Then we compute an algebra basis for $C[t,u]$.

In [11]:
xt := xgens.1;
xu := xgens.2;
xz := toX1(C, first(1/11 * (xu - xt^10)), 'Z);

The output of the algorithm samba is a pair consisting of a multiplier mul and basis elements be. The multiplier mul usually corrsponds to the series $t$. The basis elements are a table, whose entries are indexed by integers $1, \ldots, n-1$ where $n=-\mathrm{ord}_q(t)$. Thus, if $b_1, \ldots, b_{n-1}$ are given by be, then the result of samba represents the module $\langle 1, b_1, \ldots, b_{n-1}\rangle_{\mathbb{C}[t]}$.

In [12]:
xab := samba(xgens, 96)$QSAMBA(C,X1,QTOPRED)
assertEquals(# basis xab, 4)
xabbas := sort(smallerMod5?, basis xab);
assertEquals([qetaGrade x for x in xabbas], [196,147,98,49])
-- numOfGaps:=[1200, 96]
-- numOfGaps:=[909, 96]
-- numOfGaps:=[628, 96]
-- numOfGaps:=[357, 96]
-- numOfGaps:=[96, 96]
Out[12]:
\[ \left[mul=\left[{q}^{-5}-{q}^{-4}-{q}^{-3}+O\left({q}^{-2}\right), T\right], be=\texttt{table}\left(1=\left[\left[{q}^{-196}-12\, {q}^{-195}+66\, {q}^{-194}+O\left({q}^{-193}\right), \frac{1}{14641}\, {U}^{4}-\frac{4}{14641}\, {T}^{10}\, {U}^{3}+\frac{6}{14641}\, {T}^{20}\, {U}^{2}-\frac{4}{14641}\, {T}^{30}\, U+\frac{1}{14641}\, {T}^{40}\right]\right], 2=\left[\left[{q}^{-147}-9\, {q}^{-146}+36\, {q}^{-145}+O\left({q}^{-144}\right), \frac{1}{1331}\, {U}^{3}-\frac{3}{1331}\, {T}^{10}\, {U}^{2}+\frac{3}{1331}\, {T}^{20}\, U-\frac{1}{1331}\, {T}^{30}\right]\right], 4=\left[\left[{q}^{-49}-3\, {q}^{-48}+3\, {q}^{-47}+O\left({q}^{-46}\right), \frac{1}{11}\, U-\frac{1}{11}\, {T}^{10}\right]\right], 3=\left[\left[{q}^{-98}-6\, {q}^{-97}+15\, {q}^{-96}+O\left({q}^{-95}\right), \frac{1}{121}\, {U}^{2}-\frac{2}{121}\, {T}^{10}\, U+\frac{1}{121}\, {T}^{20}\right]\right]\right)\right] \]
Out[12]:
\[ \texttt{true} \]
Compiling function smallerMod5? with type (QEtaExtendedAlgebra(Fraction(
Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(
Fraction(Integer),Polynomial(Fraction(Integer)))), QEtaExtendedAlgebra(
Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),
QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))) -> Boolean
 
Out[12]:
\[ \texttt{true} \]

Clearly, the element after 4 = corresponds to the element $z=\frac{1}{11}(u-t^{10})$ from Section 4 of the article.

The variable xab represents the $\mathbb{Q}[t]$-module $\langle 1, z, z^2, z^3, z^4 \rangle_{\mathbb{Q}[t]}$.

In [13]:
nog := numberOfGaps(xab);
assertEquals(nog, 96)
Out[13]:
\[ \texttt{true} \]

The genus of the Riemann surface $X_0(121)$ is a curve of genus 6. Its genus is equal to the genus of $\Gamma_0(121)$.

In [14]:
gen := genus()$GAMMA0(nn);
assertEquals(gen, 6)
Out[14]:
\[ \texttt{true} \]

Since 6 < 96, it proves that xab does not represent an integral basis for $M^\infty(121)$.

Let's set new variables for each series in the basis.

In [15]:
xabz := samba([xt, xz], 96)$QSAMBA(C,X1,QTOPRED);
-- numOfGaps:=[1176, 96]
-- numOfGaps:=[891, 96]
-- numOfGaps:=[616, 96]
-- numOfGaps:=[351, 96]
-- numOfGaps:=[96, 96]

With this number of gaps (96), we have not yet reached the genus of the modular curve $X_0(121)$. Thus we must find another modular function.

The generating function $f$ for $p(11n+6)$¶

Let us first construct $c(q)$ such that $$f := c(q) \sum_{n=0}^\infty p(11n+6) q^n \in M^\infty(121). $$

In [16]:
rspec := eqSPEC(1, [-1])
sspec := cofactInfM0(121, etaFunctionIndices 121, rspec, 11, 6)
assertEquals(pureExponents sspec, [11,1,-11])
alpha := alphaInfinity(sspec, rspec, 11, [6])
assertEquals(alpha, -54)
eulerquo: T1 C := qetaTaylorRep eulerExpansion specEQI(C) eqSPEC [[1, -1]];
pp: T1 C := multisect(11-6, 6, eulerquo); ---- p(11n+6)
cofact: T1 C := qetaTaylorRep eulerExpansion specEQI(C) sspec;
f: A1 C := laurent(alpha, cofact * pp)$A1(C)
assertTrue(zero?(f-specM0A1(C)(sspec,rspec,11,6)))
xf: X1 C := toX1(C, f, 'F)
Out[16]:
\[ \left[\left[1, -1\right]\right] \]
-- == z:=[zinhom=[], zhom=[], zfree=[]]
-- >= z:=[zinhom=[[5, -1]], zhom=[[5, -1], [1, 0]], zfree=[]]
Out[16]:
\[ \left[\left[1, 11\right], \left[11, 1\right], \left[121, -11\right]\right] \]
Out[16]:
\[ \texttt{true} \]
Out[16]:
\[ -54 \]
Out[16]:
\[ \texttt{true} \]
Out[16]:
\[ 11\, {q}^{-54}+176\, {q}^{-53}+935\, {q}^{-52}+O\left({q}^{-51}\right) \]
Out[16]:
\[ \texttt{true} \]
Out[16]:
\[ \left[11\, {q}^{-54}+176\, {q}^{-53}+935\, {q}^{-52}+O\left({q}^{-51}\right), F\right] \]

The generating series does not reduce to zero modulo the algebra basis xab.

In [17]:
xfr := reduce(xf, xab)$QRED(C,X1)
assertTrue(not zero? xfr)
Out[17]:
\[ \left[{q}^{-53}+4\, {q}^{-52}+12\, {q}^{-51}+O\left({q}^{-50}\right), \left(-\frac{1}{220}\, T-\frac{819}{22}\right)\, U+\frac{1}{220}\, {T}^{11}+\frac{289}{110}\, {T}^{10}-\frac{4306}{5}\, {T}^{9}+\frac{561856}{5}\, {T}^{8}-\frac{33174399}{5}\, {T}^{7}+105311866\, {T}^{6}+\frac{3252156246}{5}\, {T}^{5}+\frac{6441591214}{5}\, {T}^{4}+\frac{16916384058}{5}\, {T}^{3}-\frac{179682879984}{5}\, {T}^{2}+\frac{459311132244}{5}\, T+\frac{1}{220}\, F-\frac{379696873011}{20}\right] \]
Out[17]:
\[ \texttt{true} \]

Load function definitions for Klein $j$ function and for the trace map connected to the Atkin-Lehner involution.

In [18]:
)read modfuns.input )quiet
Function declaration kleinJ : (PositiveInteger, Matrix(Integer), 
PositiveInteger) -> QEtaLaurentSeries(SimpleAlgebraicExtension(Fraction(
Integer),UnivariatePolynomial(ξ,Fraction(Integer)),ξ^20+(-(ξ^18))+ξ^16+(-(ξ^
14))+ξ^12+(-(ξ^10))+ξ^8+(-(ξ^6))+ξ^4+(-(ξ^2))+1)) has been added to 
workspace.
Function declaration kleinJn : (PositiveInteger, NonNegativeInteger) -> 
ModularFunctionQSeries(SimpleAlgebraicExtension(Fraction(Integer),
UnivariatePolynomial(ξ,Fraction(Integer)),ξ^20+(-(ξ^18))+ξ^16+(-(ξ^14))+ξ^12+
(-(ξ^10))+ξ^8+(-(ξ^6))+ξ^4+(-(ξ^2))+1),[[[0,-1],[1,0]],[[1,0],[11,1]],[[2,-1]
,[11,-5]],[[3,1],[11,4]],[[4,1],[11,3]],[[5,-1],[11,-2]],[[6,1],[11,2]],[[7,
-2],[11,-3]],[[8,-3],[11,-4]],[[9,4],[11,5]],[[10,-1],[11,-1]],[[1,0],[0,1]]]
) has been added to workspace.

In order to have a fixed order of the factors of the discriminat, we sort the factors by the size of the second coefficient.

In [19]:
absSecondCoefficient(x: Pol C): C ==_
  abs(coefficient(x, 'T, (degree(x, 'T)-1)::NN)$Pol(C));
smallerSecondCoefficient?(x, y) == (_
  xfac := x.factor;  dx := degree(xfac, 'T);_
  yfac := y.factor;  dy := degree(yfac, 'T);_
  dx=dy =>_
    (absSecondCoefficient xfac < absSecondCoefficient yfac)@Boolean;_
  (dx < dy)@Boolean);
Function declaration absSecondCoefficient : Polynomial(Fraction(Integer)) -> 
Fraction(Integer) has been added to workspace.
In [20]:
)read projectdir.input )quiet
basedir := PROJECTDIR "/data/integralbasis"
f1d x ==> first lines(format(format(x::OF)$Formatter(Format1D)))
Out[20]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis"} \]
In [21]:
fdfactorsexpected := [_
  T,_
  T^2-11,_
  T^2-2*T+11,_
  T^2-3*T+11,_
  T^25+430*T^24-31200*T^23+578905*T^22-6007240*T^21+42281581*T^20_
    -218350660*T^19+851271410*T^18-2472691265*T^17+4848984855*T^16_
    -3205367440*T^15-18988485230*T^14+93248895025*T^13_
    -243431953930*T^12+416601090015*T^11-403942642466*T^10_
    -112485265695*T^9+1267233014520*T^8-2655224484605*T^7_
    +3433152350925*T^6-3075192506826*T^5+1978532471630*T^4_
    -978548291765*T^3+412640845925*T^2-129687123005*T+25937424601,_
  T^30-920*T^29-19225*T^28+1258030*T^27-19448535*T^26+75396538*T^25_
    +2157132615*T^24-50735009930*T^23+643909614260*T^22_
    -5980486211480*T^21+44473273280260*T^20-276140775186430*T^19_
    +1465665176339650*T^18-6744922810982730*T^17_
    +27144546684208910*T^16-95977332323506700*T^15_
    +298590013526298010*T^14-816135660128910330*T^13_
    +1950800349708074150*T^12-4042977089504521630*T^11_
    +7162465135059153260*T^10-10594796133295720280*T^9_
    +12547976761628658460*T^8-10875499956118688330*T^7_
    +5086405868720041965*T^6+1955592019551431338*T^5_
    -5548894011786504885*T^4+3948237050766319630*T^3_
    -663699140967073475*T^2-349369846896581720*T+4177248169415651];
In [22]:
)set mess type on
)set mess time on
In [23]:
-------------------------------------------------------------------
--endsetup
-------------------------------------------------------------------

Denominator polynomial $d(T)$ corresponding to $f$¶

In [24]:
-------------------------------------------------------------------
--test:time130-dc
-------------------------------------------------------------------

We compute a polynomial $d(T)$ such that $d(t)f \in \mathbb{Q}[t, u]$.

We only need the coefficients of the pricipal part of $t^{37} f-h_{37}, \ldots, t^{102}f-h_{102}$ where $h_i \in \langle 1, z^1, z^2, z^3, z^4 \rangle_{C[t]}$ in order to find a relation among these $q$-series.

Note that $t$ corresponds to our variable xt and $1, z^1,\ldots,z^4$ to our basis xabz.

Then $t^i f - h_i$ corresponds to reduce(xt^i xf, xt, xabz).

We first compute all the reductions. That will give us $q$-series of order 191 each. (Takes about 1.5 min.)

In [25]:
e1:=37; e2:=102;
rs := [reduce(xt^e1*xf, xabz)$QRED(C,X1)];
for i in e1+1..e2 repeat (_
  rs := cons(reduce(xt*first(rs), xabz)$QRED(C,X1), rs))
rs := reverse! rs;
[qetaGrade x for x in rs]
Out[25]:
PositiveInteger
Time: 0 sec
Out[25]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0.34 (EV) = 0.34 sec
Out[25]:
Void
Time: 28.47 (EV) + 1.02 (GC) = 29.50 sec
Out[25]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[25]:
\[ \left[191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191, 191\right] \]
List(Integer)
Time: 0 sec

Extract the 192 coefficients corresponding to the orders $-191, \ldots, 0$ and compute the kernel of the corresponding matrix.

This takes about 20 sec.

In [26]:
l := [[qetaCoefficient(first x, i) for i in 0..191] for x in rs];
mat := transpose matrix l;
ns := nullSpace mat;
assertEquals(#ns, 1)
Out[26]:
List(List(Fraction(Integer)))
Time: 0.05 (EV) + 0.04 (GC) = 0.09 sec
Out[26]:
Matrix(Fraction(Integer))
Time: 0 sec
Out[26]:
List(Vector(Fraction(Integer)))
Time: 10.49 (EV) + 0.02 (GC) = 10.50 sec
Out[26]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Extract the coefficients from the vector in the nullspace.

In [27]:
cs := members first ns;
Out[27]:
List(Fraction(Integer))
Time: 0 sec

Check that the resulting vector indeed yields a relation, i.e., we multiply the series $t^i f - h_i$ from above by the corresponding coefficient from cs and sum these products. The result is the zero series (as expected).

In [28]:
lincomp := [c*rr for c in cs for rr in rs];
lc := reduce(_+, lincomp);
assertTrue(zero? lc)
Out[28]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[28]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0.06 (EV) = 0.06 sec
Out[28]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [29]:
l := [qetaCoefficient(lc, -i) for i in -5..20];
assertEquals(removeDuplicates l, [0])
Out[29]:
List(Fraction(Integer))
Time: 3.68 (EV) + 0.18 (GC) = 3.86 sec
Out[29]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Indeed, we have just shown a relation for $t^{37} f-h_{37}, \ldots, t^{102}f-h_{102}$.

In [30]:
df := x1Pol(C,lc);
assertEquals(variables df, ['Z,'T,'F])
l := [degree(df, x) for x in variables df];
assertEquals(l, [4,112,1])
Out[30]:
Polynomial(Fraction(Integer))
Time: 0.21 (IN) = 0.21 sec
Out[30]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[30]:
List(NonNegativeInteger)
Time: 0 sec
Out[30]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Computation of the corresponding polynomials $c_0,..,c_4$¶

In this section we compute a polynomial $c(T, ZZ) := \sum_{k=0}^4 c_k(T) Z^k \in \mathbb{Q}[T,ZZ]$ such that $d(t)f = c(t, z)$.

In [31]:
cf1:=coefficient(df,'F,1); -- The denominator polynomial d(T).
cf0:=coefficient(df,'F,0); -- The polynomial c(T, ZZ).
Out[31]:
Polynomial(Fraction(Integer))
Time: 0 sec
Out[31]:
Polynomial(Fraction(Integer))
Time: 0 sec
In [32]:
assertEquals(variables cf0, ['Z,'T])
cf0s := [coefficient(cf0, 'Z, i) for i in 0..4];
l := cons(degree(cf1, 'T), [degree(x, 'T) for x in cf0s]);
assertEquals(l, [102,112,103,93,83,73])
assertEquals(gcd cons(cf1,cf0s), T^37)
Out[32]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[32]:
List(Polynomial(Fraction(Integer)))
Time: 0 sec
Out[32]:
List(NonNegativeInteger)
Time: 0 sec
Out[32]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[32]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Factors of $d(T)$¶

Apart from the $T^{37}$ factor, we get other factors. Below are the factors $d_1, \ldots, d_5$, unsorted.

In [33]:
dfactored := factor cf1;
ud := unit dfactored    -- the constant common factor
Out[33]:
Factored(Polynomial(Fraction(Integer)))
Time: 0.02 (EV) = 0.03 sec
Out[33]:
\[ -\frac{1}{19659474385046019340758701090937159322265565195719497026702352313831789636286105615217801735615662964775647699316016177637306153510825689728105584852268543752968005372939955191077254465339598406210623796702914911300902277310} \]
Polynomial(Fraction(Integer))
Time: 0 sec

Now we sort by degree and the size of the second coefficient.

In [34]:
dfactors := factors dfactored;
dfactorssorted := sort(smallerSecondCoefficient?, dfactors);
assertEquals([x.exponent for x in dfactorssorted], [37,1,2,2,1,1])
Out[34]:
List(Record(factor: Polynomial(Fraction(Integer)),exponent: NonNegativeInteger))
Time: 0 sec
Compiling function absSecondCoefficient with type Polynomial(Fraction(Integer
)) -> Fraction(Integer) 
Compiling function smallerSecondCoefficient? with type (Record(factor: 
Polynomial(Fraction(Integer)),exponent: NonNegativeInteger), Record(factor: 
Polynomial(Fraction(Integer)),exponent: NonNegativeInteger)) -> Boolean 
Compiling function G26983 with type Integer -> Boolean 
Out[34]:
List(Record(factor: Polynomial(Fraction(Integer)),exponent: NonNegativeInteger))
Time: 0.02 (OT) = 0.03 sec
Out[34]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [35]:
fdfactorssorted := [x.factor for x in dfactorssorted];
assertEquals(fdfactorssorted, fdfactorsexpected)
Out[35]:
List(Polynomial(Fraction(Integer)))
Time: 0 sec
Out[35]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [36]:
dend := denom(ud::QQ)
Out[36]:
\[ 19659474385046019340758701090937159322265565195719497026702352313831789636286105615217801735615662964775647699316016177637306153510825689728105584852268543752968005372939955191077254465339598406210623796702914911300902277310 \]
PositiveInteger
Time: 0 sec

Multiplying by the denominator of the constant factor of cf1 and dividing by the common factor give the polynomial $d(T)$ from the article.

In [37]:
d := (-dend * cf1/T^37)::Pol(ZZ); degree(d)
Out[37]:
\[ {T}^{65} \]
IndexedExponents(Symbol)
Time: 0.01 sec

Here we collect all the coefficient polynomials $c_k(t)$ for $k=0,\ldots,4$ after they have been multiplied by the constant denominator.

In [38]:
cis := [(dend*(x/T^37))::Pol(ZZ) for x in cf0s];
Out[38]:
List(Polynomial(Integer))
Time: 0 sec
In [39]:
l := [leadingCoefficient degree x for x in cis];
assertEquals(l, [75,66,56,46,36])
Out[39]:
List(NonNegativeInteger)
Time: 0 sec
Out[39]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [40]:
assertEquals([unit factor x for x in cis],[11,11,22,22,-22])
Out[40]:
\[ \texttt{true} \]
Boolean
Time: 0.05 (EV) = 0.05 sec

Each of the polynomials has a constant factor that is divisible by 11. Together with the "freshman's dream" trick for $z = \frac{1}{11}(u-t^{10})$ that show that the $q$-series expansion of $z$ has integer coefficients, this establishes yet another relation that shows that $p(11n+6)$ is divisible by 11.

In [41]:
C11 ==> IntegerLocalizedAtPrime 11
P11 ==> Polynomial C11
Out[41]:
Void
Time: 0 sec
Out[41]:
Void
Time: 0 sec

Express $d(t)f$ in terms of $t$, $z^1, \ldots, z^4$¶

Plugging into $d$ the respective series, we get a $q$-series of order $-325$.

In [42]:
xd := eval(d,_
           (c:ZZ): X1(C) +-> c*1$X1(C),_
           ['T],_
           [xt])$PolynomialEvaluation(ZZ, X1(C));
first xd
assertEquals(qetaGrade first xd, 325)
Out[42]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0.84 (EV) + 0.08 (GC) = 0.93 sec
Out[42]:
\[ {q}^{-325}-65\, {q}^{-324}+2015\, {q}^{-323}+O\left({q}^{-322}\right) \]
ModularFunctionQSeriesInfinity(Fraction(Integer))
Time: 0 sec
Out[42]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

When multiplied by $f$, it can be reduced to to zero modulo our algebra basis xabz.

In [43]:
)set mess time on
xdf := xd*xf;
xdfredz := reduce(xdf, xabz)$QTOPRED(C,X1);
assertTrue(zero? xdfredz)
Out[43]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0 sec
Out[43]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 2.16 (EV) + 0.03 (GC) = 2.19 sec
Out[43]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Of course, it is not surprising that when we clear denominators and extract the respective polynomial representation (in particular the coefficient of the variable F) that we get back our polynomial d.

In [44]:
xdfredz2 := integerPrimitivePart(x1Pol(C,xdfredz)::Pol(QQ));
df0int := coefficient(xdfredz2, F, 0); -- the representation
df1int := coefficient(xdfredz2, F, 1); -- the poly d
assertTrue(zero?(df1int - d))
Out[44]:
Polynomial(Integer)
Time: 0.03 (IN) = 0.03 sec
Out[44]:
Polynomial(Integer)
Time: 0 sec
Out[44]:
Polynomial(Integer)
Time: 0 sec
Out[44]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Express $d(t)f$ in terms of $t$ and $u$¶

In [45]:
xdfred := reduce(xdf, xab)$QRED(C,X1);
Out[45]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 1.68 (EV) + 0.02 (GC) = 1.70 sec
In [46]:
assertTrue(zero? xdfred)
Out[46]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Write out the data to a file.

In [47]:
makedir(basedir)$QETAAUX
fh := open(filename(basedir,"dc", "input"), "output")$TextFile
for x in dfactorssorted for i in 1.. repeat_
  writeLine!(fh, "exponent" string(i) ":=" f1d(x.exponent) ";")
for x in dfactorssorted for i in 1.. repeat _
  writeLine!(fh, "d" string(i) ":=" f1d(x.factor) ";")
for x in cis for i in 0.. repeat _
  writeLine!(fh, "c" string(i) ":=" f1d(x::P11) ";")
close! fh
Out[47]:
Void
Time: 0.04 (EV) = 0.04 sec
Out[47]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/dc.input"} \]
TextFile
Time: 0 sec
Out[47]:
Void
Time: 0 sec
Out[47]:
Void
Time: 0 sec
Out[47]:
Void
Time: 0.01 sec
Out[47]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/dc.input"} \]
TextFile
Time: 0 sec
In [48]:
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------

xfab=samba($\{t, u, f\}$)¶

In [49]:
-------------------------------------------------------------------
--test:time93-bf
-------------------------------------------------------------------

We know that $$ F(\tau) = q^{\frac{13}{24}} \frac{\eta(\tau)^{11} \eta(11\tau)}{\eta(121\tau)^{11}} \sum_{k=0}^{\infty}p(11k+6)q^k \in M^\infty(121). $$

Let us try to add $F$ to the basis and check whether we come closer to $M^\infty(N)$. We first do a computation without the "representation" part.

That takes 26 seconds, but gives information whether the input elements span a module with gap number 6.

In [50]:
xfgens := [xt, xu, xf]
Out[50]:
\[ \left[\left[{q}^{-5}-{q}^{-4}-{q}^{-3}+O\left({q}^{-2}\right), T\right], \left[{q}^{-50}+{q}^{-49}+2\, {q}^{-48}+O\left({q}^{-47}\right), U\right], \left[11\, {q}^{-54}+176\, {q}^{-53}+935\, {q}^{-52}+O\left({q}^{-51}\right), F\right]\right] \]
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec

We know already (by previous computation) that the number of gaps will be 31, so we can abort the computation when we have reached gap number 31 and avoid the remaining reductions to zero.

The computation with "polynomial part", can be done, but yields (at least for one basis element a "representation polynomial" in $T$, $U$, and $F$ that is quite huge. (Computation of algebra basis takes about a minite.)

In [51]:
xfab := samba(xfgens, 31)$QSAMBA(C,X1,QRED);
-- numOfGaps:=[1296, 31]
-- numOfGaps:=[981, 31]
-- numOfGaps:=[667, 31]
-- numOfGaps:=[362, 31]
-- numOfGaps:=[58, 31]
-- numOfGaps:=[57, 31]
-- numOfGaps:=[57, 31]
-- numOfGaps:=[56, 31]
-- numOfGaps:=[55, 31]
-- numOfGaps:=[54, 31]
-- numOfGaps:=[53, 31]
-- numOfGaps:=[52, 31]
-- numOfGaps:=[51, 31]
-- numOfGaps:=[50, 31]
-- numOfGaps:=[49, 31]
-- numOfGaps:=[48, 31]
-- numOfGaps:=[47, 31]
-- numOfGaps:=[46, 31]
-- numOfGaps:=[45, 31]
-- numOfGaps:=[44, 31]
-- numOfGaps:=[43, 31]
-- numOfGaps:=[42, 31]
-- numOfGaps:=[41, 31]
-- numOfGaps:=[40, 31]
-- numOfGaps:=[39, 31]
-- numOfGaps:=[38, 31]
-- numOfGaps:=[37, 31]
-- numOfGaps:=[36, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[34, 31]
-- numOfGaps:=[33, 31]
-- numOfGaps:=[33, 31]
-- numOfGaps:=[32, 31]
-- numOfGaps:=[31, 31]
Out[51]:
QEtaAlgebraBasis(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 4.00 (EV) + 0.07 (GC) = 4.07 sec
In [52]:
pols := [x1Pol(C,x) for x in basis xfab];
l := [[degree(x,'T), degree(x, 'U), degree(x, 'F)] for x in pols];
assertEquals(l, [[155,8,8],[77,4,4],[42,2,2],[34,2,2]])
l := [# monomials x for x in pols];
assertEquals(l, [4500,750,174,126])
l := [(z := max [leadingCoefficient(xx) for xx in monomials x];_
 [length numer z, length denom z]) for x in pols];
assertEquals(l, [[4033,3870],[2013,1928],[446,417],[516,461]])
Out[52]:
List(Polynomial(Fraction(Integer)))
Time: 17.15 (EV) + 0.04 (GC) = 17.19 sec
Out[52]:
List(List(NonNegativeInteger))
Time: 0 sec
Out[52]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[52]:
List(NonNegativeInteger)
Time: 0 sec
Out[52]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[52]:
List(List(Integer))
Time: 0.02 (EV) = 0.02 sec
Out[52]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [53]:
xfabtopbas := sort(smallerMod5?, basis xfab);
l := [qetaGrade x for x in xfabtopbas];
assertEquals(l, [66, 42, 33, 24])
Out[53]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[53]:
List(Integer)
Time: 0 sec
Out[53]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Write out the data to a file.

In [54]:
makedir(basedir)$QETAAUX
fh := open(filename(basedir,"bf", "input"), "output")$TextFile
for x in xfabtopbas for i in 1.. repeat _
  writeLine!(fh, "bf" string(i) ":=" f1d(x) ";")
close! fh
Out[54]:
Void
Time: 0.02 (EV) = 0.03 sec
Out[54]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/bf.input"} \]
TextFile
Time: 0 sec
Out[54]:
Void
Time: 2.68 (EV) + 0.29 (GC) = 2.97 sec
Out[54]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/bf.input"} \]
TextFile
Time: 0 sec
In [55]:
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------

xfab=samba($\{t, u, f\}$)¶

In [56]:
-------------------------------------------------------------------
--test:time190-f2
-------------------------------------------------------------------
In [57]:
xfgens := [xt, xu, xf]
Out[57]:
\[ \left[\left[{q}^{-5}-{q}^{-4}-{q}^{-3}+O\left({q}^{-2}\right), T\right], \left[{q}^{-50}+{q}^{-49}+2\, {q}^{-48}+O\left({q}^{-47}\right), U\right], \left[11\, {q}^{-54}+176\, {q}^{-53}+935\, {q}^{-52}+O\left({q}^{-51}\right), F\right]\right] \]
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec

The computation with "polynomial part", can be done, but yields (at least for one basis element a "representation polynomial" in $T$, $U$, and $F$ that is quite huge.

In [58]:
--xfab := samba(xt, xfgens, 31, oneVerboseStep!(1,1,0,1))$QSAMBA(C,X1,QTOPRED);
xfab := samba(xfgens, 31)$QSAMBA(C,X1,QTOPRED);
xfbas := basis xfab;
-- numOfGaps:=[1296, 31]
-- numOfGaps:=[981, 31]
-- numOfGaps:=[667, 31]
-- numOfGaps:=[362, 31]
-- numOfGaps:=[58, 31]
-- numOfGaps:=[57, 31]
-- numOfGaps:=[57, 31]
-- numOfGaps:=[56, 31]
-- numOfGaps:=[55, 31]
-- numOfGaps:=[54, 31]
-- numOfGaps:=[53, 31]
-- numOfGaps:=[52, 31]
-- numOfGaps:=[51, 31]
-- numOfGaps:=[50, 31]
-- numOfGaps:=[49, 31]
-- numOfGaps:=[48, 31]
-- numOfGaps:=[47, 31]
-- numOfGaps:=[46, 31]
-- numOfGaps:=[45, 31]
-- numOfGaps:=[44, 31]
-- numOfGaps:=[43, 31]
-- numOfGaps:=[42, 31]
-- numOfGaps:=[41, 31]
-- numOfGaps:=[40, 31]
-- numOfGaps:=[39, 31]
-- numOfGaps:=[38, 31]
-- numOfGaps:=[37, 31]
-- numOfGaps:=[36, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[34, 31]
-- numOfGaps:=[33, 31]
-- numOfGaps:=[33, 31]
-- numOfGaps:=[32, 31]
-- numOfGaps:=[31, 31]
Out[58]:
QEtaAlgebraBasis(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 3.40 (EV) + 0.01 (GC) = 3.41 sec
Out[58]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec

The generating function $f_2$ for $p(121n+116)$¶

Next naive attempt: $$f_2 := q^{-604} \frac{(q;q)_\infty^{122}}{(q^{121};q^{121})_\infty^{121}} \sum_{n=0}^\infty p(121n+116) q^n \in M^\infty(121) $$

In [59]:
rspec := eqSPEC[[1,-1]]
sspec2 := cofactInfM0(121, etaFunctionIndices 121, rspec, 121, 116)
ff2 := specM0A1(C)(sspec2, rspec, 121, 116)
xf2 := toX1(C, ff2, 'F2);
Out[59]:
\[ \left[\left[1, -1\right]\right] \]
QEtaSpecification
Time: 0 sec
-- == z:=[zinhom=[], zhom=[], zfree=[]]
-- >= z:=[zinhom=[[60, -10]], zhom=[[5, -1], [1, 0]], zfree=[]]
Out[59]:
\[ \left[\left[1, 122\right], \left[121, -121\right]\right] \]
QEtaSpecification
Time: 10.26 (EV) + 0.86 (GC) = 11.13 sec
Out[59]:
\[ 1188908248\, {q}^{-604}+83416057119615\, {q}^{-603}+461128239874414750\, {q}^{-602}+O\left({q}^{-601}\right) \]
ModularFunctionQSeriesInfinity(Fraction(Integer))
Time: 0 sec
Out[59]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0 sec

We reduce first by xab and only then by xfab.

In [60]:
red121 := reduce(xf2, xab)$QRED(C,X1);
assertTrue(not zero? red121)
Out[60]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 10.63 (EV) + 0.43 (GC) = 11.06 sec
Out[60]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [61]:
assertEquals(qetaGrade red121,191)
Out[61]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [62]:
red121f := reduce(red121, xfab)$QTOPRED(C,X1);
assertTrue(zero? red121f)
Out[62]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 14.88 (EV) + 0.14 (GC) = 15.02 sec
Out[62]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [63]:
f2rel := integerPrimitivePart x1Pol(C,red121f);
fn: FileName := filename(basedir, "f2", "input")
writeValueToFile(fn, "f2relation", f1d f2rel)
Out[63]:
Polynomial(Integer)
Time: 38.31 (IN) + 0.06 (EV) + 0.82 (GC) = 39.19 sec
Out[63]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/f2.input"} \]
FileName
Time: 0 sec
Out[63]:
Void
Time: 2.33 (EV) + 0.15 (GC) = 2.47 sec

Clearly, the computation above confirms that xf2 is in the $\mathbb{C}[t]$-module generated by $\{1, f, u\}$. In other words, it lives in the algebra $\mathbb{C}[t, u, f]$.

In [64]:
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------

Method 1: integral basis by using the Klein $j$-function¶

In [65]:
-------------------------------------------------------------------
--test:time250-fj
-------------------------------------------------------------------

First expand $t$, $u$, $j(\tau)$, $j(11\tau)$, and $j(11^2\tau)$ at every cusp of $\Gamma_0(121)$.

The elements of ms are, in fact, the $q$-expansions (at all cusps of $\Gamma_0(121)$) of the eta-quotients corresponding to $t$ and $u$, namely $$ t=\frac{\eta(\tau)}{\eta(121\tau)} $$ and $$ u=\frac{\eta(11\tau)^{12}}{\eta(\tau) \eta(121\tau)^{11}}. $$

In [66]:
ms := [specM0An(CX) x for x in mspecs];
l := [qetaGrades x for x in ms];
assertEquals(l, [_
  [-5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5],_
  [ 0,-5,-5,-5,-5,-5,-5,-5,-5,-5,-5,50]])
Out[66]:
List(ModularFunctionQSeries(SimpleAlgebraicExtension(Fraction(Integer),UnivariatePolynomial(ξ,Fraction(Integer)),ξ^20+(-(ξ^18))+ξ^16+(-(ξ^14))+ξ^12+(-(ξ^10))+ξ^8+(-(ξ^6))+ξ^4+(-(ξ^2))+1),[[[0,-1],[1,0]],[[1,0],[11,1]],[[2,-1],[11,-5]],[[3,1],[11,4]],[[4,1],[11,3]],[[5,-1],[11,-2]],[[6,1],[11,2]],[[7,-2],[11,-3]],[[8,-3],[11,-4]],[[9,4],[11,5]],[[10,-1],[11,-1]],[[1,0],[0,1]]]))
Time: 0.01 (EV) = 0.01 sec
Out[66]:
List(List(Integer))
Time: 0 sec
Out[66]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

The pole orders (computed by the function qetaGrades) of $j(\tau)$, $j(11\tau)$, and $j(11^2\tau)$ is given below.

In [67]:
mj0 := kleinJn(nn, 11^0);
mj1 := kleinJn(nn, 11^1);
mj2 := kleinJn(nn, 11^2);
assertEquals(qetaGrades mj0, [121, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  1])
assertEquals(qetaGrades mj1, [ 11,11,11,11,11,11,11,11,11,11,11, 11])
assertEquals(qetaGrades mj2, [  1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,121])
Compiling function kleinJ with type (PositiveInteger, Matrix(Integer), 
PositiveInteger) -> QEtaLaurentSeries(SimpleAlgebraicExtension(Fraction(
Integer),UnivariatePolynomial(ξ,Fraction(Integer)),ξ^20+(-(ξ^18))+ξ^16+(-(ξ^
14))+ξ^12+(-(ξ^10))+ξ^8+(-(ξ^6))+ξ^4+(-(ξ^2))+1)) 
Compiling function kleinJn with type (PositiveInteger, NonNegativeInteger)
 -> ModularFunctionQSeries(SimpleAlgebraicExtension(Fraction(Integer),
UnivariatePolynomial(ξ,Fraction(Integer)),ξ^20+(-(ξ^18))+ξ^16+(-(ξ^14))+ξ^12+
(-(ξ^10))+ξ^8+(-(ξ^6))+ξ^4+(-(ξ^2))+1),[[[0,-1],[1,0]],[[1,0],[11,1]],[[2,-1]
,[11,-5]],[[3,1],[11,4]],[[4,1],[11,3]],[[5,-1],[11,-2]],[[6,1],[11,2]],[[7,
-2],[11,-3]],[[8,-3],[11,-4]],[[9,4],[11,5]],[[10,-1],[11,-1]],[[1,0],[0,1]]]
) 
Compiling function G38946 with type NonNegativeInteger -> Boolean 
Out[67]:
ModularFunctionQSeries(SimpleAlgebraicExtension(Fraction(Integer),UnivariatePolynomial(ξ,Fraction(Integer)),ξ^20+(-(ξ^18))+ξ^16+(-(ξ^14))+ξ^12+(-(ξ^10))+ξ^8+(-(ξ^6))+ξ^4+(-(ξ^2))+1),[[[0,-1],[1,0]],[[1,0],[11,1]],[[2,-1],[11,-5]],[[3,1],[11,4]],[[4,1],[11,3]],[[5,-1],[11,-2]],[[6,1],[11,2]],[[7,-2],[11,-3]],[[8,-3],[11,-4]],[[9,4],[11,5]],[[10,-1],[11,-1]],[[1,0],[0,1]]])
Time: 0.01 (OT) = 0.02 sec
Out[67]:
ModularFunctionQSeries(SimpleAlgebraicExtension(Fraction(Integer),UnivariatePolynomial(ξ,Fraction(Integer)),ξ^20+(-(ξ^18))+ξ^16+(-(ξ^14))+ξ^12+(-(ξ^10))+ξ^8+(-(ξ^6))+ξ^4+(-(ξ^2))+1),[[[0,-1],[1,0]],[[1,0],[11,1]],[[2,-1],[11,-5]],[[3,1],[11,4]],[[4,1],[11,3]],[[5,-1],[11,-2]],[[6,1],[11,2]],[[7,-2],[11,-3]],[[8,-3],[11,-4]],[[9,4],[11,5]],[[10,-1],[11,-1]],[[1,0],[0,1]]])
Time: 0 sec
Out[67]:
ModularFunctionQSeries(SimpleAlgebraicExtension(Fraction(Integer),UnivariatePolynomial(ξ,Fraction(Integer)),ξ^20+(-(ξ^18))+ξ^16+(-(ξ^14))+ξ^12+(-(ξ^10))+ξ^8+(-(ξ^6))+ξ^4+(-(ξ^2))+1),[[[0,-1],[1,0]],[[1,0],[11,1]],[[2,-1],[11,-5]],[[3,1],[11,4]],[[4,1],[11,3]],[[5,-1],[11,-2]],[[6,1],[11,2]],[[7,-2],[11,-3]],[[8,-3],[11,-4]],[[9,4],[11,5]],[[10,-1],[11,-1]],[[1,0],[0,1]]])
Time: 0 sec
Out[67]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[67]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[67]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

We can easily figure out by which powers of $t$ and $u$ we have to multiply in order to arrive at elements in $M^\infty(121)$.

In [68]:
mmj0 := mj0*ms.1^25*ms.2;   qetaGrades mmj0
mmj1 := mj1*ms.1^3 *ms.2^3; qetaGrades mmj1
mmj2 := mj2*ms.1   *ms.2;   qetaGrades mmj2
Out[68]:
\[ \left[-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 176\right] \]
List(Integer)
Time: 0.03 (EV) = 0.03 sec
Out[68]:
\[ \left[-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 176\right] \]
List(Integer)
Time: 0.05 (EV) = 0.05 sec
Out[68]:
\[ \left[-4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 176\right] \]
List(Integer)
Time: 0 sec
In [69]:
toA1C x ==> (map(retract,series(x,12))$QEtaLaurentSeriesFunctions2(CX,C))::A1(C)
Out[69]:
Void
Time: 0 sec

Then xj0 and xj2 correspond to $j^\infty_0$ and $j^\infty_2$ from the article, however, we attach a representational part in terms of $j_\alpha(\tau):=j(11^\alpha\tau)$.

In [70]:
xj0 := toX1(C, toA1C mmj0, T^25*U*J0)
xj1 := toX1(C, toA1C mmj1, T^3*U^3*J1)
xj2 := toX1(C, toA1C mmj2, T*U*J2)
Out[70]:
\[ \left[{q}^{-176}+720\, {q}^{-175}+179280\, {q}^{-174}+O\left({q}^{-173}\right), J0\, {T}^{25}\, U\right] \]
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0 sec
Out[70]:
\[ \left[{q}^{-176}+O\left({q}^{-173}\right), J1\, {T}^{3}\, {U}^{3}\right] \]
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0 sec
Out[70]:
\[ \left[{q}^{-176}+O\left({q}^{-173}\right), J2\, T\, U\right] \]
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0 sec

cfj01ab=samba($\{t, u, j^\infty_0, j^\infty_1\})$¶

Unfortunately the following basis computation only leads to number of gaps = 31.

We do not compute with the extended basis, since then the computation takes quite some time (1440 seconds) to reduce the representation part.

Since we already know that the computation will end with a basis having gap number 31, we can abort the computation when we have reached a basis with gap number 31.

In [71]:
gens := concat([xj0, xj1], xgens)
agens := [first x for x in cons(xt, gens)]
fj01ab := samba(agens, 31)$QSAMBA(C,A1,QTOPRED);
Out[71]:
\[ \left[\left[{q}^{-176}+720\, {q}^{-175}+179280\, {q}^{-174}+O\left({q}^{-173}\right), J0\, {T}^{25}\, U\right], \left[{q}^{-176}+O\left({q}^{-173}\right), J1\, {T}^{3}\, {U}^{3}\right], \left[{q}^{-5}-{q}^{-4}-{q}^{-3}+O\left({q}^{-2}\right), T\right], \left[{q}^{-50}+{q}^{-49}+2\, {q}^{-48}+O\left({q}^{-47}\right), U\right]\right] \]
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[71]:
\[ \left[{q}^{-5}-{q}^{-4}-{q}^{-3}+O\left({q}^{-2}\right), {q}^{-176}+720\, {q}^{-175}+179280\, {q}^{-174}+O\left({q}^{-173}\right), {q}^{-176}+O\left({q}^{-173}\right), {q}^{-5}-{q}^{-4}-{q}^{-3}+O\left({q}^{-2}\right), {q}^{-50}+{q}^{-49}+2\, {q}^{-48}+O\left({q}^{-47}\right)\right] \]
List(ModularFunctionQSeriesInfinity(Fraction(Integer)))
Time: 0 sec
-- numOfGaps:=[4224, 31]
-- numOfGaps:=[4224, 31]
-- numOfGaps:=[3177, 31]
-- numOfGaps:=[2140, 31]
-- numOfGaps:=[1113, 31]
-- numOfGaps:=[92, 31]
-- numOfGaps:=[91, 31]
-- numOfGaps:=[91, 31]
-- numOfGaps:=[91, 31]
-- numOfGaps:=[90, 31]
-- numOfGaps:=[90, 31]
-- numOfGaps:=[90, 31]
-- numOfGaps:=[89, 31]
-- numOfGaps:=[89, 31]
-- numOfGaps:=[89, 31]
-- numOfGaps:=[88, 31]
-- numOfGaps:=[88, 31]
-- numOfGaps:=[88, 31]
-- numOfGaps:=[87, 31]
-- numOfGaps:=[87, 31]
-- numOfGaps:=[87, 31]
-- numOfGaps:=[86, 31]
-- numOfGaps:=[86, 31]
-- numOfGaps:=[86, 31]
-- numOfGaps:=[85, 31]
-- numOfGaps:=[85, 31]
-- numOfGaps:=[84, 31]
-- numOfGaps:=[84, 31]
-- numOfGaps:=[83, 31]
-- numOfGaps:=[83, 31]
-- numOfGaps:=[82, 31]
-- numOfGaps:=[82, 31]
-- numOfGaps:=[81, 31]
-- numOfGaps:=[81, 31]
-- numOfGaps:=[80, 31]
-- numOfGaps:=[80, 31]
-- numOfGaps:=[79, 31]
-- numOfGaps:=[79, 31]
-- numOfGaps:=[78, 31]
-- numOfGaps:=[78, 31]
-- numOfGaps:=[77, 31]
-- numOfGaps:=[77, 31]
-- numOfGaps:=[76, 31]
-- numOfGaps:=[76, 31]
-- numOfGaps:=[75, 31]
-- numOfGaps:=[75, 31]
-- numOfGaps:=[74, 31]
-- numOfGaps:=[74, 31]
-- numOfGaps:=[73, 31]
-- numOfGaps:=[73, 31]
-- numOfGaps:=[72, 31]
-- numOfGaps:=[72, 31]
-- numOfGaps:=[71, 31]
-- numOfGaps:=[71, 31]
-- numOfGaps:=[70, 31]
-- numOfGaps:=[70, 31]
-- numOfGaps:=[69, 31]
-- numOfGaps:=[69, 31]
-- numOfGaps:=[68, 31]
-- numOfGaps:=[68, 31]
-- numOfGaps:=[67, 31]
-- numOfGaps:=[67, 31]
-- numOfGaps:=[66, 31]
-- numOfGaps:=[66, 31]
-- numOfGaps:=[65, 31]
-- numOfGaps:=[64, 31]
-- numOfGaps:=[63, 31]
-- numOfGaps:=[62, 31]
-- numOfGaps:=[61, 31]
-- numOfGaps:=[60, 31]
-- numOfGaps:=[59, 31]
-- numOfGaps:=[58, 31]
-- numOfGaps:=[57, 31]
-- numOfGaps:=[56, 31]
-- numOfGaps:=[55, 31]
-- numOfGaps:=[54, 31]
-- numOfGaps:=[53, 31]
-- numOfGaps:=[52, 31]
-- numOfGaps:=[51, 31]
-- numOfGaps:=[50, 31]
-- numOfGaps:=[49, 31]
-- numOfGaps:=[48, 31]
-- numOfGaps:=[47, 31]
-- numOfGaps:=[46, 31]
-- numOfGaps:=[45, 31]
-- numOfGaps:=[44, 31]
-- numOfGaps:=[43, 31]
-- numOfGaps:=[42, 31]
-- numOfGaps:=[41, 31]
-- numOfGaps:=[40, 31]
-- numOfGaps:=[39, 31]
-- numOfGaps:=[38, 31]
-- numOfGaps:=[37, 31]
-- numOfGaps:=[36, 31]
-- numOfGaps:=[35, 31]
-- numOfGaps:=[34, 31]
-- numOfGaps:=[33, 31]
-- numOfGaps:=[32, 31]
-- numOfGaps:=[31, 31]
Out[71]:
QEtaAlgebraBasis(ModularFunctionQSeriesInfinity(Fraction(Integer)))
Time: 7.65 (EV) + 0.31 (GC) = 7.96 sec
In [72]:
grades := [(qetaGrade x)::PP for x in basis fj01ab]
numberOfGaps(fj01ab)
Out[72]:
\[ \left[24, 33, 42, 66\right] \]
List(PositiveInteger)
Time: 0 sec
Out[72]:
\[ 31 \]
PositiveInteger
Time: 0 sec

xjab=samba($\{t, u, j^\infty_0, j^\infty_2\})$¶

Computing with $j^\infty_0$ and $j^\infty_2$ leads to an integral basis, gap number 6 of the respective module, i.e., an (order-complete) integral basis for $\mathbb{C}[t,u,j^\infty_0,j^\infty_2]=M^\infty(121)$.

In [73]:
gens := concat([xj0, xj2], xgens)
Out[73]:
\[ \left[\left[{q}^{-176}+720\, {q}^{-175}+179280\, {q}^{-174}+O\left({q}^{-173}\right), J0\, {T}^{25}\, U\right], \left[{q}^{-176}+O\left({q}^{-173}\right), J2\, T\, U\right], \left[{q}^{-5}-{q}^{-4}-{q}^{-3}+O\left({q}^{-2}\right), T\right], \left[{q}^{-50}+{q}^{-49}+2\, {q}^{-48}+O\left({q}^{-47}\right), U\right]\right] \]
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec

With aborting the computation when we have reached gap number = genus, it takes about 400 seconds to compute this basis.

In [74]:
xjab := samba(cons(xt, gens), 6)$QSAMBA(C,X1,QTOPRED);
-- numOfGaps:=[4224, 6]
-- numOfGaps:=[4224, 6]
-- numOfGaps:=[3177, 6]
-- numOfGaps:=[2140, 6]
-- numOfGaps:=[1113, 6]
-- numOfGaps:=[92, 6]
-- numOfGaps:=[91, 6]
-- numOfGaps:=[91, 6]
-- numOfGaps:=[91, 6]
-- numOfGaps:=[90, 6]
-- numOfGaps:=[90, 6]
-- numOfGaps:=[90, 6]
-- numOfGaps:=[89, 6]
-- numOfGaps:=[89, 6]
-- numOfGaps:=[89, 6]
-- numOfGaps:=[88, 6]
-- numOfGaps:=[88, 6]
-- numOfGaps:=[88, 6]
-- numOfGaps:=[87, 6]
-- numOfGaps:=[87, 6]
-- numOfGaps:=[87, 6]
-- numOfGaps:=[86, 6]
-- numOfGaps:=[86, 6]
-- numOfGaps:=[86, 6]
-- numOfGaps:=[85, 6]
-- numOfGaps:=[85, 6]
-- numOfGaps:=[84, 6]
-- numOfGaps:=[84, 6]
-- numOfGaps:=[83, 6]
-- numOfGaps:=[83, 6]
-- numOfGaps:=[82, 6]
-- numOfGaps:=[82, 6]
-- numOfGaps:=[81, 6]
-- numOfGaps:=[81, 6]
-- numOfGaps:=[80, 6]
-- numOfGaps:=[80, 6]
-- numOfGaps:=[79, 6]
-- numOfGaps:=[79, 6]
-- numOfGaps:=[78, 6]
-- numOfGaps:=[78, 6]
-- numOfGaps:=[77, 6]
-- numOfGaps:=[77, 6]
-- numOfGaps:=[76, 6]
-- numOfGaps:=[76, 6]
-- numOfGaps:=[75, 6]
-- numOfGaps:=[75, 6]
-- numOfGaps:=[74, 6]
-- numOfGaps:=[74, 6]
-- numOfGaps:=[73, 6]
-- numOfGaps:=[73, 6]
-- numOfGaps:=[72, 6]
-- numOfGaps:=[72, 6]
-- numOfGaps:=[71, 6]
-- numOfGaps:=[71, 6]
-- numOfGaps:=[70, 6]
-- numOfGaps:=[70, 6]
-- numOfGaps:=[69, 6]
-- numOfGaps:=[69, 6]
-- numOfGaps:=[68, 6]
-- numOfGaps:=[68, 6]
-- numOfGaps:=[67, 6]
-- numOfGaps:=[67, 6]
-- numOfGaps:=[66, 6]
-- numOfGaps:=[66, 6]
-- numOfGaps:=[65, 6]
-- numOfGaps:=[64, 6]
-- numOfGaps:=[63, 6]
-- numOfGaps:=[62, 6]
-- numOfGaps:=[61, 6]
-- numOfGaps:=[60, 6]
-- numOfGaps:=[59, 6]
-- numOfGaps:=[58, 6]
-- numOfGaps:=[57, 6]
-- numOfGaps:=[56, 6]
-- numOfGaps:=[55, 6]
-- numOfGaps:=[54, 6]
-- numOfGaps:=[53, 6]
-- numOfGaps:=[52, 6]
-- numOfGaps:=[51, 6]
-- numOfGaps:=[50, 6]
-- numOfGaps:=[49, 6]
-- numOfGaps:=[48, 6]
-- numOfGaps:=[47, 6]
-- numOfGaps:=[46, 6]
-- numOfGaps:=[45, 6]
-- numOfGaps:=[44, 6]
-- numOfGaps:=[43, 6]
-- numOfGaps:=[42, 6]
-- numOfGaps:=[41, 6]
-- numOfGaps:=[40, 6]
-- numOfGaps:=[39, 6]
-- numOfGaps:=[38, 6]
-- numOfGaps:=[37, 6]
-- numOfGaps:=[36, 6]
-- numOfGaps:=[35, 6]
-- numOfGaps:=[34, 6]
-- numOfGaps:=[33, 6]
-- numOfGaps:=[32, 6]
-- numOfGaps:=[31, 6]
-- numOfGaps:=[30, 6]
-- numOfGaps:=[29, 6]
-- numOfGaps:=[28, 6]
-- numOfGaps:=[27, 6]
-- numOfGaps:=[26, 6]
-- numOfGaps:=[25, 6]
-- numOfGaps:=[24, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[22, 6]
-- numOfGaps:=[21, 6]
-- numOfGaps:=[20, 6]
-- numOfGaps:=[19, 6]
-- numOfGaps:=[18, 6]
-- numOfGaps:=[17, 6]
-- numOfGaps:=[16, 6]
-- numOfGaps:=[15, 6]
-- numOfGaps:=[14, 6]
-- numOfGaps:=[13, 6]
-- numOfGaps:=[12, 6]
-- numOfGaps:=[11, 6]
-- numOfGaps:=[10, 6]
-- numOfGaps:=[9, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[7, 6]
-- numOfGaps:=[6, 6]
Out[74]:
QEtaAlgebraBasis(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 25.37 (EV) + 0.39 (GC) = 25.76 sec
In [75]:
assertEquals(numberOfGaps xjab, 6)
Out[75]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [76]:
xjabtopbas := sort(smallerMod5?, basis xjab);
assertEquals([qetaGrade x for x in xjabtopbas], [16,7,8,9])
Out[76]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[76]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Let us reduce even more, namely the non-leading terms.

In [77]:
)set stream calc 25
xjabbas := [tailReduce(x, xjab)$QRED(C,X1) for x in xjabtopbas];
Out[77]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0.87 (EV) + 0.03 (GC) = 0.90 sec

The basis elements together with their representation in terms of the original series $t$, $u$, $j_0$, and $j_2$ where $j_0=j$ is Klein's $j$-invariant and $j_2(\tau) := j(11^2\tau)$.

In [78]:
bpols := [x1Pol(C,x) for x in xjabbas];
Out[78]:
List(Polynomial(Fraction(Integer)))
Time: 24.99 (EV) + 0.58 (GC) = 25.57 sec
In [79]:
)set stream calc 2

We can reduce $f$ with respect to xjab in order to find a polynomial expressing $f$ in terms of $t$, $u$, $j_0$, and $j_2$.

In [80]:
redfj := reduce(xf, xjab)$QTOPRED(C,X1);
assertTrue(zero? redfj)
Out[80]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 7.65 (EV) + 0.09 (GC) = 7.73 sec
Out[80]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Write out the data to a file.

In [81]:
fjrel := integerPrimitivePart x1Pol(C,redfj);
fn: FileName := filename(basedir, "fj", "input")
writeValueToFile(fn, "fjrelation", f1d fjrel)
Out[81]:
Polynomial(Integer)
Time: 3.49 (IN) = 3.51 sec
Out[81]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/fj.input"} \]
FileName
Time: 0 sec
Out[81]:
Void
Time: 0.34 (EV) = 0.34 sec
In [82]:
makedir(basedir)$QETAAUX
)set stream calc 20
fh := open(filename(basedir,"bj", "input"), "output")$TextFile
for x in xjabbas for i in 1.. repeat _
  writeLine!(fh, "bj" string(i) ":=" f1d(x) ";")
close! fh;
Out[82]:
Void
Time: 0.04 (EV) = 0.04 sec
Out[82]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/bj.input"} \]
TextFile
Time: 0 sec
Out[82]:
Void
Time: 1.76 (EV) = 1.76 sec
Out[82]:
TextFile
Time: 0 sec
In [83]:
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------

Method 2: integral basis obtained with the trace map¶

Preperatory steps¶

In [84]:
-------------------------------------------------------------------
--setup
-------------------------------------------------------------------

We can generate a new modular function by applying the trace to a modular function from $M^\infty(242)$.

Atkin-Lehner involution $W_2^{242}$¶

The trace $\mathrm{tr}_{121}^{242}: M^\infty(242) \to M^\infty(121)$ is given through the Atkin-Lehner involution. See, for example, \cite{Kohnen_WeierstrassPointsAtInfinity_2004}.

In our case we have $$f|\mathrm{tr}_{121}^{242} = f + 2 f|W_2^{242}|U_2$$ where $$ W_2^{242}= \begin{pmatrix} 2 & -1\\ 242 & -120 \end{pmatrix} $$ is given below and $U_2$ is the operator described in qeta.tex.

We can split $W_2^{242}$ into an element of $SL_2(\mathbb{Z})$ and a triangular matrix.

In [85]:
alw := matrixAtkinLehner(242, 2)$QETAAUX
sm := splitMatrix(alw(1,1), alw(1,2), alw(2,1), alw(2,2))
gamma := sm.red;
Out[85]:
\[ \begin{bmatrix}2&-1\\242&-120\end{bmatrix} \]
Matrix(Integer)
Time: 0 sec
Out[85]:
\[ \left[red=\begin{bmatrix}1&-1\\121&-120\end{bmatrix}, triang=\begin{bmatrix}2&0\\0&1\end{bmatrix}\right] \]
Record(red: Matrix(Integer),triang: Matrix(Integer))
Time: 0 sec
Out[85]:
Matrix(Integer)
Time: 0 sec

The second matrix just corresponds to going from $\tau$ to $2\tau$. In other words, $$ (f|\mathrm{tr}_{121}^{242})(\tau) = f(\tau) + 2 (f_{\gamma,2}|U_2)(\tau) $$ where $f_{\gamma,2}(\tau) := (f|\gamma)(2\tau)$.

In [86]:
w := widthM0(242, gamma)
Out[86]:
\[ 2 \]
PositiveInteger
Time: 0 sec

The width of the Atkin-Lehner involution $W_2^{242}$ is 2, so the resulting series will be in $q^{1/2}$ which together with the above $\tau\mapsto 2\tau$ neutalizes and we can simply read the resulting series as a series in $q$.

Monoid basis for $E^\infty(242)$¶

Since we can only compute with series coming from eta-quotients, we temporarily switch to level 242 and take the trace of a series from there.

In [87]:
gen242 := genus()$GAMMA0(242);
assertEquals(gen242, 22)
mspecs242 := mSPECSInfM0(242, etaFunctionIndices 242);
assertEquals(#mspecs242, 94)
egens242 := [specM0A1(C) spec for spec in mspecs242];
l := [qetaGrade(x) for x in egens242];
assertEquals(l(1..17),_
  [15,55,55,55,55,55,55,60,60,60,60,60,65,65,65,65,66])
Out[87]:
NonNegativeInteger
Time: 0 sec
Out[87]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[87]:
List(QEtaSpecification)
Time: 0.07 (EV) = 0.07 sec
Out[87]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[87]:
List(ModularFunctionQSeriesInfinity(Fraction(Integer)))
Time: 0 sec
Out[87]:
List(Integer)
Time: 0 sec
Out[87]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

For all the series we compute that we need at most a second root of unity, i.e. we continue our computation in $C=\mathbb{Q}$.

In [88]:
mspecs242(1..12)
Out[88]:
\[ \left[\left[\left[1, -1\right], \left[2, 2\right], \left[121, 1\right], \left[242, -2\right]\right], \left[\left[11, -4\right], \left[22, 8\right], \left[121, 4\right], \left[242, -8\right]\right], \left[\left[11, 7\right], \left[22, -3\right], \left[121, 3\right], \left[242, -7\right]\right], \left[\left[1, 4\right], \left[2, -2\right], \left[11, -1\right], \left[22, 1\right], \left[121, 7\right], \left[242, -9\right]\right], \left[\left[1, 2\right], \left[2, -1\right], \left[11, -1\right], \left[22, 1\right], \left[121, 9\right], \left[242, -10\right]\right], \left[\left[1, 6\right], \left[2, -3\right], \left[11, -1\right], \left[22, 1\right], \left[121, 5\right], \left[242, -8\right]\right], \left[\left[11, -1\right], \left[22, 1\right], \left[121, 11\right], \left[242, -11\right]\right], \left[\left[1, -1\right], \left[2, 1\right], \left[11, 7\right], \left[22, -3\right], \left[121, 4\right], \left[242, -8\right]\right], \left[\left[1, 3\right], \left[2, -1\right], \left[11, -1\right], \left[22, 1\right], \left[121, 8\right], \left[242, -10\right]\right], \left[\left[1, 5\right], \left[2, -2\right], \left[11, -1\right], \left[22, 1\right], \left[121, 6\right], \left[242, -9\right]\right], \left[\left[1, 1\right], \left[11, -1\right], \left[22, 1\right], \left[121, 10\right], \left[242, -11\right]\right], \left[\left[1, 7\right], \left[2, -3\right], \left[11, -1\right], \left[22, 1\right], \left[121, 4\right], \left[242, -8\right]\right]\right] \]
List(QEtaSpecification)
Time: 0 sec

We have tried to compute the algebra basis for N=121 with the addition of one of the series coming from the N=242 generators and found that the eta-quotient corresponding to $(6, -3, -1, 1, 5, -8)$ works best in the sense that it yields a basis with number of gaps equal to 6 whereas for other indices we get bases with a higher number of gaps.

$$1: (-1, 2, 0, 0, 1, -2) \to 8$$ $$4: (6, -3, -1, 1, 5, -8) \to 6$$ $$6: (0, 0, -4, 8, 4, -8) \to 31$$ $$7: (0, 0, 7, -3, 3, -7) \to 31$$ $$12: (7, -3, -1, 1, 4, -8) \to 6$$

Functions $g$ and $h$¶

So apply the trace function from $M^\infty(242)$ to $M^\infty(121)$.

We do not want to modify trfs, xiord, and CX. Therefore, we call trace without using specTraceM0A1.

It should give the same result as:

trfs := [unitSL2Z]
xiord := 2; xi := -1; CX := C
EXTENDEDCOEFFICIENTRING(C, xiord, CX, xi)
xg := toX1(C, specTraceM0A1(C)(mspecs242.1,nn), 'G)
xh := toX1(C, specTraceM0A1(C)(mspecs242.4,nn), 'H)
In [89]:
YEQQSTools ==> SymbolicEtaQuotientQSeriesTools(C, 2, C, -1, QMOD0)
traceExpan ==> etaQuotientTraceExpansions $ YEQQSTools
tracennInf(spec) ==> traceExpan(spec,nn,[unitSL2Z]).unitSL2Z
Out[89]:
Void
Time: 0 sec
Out[89]:
Void
Time: 0 sec
Out[89]:
Void
Time: 0 sec
In [90]:
xg := toX1(C, tracennInf(mspecs242.1), 'G)
xh := toX1(C, tracennInf(mspecs242.4), 'H)
Out[90]:
\[ \left[{q}^{-15}+{q}^{-14}+{q}^{-12}+{q}^{-9}+{q}^{-5}+3+4\, {q}^{2}+O\left({q}^{6}\right), G\right] \]
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0 sec
Out[90]:
\[ \left[{q}^{-55}-4\, {q}^{-54}+4\, {q}^{-53}+4\, {q}^{-51}-8\, {q}^{-50}+4\, {q}^{-47}-4\, {q}^{-46}+8\, {q}^{-45}+{q}^{-44}-4\, {q}^{-43}-4\, {q}^{-42}+4\, {q}^{-40}-4\, {q}^{-39}-8\, {q}^{-38}+4\, {q}^{-37}+4\, {q}^{-36}+4\, {q}^{-35}+O\left({q}^{-34}\right), H\right] \]
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0 sec
In [91]:
-------------------------------------------------------------------
--endsetup
-------------------------------------------------------------------

xgab=samba($\{t, u, g\}$)¶

In [92]:
-------------------------------------------------------------------
--test:bg
-------------------------------------------------------------------

Now we can add this element to the algebra basis computed earlier and hope that we end with a algebra basis for all modular functions of level 121, i.e., $M^\infty(121)$.

In [93]:
xtracebas := [xt, xu, xg]
Out[93]:
\[ \left[\left[{q}^{-5}-{q}^{-4}-{q}^{-3}+1+{q}^{2}-{q}^{7}-{q}^{10}+O\left({q}^{16}\right), T\right], \left[{q}^{-50}+{q}^{-49}+2\, {q}^{-48}+3\, {q}^{-47}+5\, {q}^{-46}+7\, {q}^{-45}+11\, {q}^{-44}+15\, {q}^{-43}+22\, {q}^{-42}+30\, {q}^{-41}+42\, {q}^{-40}+44\, {q}^{-39}+65\, {q}^{-38}+77\, {q}^{-37}+99\, {q}^{-36}+116\, {q}^{-35}+147\, {q}^{-34}+165\, {q}^{-33}+205\, {q}^{-32}+226\, {q}^{-31}+267\, {q}^{-30}+O\left({q}^{-29}\right), U\right], \left[{q}^{-15}+{q}^{-14}+{q}^{-12}+{q}^{-9}+{q}^{-5}+3+4\, {q}^{2}+O\left({q}^{6}\right), G\right]\right] \]
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
In [94]:
xgab := samba(xtracebas, 6)$QSAMBA(C,X1,QTOPRED);
assertEquals(numberOfGaps(xgab), 8)
-- numOfGaps:=[1200, 6]
-- numOfGaps:=[902, 6]
-- numOfGaps:=[607, 6]
-- numOfGaps:=[315, 6]
-- numOfGaps:=[24, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[22, 6]
-- numOfGaps:=[22, 6]
-- numOfGaps:=[21, 6]
-- numOfGaps:=[21, 6]
-- numOfGaps:=[20, 6]
-- numOfGaps:=[20, 6]
-- numOfGaps:=[19, 6]
-- numOfGaps:=[19, 6]
-- numOfGaps:=[18, 6]
-- numOfGaps:=[18, 6]
-- numOfGaps:=[17, 6]
-- numOfGaps:=[17, 6]
-- numOfGaps:=[16, 6]
-- numOfGaps:=[15, 6]
-- numOfGaps:=[14, 6]
-- numOfGaps:=[13, 6]
-- numOfGaps:=[12, 6]
-- numOfGaps:=[11, 6]
-- numOfGaps:=[10, 6]
-- numOfGaps:=[9, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[8, 6]
Out[94]:
QEtaAlgebraBasis(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0.14 (EV) = 0.14 sec
Out[94]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [95]:
xgabtopbas := sort(smallerMod5?, basis xgab);
assertEquals([qetaGrade x for x in xgabtopbas], [16,12,13,9])
Out[95]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[95]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Let us tail-reduce the Laurent series up to the term of order 0.

In [96]:
)set stream calc 2
In [97]:
xgabbas := [tailReduce(x, xgab)$QRED(C,X1) for x in xgabtopbas];
Out[97]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec

The gap number is 8, i.e., it does not yield an integral basis for $M^\infty(121)$.

And indeed our modular generating series for $p(11n+6)$ is not in the algebra $C[t,u,g]$.

In [98]:
xr := reduce(xf, xgab)$QTOPRED(C,X1);
assertEquals(qetaGrade xr, 8)
Out[98]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0.08 (EV) = 0.08 sec
Out[98]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Write out the data to a file.

In [99]:
makedir(basedir)$QETAAUX
fh := open(filename(basedir,"bg", "input"), "output")$TextFile
for x in xgabbas for i in 1.. repeat _
  writeLine!(fh, "bg" string(i) ":=" f1d(x) ";")
close! fh;
Out[99]:
Void
Time: 0.03 (EV) = 0.03 sec
Out[99]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/bg.input"} \]
TextFile
Time: 0 sec
Out[99]:
Void
Time: 0.06 (EV) = 0.06 sec
Out[99]:
TextFile
Time: 0 sec
In [100]:
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------

xfgab=samba($\{t, u,f,g\}$)¶

In [101]:
-------------------------------------------------------------------
--test:bfg
-------------------------------------------------------------------

By adding the generating series $f$ for $p(11n+6)$ we indeed arrive at an integral basis.

In [102]:
xtracebas := [xt, xu, xf, xg];
xfgab := samba(xtracebas, 6)$QSAMBA(C,X1,QTOPRED);
assertEquals(numberOfGaps(xfgab), 6)
Out[102]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
-- numOfGaps:=[1296, 6]
-- numOfGaps:=[974, 6]
-- numOfGaps:=[655, 6]
-- numOfGaps:=[339, 6]
-- numOfGaps:=[24, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[22, 6]
-- numOfGaps:=[22, 6]
-- numOfGaps:=[21, 6]
-- numOfGaps:=[21, 6]
-- numOfGaps:=[20, 6]
-- numOfGaps:=[20, 6]
-- numOfGaps:=[19, 6]
-- numOfGaps:=[19, 6]
-- numOfGaps:=[18, 6]
-- numOfGaps:=[18, 6]
-- numOfGaps:=[17, 6]
-- numOfGaps:=[17, 6]
-- numOfGaps:=[16, 6]
-- numOfGaps:=[15, 6]
-- numOfGaps:=[14, 6]
-- numOfGaps:=[13, 6]
-- numOfGaps:=[12, 6]
-- numOfGaps:=[11, 6]
-- numOfGaps:=[10, 6]
-- numOfGaps:=[9, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[7, 6]
-- numOfGaps:=[6, 6]
Out[102]:
QEtaAlgebraBasis(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0.08 (EV) = 0.08 sec
Out[102]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [103]:
xfgabtopbas := sort(smallerMod5?, basis xfgab);
assertEquals([qetaGrade x for x in xfgabtopbas], [16,7,8,9])
Out[103]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[103]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [104]:
xfgabbas := [tailReduce(x, xfgab)$QRED(C,X1) for x in xfgabtopbas];
Out[104]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0.01 (EV) = 0.01 sec
In [105]:
fgrels := [x1Pol(C,x) for x in xfgabbas];
Out[105]:
List(Polynomial(Fraction(Integer)))
Time: 0.04 (EV) = 0.04 sec
In [106]:
assertEquals(removeDuplicates [variables x for x in fgrels],_
             [['U,'T,'G,'F]]$List(List Symbol))
Out[106]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

The degrees of the polynomial with respect to the variables is given below.

In [107]:
assertEquals([degree(x, 'T) for x in fgrels], [29,28,28,28])
assertEquals([degree(x, 'U) for x in fgrels], [1,1,1,1])
assertEquals([degree(x, 'F) for x in fgrels], [1,1,1,1])
assertEquals([degree(x, 'G) for x in fgrels], [3,3,3,3])
Out[107]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[107]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[107]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[107]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Let's compute the bitlenth of the biggest coefficients of the representation polynomials.

In [108]:
fgrelslc := [[leadingCoefficient m for m in monomials x] for x in fgrels];
[max [length denom c for c in l] for l in fgrelslc]
Out[108]:
List(List(Fraction(Integer)))
Time: 0 sec
Out[108]:
\[ \left[699, 383, 379, 378\right] \]
List(Integer)
Time: 0 sec

Write out the data to a file.

In [109]:
makedir(basedir)$QETAAUX
)set stream calc 17
fh := open(filename(basedir,"bfg", "input"), "output")$TextFile
for x in xfgabbas for i in 1.. repeat _
  writeLine!(fh, "bfg" string(i) ":=" f1d(x) ";")
close! fh;
Out[109]:
Void
Time: 0.04 (EV) = 0.04 sec
Out[109]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/bfg.input"} \]
TextFile
Time: 0 sec
Out[109]:
Void
Time: 0.07 (EV) = 0.07 sec
Out[109]:
TextFile
Time: 0 sec
In [110]:
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------

xghab=samba($\{t,u,g,h\}$)¶

In [111]:
-------------------------------------------------------------------
--test:bgh
-------------------------------------------------------------------

We also arrive at an integral basis if we add both of the series $g$ and $h$ coming from computing the trace of functions from $M^\infty(242)$.

In [112]:
xtracebas := [xt, xu, xg, xh]
xghab := samba(xtracebas, 6)$QSAMBA(C,X1,QTOPRED);
assertEquals(numberOfGaps(xghab), 6)
Out[112]:
\[ \left[\left[{q}^{-5}-{q}^{-4}-{q}^{-3}+1+{q}^{2}-{q}^{7}-{q}^{10}+O\left({q}^{13}\right), T\right], \left[{q}^{-50}+{q}^{-49}+2\, {q}^{-48}+3\, {q}^{-47}+5\, {q}^{-46}+7\, {q}^{-45}+11\, {q}^{-44}+15\, {q}^{-43}+22\, {q}^{-42}+30\, {q}^{-41}+42\, {q}^{-40}+44\, {q}^{-39}+65\, {q}^{-38}+77\, {q}^{-37}+99\, {q}^{-36}+116\, {q}^{-35}+147\, {q}^{-34}+165\, {q}^{-33}+O\left({q}^{-32}\right), U\right], \left[{q}^{-15}+{q}^{-14}+{q}^{-12}+{q}^{-9}+{q}^{-5}+3+4\, {q}^{2}+O\left({q}^{3}\right), G\right], \left[{q}^{-55}-4\, {q}^{-54}+4\, {q}^{-53}+4\, {q}^{-51}-8\, {q}^{-50}+4\, {q}^{-47}-4\, {q}^{-46}+8\, {q}^{-45}+{q}^{-44}-4\, {q}^{-43}-4\, {q}^{-42}+4\, {q}^{-40}-4\, {q}^{-39}-8\, {q}^{-38}+O\left({q}^{-37}\right), H\right]\right] \]
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
-- numOfGaps:=[1320, 6]
-- numOfGaps:=[992, 6]
-- numOfGaps:=[667, 6]
-- numOfGaps:=[345, 6]
-- numOfGaps:=[24, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[22, 6]
-- numOfGaps:=[22, 6]
-- numOfGaps:=[21, 6]
-- numOfGaps:=[21, 6]
-- numOfGaps:=[20, 6]
-- numOfGaps:=[20, 6]
-- numOfGaps:=[19, 6]
-- numOfGaps:=[19, 6]
-- numOfGaps:=[18, 6]
-- numOfGaps:=[18, 6]
-- numOfGaps:=[17, 6]
-- numOfGaps:=[17, 6]
-- numOfGaps:=[16, 6]
-- numOfGaps:=[15, 6]
-- numOfGaps:=[14, 6]
-- numOfGaps:=[13, 6]
-- numOfGaps:=[12, 6]
-- numOfGaps:=[11, 6]
-- numOfGaps:=[10, 6]
-- numOfGaps:=[9, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[7, 6]
-- numOfGaps:=[6, 6]
Out[112]:
QEtaAlgebraBasis(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0.08 (EV) = 0.08 sec
Out[112]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [113]:
xghabtopbas := sort(smallerMod5?, basis xghab);
assertEquals([qetaGrade x for x in xghabtopbas], [16,7,8,9])
Out[113]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[113]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Let us tail-reduce the Laurent series up to the term of order 0.

In [114]:
xghabbas := [tailReduce(x, xghab)$QRED(C,X1) for x in xghabtopbas];
Out[114]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0.01 (EV) = 0.01 sec

Let us express the generating series $f$ for $p(11n+6)$ as a relation in terms of the original algebra basis elements (in fact, the powers of $z=\frac{1}{11}(u-t^{10})$).

In [115]:
xtracebas := concat([xt, xg, xh], basis xabz);
Out[115]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
In [116]:
xghabz := samba(xtracebas, 6)$QSAMBA(C,X1,QTOPRED);
assertEquals(numberOfGaps(xghabz), 6)
-- numOfGaps:=[4704, 6]
-- numOfGaps:=[3530, 6]
-- numOfGaps:=[2359, 6]
-- numOfGaps:=[1191, 6]
-- numOfGaps:=[24, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[22, 6]
-- numOfGaps:=[22, 6]
-- numOfGaps:=[21, 6]
-- numOfGaps:=[21, 6]
-- numOfGaps:=[20, 6]
-- numOfGaps:=[20, 6]
-- numOfGaps:=[19, 6]
-- numOfGaps:=[19, 6]
-- numOfGaps:=[18, 6]
-- numOfGaps:=[18, 6]
-- numOfGaps:=[17, 6]
-- numOfGaps:=[17, 6]
-- numOfGaps:=[16, 6]
-- numOfGaps:=[15, 6]
-- numOfGaps:=[14, 6]
-- numOfGaps:=[13, 6]
-- numOfGaps:=[12, 6]
-- numOfGaps:=[11, 6]
-- numOfGaps:=[10, 6]
-- numOfGaps:=[9, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[7, 6]
-- numOfGaps:=[6, 6]
Out[116]:
QEtaAlgebraBasis(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0.07 (EV) = 0.07 sec
Out[116]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [117]:
xghabztopbas := sort(smallerMod5?, basis xghabz);
assertEquals([qetaGrade x for x in xghabztopbas], [16,7,8,9])
Out[117]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[117]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Of course the reduction yields zero.

In [118]:
xr := reduce(xf, xghabz)$QRED(C,X1);
assertTrue(zero? xr)
Out[118]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0.13 (EV) = 0.14 sec
Out[118]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

We thus obtain a relation of $f$ in terms of $h$, $g$, $z$, and $t$.

In [119]:
xrpol := integerPrimitivePart(x1Pol(C,xr));
assertEquals(variables(xrpol), ['Z,'T,'H,'G,'F])
Out[119]:
Polynomial(Integer)
Time: 0.08 (IN) = 0.08 sec
Out[119]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [120]:
assertEquals(# monomials(xrpol),190)
Out[120]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

However, this relation does not show that the coefficients of $f$ are divisible by 11, because there is a factor of $11^6$ in the coefficient of $F$ whereas the content of the polynomial without $F$ is 1.

In [121]:
z := exponent(coefficient(xrpol, 'F, 1)::IntegerLocalizedAtPrime(11));
assertEquals(z, 6)
assertEquals(gcd(coefficient(xrpol, 'F, 1), 11),11)
assertTrue(one? content coefficient(xrpol, 'F, 0))
Out[121]:
PositiveInteger
Time: 0 sec
Out[121]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[121]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[121]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Write out the data to a file.

In [122]:
makedir(basedir)$QETAAUX
)set stream calc 17
fh := open(filename(basedir,"bgh", "input"), "output")$TextFile
for x in xghabbas for i in 1.. repeat _
  writeLine!(fh, "bgh" string(i) ":=" f1d(x) ";")
close! fh;
Out[122]:
Void
Time: 0.04 (EV) = 0.04 sec
Out[122]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/bgh.input"} \]
TextFile
Time: 0 sec
Out[122]:
Void
Time: 0.11 (EV) = 0.11 sec
Out[122]:
TextFile
Time: 0 sec
In [123]:
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------

xhab=samba($\{t,u,h\}$)¶

In [124]:
-------------------------------------------------------------------
--test:time43-bh
-------------------------------------------------------------------

It is sufficient to add only $h$ to the generators in order to get an integral basis for $M^\infty(121)$.

In [125]:
xtracebas := [xt, xu, xh];
xhab := samba(xtracebas, 6)$QSAMBA(C,X1,QTOPRED);
assertEquals(numberOfGaps(xhab), 6)
Out[125]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
-- numOfGaps:=[1320, 6]
-- numOfGaps:=[999, 6]
-- numOfGaps:=[679, 6]
-- numOfGaps:=[368, 6]
-- numOfGaps:=[58, 6]
-- numOfGaps:=[57, 6]
-- numOfGaps:=[57, 6]
-- numOfGaps:=[56, 6]
-- numOfGaps:=[55, 6]
-- numOfGaps:=[54, 6]
-- numOfGaps:=[53, 6]
-- numOfGaps:=[52, 6]
-- numOfGaps:=[51, 6]
-- numOfGaps:=[50, 6]
-- numOfGaps:=[49, 6]
-- numOfGaps:=[48, 6]
-- numOfGaps:=[47, 6]
-- numOfGaps:=[46, 6]
-- numOfGaps:=[45, 6]
-- numOfGaps:=[44, 6]
-- numOfGaps:=[43, 6]
-- numOfGaps:=[42, 6]
-- numOfGaps:=[41, 6]
-- numOfGaps:=[40, 6]
-- numOfGaps:=[39, 6]
-- numOfGaps:=[38, 6]
-- numOfGaps:=[37, 6]
-- numOfGaps:=[36, 6]
-- numOfGaps:=[35, 6]
-- numOfGaps:=[34, 6]
-- numOfGaps:=[33, 6]
-- numOfGaps:=[32, 6]
-- numOfGaps:=[31, 6]
-- numOfGaps:=[30, 6]
-- numOfGaps:=[29, 6]
-- numOfGaps:=[28, 6]
-- numOfGaps:=[27, 6]
-- numOfGaps:=[26, 6]
-- numOfGaps:=[25, 6]
-- numOfGaps:=[24, 6]
-- numOfGaps:=[23, 6]
-- numOfGaps:=[22, 6]
-- numOfGaps:=[21, 6]
-- numOfGaps:=[20, 6]
-- numOfGaps:=[19, 6]
-- numOfGaps:=[18, 6]
-- numOfGaps:=[17, 6]
-- numOfGaps:=[16, 6]
-- numOfGaps:=[15, 6]
-- numOfGaps:=[14, 6]
-- numOfGaps:=[13, 6]
-- numOfGaps:=[12, 6]
-- numOfGaps:=[11, 6]
-- numOfGaps:=[10, 6]
-- numOfGaps:=[9, 6]
-- numOfGaps:=[8, 6]
-- numOfGaps:=[7, 6]
-- numOfGaps:=[6, 6]
Out[125]:
QEtaAlgebraBasis(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 3.12 (EV) + 0.04 (GC) = 3.17 sec
Out[125]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [126]:
xhabtopbas := sort(smallerMod5?, basis xhab);
assertEquals([qetaGrade x for x in xhabtopbas], [16,7,8,9])
Out[126]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[126]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Let us tail-reduce the Laurent series up to the term of order 0.

In [127]:
xhabbas := [tailReduce(x, xhab)$QRED(C,X1) for x in xhabtopbas];
Out[127]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0.15 (EV) + 0.02 (GC) = 0.17 sec
In [128]:
hrels := [x1Pol(C,x) for x in xhabbas];
Out[128]:
List(Polynomial(Fraction(Integer)))
Time: 2.33 (EV) = 2.33 sec
In [129]:
assertEquals(removeDuplicates [variables x for x in hrels],_
             [['U,'T,'H]]$List(List Symbol))
Out[129]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

The degrees of the polynomial with respect to the variables is given below.

In [130]:
assertEquals([degree(x, 'T) for x in hrels], [74,73,73,73])
assertEquals([degree(x, 'U) for x in hrels], [2,2,2,2])
assertEquals([degree(x, 'H) for x in hrels], [2,2,2,2])
Out[130]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[130]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[130]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Let's compute the bitlenth of the biggest coefficients of the representation polynomials.

In [131]:
hrelslc := [[leadingCoefficient m for m in monomials x] for x in hrels];
[max [length denom c for c in l] for l in hrelslc]
Out[131]:
List(List(Fraction(Integer)))
Time: 0 sec
Out[131]:
\[ \left[5457, 2787, 2789, 2748\right] \]
List(Integer)
Time: 0 sec

There must be a relation for $f$ in terms of $\{t,u,h\}$.

In [132]:
xr := reduce(xf, xhab)$QRED(C,X1);
assertTrue(zero? xr)
Out[132]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 1.26 (EV) + 0.01 (GC) = 1.28 sec
Out[132]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [133]:
xrpol := integerPrimitivePart(x1Pol(C,xr));
assertEquals(variables(xrpol), ['U,'T,'H,'F])
Out[133]:
Polynomial(Integer)
Time: 1.07 (IN) = 1.07 sec
Out[133]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [134]:
assertEquals(# monomials(xrpol), 415)
Out[134]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

However, this relation does not show that the coefficients of $f$ are divisible by 11, because there is a factor of $11^{26}$ in the coefficient of $F$ whereas the content of the polynomial without $F$ is 1.

In [135]:
z := exponent(coefficient(xrpol, 'F, 1)::IntegerLocalizedAtPrime(11));
assertEquals(z,24)
assertEquals(gcd(coefficient(xrpol, 'F, 1), 11),11)
assertTrue(one? content coefficient(xrpol, 'F, 0))
Out[135]:
PositiveInteger
Time: 0 sec
Out[135]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[135]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[135]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

There must be a relation for $g$ in terms of $\{t,u,h\}$.

In [136]:
xr := reduce(xg, xhab)$QRED(C,X1);
assertTrue(zero? xr)
Out[136]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0 sec
Out[136]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [137]:
xrpol := x1Pol(C,xr);
assertEquals(# monomials(xrpol), 367)
Out[137]:
Polynomial(Fraction(Integer))
Time: 0.11 (IN) = 0.11 sec
Out[137]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Write out the data to a file.

In [138]:
makedir(basedir)$QETAAUX
)set stream calc 17
fh := open(filename(basedir,"bh", "input"), "output")$TextFile
for x in xhabbas for i in 1.. repeat _
  writeLine!(fh, "bh" string(i) ":=" f1d(x) ";")
close! fh;
Out[138]:
Void
Time: 0.03 (EV) = 0.03 sec
Out[138]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/bh.input"} \]
TextFile
Time: 0 sec
Out[138]:
Void
Time: 0.77 (EV) = 0.77 sec
Out[138]:
TextFile
Time: 0 sec
In [139]:
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------

Denominator polynomial $d^*$ for $h$ with respect to xab¶

In [140]:
-------------------------------------------------------------------
--test:time265-ds
-------------------------------------------------------------------

We compute a polynomial $d^*(T)$ such that $d^*(t)h \in \mathbb{Q}[t, u]$. (Takes about 3 min.)

Multiply with powers of $t$¶

In [141]:
e1:=39; e2:=129
rhs := [reduce(xt^e1*xh, xab)$QRED(C,X1)];
for i in e1+1..e2 repeat (_
  rhs := cons(reduce(xt*first(rhs), xab)$QRED(C,X1), rhs))
rhs := reverse! rhs;
Out[141]:
\[ 129 \]
PositiveInteger
Time: 0 sec
Out[141]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0.28 (EV) = 0.28 sec
Out[141]:
Void
Time: 62.61 (EV) + 2.88 (GC) = 65.50 sec
Out[141]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
In [142]:
assertEquals(removeDuplicates [qetaGrade x for x in rhs], [191])
Out[142]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [143]:
lh := [[qetaCoefficient(first x, i) for i in 0..191] for x in rhs];
Out[143]:
List(List(Fraction(Integer)))
Time: 0.08 (EV) + 0.17 (GC) = 0.25 sec

Extract the 192 coefficients corresponding to the orders $-191, \ldots, 0$ and compute the kernel of the corresponding matrix. (Nullspace computation takes about 50 sec.)

In [144]:
math := transpose matrix lh;
assertEquals([nrows math, ncols math], [192,91])
nsh := nullSpace math;
assertEquals(#nsh,1)
Out[144]:
Matrix(Fraction(Integer))
Time: 0 sec
Out[144]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[144]:
List(Vector(Fraction(Integer)))
Time: 31.40 (EV) + 0.05 (GC) = 31.45 sec
Out[144]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Extract the coefficients from the vector in the nullspace.

In [145]:
chs := members first nsh;
Out[145]:
List(Fraction(Integer))
Time: 0 sec

Check that the resulting vector indeed yields a relation.

In [146]:
lincomph := [c*rr for c in chs for rr in rhs];
lch := reduce(_+, lincomph);
assertTrue(zero? lch)
assertTrue(zero? qetaCoefficient(lch, 0))
Out[146]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[146]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0.09 (EV) = 0.09 sec
Out[146]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[146]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Indeed, we have just shown a relation for $t^{39}h-h_{39}, \ldots, t^{129}h-h_{129}$.

In the second component of this "zero" is it's relation in terms of $H$, $T$, and $U$. The "denominator polynomial" is given by the coefficient of $H$.

In [147]:
dh := x1Pol(C,lch);
assertEquals(variables dh, ['U,'T,'H])
assertEquals([degree(dh, x) for x in variables dh],[4,140,1])
Out[147]:
Polynomial(Fraction(Integer))
Time: 0.46 (IN) = 0.46 sec
Out[147]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[147]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Computation of the corresponding polynomials $c_0,..,c_4$¶

In order to find the respective cofactors to the $c_1$ from above, we must do the whole computation with different attached values, namely $T$, and $U$ for the elements in basis xab.

In this section we compute a polynomial $c^*(T, ZZ) := \sum_{k=0}^4 c^*_k(T) U^k \in \mathbb{Q}[T,U]$ such that $d^*(t)h = c^*(t, z)$.

In [148]:
ch1:=coefficient(dh,H,1);
ch0:=coefficient(dh,H,0);
Out[148]:
Polynomial(Fraction(Integer))
Time: 0 sec
Out[148]:
Polynomial(Fraction(Integer))
Time: 0 sec
In [149]:
assertEquals(variables ch0, ['U,'T])
ch0s := [coefficient(ch0, 'U, i) for i in 0..4];
l := cons(degree(ch1, 'T), [degree(x, 'T) for x in ch0s]);
assertEquals(l, [129,140,130,120,110,100])
assertEquals(gcd cons(ch1,ch0s), T^39)
Out[149]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[149]:
List(Polynomial(Fraction(Integer)))
Time: 0 sec
Out[149]:
List(NonNegativeInteger)
Time: 0 sec
Out[149]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[149]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Factors of $d^*(T)$¶

Apart from the $t^{39}$ factor, we get other factors. Below are the factors $d^*_1, \ldots, d^*_6$, unsorted.

In [150]:
dstarfactored := factor ch1;
udstar := (unit dstarfactored)::QQ    -- the constant common factor
Out[150]:
Factored(Polynomial(Fraction(Integer)))
Time: 0.03 (EV) = 0.03 sec
Out[150]:
\[ -\frac{1}{477114832091191552921849830554244808771930741840988065195040102777492728533041032625988829875580542337102092110389498840666460707850175055506729465059885594332377912633353233420774727112034501319902716586716590441966910412806498160045658283825709245558602364993697525864650105041987218370513009934258672} \]
Fraction(Integer)
Time: 0 sec

Now we sort by degree and the size of the second coefficient.

In [151]:
dstarfactors := factors dstarfactored;
dstarfactorssorted := sort(smallerSecondCoefficient?, dstarfactors);
assertEquals([x.exponent for x in dstarfactorssorted], [1,2,2,1,1,1])
Out[151]:
List(Record(factor: Polynomial(Fraction(Integer)),exponent: NonNegativeInteger))
Time: 0 sec
Out[151]:
List(Record(factor: Polynomial(Fraction(Integer)),exponent: NonNegativeInteger))
Time: 0 sec
[39, 1, 2, 2, 1, 1, 1]
Out[151]:
\[ \texttt{false} \]
Boolean
Time: 0 sec
In [152]:
assertEquals([x.factor for x in dstarfactorssorted], [_
  T,_
  T^2-11,_
  T^2-2*T+11,_
  T^2-3*T+11,_
  T^25-55*T^24+1925*T^23-50215*T^22+1116830*T^21-19094526*T^20_
    +234488925*T^19-1994909455*T^18+10473000120*T^17_
    -10225933245*T^16-403942642466*T^15+4582611990165*T^14_
    -29455266425530*T^13+124114279278275*T^12-278010412252430*T^11_
    -516227631579440*T^10+8590272458708655*T^9_
    -48185757511261315*T^8+182477586874892210*T^7_
    -514859434575326060*T^6+1096675319198574181*T^5_
    -1713935680161223640*T^4+1816851879425670505*T^3_
    -1077108618890647200*T^2+163292428440793630*T+4177248169415651,_
  T^25+430*T^24-31200*T^23+578905*T^22-6007240*T^21+42281581*T^20_
    -218350660*T^19+851271410*T^18-2472691265*T^17+4848984855*T^16_
    -3205367440*T^15-18988485230*T^14+93248895025*T^13_
    -243431953930*T^12+416601090015*T^11-403942642466*T^10_
    -112485265695*T^9+1267233014520*T^8-2655224484605*T^7_
    +3433152350925*T^6-3075192506826*T^5+1978532471630*T^4_
    -978548291765*T^3+412640845925*T^2-129687123005*T+25937424601,_
  T^30-920*T^29-19225*T^28+1258030*T^27-19448535*T^26+75396538*T^25_
    +2157132615*T^24-50735009930*T^23+643909614260*T^22_
    -5980486211480*T^21+44473273280260*T^20-276140775186430*T^19_
    +1465665176339650*T^18-6744922810982730*T^17_
    +27144546684208910*T^16-95977332323506700*T^15_
    +298590013526298010*T^14-816135660128910330*T^13_
    +1950800349708074150*T^12-4042977089504521630*T^11_
    +7162465135059153260*T^10-10594796133295720280*T^9_
    +12547976761628658460*T^8-10875499956118688330*T^7_
    +5086405868720041965*T^6+1955592019551431338*T^5_
    -5548894011786504885*T^4+3948237050766319630*T^3_
    -663699140967073475*T^2-349369846896581720*T+4177248169415651])
Out[152]:
\[ \texttt{true} \]
Boolean
Time: 0.01 sec

There is one factor that is not already a factor of cf1.

In [153]:
fdstarfactors := [x.factor for x in dstarfactorssorted];
[x for x in fdstarfactors | not member?(x, fdfactorsexpected)]
Out[153]:
List(Polynomial(Fraction(Integer)))
Time: 0 sec
Out[153]:
\[ \left[{T}^{25}-55\, {T}^{24}+1925\, {T}^{23}-50215\, {T}^{22}+1116830\, {T}^{21}-19094526\, {T}^{20}+234488925\, {T}^{19}-1994909455\, {T}^{18}+10473000120\, {T}^{17}-10225933245\, {T}^{16}-403942642466\, {T}^{15}+4582611990165\, {T}^{14}-29455266425530\, {T}^{13}+124114279278275\, {T}^{12}-278010412252430\, {T}^{11}-516227631579440\, {T}^{10}+8590272458708655\, {T}^{9}-48185757511261315\, {T}^{8}+182477586874892210\, {T}^{7}-514859434575326060\, {T}^{6}+1096675319198574181\, {T}^{5}-1713935680161223640\, {T}^{4}+1816851879425670505\, {T}^{3}-1077108618890647200\, {T}^{2}+163292428440793630\, T+4177248169415651\right] \]
List(Polynomial(Fraction(Integer)))
Time: 0 sec

Now we sort by degree and the size of the second coefficient.

In [154]:
dendstar := denom udstar
Out[154]:
\[ 477114832091191552921849830554244808771930741840988065195040102777492728533041032625988829875580542337102092110389498840666460707850175055506729465059885594332377912633353233420774727112034501319902716586716590441966910412806498160045658283825709245558602364993697525864650105041987218370513009934258672 \]
PositiveInteger
Time: 0 sec

Multiplying by the denominator of the constant factor of ch1 and dividing by the common factor give the polynomial $d^*(T)$ from the article.

In [155]:
dstar := (-dendstar * ch1/T^39)::Pol(ZZ); degree(dstar)
Out[155]:
\[ {T}^{90} \]
IndexedExponents(Symbol)
Time: 0 sec

Here we collect all the coefficient polynomials $c^*_k(t)$ for $k=0,\ldots,4$ after they have been multiplied by the constant denominator.

In [156]:
cstaris := [(denom(udstar)*(x/T^39)::Polynomial(QQ)) for x in ch0s];
Out[156]:
List(Polynomial(Fraction(Integer)))
Time: 0 sec

Unfortunately, we find that not all denominators have been cleared by multiplication with the denominator of $d^*$. In fact, we would have to multiply the whole relation by 11^4 in order to turn it into a relation with integer coefficients. Thus, our relation does not exhibit that $p(11n+6)$ is divisible by 11 for all $n\in\mathbb{N}$.

In [157]:
z := lcm [lcm [denom leadingCoefficient mon for mon in monomials x]_
          for x in cstaris];
assertEquals(z, 11^4)
Out[157]:
PositiveInteger
Time: 0 sec
Out[157]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Write out the data to a file.

In [158]:
makedir(basedir)$QETAAUX
fh := open(filename(basedir,"ds", "input"), "output")$TextFile
for x in dstarfactorssorted for i in 1.. repeat_
  writeLine!(fh, "exponent" string(i) ":=" f1d(x.exponent) ";")
for x in dstarfactorssorted for i in 1.. repeat _
  writeLine!(fh, "ds" string(i) ":=" f1d(x.factor) ";")
close! fh;
Out[158]:
Void
Time: 0.04 (EV) = 0.04 sec
Out[158]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/ds.input"} \]
TextFile
Time: 0 sec
Out[158]:
Void
Time: 0 sec
Out[158]:
Void
Time: 0 sec
Out[158]:
TextFile
Time: 0 sec
In [159]:
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------

Method 3: integral basis by using Maple's algcurves¶

In [160]:
-------------------------------------------------------------------
--test:time3725-bv
-------------------------------------------------------------------

Minimal polynomial and discriminant¶

In [161]:
xz5r := reduce(xz^5, xabz)$QRED(C,X1);
assertTrue(zero? xz5r)
Out[161]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0.22 (EV) + 0.11 (GC) = 0.33 sec
Out[161]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [162]:
p5 := x1Pol(C,xz5r);
c5 := coefficient(p5, 'Z, 5);
p := 1/c5 * p5;
Out[162]:
Polynomial(Fraction(Integer))
Time: 0 sec
Out[162]:
Polynomial(Fraction(Integer))
Time: 0 sec
Out[162]:
Fraction(Polynomial(Fraction(Integer)))
Time: 0.01 sec
In [163]:
discfactors := factors factor discriminant(p, 'Z);
Out[163]:
List(Record(factor: Polynomial(Fraction(Integer)),exponent: NonNegativeInteger))
Time: 0.02 (IN) + 0.08 (EV) = 0.11 sec
In [164]:
discfactorssorted := sort(smallerSecondCoefficient?, discfactors);
assertEquals([x.exponent for x in discfactorssorted], [4,2,4,4,1,2,2,2])
Out[164]:
List(Record(factor: Polynomial(Fraction(Integer)),exponent: NonNegativeInteger))
Time: 0 sec
Out[164]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

All the factors of our $d$ polynomial are also factors of the discriminant. We remove the trivial factor of $T^4$.

In [165]:
fdiscfactors := [x.factor for x in discfactorssorted];
l := removeDuplicates [member?(x, fdiscfactors) for x in fdfactorsexpected];
assertEquals(l, [true])
Out[165]:
List(Polynomial(Fraction(Integer)))
Time: 0 sec
Out[165]:
List(Boolean)
Time: 0 sec
Out[165]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

But not all factors of the discriminant are factors of $d$.

In [166]:
l := [member?(x, fdfactorsexpected) for x in fdiscfactors];
assertEquals(l,[true,true,true,true,false,false,true,true]$List(Boolean))
Out[166]:
List(Boolean)
Time: 0 sec
Out[166]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [167]:
xu5r := reduce(xu^5, xab)$QRED(C,X1);
assertTrue(zero? xu5r)
Out[167]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0.25 (EV) = 0.25 sec
Out[167]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [168]:
p := x1Pol(C,xu5r);
assertEquals(p,_
  1/108347059433883722041830251*U^5_
  +(-5/108347059433883722041830251*T^10_
    -2756/9849732675807611094711841*T^9_
    -467690/9849732675807611094711841*T^8_
    -1561204/895430243255237372246531*T^7_
    -19603535/895430243255237372246531*T^6_
    -9071001/81402749386839761113321*T^5_
    -19603535/81402749386839761113321*T^4_
    -1561204/7400249944258160101211*T^3_
    -467690/7400249944258160101211*T^2 -2756/672749994932560009201*T_
    -5/672749994932560009201)*U^4_
  +(10/108347059433883722041830251*T^20_
    -10250/9849732675807611094711841*T^19_
    +2110692/9849732675807611094711841*T^18_
    -6680835/895430243255237372246531*T^17_
    +115828261/895430243255237372246531*T^16_
    -118310975/81402749386839761113321*T^15_
    +978927291/81402749386839761113321*T^14_
    -575857717/7400249944258160101211*T^13_
    +3019431117/7400249944258160101211*T^12_
    -1189902646/672749994932560009201*T^11_
    +4310301700/672749994932560009201*T^10_
    -1189902646/61159090448414546291*T^9_
    +3019431117/61159090448414546291*T^8_
    -575857717/5559917313492231481*T^7_
    +978927291/5559917313492231481*T^6_
    -118310975/505447028499293771*T^5_
    +115828261/505447028499293771*T^4 -6680835/45949729863572161*T^3_
    +2110692/45949729863572161*T^2 -10250/4177248169415651*T_
    +10/4177248169415651)*U^3_
  +(-10/108347059433883722041830251*T^30_
    -1840/9849732675807611094711841*T^29_
    -64610/9849732675807611094711841*T^28_
    +575396/895430243255237372246531*T^27_
    -17702800/895430243255237372246531*T^26_
    +30432597/81402749386839761113321*T^25_
    -418611475/81402749386839761113321*T^24_
    +411548321/7400249944258160101211*T^23_
    -3657564624/7400249944258160101211*T^22_
    +20642500/5559917313492231481*T^21_
    -1469323818/61159090448414546291*T^20_
    +754476860/5559917313492231481*T^19_
    -3754698734/5559917313492231481*T^18_
    +1506378024/505447028499293771*T^17_
    -538231420/45949729863572161*T^16_
    +1888549018/45949729863572161*T^15_
    -538231420/4177248169415651*T^14 +1506378024/4177248169415651*T^13_
    -3754698734/4177248169415651*T^12 +754476860/379749833583241*T^11_
    -1469323818/379749833583241*T^10 +20642500/3138428376721*T^9_
    -3657564624/379749833583241*T^8 +411548321/34522712143931*T^7_
    -418611475/34522712143931*T^6 +30432597/3138428376721*T^5_
    -17702800/3138428376721*T^4 +575396/285311670611*T^3_
    -64610/285311670611*T^2 -1840/25937424601*T -10/25937424601)*U^2_
  +(5/108347059433883722041830251*T^40_
    +200/9849732675807611094711841*T^39_
    -11670/9849732675807611094711841*T^38_
    +2650/81402749386839761113321*T^37_
    -515951/895430243255237372246531*T^36_
    +597970/81402749386839761113321*T^35_
    -5746926/81402749386839761113321*T^34_
    +3791255/7400249944258160101211*T^33_
    -19347270/7400249944258160101211*T^32_
    +4008355/672749994932560009201*T^31_
    +32139275/672749994932560009201*T^30_
    -45591375/61159090448414546291*T^29_
    +362111510/61159090448414546291*T^28_
    -190104575/5559917313492231481*T^27_
    +845062981/5559917313492231481*T^26_
    -23000775/45949729863572161*T^25_
    +472340551/505447028499293771*T^24_
    +78902210/45949729863572161*T^23_
    -1175497010/45949729863572161*T^22 +439316/3138428376721*T^21_
    -203391415/379749833583241*T^20 +439316/285311670611*T^19_
    -1175497010/379749833583241*T^18 +78902210/34522712143931*T^17_
    +472340551/34522712143931*T^16 -23000775/285311670611*T^15_
    +845062981/3138428376721*T^14 -190104575/285311670611*T^13_
    +362111510/285311670611*T^12 -45591375/25937424601*T^11_
    +32139275/25937424601*T^10 +4008355/2357947691*T^9_
    -19347270/2357947691*T^8 +3791255/214358881*T^7_
    -5746926/214358881*T^6 +597970/19487171*T^5 -515951/19487171*T^4_
    +2650/161051*T^3 -11670/1771561*T^2 +200/161051*T +5/161051)*U_
  -1/108347059433883722041830251*T^50_
    +5/9849732675807611094711841*T^49_
    -135/9849732675807611094711841*T^48_
    +215/895430243255237372246531*T^47_
    -2720/895430243255237372246531*T^46_
    +216/7400249944258160101211*T^45_
    -17700/81402749386839761113321*T^44_
    +9250/7400249944258160101211*T^43 -325/61159090448414546291*T^42_
    +9665/672749994932560009201*T^41 -405/61159090448414546291*T^40_
    -7680/61159090448414546291*T^39 +1545/5559917313492231481*T^38_
    +18675/5559917313492231481*T^37 -16925/505447028499293771*T^36_
    +78526/505447028499293771*T^35 -16935/45949729863572161*T^34_
    -7515/45949729863572161*T^33 +18955/4177248169415651*T^32_
    -48580/4177248169415651*T^31 -1269/34522712143931*T^30_
    +154615/379749833583241*T^29 -596565/379749833583241*T^28_
    +87400/34522712143931*T^27 +171385/34522712143931*T^26_
    -117501/3138428376721*T^25 +171385/3138428376721*T^24_
    +87400/285311670611*T^23 -596565/285311670611*T^22_
    +154615/25937424601*T^21 -1269/214358881*T^20_
    -48580/2357947691*T^19 +18955/214358881*T^18 -7515/214358881*T^17_
    -16935/19487171*T^16 +78526/19487171*T^15 -16925/1771561*T^14_
    +18675/1771561*T^13 +1545/161051*T^12 -7680/161051*T^11_
    -405/14641*T^10 +9665/14641*T^9 -325/121*T^8 +9250/1331*T^7_
    -17700/1331*T^6 +216/11*T^5 -2720/121*T^4 +215/11*T^3 -135/11*T^2_
    +5*T-1)
assertEquals(variables(p), ['U,'T])
Out[168]:
Polynomial(Fraction(Integer))
Time: 0 sec
Out[168]:
\[ \texttt{true} \]
Boolean
Time: 0.01 (IN) + 0.01 (OT) = 0.02 sec
Out[168]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

The above polynomial p(T, U) is the respective relation between $t$ and $u$, i.e., $p(t, u)=0$. For the following computation with Maple it has been stored in the file p.maple together with the Maple commands:

with(algcurves);
ib := integral_basis(p,T,U):
lprint(ib);

to compute and print the resulting integral basis (not yet order-complete). Via read("p.maple"); this file is evaluated in Maple. It gives the integral basis [1, U, U^2, U^3, v(T, U)] where $v$ is a rational function in $T$ and $U$ and stored in the file v.input.

First check whether the file exists locally.

In [169]:
v: Fraction Polynomial ZZ := 0
Out[169]:
\[ 0 \]
Fraction(Polynomial(Integer))
Time: 0 sec
In [170]:
fn := "v.input" :: FileName
if exists? fn then systemCommand("read v.input )quiet")$MoreSystemCommands;
Out[170]:
\[ \texttt{"v.input"} \]
FileName
Time: 0 sec
Out[170]:
Fraction(Polynomial(Integer))
Time: 0.50 (IN) + 0.04 (EV) + 0.13 (OT) = 0.68 sec
Out[170]:
Void
Time: 0.78 (EV) = 0.78 sec

Then try in the data directory and read it from there.

In [171]:
if zero? v then (_
  fn := filename(basedir,"v", "input");_
  if exists? fn then _
    systemCommand("read " (fn::String) " )quiet")$MoreSystemCommands);
Out[171]:
Void
Time: 0 sec

Otherwise read it from the web.

In [172]:
if zero? v then (_
  githubraw := "https://raw.githubusercontent.com";_
  vurl := githubraw "/hemmecke/qeta-data/master/integralbasis/v.input";_
  systemCommand("system curl -L " vurl ">v.input")$MoreSystemCommands;_
  systemCommand("read v.input )quiet")$MoreSystemCommands);
Out[172]:
Void
Time: 0 sec

Compute the respective $q$-expansion corresponding to $v$ by plugging $t$ and $u$ into the numerator and denominator of $v$.

In [173]:
dv := denom v;
nv := numer v;
Out[173]:
Polynomial(Integer)
Time: 0 sec
Out[173]:
Polynomial(Integer)
Time: 0 sec
In [174]:
degv := degree(nv,'U)
cus := [coefficient(nv, 'U, i) for i in 0..degv];
assertEquals(removeDuplicates [variables x for x in cons(dv,cus)],[[T],[]])
assertEquals([degree(x,'T) for x in cus],[394, 394, 394, 394, 0])
Out[174]:
\[ 4 \]
PositiveInteger
Time: 0 sec
Out[174]:
List(Polynomial(Integer))
Time: 0 sec
Out[174]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
Out[174]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [175]:
cat := x1A1(C,xt) :: CachedPower A1 C;
cau := x1A1(C,xu) :: CachedPower A1 C;
Out[175]:
CachedPower(ModularFunctionQSeriesInfinity(Fraction(Integer)))
Time: 0 sec
Out[175]:
CachedPower(ModularFunctionQSeriesInfinity(Fraction(Integer)))
Time: 0 sec
In [176]:
evTpol(p: Polynomial C, ct: CachedPower A1 C): A1 C == (_
  z: A1 C := 0;_
  sers := [leadingCoefficient(m)*power!(ct,degree(m,T)) for m in monomials p];_
  reduce(_+, reverse! sers, 0)$List(A1 C))
Function declaration evTpol : (Polynomial(Fraction(Integer)), CachedPower(
ModularFunctionQSeriesInfinity(Fraction(Integer)))) -> 
ModularFunctionQSeriesInfinity(Fraction(Integer)) has been added to 
workspace.
Out[176]:
Void
Time: 0 sec
In [177]:
fdv := evTpol(dv, cat);
Compiling function evTpol with type (Polynomial(Fraction(Integer)), 
CachedPower(ModularFunctionQSeriesInfinity(Fraction(Integer)))) -> 
ModularFunctionQSeriesInfinity(Fraction(Integer)) 
Out[177]:
ModularFunctionQSeriesInfinity(Fraction(Integer))
Time: 0.64 (EV) = 0.64 sec
In [178]:
nvs :=[evTpol(x,cat)*power!(cau,i) for x in cus for i in 0..degv];
fnv := reduce(_+, nvs, 0)$List(A1 C);
Out[178]:
List(ModularFunctionQSeriesInfinity(Fraction(Integer)))
Time: 75.13 (EV) + 1.03 (GC) = 76.16 sec
Out[178]:
ModularFunctionQSeriesInfinity(Fraction(Integer))
Time: 19.75 (EV) + 0.30 (GC) = 20.05 sec

After normalizing the leading coefficient of the series to 1, we obtain a series of order -1670.

In [179]:
fv0 := (fnv/fdv);
fv := (1/qetaLeadingCoefficient(fv0))*fv0;
xv := toX1(C, fv, 'V);
assertEquals(qetaGrade fv, 1670)
Out[179]:
ModularFunctionQSeriesInfinity(Fraction(Integer))
Time: 0 sec
Out[179]:
ModularFunctionQSeriesInfinity(Fraction(Integer))
Time: 46.95 (EV) + 0.45 (GC) = 47.41 sec
Out[179]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 0 sec
Out[179]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

Since we already know that $\langle 1, u, u^2, u^3, v(t,u)\rangle_{\mathbb{C}[t]}=M^\infty(121)$, computing an order-complete basis (with respect to $t$) from it via the samba algorithm, does not require us to consider products of basis elements. We simply need to interreduce the basis elements, i.e., we choose a selection strategy that first reduces basis elements that become reducible after adding a new basis element and only then consider products of basis elements.

The computation of of an order-complete basis avab takes about 0.5 hours.

In [180]:
)set mess time on
)set stream calc 1
avgens := [x1A1(C, x) for x in [xt, xu, xu^2, xu^3, xv]]
step! ==> oneVerboseStep!(2,257,1,1)$QCOMP(C,A1,QTOPRED)
-- avab := samba(avgens, 6, step!)$QSAMBA(C,A1,QTOPRED);
avab := samba(avgens, 6)$QSAMBA(C,A1,QTOPRED);
avabtopbas := sort(smallerMod5?, basis avab);
Out[180]:
\[ \left[{q}^{-5}-{q}^{-4}+O\left({q}^{-3}\right), {q}^{-50}+{q}^{-49}+O\left({q}^{-48}\right), {q}^{-100}+2\, {q}^{-99}+O\left({q}^{-98}\right), {q}^{-150}+3\, {q}^{-149}+O\left({q}^{-148}\right), {q}^{-1670}-301\, {q}^{-1669}+O\left({q}^{-1668}\right)\right] \]
List(ModularFunctionQSeriesInfinity(Fraction(Integer)))
Time: 0 sec
Out[180]:
Void
Time: 0 sec
-- numOfGaps:=[40080, 6]
-- numOfGaps:=[30069, 6]
-- numOfGaps:=[20068, 6]
-- numOfGaps:=[20068, 6]
-- numOfGaps:=[10077, 6]
-- numOfGaps:=[10077, 6]
-- numOfGaps:=[96, 6]
-- numOfGaps:=[96, 6]
-- numOfGaps:=[96, 6]
-- numOfGaps:=[96, 6]
-- numOfGaps:=[96, 6]
-- numOfGaps:=[96, 6]
-- numOfGaps:=[96, 6]
-- numOfGaps:=[96, 6]
-- numOfGaps:=[95, 6]
-- numOfGaps:=[95, 6]
-- numOfGaps:=[94, 6]
-- numOfGaps:=[94, 6]
-- numOfGaps:=[93, 6]
-- numOfGaps:=[93, 6]
-- numOfGaps:=[92, 6]
-- numOfGaps:=[92, 6]
-- numOfGaps:=[91, 6]
-- numOfGaps:=[91, 6]
-- numOfGaps:=[90, 6]
-- numOfGaps:=[90, 6]
-- numOfGaps:=[89, 6]
-- numOfGaps:=[89, 6]
-- numOfGaps:=[88, 6]
-- numOfGaps:=[88, 6]
-- numOfGaps:=[87, 6]
-- numOfGaps:=[87, 6]
-- numOfGaps:=[86, 6]
-- numOfGaps:=[86, 6]
-- numOfGaps:=[85, 6]
-- numOfGaps:=[84, 6]
-- numOfGaps:=[83, 6]
-- numOfGaps:=[82, 6]
-- numOfGaps:=[81, 6]
-- numOfGaps:=[80, 6]
-- numOfGaps:=[79, 6]
-- numOfGaps:=[78, 6]
-- numOfGaps:=[77, 6]
-- numOfGaps:=[76, 6]
-- numOfGaps:=[75, 6]
-- numOfGaps:=[74, 6]
-- numOfGaps:=[73, 6]
-- numOfGaps:=[72, 6]
-- numOfGaps:=[71, 6]
-- numOfGaps:=[70, 6]
-- numOfGaps:=[69, 6]
-- numOfGaps:=[68, 6]
-- numOfGaps:=[67, 6]
-- numOfGaps:=[66, 6]
-- numOfGaps:=[65, 6]
-- numOfGaps:=[64, 6]
-- numOfGaps:=[63, 6]
-- numOfGaps:=[62, 6]
-- numOfGaps:=[61, 6]
-- numOfGaps:=[60, 6]
-- numOfGaps:=[59, 6]
-- numOfGaps:=[58, 6]
-- numOfGaps:=[57, 6]
-- numOfGaps:=[56, 6]
-- numOfGaps:=[55, 6]
-- numOfGaps:=[54, 6]
-- numOfGaps:=[53, 6]
-- numOfGaps:=[52, 6]
-- numOfGaps:=[51, 6]
-- numOfGaps:=[50, 6]
-- numOfGaps:=[49, 6]
-- numOfGaps:=[48, 6]
-- numOfGaps:=[47, 6]
-- numOfGaps:=[46, 6]
-- numOfGaps:=[45, 6]
-- numOfGaps:=[44, 6]
-- numOfGaps:=[42, 6]
-- numOfGaps:=[42, 6]
-- numOfGaps:=[42, 6]
-- numOfGaps:=[6, 6]
Out[180]:
QEtaAlgebraBasis(ModularFunctionQSeriesInfinity(Fraction(Integer)))
Time: 295.68 (EV) + 5.71 (GC) = 301.39 sec
Compiling function smallerMod5? with type (ModularFunctionQSeriesInfinity(
Fraction(Integer)), ModularFunctionQSeriesInfinity(Fraction(Integer))) -> 
Boolean 
Out[180]:
List(ModularFunctionQSeriesInfinity(Fraction(Integer)))
Time: 0 sec

Let us reduce even more, namely the non-leading terms.

In [181]:
)set stream calc 25
avabbas := [tailReduce(x, avab)$QRED(C,A1) for x in avabtopbas]
Out[181]:
\[ \left[{q}^{-16}+2\, {q}^{-4}+{q}^{-3}+{q}^{-1}-{q}^{2}+2\, {q}^{6}+2\, {q}^{7}-{q}^{8}+O\left({q}^{10}\right), {q}^{-7}+{q}^{-6}-q+{q}^{3}+{q}^{4}-{q}^{9}+{q}^{15}+{q}^{16}+O\left({q}^{19}\right), {q}^{-8}+{q}^{-6}+{q}^{-2}-q+{q}^{3}+{q}^{5}+{q}^{12}+{q}^{14}+{q}^{15}+O\left({q}^{18}\right), {q}^{-9}-{q}^{-3}+{q}^{-1}+{q}^{2}-{q}^{6}-{q}^{7}+{q}^{13}+O\left({q}^{17}\right)\right] \]
List(ModularFunctionQSeriesInfinity(Fraction(Integer)))
Time: 5.27 (OT) + 0.16 (GC) = 5.44 sec

Now we create a samba basis with xt and the above elements, naming them B1 up to B4.

In [182]:
bsyms := indexedSymbols("B", # basis avab);
xvgens := cons(xt, [toX1(C, x, b) for x in avabbas for b in bsyms]);
xvab := samba(xvgens, 6)$QSAMBA(C,X1,QTOPRED);
assertEquals(numberOfGaps(xvab), 6)
Out[182]:
List(Symbol)
Time: 0 sec
Out[182]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
-- numOfGaps:=[384, 6]
-- numOfGaps:=[289, 6]
-- numOfGaps:=[194, 6]
-- numOfGaps:=[99, 6]
-- numOfGaps:=[99, 6]
-- numOfGaps:=[99, 6]
-- numOfGaps:=[6, 6]
Out[182]:
QEtaAlgebraBasis(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[182]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [183]:
xvabbas := basis xvab
assertEquals([qetaGrade x for x in xvabbas], [16,7,8,9])
Out[183]:
\[ \left[\left[{q}^{-16}+2\, {q}^{-4}+{q}^{-3}+{q}^{-1}-{q}^{2}+2\, {q}^{6}+2\, {q}^{7}-{q}^{8}+O\left({q}^{10}\right), B1\right], \left[{q}^{-7}+{q}^{-6}-q+{q}^{3}+{q}^{4}-{q}^{9}+{q}^{15}+{q}^{16}+O\left({q}^{19}\right), B2\right], \left[{q}^{-8}+{q}^{-6}+{q}^{-2}-q+{q}^{3}+{q}^{5}+{q}^{12}+{q}^{14}+{q}^{15}+O\left({q}^{18}\right), B3\right], \left[{q}^{-9}-{q}^{-3}+{q}^{-1}+{q}^{2}-{q}^{6}-{q}^{7}+{q}^{13}+O\left({q}^{17}\right), B4\right]\right] \]
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[183]:
\[ \texttt{true} \]
Boolean
Time: 0 sec

We have just computed a basis $B=\{1,b_1,b_2,b_3,b_4\}$ such that \begin{align*} M^\infty(121) &= \langle 1,u,u^2,u^3,v(t,u)\rangle_{\setC[t]}= \langle 1,b_1,b_2,b_3,b_4\rangle_{\setC[t]}. \end{align*}

Since $\{1,u,u^2,u^3,v(t,u)\}$ is an integral basis of $M^\infty(121)$ over $\setC[t]$, also $B$ is an integral basis, i.e., each element $\phi$ of $M^\infty(121)$ can be expressed as \begin{align*} \phi &= p_0(t) + p_1(t)b_1 + p_2(t)b_2 + p_3(t)b_3 + p_4(t)b_4. \end{align*} for some polynomials $p_i(T)\in\setC[T]$.

In particular, we can express $u,u^2,u^3,v(t,u)$ as a $\setQ[t]$-linear combination of the elements of $B$.

In [184]:
)set stream calc 0
-- Set the trace argument to 1 to see some output during the computation
tr0 := traceEnter(0)$QTOPRED(C,X1);
trl := traceLoop(0)$QTOPRED(C,X1);
trr := traceReturn(0)$QTOPRED(C,X1);
treduce := tracedTopReduce(tr0,trl,trr)$QTOPRED(C,X1);
xu1r := treduce(xu, xvab);
xu2r := treduce(xu^2, xvab);
xu3r := treduce(xu^3, xvab);
xv1r := treduce(xv, xvab);
xrs := [xu1r, xu2r, xu3r, xv1r];
assertEquals([zero? x for x in xrs], [true,true,true,true])
Out[184]:
((QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))), QEtaAlgebraBasis(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))) -> Void)
Time: 0 sec
Out[184]:
(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))) -> Void)
Time: 0 sec
Out[184]:
(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))) -> Void)
Time: 0 sec
Out[184]:
((QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))), QEtaAlgebraBasis(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))) -> QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[184]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 11.84 (EV) + 0.36 (GC) = 12.20 sec
Out[184]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 27.86 (EV) + 0.75 (GC) = 28.61 sec
Out[184]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 29.29 (EV) + 0.77 (GC) = 30.06 sec
Out[184]:
QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer))))
Time: 2126.56 (EV) + 54.35 (GC) = 2180.90 sec
Out[184]:
List(QEtaExtendedAlgebra(Fraction(Integer),ModularFunctionQSeriesInfinity(Fraction(Integer)),QEtaLazyAlgebra(Fraction(Integer),Polynomial(Fraction(Integer)))))
Time: 0 sec
Out[184]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [185]:
upols := [integerPrimitivePart x1Pol(C,x) for x in xrs];
assertEquals([# monomials x for x in upols], [46, 96, 146, 1666])
Out[185]:
List(Polynomial(Integer))
Time: 19.15 (EV) + 0.74 (GC) = 19.89 sec
Out[185]:
\[ \texttt{true} \]
Boolean
Time: 0 sec
In [186]:
[[degree m for m in monomials x] for x in upols]
assertEquals([max [wholePart floor((log(euclideanSize numer leadingCoefficient m)/log(10.0))::Float) for m in monomials x] for x in upols], [8, 18, 29, 840])
Out[186]:
\[ \left[\left[U, {T}^{10}, {T}^{9}, {T}^{8}\, B4, {T}^{8}\, B3, {T}^{8}\, B2, {T}^{8}, {T}^{7}\, B4, {T}^{7}\, B3, {T}^{7}\, B2, {T}^{7}, {T}^{6}\, B4, {T}^{6}\, B3, {T}^{6}\, B2, {T}^{6}\, B1, {T}^{6}, {T}^{5}\, B4, {T}^{5}\, B3, {T}^{5}\, B2, {T}^{5}\, B1, {T}^{5}, {T}^{4}\, B4, {T}^{4}\, B3, {T}^{4}\, B2, {T}^{4}\, B1, {T}^{4}, {T}^{3}\, B4, {T}^{3}\, B3, {T}^{3}\, B2, {T}^{3}\, B1, {T}^{3}, {T}^{2}\, B4, {T}^{2}\, B3, {T}^{2}\, B2, {T}^{2}\, B1, {T}^{2}, T\, B4, T\, B3, T\, B2, T\, B1, T, B4, B3, B2, B1, 1\right], \left[{U}^{2}, {T}^{20}, {T}^{19}, {T}^{18}\, B4, {T}^{18}\, B3, {T}^{18}\, B2, {T}^{18}, {T}^{17}\, B4, {T}^{17}\, B3, {T}^{17}\, B2, {T}^{17}, {T}^{16}\, B4, {T}^{16}\, B3, {T}^{16}\, B2, {T}^{16}\, B1, {T}^{16}, {T}^{15}\, B4, {T}^{15}\, B3, {T}^{15}\, B2, {T}^{15}\, B1, {T}^{15}, {T}^{14}\, B4, {T}^{14}\, B3, {T}^{14}\, B2, {T}^{14}\, B1, {T}^{14}, {T}^{13}\, B4, {T}^{13}\, B3, {T}^{13}\, B2, {T}^{13}\, B1, {T}^{13}, {T}^{12}\, B4, {T}^{12}\, B3, {T}^{12}\, B2, {T}^{12}\, B1, {T}^{12}, {T}^{11}\, B4, {T}^{11}\, B3, {T}^{11}\, B2, {T}^{11}\, B1, {T}^{11}, {T}^{10}\, B4, {T}^{10}\, B3, {T}^{10}\, B2, {T}^{10}\, B1, {T}^{10}, {T}^{9}\, B4, {T}^{9}\, B3, {T}^{9}\, B2, {T}^{9}\, B1, {T}^{9}, {T}^{8}\, B4, {T}^{8}\, B3, {T}^{8}\, B2, {T}^{8}\, B1, {T}^{8}, {T}^{7}\, B4, {T}^{7}\, B3, {T}^{7}\, B2, {T}^{7}\, B1, {T}^{7}, {T}^{6}\, B4, {T}^{6}\, B3, {T}^{6}\, B2, {T}^{6}\, B1, {T}^{6}, {T}^{5}\, B4, {T}^{5}\, B3, {T}^{5}\, B2, {T}^{5}\, B1, {T}^{5}, {T}^{4}\, B4, {T}^{4}\, B3, {T}^{4}\, B2, {T}^{4}\, B1, {T}^{4}, {T}^{3}\, B4, {T}^{3}\, B3, {T}^{3}\, B2, {T}^{3}\, B1, {T}^{3}, {T}^{2}\, B4, {T}^{2}\, B3, {T}^{2}\, B2, {T}^{2}\, B1, {T}^{2}, T\, B4, T\, B3, T\, B2, T\, B1, T, B4, B3, B2, B1, 1\right], \left[{U}^{3}, {T}^{30}, {T}^{29}, {T}^{28}\, B4, {T}^{28}\, B3, {T}^{28}\, B2, {T}^{28}, {T}^{27}\, B4, {T}^{27}\, B3, {T}^{27}\, B2, {T}^{27}, {T}^{26}\, B4, {T}^{26}\, B3, {T}^{26}\, B2, {T}^{26}\, B1, {T}^{26}, {T}^{25}\, B4, {T}^{25}\, B3, {T}^{25}\, B2, {T}^{25}\, B1, {T}^{25}, {T}^{24}\, B4, {T}^{24}\, B3, {T}^{24}\, B2, {T}^{24}\, B1, {T}^{24}, {T}^{23}\, B4, {T}^{23}\, B3, {T}^{23}\, B2, {T}^{23}\, B1, {T}^{23}, {T}^{22}\, B4, {T}^{22}\, B3, {T}^{22}\, B2, {T}^{22}\, B1, {T}^{22}, {T}^{21}\, B4, {T}^{21}\, B3, {T}^{21}\, B2, {T}^{21}\, B1, {T}^{21}, {T}^{20}\, B4, {T}^{20}\, B3, {T}^{20}\, B2, {T}^{20}\, B1, {T}^{20}, {T}^{19}\, B4, {T}^{19}\, B3, {T}^{19}\, B2, {T}^{19}\, B1, {T}^{19}, {T}^{18}\, B4, {T}^{18}\, B3, {T}^{18}\, B2, {T}^{18}\, B1, {T}^{18}, {T}^{17}\, B4, {T}^{17}\, B3, {T}^{17}\, B2, {T}^{17}\, B1, {T}^{17}, {T}^{16}\, B4, {T}^{16}\, B3, {T}^{16}\, B2, {T}^{16}\, B1, {T}^{16}, {T}^{15}\, B4, {T}^{15}\, B3, {T}^{15}\, B2, {T}^{15}\, B1, {T}^{15}, {T}^{14}\, B4, {T}^{14}\, B3, {T}^{14}\, B2, {T}^{14}\, B1, {T}^{14}, {T}^{13}\, B4, {T}^{13}\, B3, {T}^{13}\, B2, {T}^{13}\, B1, {T}^{13}, {T}^{12}\, B4, {T}^{12}\, B3, {T}^{12}\, B2, {T}^{12}\, B1, {T}^{12}, {T}^{11}\, B4, {T}^{11}\, B3, {T}^{11}\, B2, {T}^{11}\, B1, {T}^{11}, {T}^{10}\, B4, {T}^{10}\, B3, {T}^{10}\, B2, {T}^{10}\, B1, {T}^{10}, {T}^{9}\, B4, {T}^{9}\, B3, {T}^{9}\, B2, {T}^{9}\, B1, {T}^{9}, {T}^{8}\, B4, {T}^{8}\, B3, {T}^{8}\, B2, {T}^{8}\, B1, {T}^{8}, {T}^{7}\, B4, {T}^{7}\, B3, {T}^{7}\, B2, {T}^{7}\, B1, {T}^{7}, {T}^{6}\, B4, {T}^{6}\, B3, {T}^{6}\, B2, {T}^{6}\, B1, {T}^{6}, {T}^{5}\, B4, {T}^{5}\, B3, {T}^{5}\, B2, {T}^{5}\, B1, {T}^{5}, {T}^{4}\, B4, {T}^{4}\, B3, {T}^{4}\, B2, {T}^{4}\, B1, {T}^{4}, {T}^{3}\, B4, {T}^{3}\, B3, {T}^{3}\, B2, {T}^{3}\, B1, {T}^{3}, {T}^{2}\, B4, {T}^{2}\, B3, {T}^{2}\, B2, {T}^{2}\, B1, {T}^{2}, T\, B4, T\, B3, T\, B2, T\, B1, T, B4, B3, B2, B1, 1\right], \left[V, {T}^{334}, {T}^{333}, {T}^{332}\, B4, {T}^{332}\, B3, {T}^{332}\, B2, {T}^{332}, {T}^{331}\, B4, {T}^{331}\, B3, {T}^{331}\, B2, {T}^{331}, {T}^{330}\, B4, {T}^{330}\, B3, {T}^{330}\, B2, {T}^{330}\, B1, {T}^{330}, {T}^{329}\, B4, {T}^{329}\, B3, {T}^{329}\, B2, {T}^{329}\, B1, {T}^{329}, {T}^{328}\, B4, {T}^{328}\, B3, {T}^{328}\, B2, {T}^{328}\, B1, {T}^{328}, {T}^{327}\, B4, {T}^{327}\, B3, {T}^{327}\, B2, {T}^{327}\, B1, {T}^{327}, {T}^{326}\, B4, {T}^{326}\, B3, {T}^{326}\, B2, {T}^{326}\, B1, {T}^{326}, {T}^{325}\, B4, {T}^{325}\, B3, {T}^{325}\, B2, {T}^{325}\, B1, {T}^{325}, {T}^{324}\, B4, {T}^{324}\, B3, {T}^{324}\, B2, {T}^{324}\, B1, {T}^{324}, {T}^{323}\, B4, {T}^{323}\, B3, {T}^{323}\, B2, {T}^{323}\, B1, {T}^{323}, {T}^{322}\, B4, {T}^{322}\, B3, {T}^{322}\, B2, {T}^{322}\, B1, {T}^{322}, {T}^{321}\, B4, {T}^{321}\, B3, {T}^{321}\, B2, {T}^{321}\, B1, {T}^{321}, {T}^{320}\, B4, {T}^{320}\, B3, {T}^{320}\, B2, {T}^{320}\, B1, {T}^{320}, {T}^{319}\, B4, {T}^{319}\, B3, {T}^{319}\, B2, {T}^{319}\, B1, {T}^{319}, {T}^{318}\, B4, {T}^{318}\, B3, {T}^{318}\, B2, {T}^{318}\, B1, {T}^{318}, {T}^{317}\, B4, {T}^{317}\, B3, {T}^{317}\, B2, {T}^{317}\, B1, {T}^{317}, {T}^{316}\, B4, {T}^{316}\, B3, {T}^{316}\, B2, {T}^{316}\, B1, {T}^{316}, {T}^{315}\, B4, {T}^{315}\, B3, {T}^{315}\, B2, {T}^{315}\, B1, {T}^{315}, {T}^{314}\, B4, {T}^{314}\, B3, {T}^{314}\, B2, {T}^{314}\, B1, {T}^{314}, {T}^{313}\, B4, {T}^{313}\, B3, {T}^{313}\, B2, {T}^{313}\, B1, {T}^{313}, {T}^{312}\, B4, {T}^{312}\, B3, {T}^{312}\, B2, {T}^{312}\, B1, {T}^{312}, {T}^{311}\, B4, {T}^{311}\, B3, {T}^{311}\, B2, {T}^{311}\, B1, {T}^{311}, {T}^{310}\, B4, {T}^{310}\, B3, {T}^{310}\, B2, {T}^{310}\, B1, {T}^{310}, {T}^{309}\, B4, {T}^{309}\, B3, {T}^{309}\, B2, {T}^{309}\, B1, {T}^{309}, {T}^{308}\, B4, {T}^{308}\, B3, {T}^{308}\, B2, {T}^{308}\, B1, {T}^{308}, {T}^{307}\, B4, {T}^{307}\, B3, {T}^{307}\, B2, {T}^{307}\, B1, {T}^{307}, {T}^{306}\, B4, {T}^{306}\, B3, {T}^{306}\, B2, {T}^{306}\, B1, {T}^{306}, {T}^{305}\, B4, {T}^{305}\, B3, {T}^{305}\, B2, {T}^{305}\, B1, {T}^{305}, {T}^{304}\, B4, {T}^{304}\, B3, {T}^{304}\, B2, {T}^{304}\, B1, {T}^{304}, {T}^{303}\, B4, {T}^{303}\, B3, {T}^{303}\, B2, {T}^{303}\, B1, {T}^{303}, {T}^{302}\, B4, {T}^{302}\, B3, {T}^{302}\, B2, {T}^{302}\, B1, {T}^{302}, {T}^{301}\, B4, {T}^{301}\, B3, {T}^{301}\, B2, {T}^{301}\, B1, {T}^{301}, {T}^{300}\, B4, {T}^{300}\, B3, {T}^{300}\, B2, {T}^{300}\, B1, {T}^{300}, {T}^{299}\, B4, {T}^{299}\, B3, {T}^{299}\, B2, {T}^{299}\, B1, {T}^{299}, {T}^{298}\, B4, {T}^{298}\, B3, {T}^{298}\, B2, {T}^{298}\, B1, {T}^{298}, {T}^{297}\, B4, {T}^{297}\, B3, {T}^{297}\, B2, {T}^{297}\, B1, {T}^{297}, {T}^{296}\, B4, {T}^{296}\, B3, {T}^{296}\, B2, {T}^{296}\, B1, {T}^{296}, {T}^{295}\, B4, {T}^{295}\, B3, {T}^{295}\, B2, {T}^{295}\, B1, {T}^{295}, {T}^{294}\, B4, {T}^{294}\, B3, {T}^{294}\, B2, {T}^{294}\, B1, {T}^{294}, {T}^{293}\, B4, {T}^{293}\, B3, {T}^{293}\, B2, {T}^{293}\, B1, {T}^{293}, {T}^{292}\, B4, {T}^{292}\, B3, {T}^{292}\, B2, {T}^{292}\, B1, {T}^{292}, {T}^{291}\, B4, {T}^{291}\, B3, {T}^{291}\, B2, {T}^{291}\, B1, {T}^{291}, {T}^{290}\, B4, {T}^{290}\, B3, {T}^{290}\, B2, {T}^{290}\, B1, {T}^{290}, {T}^{289}\, B4, {T}^{289}\, B3, {T}^{289}\, B2, {T}^{289}\, B1, {T}^{289}, {T}^{288}\, B4, {T}^{288}\, B3, {T}^{288}\, B2, {T}^{288}\, B1, {T}^{288}, {T}^{287}\, B4, {T}^{287}\, B3, {T}^{287}\, B2, {T}^{287}\, B1, {T}^{287}, {T}^{286}\, B4, {T}^{286}\, B3, {T}^{286}\, B2, {T}^{286}\, B1, {T}^{286}, {T}^{285}\, B4, {T}^{285}\, B3, {T}^{285}\, B2, {T}^{285}\, B1, {T}^{285}, {T}^{284}\, B4, {T}^{284}\, B3, {T}^{284}\, B2, {T}^{284}\, B1, {T}^{284}, {T}^{283}\, B4, {T}^{283}\, B3, {T}^{283}\, B2, {T}^{283}\, B1, {T}^{283}, {T}^{282}\, B4, {T}^{282}\, B3, {T}^{282}\, B2, {T}^{282}\, B1, {T}^{282}, {T}^{281}\, B4, {T}^{281}\, B3, {T}^{281}\, B2, {T}^{281}\, B1, {T}^{281}, {T}^{280}\, B4, {T}^{280}\, B3, {T}^{280}\, B2, {T}^{280}\, B1, {T}^{280}, {T}^{279}\, B4, {T}^{279}\, B3, {T}^{279}\, B2, {T}^{279}\, B1, {T}^{279}, {T}^{278}\, B4, {T}^{278}\, B3, {T}^{278}\, B2, {T}^{278}\, B1, {T}^{278}, {T}^{277}\, B4, {T}^{277}\, B3, {T}^{277}\, B2, {T}^{277}\, B1, {T}^{277}, {T}^{276}\, B4, {T}^{276}\, B3, {T}^{276}\, B2, {T}^{276}\, B1, {T}^{276}, {T}^{275}\, B4, {T}^{275}\, B3, {T}^{275}\, B2, {T}^{275}\, B1, {T}^{275}, {T}^{274}\, B4, {T}^{274}\, B3, {T}^{274}\, B2, {T}^{274}\, B1, {T}^{274}, {T}^{273}\, B4, {T}^{273}\, B3, {T}^{273}\, B2, {T}^{273}\, B1, {T}^{273}, {T}^{272}\, B4, {T}^{272}\, B3, {T}^{272}\, B2, {T}^{272}\, B1, {T}^{272}, {T}^{271}\, B4, {T}^{271}\, B3, {T}^{271}\, B2, {T}^{271}\, B1, {T}^{271}, {T}^{270}\, B4, {T}^{270}\, B3, {T}^{270}\, B2, {T}^{270}\, B1, {T}^{270}, {T}^{269}\, B4, {T}^{269}\, B3, {T}^{269}\, B2, {T}^{269}\, B1, {T}^{269}, {T}^{268}\, B4, {T}^{268}\, B3, {T}^{268}\, B2, {T}^{268}\, B1, {T}^{268}, {T}^{267}\, B4, {T}^{267}\, B3, {T}^{267}\, B2, {T}^{267}\, B1, {T}^{267}, {T}^{266}\, B4, {T}^{266}\, B3, {T}^{266}\, B2, {T}^{266}\, B1, {T}^{266}, {T}^{265}\, B4, {T}^{265}\, B3, {T}^{265}\, B2, {T}^{265}\, B1, {T}^{265}, {T}^{264}\, B4, {T}^{264}\, B3, {T}^{264}\, B2, {T}^{264}\, B1, {T}^{264}, {T}^{263}\, B4, {T}^{263}\, B3, {T}^{263}\, B2, {T}^{263}\, B1, {T}^{263}, {T}^{262}\, B4, {T}^{262}\, B3, {T}^{262}\, B2, {T}^{262}\, B1, {T}^{262}, {T}^{261}\, B4, {T}^{261}\, B3, {T}^{261}\, B2, {T}^{261}\, B1, {T}^{261}, {T}^{260}\, B4, {T}^{260}\, B3, {T}^{260}\, B2, {T}^{260}\, B1, {T}^{260}, {T}^{259}\, B4, {T}^{259}\, B3, {T}^{259}\, B2, {T}^{259}\, B1, {T}^{259}, {T}^{258}\, B4, {T}^{258}\, B3, {T}^{258}\, B2, {T}^{258}\, B1, {T}^{258}, {T}^{257}\, B4, {T}^{257}\, B3, {T}^{257}\, B2, {T}^{257}\, B1, {T}^{257}, {T}^{256}\, B4, {T}^{256}\, B3, {T}^{256}\, B2, {T}^{256}\, B1, {T}^{256}, {T}^{255}\, B4, {T}^{255}\, B3, {T}^{255}\, B2, {T}^{255}\, B1, {T}^{255}, {T}^{254}\, B4, {T}^{254}\, B3, {T}^{254}\, B2, {T}^{254}\, B1, {T}^{254}, {T}^{253}\, B4, {T}^{253}\, B3, {T}^{253}\, B2, {T}^{253}\, B1, {T}^{253}, {T}^{252}\, B4, {T}^{252}\, B3, {T}^{252}\, B2, {T}^{252}\, B1, {T}^{252}, {T}^{251}\, B4, {T}^{251}\, B3, {T}^{251}\, B2, {T}^{251}\, B1, {T}^{251}, {T}^{250}\, B4, {T}^{250}\, B3, {T}^{250}\, B2, {T}^{250}\, B1, {T}^{250}, {T}^{249}\, B4, {T}^{249}\, B3, {T}^{249}\, B2, {T}^{249}\, B1, {T}^{249}, {T}^{248}\, B4, {T}^{248}\, B3, {T}^{248}\, B2, {T}^{248}\, B1, {T}^{248}, {T}^{247}\, B4, {T}^{247}\, B3, {T}^{247}\, B2, {T}^{247}\, B1, {T}^{247}, {T}^{246}\, B4, {T}^{246}\, B3, {T}^{246}\, B2, {T}^{246}\, B1, {T}^{246}, {T}^{245}\, B4, {T}^{245}\, B3, {T}^{245}\, B2, {T}^{245}\, B1, {T}^{245}, {T}^{244}\, B4, {T}^{244}\, B3, {T}^{244}\, B2, {T}^{244}\, B1, {T}^{244}, {T}^{243}\, B4, {T}^{243}\, B3, {T}^{243}\, B2, {T}^{243}\, B1, {T}^{243}, {T}^{242}\, B4, {T}^{242}\, B3, {T}^{242}\, B2, {T}^{242}\, B1, {T}^{242}, {T}^{241}\, B4, {T}^{241}\, B3, {T}^{241}\, B2, {T}^{241}\, B1, {T}^{241}, {T}^{240}\, B4, {T}^{240}\, B3, {T}^{240}\, B2, {T}^{240}\, B1, {T}^{240}, {T}^{239}\, B4, {T}^{239}\, B3, {T}^{239}\, B2, {T}^{239}\, B1, {T}^{239}, {T}^{238}\, B4, {T}^{238}\, B3, {T}^{238}\, B2, {T}^{238}\, B1, {T}^{238}, {T}^{237}\, B4, {T}^{237}\, B3, {T}^{237}\, B2, {T}^{237}\, B1, {T}^{237}, {T}^{236}\, B4, {T}^{236}\, B3, {T}^{236}\, B2, {T}^{236}\, B1, {T}^{236}, {T}^{235}\, B4, {T}^{235}\, B3, {T}^{235}\, B2, {T}^{235}\, B1, {T}^{235}, {T}^{234}\, B4, {T}^{234}\, B3, {T}^{234}\, B2, {T}^{234}\, B1, {T}^{234}, {T}^{233}\, B4, {T}^{233}\, B3, {T}^{233}\, B2, {T}^{233}\, B1, {T}^{233}, {T}^{232}\, B4, {T}^{232}\, B3, {T}^{232}\, B2, {T}^{232}\, B1, {T}^{232}, {T}^{231}\, B4, {T}^{231}\, B3, {T}^{231}\, B2, {T}^{231}\, B1, {T}^{231}, {T}^{230}\, B4, {T}^{230}\, B3, {T}^{230}\, B2, {T}^{230}\, B1, {T}^{230}, {T}^{229}\, B4, {T}^{229}\, B3, {T}^{229}\, B2, {T}^{229}\, B1, {T}^{229}, {T}^{228}\, B4, {T}^{228}\, B3, {T}^{228}\, B2, {T}^{228}\, B1, {T}^{228}, {T}^{227}\, B4, {T}^{227}\, B3, {T}^{227}\, B2, {T}^{227}\, B1, {T}^{227}, {T}^{226}\, B4, {T}^{226}\, B3, {T}^{226}\, B2, {T}^{226}\, B1, {T}^{226}, {T}^{225}\, B4, {T}^{225}\, B3, {T}^{225}\, B2, {T}^{225}\, B1, {T}^{225}, {T}^{224}\, B4, {T}^{224}\, B3, {T}^{224}\, B2, {T}^{224}\, B1, {T}^{224}, {T}^{223}\, B4, {T}^{223}\, B3, {T}^{223}\, B2, {T}^{223}\, B1, {T}^{223}, {T}^{222}\, B4, {T}^{222}\, B3, {T}^{222}\, B2, {T}^{222}\, B1, {T}^{222}, {T}^{221}\, B4, {T}^{221}\, B3, {T}^{221}\, B2, {T}^{221}\, B1, {T}^{221}, {T}^{220}\, B4, {T}^{220}\, B3, {T}^{220}\, B2, {T}^{220}\, B1, {T}^{220}, {T}^{219}\, B4, {T}^{219}\, B3, {T}^{219}\, B2, {T}^{219}\, B1, {T}^{219}, {T}^{218}\, B4, {T}^{218}\, B3, {T}^{218}\, B2, {T}^{218}\, B1, {T}^{218}, {T}^{217}\, B4, {T}^{217}\, B3, {T}^{217}\, B2, {T}^{217}\, B1, {T}^{217}, {T}^{216}\, B4, {T}^{216}\, B3, {T}^{216}\, B2, {T}^{216}\, B1, {T}^{216}, {T}^{215}\, B4, {T}^{215}\, B3, {T}^{215}\, B2, {T}^{215}\, B1, {T}^{215}, {T}^{214}\, B4, {T}^{214}\, B3, {T}^{214}\, B2, {T}^{214}\, B1, {T}^{214}, {T}^{213}\, B4, {T}^{213}\, B3, {T}^{213}\, B2, {T}^{213}\, B1, {T}^{213}, {T}^{212}\, B4, {T}^{212}\, B3, {T}^{212}\, B2, {T}^{212}\, B1, {T}^{212}, {T}^{211}\, B4, {T}^{211}\, B3, {T}^{211}\, B2, {T}^{211}\, B1, {T}^{211}, {T}^{210}\, B4, {T}^{210}\, B3, {T}^{210}\, B2, {T}^{210}\, B1, {T}^{210}, {T}^{209}\, B4, {T}^{209}\, B3, {T}^{209}\, B2, {T}^{209}\, B1, {T}^{209}, {T}^{208}\, B4, {T}^{208}\, B3, {T}^{208}\, B2, {T}^{208}\, B1, {T}^{208}, {T}^{207}\, B4, {T}^{207}\, B3, {T}^{207}\, B2, {T}^{207}\, B1, {T}^{207}, {T}^{206}\, B4, {T}^{206}\, B3, {T}^{206}\, B2, {T}^{206}\, B1, {T}^{206}, {T}^{205}\, B4, {T}^{205}\, B3, {T}^{205}\, B2, {T}^{205}\, B1, {T}^{205}, {T}^{204}\, B4, {T}^{204}\, B3, {T}^{204}\, B2, {T}^{204}\, B1, {T}^{204}, {T}^{203}\, B4, {T}^{203}\, B3, {T}^{203}\, B2, {T}^{203}\, B1, {T}^{203}, {T}^{202}\, B4, {T}^{202}\, B3, {T}^{202}\, B2, {T}^{202}\, B1, {T}^{202}, {T}^{201}\, B4, {T}^{201}\, B3, {T}^{201}\, B2, {T}^{201}\, B1, {T}^{201}, {T}^{200}\, B4, {T}^{200}\, B3, {T}^{200}\, B2, {T}^{200}\, B1, {T}^{200}, {T}^{199}\, B4, {T}^{199}\, B3, {T}^{199}\, B2, {T}^{199}\, B1, {T}^{199}, {T}^{198}\, B4, {T}^{198}\, B3, {T}^{198}\, B2, {T}^{198}\, B1, {T}^{198}, {T}^{197}\, B4, {T}^{197}\, B3, {T}^{197}\, B2, {T}^{197}\, B1, {T}^{197}, {T}^{196}\, B4, {T}^{196}\, B3, {T}^{196}\, B2, {T}^{196}\, B1, {T}^{196}, {T}^{195}\, B4, {T}^{195}\, B3, {T}^{195}\, B2, {T}^{195}\, B1, {T}^{195}, {T}^{194}\, B4, {T}^{194}\, B3, {T}^{194}\, B2, {T}^{194}\, B1, {T}^{194}, {T}^{193}\, B4, {T}^{193}\, B3, {T}^{193}\, B2, {T}^{193}\, B1, {T}^{193}, {T}^{192}\, B4, {T}^{192}\, B3, {T}^{192}\, B2, {T}^{192}\, B1, {T}^{192}, {T}^{191}\, B4, {T}^{191}\, B3, {T}^{191}\, B2, {T}^{191}\, B1, {T}^{191}, {T}^{190}\, B4, {T}^{190}\, B3, {T}^{190}\, B2, {T}^{190}\, B1, {T}^{190}, {T}^{189}\, B4, {T}^{189}\, B3, {T}^{189}\, B2, {T}^{189}\, B1, {T}^{189}, {T}^{188}\, B4, {T}^{188}\, B3, {T}^{188}\, B2, {T}^{188}\, B1, {T}^{188}, {T}^{187}\, B4, {T}^{187}\, B3, {T}^{187}\, B2, {T}^{187}\, B1, {T}^{187}, {T}^{186}\, B4, {T}^{186}\, B3, {T}^{186}\, B2, {T}^{186}\, B1, {T}^{186}, {T}^{185}\, B4, {T}^{185}\, B3, {T}^{185}\, B2, {T}^{185}\, B1, {T}^{185}, {T}^{184}\, B4, {T}^{184}\, B3, {T}^{184}\, B2, {T}^{184}\, B1, {T}^{184}, {T}^{183}\, B4, {T}^{183}\, B3, {T}^{183}\, B2, {T}^{183}\, B1, {T}^{183}, {T}^{182}\, B4, {T}^{182}\, B3, {T}^{182}\, B2, {T}^{182}\, B1, {T}^{182}, {T}^{181}\, B4, {T}^{181}\, B3, {T}^{181}\, B2, {T}^{181}\, B1, {T}^{181}, {T}^{180}\, B4, {T}^{180}\, B3, {T}^{180}\, B2, {T}^{180}\, B1, {T}^{180}, {T}^{179}\, B4, {T}^{179}\, B3, {T}^{179}\, B2, {T}^{179}\, B1, {T}^{179}, {T}^{178}\, B4, {T}^{178}\, B3, {T}^{178}\, B2, {T}^{178}\, B1, {T}^{178}, {T}^{177}\, B4, {T}^{177}\, B3, {T}^{177}\, B2, {T}^{177}\, B1, {T}^{177}, {T}^{176}\, B4, {T}^{176}\, B3, {T}^{176}\, B2, {T}^{176}\, B1, {T}^{176}, {T}^{175}\, B4, {T}^{175}\, B3, {T}^{175}\, B2, {T}^{175}\, B1, {T}^{175}, {T}^{174}\, B4, {T}^{174}\, B3, {T}^{174}\, B2, {T}^{174}\, B1, {T}^{174}, {T}^{173}\, B4, {T}^{173}\, B3, {T}^{173}\, B2, {T}^{173}\, B1, {T}^{173}, {T}^{172}\, B4, {T}^{172}\, B3, {T}^{172}\, B2, {T}^{172}\, B1, {T}^{172}, {T}^{171}\, B4, {T}^{171}\, B3, {T}^{171}\, B2, {T}^{171}\, B1, {T}^{171}, {T}^{170}\, B4, {T}^{170}\, B3, {T}^{170}\, B2, {T}^{170}\, B1, {T}^{170}, {T}^{169}\, B4, {T}^{169}\, B3, {T}^{169}\, B2, {T}^{169}\, B1, {T}^{169}, {T}^{168}\, B4, {T}^{168}\, B3, {T}^{168}\, B2, {T}^{168}\, B1, {T}^{168}, {T}^{167}\, B4, {T}^{167}\, B3, {T}^{167}\, B2, {T}^{167}\, B1, {T}^{167}, {T}^{166}\, B4, {T}^{166}\, B3, {T}^{166}\, B2, {T}^{166}\, B1, {T}^{166}, {T}^{165}\, B4, {T}^{165}\, B3, {T}^{165}\, B2, {T}^{165}\, B1, {T}^{165}, {T}^{164}\, B4, {T}^{164}\, B3, {T}^{164}\, B2, {T}^{164}\, B1, {T}^{164}, {T}^{163}\, B4, {T}^{163}\, B3, {T}^{163}\, B2, {T}^{163}\, B1, {T}^{163}, {T}^{162}\, B4, {T}^{162}\, B3, {T}^{162}\, B2, {T}^{162}\, B1, {T}^{162}, {T}^{161}\, B4, {T}^{161}\, B3, {T}^{161}\, B2, {T}^{161}\, B1, {T}^{161}, {T}^{160}\, B4, {T}^{160}\, B3, {T}^{160}\, B2, {T}^{160}\, B1, {T}^{160}, {T}^{159}\, B4, {T}^{159}\, B3, {T}^{159}\, B2, {T}^{159}\, B1, {T}^{159}, {T}^{158}\, B4, {T}^{158}\, B3, {T}^{158}\, B2, {T}^{158}\, B1, {T}^{158}, {T}^{157}\, B4, {T}^{157}\, B3, {T}^{157}\, B2, {T}^{157}\, B1, {T}^{157}, {T}^{156}\, B4, {T}^{156}\, B3, {T}^{156}\, B2, {T}^{156}\, B1, {T}^{156}, {T}^{155}\, B4, {T}^{155}\, B3, {T}^{155}\, B2, {T}^{155}\, B1, {T}^{155}, {T}^{154}\, B4, {T}^{154}\, B3, {T}^{154}\, B2, {T}^{154}\, B1, {T}^{154}, {T}^{153}\, B4, {T}^{153}\, B3, {T}^{153}\, B2, {T}^{153}\, B1, {T}^{153}, {T}^{152}\, B4, {T}^{152}\, B3, {T}^{152}\, B2, {T}^{152}\, B1, {T}^{152}, {T}^{151}\, B4, {T}^{151}\, B3, {T}^{151}\, B2, {T}^{151}\, B1, {T}^{151}, {T}^{150}\, B4, {T}^{150}\, B3, {T}^{150}\, B2, {T}^{150}\, B1, {T}^{150}, {T}^{149}\, B4, {T}^{149}\, B3, {T}^{149}\, B2, {T}^{149}\, B1, {T}^{149}, {T}^{148}\, B4, {T}^{148}\, B3, {T}^{148}\, B2, {T}^{148}\, B1, {T}^{148}, {T}^{147}\, B4, {T}^{147}\, B3, {T}^{147}\, B2, {T}^{147}\, B1, {T}^{147}, {T}^{146}\, B4, {T}^{146}\, B3, {T}^{146}\, B2, {T}^{146}\, B1, {T}^{146}, {T}^{145}\, B4, {T}^{145}\, B3, {T}^{145}\, B2, {T}^{145}\, B1, {T}^{145}, {T}^{144}\, B4, {T}^{144}\, B3, {T}^{144}\, B2, {T}^{144}\, B1, {T}^{144}, {T}^{143}\, B4, {T}^{143}\, B3, {T}^{143}\, B2, {T}^{143}\, B1, {T}^{143}, {T}^{142}\, B4, {T}^{142}\, B3, {T}^{142}\, B2, {T}^{142}\, B1, {T}^{142}, {T}^{141}\, B4, {T}^{141}\, B3, {T}^{141}\, B2, {T}^{141}\, B1, {T}^{141}, {T}^{140}\, B4, {T}^{140}\, B3, {T}^{140}\, B2, {T}^{140}\, B1, {T}^{140}, {T}^{139}\, B4, {T}^{139}\, B3, {T}^{139}\, B2, {T}^{139}\, B1, {T}^{139}, {T}^{138}\, B4, {T}^{138}\, B3, {T}^{138}\, B2, {T}^{138}\, B1, {T}^{138}, {T}^{137}\, B4, {T}^{137}\, B3, {T}^{137}\, B2, {T}^{137}\, B1, {T}^{137}, {T}^{136}\, B4, {T}^{136}\, B3, {T}^{136}\, B2, {T}^{136}\, B1, {T}^{136}, {T}^{135}\, B4, {T}^{135}\, B3, {T}^{135}\, B2, {T}^{135}\, B1, {T}^{135}, {T}^{134}\, B4, {T}^{134}\, B3, {T}^{134}\, B2, {T}^{134}\, B1, {T}^{134}, {T}^{133}\, B4, {T}^{133}\, B3, {T}^{133}\, B2, {T}^{133}\, B1, {T}^{133}, {T}^{132}\, B4, {T}^{132}\, B3, {T}^{132}\, B2, {T}^{132}\, B1, {T}^{132}, {T}^{131}\, B4, {T}^{131}\, B3, {T}^{131}\, B2, {T}^{131}\, B1, {T}^{131}, {T}^{130}\, B4, {T}^{130}\, B3, {T}^{130}\, B2, {T}^{130}\, B1, {T}^{130}, {T}^{129}\, B4, {T}^{129}\, B3, {T}^{129}\, B2, {T}^{129}\, B1, {T}^{129}, {T}^{128}\, B4, {T}^{128}\, B3, {T}^{128}\, B2, {T}^{128}\, B1, {T}^{128}, {T}^{127}\, B4, {T}^{127}\, B3, {T}^{127}\, B2, {T}^{127}\, B1, {T}^{127}, {T}^{126}\, B4, {T}^{126}\, B3, {T}^{126}\, B2, {T}^{126}\, B1, {T}^{126}, {T}^{125}\, B4, {T}^{125}\, B3, {T}^{125}\, B2, {T}^{125}\, B1, {T}^{125}, {T}^{124}\, B4, {T}^{124}\, B3, {T}^{124}\, B2, {T}^{124}\, B1, {T}^{124}, {T}^{123}\, B4, {T}^{123}\, B3, {T}^{123}\, B2, {T}^{123}\, B1, {T}^{123}, {T}^{122}\, B4, {T}^{122}\, B3, {T}^{122}\, B2, {T}^{122}\, B1, {T}^{122}, {T}^{121}\, B4, {T}^{121}\, B3, {T}^{121}\, B2, {T}^{121}\, B1, {T}^{121}, {T}^{120}\, B4, {T}^{120}\, B3, {T}^{120}\, B2, {T}^{120}\, B1, {T}^{120}, {T}^{119}\, B4, {T}^{119}\, B3, {T}^{119}\, B2, {T}^{119}\, B1, {T}^{119}, {T}^{118}\, B4, {T}^{118}\, B3, {T}^{118}\, B2, {T}^{118}\, B1, {T}^{118}, {T}^{117}\, B4, {T}^{117}\, B3, {T}^{117}\, B2, {T}^{117}\, B1, {T}^{117}, {T}^{116}\, B4, {T}^{116}\, B3, {T}^{116}\, B2, {T}^{116}\, B1, {T}^{116}, {T}^{115}\, B4, {T}^{115}\, B3, {T}^{115}\, B2, {T}^{115}\, B1, {T}^{115}, {T}^{114}\, B4, {T}^{114}\, B3, {T}^{114}\, B2, {T}^{114}\, B1, {T}^{114}, {T}^{113}\, B4, {T}^{113}\, B3, {T}^{113}\, B2, {T}^{113}\, B1, {T}^{113}, {T}^{112}\, B4, {T}^{112}\, B3, {T}^{112}\, B2, {T}^{112}\, B1, {T}^{112}, {T}^{111}\, B4, {T}^{111}\, B3, {T}^{111}\, B2, {T}^{111}\, B1, {T}^{111}, {T}^{110}\, B4, {T}^{110}\, B3, {T}^{110}\, B2, {T}^{110}\, B1, {T}^{110}, {T}^{109}\, B4, {T}^{109}\, B3, {T}^{109}\, B2, {T}^{109}\, B1, {T}^{109}, {T}^{108}\, B4, {T}^{108}\, B3, {T}^{108}\, B2, {T}^{108}\, B1, {T}^{108}, {T}^{107}\, B4, {T}^{107}\, B3, {T}^{107}\, B2, {T}^{107}\, B1, {T}^{107}, {T}^{106}\, B4, {T}^{106}\, B3, {T}^{106}\, B2, {T}^{106}\, B1, {T}^{106}, {T}^{105}\, B4, {T}^{105}\, B3, {T}^{105}\, B2, {T}^{105}\, B1, {T}^{105}, {T}^{104}\, B4, {T}^{104}\, B3, {T}^{104}\, B2, {T}^{104}\, B1, {T}^{104}, {T}^{103}\, B4, {T}^{103}\, B3, {T}^{103}\, B2, {T}^{103}\, B1, {T}^{103}, {T}^{102}\, B4, {T}^{102}\, B3, {T}^{102}\, B2, {T}^{102}\, B1, {T}^{102}, {T}^{101}\, B4, {T}^{101}\, B3, {T}^{101}\, B2, {T}^{101}\, B1, {T}^{101}, {T}^{100}\, B4, {T}^{100}\, B3, {T}^{100}\, B2, {T}^{100}\, B1, {T}^{100}, {T}^{99}\, B4, {T}^{99}\, B3, {T}^{99}\, B2, {T}^{99}\, B1, {T}^{99}, {T}^{98}\, B4, {T}^{98}\, B3, {T}^{98}\, B2, {T}^{98}\, B1, {T}^{98}, {T}^{97}\, B4, {T}^{97}\, B3, {T}^{97}\, B2, {T}^{97}\, B1, {T}^{97}, {T}^{96}\, B4, {T}^{96}\, B3, {T}^{96}\, B2, {T}^{96}\, B1, {T}^{96}, {T}^{95}\, B4, {T}^{95}\, B3, {T}^{95}\, B2, {T}^{95}\, B1, {T}^{95}, {T}^{94}\, B4, {T}^{94}\, B3, {T}^{94}\, B2, {T}^{94}\, B1, {T}^{94}, {T}^{93}\, B4, {T}^{93}\, B3, {T}^{93}\, B2, {T}^{93}\, B1, {T}^{93}, {T}^{92}\, B4, {T}^{92}\, B3, {T}^{92}\, B2, {T}^{92}\, B1, {T}^{92}, {T}^{91}\, B4, {T}^{91}\, B3, {T}^{91}\, B2, {T}^{91}\, B1, {T}^{91}, {T}^{90}\, B4, {T}^{90}\, B3, {T}^{90}\, B2, {T}^{90}\, B1, {T}^{90}, {T}^{89}\, B4, {T}^{89}\, B3, {T}^{89}\, B2, {T}^{89}\, B1, {T}^{89}, {T}^{88}\, B4, {T}^{88}\, B3, {T}^{88}\, B2, {T}^{88}\, B1, {T}^{88}, {T}^{87}\, B4, {T}^{87}\, B3, {T}^{87}\, B2, {T}^{87}\, B1, {T}^{87}, {T}^{86}\, B4, {T}^{86}\, B3, {T}^{86}\, B2, {T}^{86}\, B1, {T}^{86}, {T}^{85}\, B4, {T}^{85}\, B3, {T}^{85}\, B2, {T}^{85}\, B1, {T}^{85}, {T}^{84}\, B4, {T}^{84}\, B3, {T}^{84}\, B2, {T}^{84}\, B1, {T}^{84}, {T}^{83}\, B4, {T}^{83}\, B3, {T}^{83}\, B2, {T}^{83}\, B1, {T}^{83}, {T}^{82}\, B4, {T}^{82}\, B3, {T}^{82}\, B2, {T}^{82}\, B1, {T}^{82}, {T}^{81}\, B4, {T}^{81}\, B3, {T}^{81}\, B2, {T}^{81}\, B1, {T}^{81}, {T}^{80}\, B4, {T}^{80}\, B3, {T}^{80}\, B2, {T}^{80}\, B1, {T}^{80}, {T}^{79}\, B4, {T}^{79}\, B3, {T}^{79}\, B2, {T}^{79}\, B1, {T}^{79}, {T}^{78}\, B4, {T}^{78}\, B3, {T}^{78}\, B2, {T}^{78}\, B1, {T}^{78}, {T}^{77}\, B4, {T}^{77}\, B3, {T}^{77}\, B2, {T}^{77}\, B1, {T}^{77}, {T}^{76}\, B4, {T}^{76}\, B3, {T}^{76}\, B2, {T}^{76}\, B1, {T}^{76}, {T}^{75}\, B4, {T}^{75}\, B3, {T}^{75}\, B2, {T}^{75}\, B1, {T}^{75}, {T}^{74}\, B4, {T}^{74}\, B3, {T}^{74}\, B2, {T}^{74}\, B1, {T}^{74}, {T}^{73}\, B4, {T}^{73}\, B3, {T}^{73}\, B2, {T}^{73}\, B1, {T}^{73}, {T}^{72}\, B4, {T}^{72}\, B3, {T}^{72}\, B2, {T}^{72}\, B1, {T}^{72}, {T}^{71}\, B4, {T}^{71}\, B3, {T}^{71}\, B2, {T}^{71}\, B1, {T}^{71}, {T}^{70}\, B4, {T}^{70}\, B3, {T}^{70}\, B2, {T}^{70}\, B1, {T}^{70}, {T}^{69}\, B4, {T}^{69}\, B3, {T}^{69}\, B2, {T}^{69}\, B1, {T}^{69}, {T}^{68}\, B4, {T}^{68}\, B3, {T}^{68}\, B2, {T}^{68}\, B1, {T}^{68}, {T}^{67}\, B4, {T}^{67}\, B3, {T}^{67}\, B2, {T}^{67}\, B1, {T}^{67}, {T}^{66}\, B4, {T}^{66}\, B3, {T}^{66}\, B2, {T}^{66}\, B1, {T}^{66}, {T}^{65}\, B4, {T}^{65}\, B3, {T}^{65}\, B2, {T}^{65}\, B1, {T}^{65}, {T}^{64}\, B4, {T}^{64}\, B3, {T}^{64}\, B2, {T}^{64}\, B1, {T}^{64}, {T}^{63}\, B4, {T}^{63}\, B3, {T}^{63}\, B2, {T}^{63}\, B1, {T}^{63}, {T}^{62}\, B4, {T}^{62}\, B3, {T}^{62}\, B2, {T}^{62}\, B1, {T}^{62}, {T}^{61}\, B4, {T}^{61}\, B3, {T}^{61}\, B2, {T}^{61}\, B1, {T}^{61}, {T}^{60}\, B4, {T}^{60}\, B3, {T}^{60}\, B2, {T}^{60}\, B1, {T}^{60}, {T}^{59}\, B4, {T}^{59}\, B3, {T}^{59}\, B2, {T}^{59}\, B1, {T}^{59}, {T}^{58}\, B4, {T}^{58}\, B3, {T}^{58}\, B2, {T}^{58}\, B1, {T}^{58}, {T}^{57}\, B4, {T}^{57}\, B3, {T}^{57}\, B2, {T}^{57}\, B1, {T}^{57}, {T}^{56}\, B4, {T}^{56}\, B3, {T}^{56}\, B2, {T}^{56}\, B1, {T}^{56}, {T}^{55}\, B4, {T}^{55}\, B3, {T}^{55}\, B2, {T}^{55}\, B1, {T}^{55}, {T}^{54}\, B4, {T}^{54}\, B3, {T}^{54}\, B2, {T}^{54}\, B1, {T}^{54}, {T}^{53}\, B4, {T}^{53}\, B3, {T}^{53}\, B2, {T}^{53}\, B1, {T}^{53}, {T}^{52}\, B4, {T}^{52}\, B3, {T}^{52}\, B2, {T}^{52}\, B1, {T}^{52}, {T}^{51}\, B4, {T}^{51}\, B3, {T}^{51}\, B2, {T}^{51}\, B1, {T}^{51}, {T}^{50}\, B4, {T}^{50}\, B3, {T}^{50}\, B2, {T}^{50}\, B1, {T}^{50}, {T}^{49}\, B4, {T}^{49}\, B3, {T}^{49}\, B2, {T}^{49}\, B1, {T}^{49}, {T}^{48}\, B4, {T}^{48}\, B3, {T}^{48}\, B2, {T}^{48}\, B1, {T}^{48}, {T}^{47}\, B4, {T}^{47}\, B3, {T}^{47}\, B2, {T}^{47}\, B1, {T}^{47}, {T}^{46}\, B4, {T}^{46}\, B3, {T}^{46}\, B2, {T}^{46}\, B1, {T}^{46}, {T}^{45}\, B4, {T}^{45}\, B3, {T}^{45}\, B2, {T}^{45}\, B1, {T}^{45}, {T}^{44}\, B4, {T}^{44}\, B3, {T}^{44}\, B2, {T}^{44}\, B1, {T}^{44}, {T}^{43}\, B4, {T}^{43}\, B3, {T}^{43}\, B2, {T}^{43}\, B1, {T}^{43}, {T}^{42}\, B4, {T}^{42}\, B3, {T}^{42}\, B2, {T}^{42}\, B1, {T}^{42}, {T}^{41}\, B4, {T}^{41}\, B3, {T}^{41}\, B2, {T}^{41}\, B1, {T}^{41}, {T}^{40}\, B4, {T}^{40}\, B3, {T}^{40}\, B2, {T}^{40}\, B1, {T}^{40}, {T}^{39}\, B4, {T}^{39}\, B3, {T}^{39}\, B2, {T}^{39}\, B1, {T}^{39}, {T}^{38}\, B4, {T}^{38}\, B3, {T}^{38}\, B2, {T}^{38}\, B1, {T}^{38}, {T}^{37}\, B4, {T}^{37}\, B3, {T}^{37}\, B2, {T}^{37}\, B1, {T}^{37}, {T}^{36}\, B4, {T}^{36}\, B3, {T}^{36}\, B2, {T}^{36}\, B1, {T}^{36}, {T}^{35}\, B4, {T}^{35}\, B3, {T}^{35}\, B2, {T}^{35}\, B1, {T}^{35}, {T}^{34}\, B4, {T}^{34}\, B3, {T}^{34}\, B2, {T}^{34}\, B1, {T}^{34}, {T}^{33}\, B4, {T}^{33}\, B3, {T}^{33}\, B2, {T}^{33}\, B1, {T}^{33}, {T}^{32}\, B4, {T}^{32}\, B3, {T}^{32}\, B2, {T}^{32}\, B1, {T}^{32}, {T}^{31}\, B4, {T}^{31}\, B3, {T}^{31}\, B2, {T}^{31}\, B1, {T}^{31}, {T}^{30}\, B4, {T}^{30}\, B3, {T}^{30}\, B2, {T}^{30}\, B1, {T}^{30}, {T}^{29}\, B4, {T}^{29}\, B3, {T}^{29}\, B2, {T}^{29}\, B1, {T}^{29}, {T}^{28}\, B4, {T}^{28}\, B3, {T}^{28}\, B2, {T}^{28}\, B1, {T}^{28}, {T}^{27}\, B4, {T}^{27}\, B3, {T}^{27}\, B2, {T}^{27}\, B1, {T}^{27}, {T}^{26}\, B4, {T}^{26}\, B3, {T}^{26}\, B2, {T}^{26}\, B1, {T}^{26}, {T}^{25}\, B4, {T}^{25}\, B3, {T}^{25}\, B2, {T}^{25}\, B1, {T}^{25}, {T}^{24}\, B4, {T}^{24}\, B3, {T}^{24}\, B2, {T}^{24}\, B1, {T}^{24}, {T}^{23}\, B4, {T}^{23}\, B3, {T}^{23}\, B2, {T}^{23}\, B1, {T}^{23}, {T}^{22}\, B4, {T}^{22}\, B3, {T}^{22}\, B2, {T}^{22}\, B1, {T}^{22}, {T}^{21}\, B4, {T}^{21}\, B3, {T}^{21}\, B2, {T}^{21}\, B1, {T}^{21}, {T}^{20}\, B4, {T}^{20}\, B3, {T}^{20}\, B2, {T}^{20}\, B1, {T}^{20}, {T}^{19}\, B4, {T}^{19}\, B3, {T}^{19}\, B2, {T}^{19}\, B1, {T}^{19}, {T}^{18}\, B4, {T}^{18}\, B3, {T}^{18}\, B2, {T}^{18}\, B1, {T}^{18}, {T}^{17}\, B4, {T}^{17}\, B3, {T}^{17}\, B2, {T}^{17}\, B1, {T}^{17}, {T}^{16}\, B4, {T}^{16}\, B3, {T}^{16}\, B2, {T}^{16}\, B1, {T}^{16}, {T}^{15}\, B4, {T}^{15}\, B3, {T}^{15}\, B2, {T}^{15}\, B1, {T}^{15}, {T}^{14}\, B4, {T}^{14}\, B3, {T}^{14}\, B2, {T}^{14}\, B1, {T}^{14}, {T}^{13}\, B4, {T}^{13}\, B3, {T}^{13}\, B2, {T}^{13}\, B1, {T}^{13}, {T}^{12}\, B4, {T}^{12}\, B3, {T}^{12}\, B2, {T}^{12}\, B1, {T}^{12}, {T}^{11}\, B4, {T}^{11}\, B3, {T}^{11}\, B2, {T}^{11}\, B1, {T}^{11}, {T}^{10}\, B4, {T}^{10}\, B3, {T}^{10}\, B2, {T}^{10}\, B1, {T}^{10}, {T}^{9}\, B4, {T}^{9}\, B3, {T}^{9}\, B2, {T}^{9}\, B1, {T}^{9}, {T}^{8}\, B4, {T}^{8}\, B3, {T}^{8}\, B2, {T}^{8}\, B1, {T}^{8}, {T}^{7}\, B4, {T}^{7}\, B3, {T}^{7}\, B2, {T}^{7}\, B1, {T}^{7}, {T}^{6}\, B4, {T}^{6}\, B3, {T}^{6}\, B2, {T}^{6}\, B1, {T}^{6}, {T}^{5}\, B4, {T}^{5}\, B3, {T}^{5}\, B2, {T}^{5}\, B1, {T}^{5}, {T}^{4}\, B4, {T}^{4}\, B3, {T}^{4}\, B2, {T}^{4}\, B1, {T}^{4}, {T}^{3}\, B4, {T}^{3}\, B3, {T}^{3}\, B2, {T}^{3}\, B1, {T}^{3}, {T}^{2}\, B4, {T}^{2}\, B3, {T}^{2}\, B2, {T}^{2}\, B1, {T}^{2}, T\, B4, T\, B3, T\, B2, T\, B1, T, B4, B3, B2, B1, 1\right]\right] \]
List(List(IndexedExponents(Symbol)))
Time: 0.01 (OT) = 0.02 sec
Out[186]:
\[ \texttt{true} \]
Boolean
Time: 0.06 (IN) + 1.33 (EV) + 0.24 (GC) = 1.64 sec

Write out the data to a file.

In [187]:
makedir(basedir)$QETAAUX
)set stream calc 1700
fh := open(filename(basedir,"bv", "input"), "output")$TextFile
for x in xvabbas for i in 1.. repeat _
  writeLine!(fh, "bv" string(i) ":=" f1d(x1A1(C, x)) ";")
uvbsyms := concat([U,V], bsyms)
for x in upols for var in ["pu1", "pu2", "pu3", "pv1"] repeat _
  writeLine!(fh, var ":=" f1d(x::MultivariatePolynomial(uvbsyms,UnivariatePolynomial('T,ZZ))) ";")
close! fh;
Out[187]:
Void
Time: 0.03 (EV) = 0.04 sec
Out[187]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/bv.input"} \]
TextFile
Time: 0 sec
Out[187]:
Void
Time: 64.99 (EV) + 1.75 (GC) = 66.74 sec
Out[187]:
\[ \left[U, V, B1, B2, B3, B4\right] \]
List(Symbol)
Time: 0 sec
Out[187]:
Void
Time: 0.19 (EV) = 0.20 sec
Out[187]:
TextFile
Time: 0 sec

And now the factors of the discriminant polynomial.

In [188]:
fh := open(filename(basedir,"dz", "input"), "output")$TextFile
for x in discfactorssorted for i in 1.. repeat_
  writeLine!(fh, "exponent" string(i) ":=" f1d(x.exponent) ";")
for x in discfactorssorted for i in 1.. repeat _
  writeLine!(fh, "dz" string(i) ":=" f1d(x.factor) ";")
close! fh;
Out[188]:
\[ \texttt{"/home/hemmecke/backup/git/qeta/data/integralbasis/dz.input"} \]
TextFile
Time: 0 sec
Out[188]:
Void
Time: 0 sec
Out[188]:
Void
Time: 0 sec
Out[188]:
TextFile
Time: 0 sec
In [189]:
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------