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,
    noprint

NOTE:
    Set noprint=true to only RETURN 1 if identity is proved.

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


>  noprint:=true;
                                noprint := true

>  provemodfuncidBATCH(NCHOIID1,40);
                                       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