FUNCTION : provemodfuncid - prove theta-function identity CALLING SEQUENCE : provemodfuncid(jacid,CUSPS,WIDS,N) PARAMETERS : 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 VARIABLES : qcheck, modfunccheck, totcheck, _ORDS, jptmp, jpqd, eptmp, gltmp, EPRODL, GETAL, COFS, conpres, CONTERMS, mintottmp SYNOPSIS : (I) 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. (II) 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. A query is made whether to check now. If not (suggested), this min power is returned. EXAMPLES : > ETAnm:=(n,m)->JAC(m,n,infinity)*q^(QP2(m/n)*n/2)/JAC(0,n,infinity); > ETAn:=n->q^(n/24)*JAC(0,n,infinity); > 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; > choiid1:=expand(CHOIID1/op(1,CHOIID1)); > Nchoiid1:=mixedjac2jac(choiid1,360); > cusps40:=cuspmake1(40); > cusps40:=cusps40 minus {[1,0]}; > cusps40:=convert(cusps40,list); > wids40:=map(x->cuspwid1(x[1],x[2],40),cusps40); > wids40:=[1,op(wids40)]; > CUSPS40:=map(x->x[1]/x[2],cusps40); > CUSPS40:=[oo,op(CUSPS40)]; > provemodfuncid(Nchoiid1,CUSPS40,wids40,40); %TERM %, 1, %of %, 3, % ******************************************************************% %XX=%, 1 %TERM %, 2, %of %, 3, % ******************************************************************% 2 2 2 %XX=%, - JAC(5, 40, infinity) JAC(6, 40, infinity) JAC(14, 40, infinity) 2 2 / JAC(15, 40, infinity) JAC(16, 40, infinity) / (JAC(3, 40, infinity) / 2 3 JAC(7, 40, infinity) JAC(8, 40, infinity) JAC(12, 40, infinity) JAC(13, 40, infinity) JAC(17, 40, infinity) JAC(20, 40, infinity)) bytes used=87576612, alloc=7862880, time=32.93 bytes used=91577024, alloc=7862880, time=33.80 %Cusp ords: % [[oo, 0], [1/10, -4], [3/10, -2], [7/10, -2], [9/10, -4], [1/20, 0], [3/20, -2], [7/20, -2], [9/20, 0], [0, 0], [1/3, 0], [1/7, 0], [1/9, 0], [1/11, 0], [1/13, 0], [1/17, 0], [1/19, 0], [1/2, 0], [1/6, 0], [1/14, 0], [1/18, 0], [4/15, 3], [1/8, 1], 13 [3/8, 1], [7/8, 1], [5/8, 1], [1/16, 1], [3/16, 1], [7/16, 1], [--, 1], [1/4, -2], 16 [3/4, -2], [1/12, -2], [7/12, -2], [1/5, 3], [3/5, 0], [2/5, 0], [4/5, 3], [1/15, 3], 13 11 13 17 [--, 0], [7/15, 0], [3/40, 1], [7/40, 1], [9/40, 0], [--, 0], [--, 1], [--, 1], 15 40 40 40 19 [--, 0]] 40 %TOTAL ORD = %, 0 %POWER of q CORRECT% %All n are divisors of %, 40 %val0=%, 0 %which is even.% %valinf=%, 0 %which is even.% %It IS a modfunc on Gamma1(%, 40, %)% %TERM %, 3, %of %, 3, % ******************************************************************% 3 2 2 %XX=%, q JAC(2, 40, infinity) JAC(3, 40, infinity) JAC(5, 40, infinity) JAC(6, 40, infinity) JAC(7, 40, infinity) JAC(13, 40, infinity) 2 JAC(14, 40, infinity) JAC(15, 40, infinity) JAC(17, 40, infinity) 2 / 12 JAC(18, 40, infinity) / (JAC(0, 40, infinity) JAC(12, 40, infinity) / JAC(20, 40, infinity)) bytes used=95577488, alloc=7862880, time=34.66 bytes used=99577648, alloc=7862880, time=35.53 %Cusp ords: % [[oo, 3], [1/10, -4], [3/10, -2], [7/10, -2], [9/10, -4], [1/20, 0], [3/20, -2], [7/20, -2], [9/20, 0], [0, 1], [1/3, 1], [1/7, 1], [1/9, 1], [1/11, 1], [1/13, 1], [1/17, 1], [1/19, 1], [1/2, 0], [1/6, 0], [1/14, 0], [1/18, 0], [4/15, 0], [1/8, 0], 13 [3/8, 0], [7/8, 0], [5/8, 0], [1/16, 0], [3/16, 0], [7/16, 0], [--, 0], [1/4, -2], 16 [3/4, -2], [1/12, -2], [7/12, -2], [1/5, 0], [3/5, 1], [2/5, 1], [4/5, 0], [1/15, 0], 13 11 13 17 [--, 1], [7/15, 1], [3/40, 0], [7/40, 0], [9/40, 3], [--, 3], [--, 0], [--, 0], 15 40 40 40 19 [--, 3]] 40 %TOTAL ORD = %, 0 %POWER of q CORRECT% %All n are divisors of %, 40 %val0=%, 2 %which is even.% %valinf=%, 6 %which is even.% %It IS a modfunc on Gamma1(%, 40, %)% %min inf ord=%, 0 %mintotord = %, -24 %TO PROVE the identity we need to show that v[oo](ID) > %, 24 %*** There were NO errors. ***% %*** WARNING: some terms were constants. ***% %See array CONTERMS.% To prove the identity we will need to verify if up to q^(24). Do you want to prove the identity? (yes/no) yes You entered yes. We verify the identity to O(q^(104)). 104 O(q ) 24 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 :