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 :