FUNCTION : provemodfuncidBATCH - prove theta-function identity
CALLING SEQUENCE : provemodfuncidBATCH()
provemodfuncidBATCH(jacid,N)
provemodfuncidBATCH(symid,jacid,N)
PARAMETERS : jacid - sum of modular functions on Gamma[1](N)
Each term in the sum is a JAC-quotient to base N.
symid - symbolic form of the identity.
(This is printed when global var printlocalsymid is
true)
N - positive integer
GLOBAL VARIABLES :
qcheck, modfunccheck, totcheck, _ORDS, jptmp, jpqd, eptmp, gltmp,
EPRODL, GETAL, COFS, conpres, CONTERMS, mintottmp, MFLB, xprint,
overrideproofq, _CUSPS, qthreshold, proveit, printlocalsymid
SYNOPSIS :
(I) First we compute a complete set of inequivalent
cusps and corresponids widths for Gamma1(N).
(II) We cycle through the terms of jacid.
Let j be term number.
(1) Test if term is a constant.
If constant then conpres=1, j added to CONTERMS
list, EPROD[j]=1, GETAL[j]=[], and
_ORDS[j]=[0,0..].
(2) Assuming term is not a constant.
Let jpqd = power of q in jacterm.
Use jac2eprod to convert jacterm to GETA-prod.
Use GETAP2getalist to convert eprod to getalist.
Use getaprodcuspORDS to calculate ORDS of jacterm.
Result is stored in the array _ORDS as _ORDS[j].
(3) Check that the power of q matches ORD at oo.
If not, j is added to qcheck list.
(4) Use Gamma1ModFunc to check whether GETA-prod is a
modular function on Gamma[1](N).
If not, j is added to modfunccheck list.
(III) We now should have a complete array _ORDS.
(5) Final error check made. Each of the arrays qcheck,
modfunccheck, and totcheck should be empty. If not
an error message is returned which terminates the
proc.
(6) A WARNING is printed if any terms were constants.
(7) We use mintotORDS to min power of q to check
identity.
If this min power is < qthreshold (global var) (default 1000)
then identity is checked.
EXAMPLES :
> with(thetaids):
> with(qseries):
>
> provemodfuncidBATCH();
-------------------------------------------------------------
provemodfuncidBATCH(symid,jacid,N)
provemodfuncidBATCH(jacid,N)
This is a BATCH version od provemodfuncid,
It uses the global var qthreshold .
symid = symbolic form of the identity.
jacid = sum of modular functions on Gamma[1](N)
Each term in the sum is a JAC-quotient to base N.
CUSPS = Set of inequivalent cusps for Gamma[1](N).
WIDS = List of corresponding widths.
global vars (can be used for error-checking):
qcheck, modfunccheck, totcheck, _ORDS, jptmp, jpqd, eptmp,
gltmp, EPRODL, GETAL, COFS, conpres, CONTERMS, mintottmp,
printlocalsymid
** Do you want a DETAILED DESCRIPTION of this proc? (yes/no)
-------------------------------------------------------------
> CHOIID1:=
> _ETAn(3)*_ETAn(6)*_ETAn(10)^2*_ETAn(12)*_ETAn(20)^3*_ETAn(120)^3*_ETAn(360)*
> _ETAnm(3,1)*_ETAnm(6,2)*_ETAnm(10,3)*_ETAnm(12,4)*_ETAnm(20,8)^3
> -_ETAn(1)*_ETAn(2)*_ETAn(5)^2*_ETAn(8)*_ETAn(20)^2*_ETAn(40)*_ETAn(360)^4
> *_ETAnm(10,4)*_ETAnm(20,6)*_ETAnm(20,8)*_ETAnm(40,16)*_ETAnm(360,120)^3
> +_ETAn(1)*_ETAn(2)*_ETAn(5)^2*_ETAn(8)*_ETAn(20)^2*_ETAn(40)*_ETAn(360)^4
> *_ETAnm(5,2)^2*_ETAnm(20,6)*_ETAnm(20,8)*_ETAnm(40,4)*_ETAnm(360,120)^3;
/749\
|---|
\24 / 3
CHOIID1 := q JAC(0, 10, infinity) JAC(0, 120, infinity)
JAC(0, 360, infinity) JAC(1, 3, infinity) JAC(2, 6, infinity)
749
---
3 24
JAC(3, 10, infinity) JAC(4, 12, infinity) JAC(8, 20, infinity) - q
2
JAC(0, 1, infinity) JAC(0, 2, infinity) JAC(0, 5, infinity)
JAC(0, 8, infinity) JAC(0, 360, infinity) JAC(4, 10, infinity)
JAC(6, 20, infinity) JAC(8, 20, infinity) JAC(16, 40, infinity)
/821\
|---|
3 \24 /
JAC(120, 360, infinity) /JAC(0, 10, infinity) + q JAC(0, 1, infinity)
JAC(0, 2, infinity) JAC(0, 8, infinity) JAC(0, 360, infinity)
2
JAC(2, 5, infinity) JAC(6, 20, infinity) JAC(8, 20, infinity)
3
JAC(4, 40, infinity) JAC(120, 360, infinity)
> SYMCHOIID1:=
> _etan(3)*_etan(6)*_etan(10)^2*_etan(12)*_etan(20)^3*_etan(120)^3*_etan(360)*
> _etanm(3,1)*_etanm(6,2)*_etanm(10,3)*_etanm(12,4)*_etanm(20,8)^3
> -_etan(1)*_etan(2)*_etan(5)^2*_etan(8)*_etan(20)^2*_etan(40)*_etan(360)^4
> *_etanm(10,4)*_etanm(20,6)*_etanm(20,8)*_etanm(40,16)*_etanm(360,120)^3
> +_etan(1)*_etan(2)*_etan(5)^2*_etan(8)*_etan(20)^2*_etan(40)*_etan(360)^4
> *_etanm(5,2)^2*_etanm(20,6)*_etanm(20,8)*_etanm(40,4)*_etanm(360,120)^3
> = 0;
2 3
SYMCHOIID1 := eta(3 tau) eta(6 tau) eta(10 tau) eta(12 tau) eta(20 tau)
3
eta(120 tau) eta(360 tau) eta[3, 1](tau) eta[6, 2](tau) eta[10, 3](tau)
3 2
eta[12, 4](tau) eta[20, 8](tau) - eta(tau) eta(2 tau) eta(5 tau)
2 4
eta(8 tau) eta(20 tau) eta(40 tau) eta(360 tau) eta[10, 4](tau)
3
eta[20, 6](tau) eta[20, 8](tau) eta[40, 16](tau) eta[360, 120](tau) +
2 2
eta(tau) eta(2 tau) eta(5 tau) eta(8 tau) eta(20 tau) eta(40 tau)
4 2
eta(360 tau) eta[5, 2](tau) eta[20, 6](tau) eta[20, 8](tau)
3
eta[40, 4](tau) eta[360, 120](tau) = 0
> NCHOIID1:=processjacid(CHOIID1);
2 2
NCHOIID1 := 1 - JAC(5, 40, infinity) JAC(6, 40, infinity)
2 2 2 /
JAC(14, 40, infinity) JAC(15, 40, infinity) JAC(16, 40, infinity) / (
/
2
JAC(3, 40, infinity) JAC(7, 40, infinity) JAC(8, 40, infinity)
3
JAC(12, 40, infinity) JAC(13, 40, infinity) JAC(17, 40, infinity)
3 2
JAC(20, 40, infinity)) + q JAC(2, 40, infinity) JAC(3, 40, infinity)
2
JAC(5, 40, infinity) JAC(6, 40, infinity) JAC(7, 40, infinity)
2
JAC(13, 40, infinity) JAC(14, 40, infinity) JAC(15, 40, infinity)
2 / 12
JAC(17, 40, infinity) JAC(18, 40, infinity) / (JAC(0, 40, infinity)
/
JAC(12, 40, infinity) JAC(20, 40, infinity))
> jcombobase(NCHOIID1);
40
> provemodfuncidBATCH(NCHOIID1,40);
*** There were NO errors. Each term was modular function on
Gamma1(40). Also -mintotord=24. To prove the identity
we need to check up to O(q^(26)).
To be on the safe side we check up to O(q^(104)).
*** The identity below is PROVED!
1
> provemodfuncidBATCH(SYMCHOIID1,NCHOIID1,40);
*** There were NO errors. Each term was modular function on
Gamma1(40). Also -mintotord=24. To prove the identity
we need to check up to O(q^(26)).
To be on the safe side we check up to O(q^(104)).
*** The identity below is PROVED!
1
> printlocalsymid:=true;
printlocalsymid := true
> provemodfuncidBATCH(SYMCHOIID1,NCHOIID1,40);
*** There were NO errors. Each term was modular function on
Gamma1(40). Also -mintotord=24. To prove the identity
we need to check up to O(q^(26)).
To be on the safe side we check up to O(q^(104)).
*** The identity below is PROVED!
2 3 3
eta(3 tau) eta(6 tau) eta(10 tau) eta(12 tau) eta(20 tau) eta(120 tau)
eta(360 tau) eta[3, 1](tau) eta[6, 2](tau) eta[10, 3](tau) eta[12, 4](tau)
3 2 2
eta[20, 8](tau) - eta(tau) eta(2 tau) eta(5 tau) eta(8 tau) eta(20 tau)
4
eta(40 tau) eta(360 tau) eta[10, 4](tau) eta[20, 6](tau) eta[20, 8](tau)
3 2
eta[40, 16](tau) eta[360, 120](tau) + eta(tau) eta(2 tau) eta(5 tau)
2 4 2
eta(8 tau) eta(20 tau) eta(40 tau) eta(360 tau) eta[5, 2](tau)
3
eta[20, 6](tau) eta[20, 8](tau) eta[40, 4](tau) eta[360, 120](tau) = 0
1
DISCUSSION : Choi's identity has three terms (including constant 1).
Each term is confirmed to be a modular function on Gamma[1](40).
mintotord = -24 so need only confirm identity up to q^24.
Identity is confirmed up to q^104.
SEE ALSO : provemodfuncid