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