$$\newcommand{\qPochhammer}[3][\infty]{\left( #2;#3 \right)_{#1}}$$ Via jupytext this file can be shown as a jupyter notebook.
This notebook demonstrates the computation of relations among disections (of partition functions) or rather, relations among functions that can be represented as a linear combination of (generalized) eta-quotients.
)cd ..
)read input/jfricas-test-support.input )quiet
The current FriCAS default directory is /home/hemmecke/backup/git/qeta All user variables and function definitions have been cleared. All )browse facility databases have been cleared. Internally cached functions and constructors have been cleared. )clear completely is finished. The current FriCAS default directory is /home/hemmecke/backup/git/qeta/tmp
)set output algebra on
)set output formatted off
Init¶
-------------------------------------------------------------------
--setup
-------------------------------------------------------------------
C ==> QQ
RKI ==> QEtaRamanujanKolbergIdentity C
)set mess type off
)read convenience.input )quiet
FINDID1(m,t) ==> (_
ids(t+1) := findIdM1(nn, idxs, rspec, m, t, id); _
pretty(ids(t+1), formatAsExpression() + formatWithQFactor()_
+ formatAsNonModular() + formatExpanded()))
oo ==> infinity()$Cusp
QEtaIdeal ==> QEtaIdealHemmecke
QI1 ==> QEtaIdeal(QMOD1)
idpol(id: RKI, f:Symbol): Pol C == (_
sspec := coSpecification id;_
mon: Pol(C) := f * monomial(sspec, "E", "Y");_
ipol: Pol(C) := inv coefficient id * identityPolynomial id - 'F::Pol(C);_
mon+ipol)
)set stream calc 4
Function declaration idpol : (QEtaRamanujanKolbergIdentity(Fraction(Integer)) , Symbol) -> Polynomial(Fraction(Integer)) has been added to workspace.
)set mess type on
)set mess time on
-------------------------------------------------------------------
--endsetup
-------------------------------------------------------------------
Algebraic relations among disections¶
-------------------------------------------------------------------
--test:time160-algebraic-relations-5
-------------------------------------------------------------------
5-disection in $\Gamma_1(5)$¶
By an extension of Radu's method for generalized eta-quotients.
rspec:= eqSPEC [[1,-1]]; m:=5; t:=4;
nn := minLevelM1(rspec, m, t)
aidxs := generalizedEtaFunctionIndices nn
idxs := [aidxs.i for i in 1..3]
id := findIdM1(nn, rspec, m, 0, idxs);
ids := [id for i in 0..4];
-- == z:=[zinhom=[[1, 0]], zhom=[], zfree=[]] -- numOfGaps:=[0, 0]
FINDID1(5,0)
-- == z:=[zinhom=[[1, 0]], zhom=[], zfree=[]]
FINDID1(5,1)
-- == z:=[zinhom=[[1, 0]], zhom=[], zfree=[]]
FINDID1(5,2)
-- == z:=[zinhom=[[1, 0]], zhom=[], zfree=[]]
FINDID1(5,3)
-- == z:=[zinhom=[[1, 0]], zhom=[], zfree=[]]
FINDID1(5,4)
Generators for relations ideal¶
In the following relations we can replace $M1$ by its corresponding eta-quotient.
[equationX(ids.i,'p) for i in 1..5]
We have
mspecs := monoidSpecifications ids.1
[etaQuotient(x, varEta) for x in mspecs]
Then we introduce $Y_k$ to replace $1/E_k$ and replace the (fractional) $q$-factor together with the generating series for $p(5n+k)$ by the variable $f_k$.
fs := [concat("f",string(i-1))::Symbol_
= q^alphaOrbitInfinity(ids.i)*orbitProductX(ids.i,'p)_
for i in 1..5]
With that substitution and bringing everything to one side. we obtain the following set of polynomials that represent the relations among the $f_k$ and eta-functions.
fsyms := [lhs x for x in fs];
mps := [idpol(id,f) for id in ids for f in fsyms]
Compiling function idpol with type (QEtaRamanujanKolbergIdentity(Fraction( Integer)), Symbol) -> Polynomial(Fraction(Integer))
mspecs := monoidSpecifications first ids;
eqrels := etaLaurentIdealGenerators(idxs, mspecs, mps)$QI1
assertEquals(eqrels, [_
E1*Y1-1, E5*Y5-1, E5_1*Y5_1-1,_
E1^7*Y5^6*Y5_1^2*f0-E1^5*Y5^5*Y5_1^10+3,_
E1^8*Y5^7*Y5_1^4*f1-E1^5*Y5^5*Y5_1^10-2,_
E1^9*Y5^8*Y5_1^6*f2-2*E1^5*Y5^5*Y5_1^10+1,_
E1^10*Y5^9*Y5_1^8*f3-3*E1^5*Y5^5*Y5_1^10-1,_
E1^6*Y5^5*f4-5])
Eliminate generalized eta-quotients¶
The following computation eliminates the variables $E_k$ and $Y_k$ so that only the relations among the $f_k$ survive.
)set message time on
algrels := algebraicRelations(idxs, eqrels, char "f")$QI1;
)set message time off
assertEquals(algrels, [_
10*f0^2*f3^2-9*f0^2*f2*f4-9*f1*f3^2*f4+4*f0*f3*f4^2+4*f4^4,_
5*f0*f1*f3-3*f0^2*f4-6*f2*f3*f4+4*f1*f4^2,_
5*f0*f2*f3-6*f0*f1*f4-3*f3^2*f4+4*f2*f4^2,_
2*f1^2-f0*f2-f3*f4, 3*f1*f2-2*f0*f3-f4^2, 2*f2^2-f1*f3-f0*f4])
-- numOfGaps:=[0, -1] -- numOfGaps:=[0, -1] -- TIME:=0.5
Selected results¶
Among the relations is one that already appears in the paper of Kolberg \cite{Kolberg_SomeIdentitiesInvolvingThePartitionFunction_1957}, namely equation (4.4).
algrels.5
Shown as a relation among the generating series, it is as follows.
simplify(eval(algrels.5, fs)) * q^(-7/12)
The above is mentioned in \cite{Kolberg_SomeIdentitiesInvolvingThePartitionFunction_1957} as formula (4.4) and can also be found by doing similar computations with just pure eta-quotients, since the pairs $(p(5n), p(5n+3))$ and $(p(5n+1), p(5n+2))$ appear together.
The following identities involve other pairs. See congruence at bottom of page 86 in \cite{Kolberg_SomeIdentitiesInvolvingThePartitionFunction_1957}.
simplify(eval(algrels.4, fs)) * q^(-23/60)
simplify(eval(algrels.6, fs)) * q^(-47/60)
simplify(eval(algrels.3, fs)) * q^(-39/40)
simplify(eval(algrels.2, fs)) * q^(-31/40)
simplify(eval(algrels.1, fs)) * q^(-7/6)
equationX ids.1
Check relations¶
ps := partitionSeries(1)$QFunctions(QQ, L1 QQ)
g := [choose(5,i,ps) for i in 0..4]
algrels.5
- monomial(1,1)$L1(QQ)*g.5^2 + 3*g.2*g.3 - 2*g.1*g.4
algrels.6
- g.1*g.5 - g.2*g.4 + 2*g.3^2
Elimination with Sage¶
In SAGE:
R.<Y1,Y5,Y5_1,E1,E5,E5_1,f0,f1,f2,f3,f4> = PolynomialRing(QQ)
I=ideal([
E1*Y1-1, E5*Y5-1, E5_1*Y5_1-1,
-E1^7*Y5^6*Y5_1^2*f0+E1^5*Y5^5*Y5_1^10-3,
-E1^8*Y5^7*Y5_1^4*f1+E1^5*Y5^5*Y5_1^10+2,
-1/2*E1^9*Y5^8*Y5_1^6*f2+E1^5*Y5^5*Y5_1^10-1/2,
E1^10*Y5^9*Y5_1^8*f3-3*E1^5*Y5^5*Y5_1^10-1,
E1^6*Y5^5*f4-5])
J = I.elimination_ideal([Y1,Y5,Y5_1,E1,E5,E5_1])
J.basis
It gives:
[2*f2^2 - f1*f3 - f0*f4,
3*f1*f2 - 2*f0*f3 - f4^2,
2*f1^2 - f0*f2 - f3*f4,
5*f0*f2*f3 - 6*f0*f1*f4 - 3*f3^2*f4 + 4*f2*f4^2,
5*f0*f1*f3 - 3*f0^2*f4 - 6*f2*f3*f4 + 4*f1*f4^2,
10*f0^2*f3^2 - 9*f0^2*f2*f4 - 9*f1*f3^2*f4 + 4*f0*f3*f4^2 + 4*f4^4]
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------
Zhu Cao: On Somos' disection identities¶
-------------------------------------------------------------------
--test:time2600-algebraic-relations-3
-------------------------------------------------------------------
(Journal of Mathematical Analysis and Applications, 2009) https://doi.org/10.1016/j.jmaa.2009.11.038
Theorem 2.1: $a(3n+2)\equiv 0 \pmod{3}$ for $a(n)$ defined by \begin{gather*} \sum_{n=0}^\infty a(n) = \qPochhammer{q}{q}^{-1} \qPochhammer{q^2}{q^2}^{-1} \end{gather*}
rspec:= eqSPEC [[1,-1],[2,-1]]; m:=3; t:=2;
nn := minLevelM0(rspec, m, 2)
We must work with $\Gamma_0(6)$.
id := findIdM0(nn, rspec, m, t, etaFunctionIndices nn);
pretty(id, formatAsExpression() + formatWithQFactor() + formatAsNonModular()_
+ formatExpanded())
-- == z:=[zinhom=[[1, 1, 1]], zhom=[], zfree=[]] -- numOfGaps:=[0, 0]
aidxs := generalizedEtaFunctionIndices 6
idxs := aidxs(1..4)
id := findIdM1(nn, rspec, m, 2, idxs);
ids := [id for i in 0..2];
-- == z:=[zinhom=[[0, 1, 1]], zhom=[], zfree=[]] -- numOfGaps:=[0, 0]
FINDID1(3,0)
FINDID1(3,1)
FINDID1(3,2)
-- == z:=[zinhom=[[2, 2, -1]], zhom=[], zfree=[]]
-- == z:=[zinhom=[[0, 1, 1]], zhom=[], zfree=[]]
-- == z:=[zinhom=[[0, 1, 1]], zhom=[], zfree=[]]
ee := [inv(coefficient id)*qequationX(id,a[i]) for id in ids for i in 0..2]
ee.1 - ee.2 + 2*ee.3
fsyms := [f0,f1,f2];
mps := [idpol(id,f) for id in ids for f in fsyms]
mspecs := monoidSpecifications first ids;
eqrels := etaLaurentIdealGenerators(idxs, mspecs, mps)$QI1
algrels := algebraicRelations(idxs, eqrels, char "f")$QI1;
assertEquals(algrels, [2*f2^4-3*f0*f1*f2^2+(-f1^3-f0^3)*f2+3*f0^2*f1^2])
-- numOfGaps:=[0, -1] -- numOfGaps:=[0, -1] -- numOfGaps:=[0, -1] -- TIME:=7.92
In SAGE:
R.<E1,Y1,E2,Y2,E3,Y3,E6,Y6,f0,f1,f2> = PolynomialRing(QQ)
I=ideal([E1*Y1-1, E2*Y2-1, E3*Y3-1, E6*Y6-1,
-E1^3*E2^5*Y6^6*f0 + E2^8*E3^4*Y1^4*Y6^8 - 3,
-E1^2*E2^6*E3^3*Y6^9*f1 + E2^8*E3^4*Y1^4*Y6^8 + 3,
E1^4*E2^4*Y3^3*Y6^3*f2 - 3)
J = I.elimination_ideal([E1,Y1,E2,Y2,E3,Y3,E6,Y6])
J.basis
-------------------------------------------------------------------
--endtest
-------------------------------------------------------------------