------------------------------------------------------------------- Time-stamp: <2000-05-12 18:56:57 apacetti> Description: Explicit Elliptic Units Based on "Explicit Elliptic Units I" by Farshid Hajir and Fernando Rodriguez-Villegas Duke Math. J. 90, (1997) 495-521 Authors: Fernando Rodriguez-Villegas villegas@math.utexas.edu University of Texas at Austin Ariel Martin Pacetti apacetti@math.utexas.edu University of texas at Austin ------------------------------------------------------------------- This file describes the PARI-GP routines in the file expell.gp, which is actually based on the paper "Explicit Elliptic Units I" by Fernando Rodriguez-Villegas and Farshid Hajir, Duke Math. J 90, (1997) 495-521. To use: in a GP session issue the command \r expell.gp (if that's the name you gave the file; you might need more of its path if you GP session is running with another default directory). For using this program, you need to download the files "bforms.gp", "etafunction.gp". The file bforms.gp works with quadratic forms, see the file bforms.txt for more information. The file etafunction.gp contains an algorithm for computing the eta of a form [a,b,c]. Some notations we use on the routines is call with the letters: d: the discriminant. q: a quadratic form. w: nuber of roots of unity in the ring class field of disc. -d. e: There are some elementary auxiliar routines, like sqfp, to compute the square free part of an integer, for example: sqfp(2^3*3^2*5) will output: 10 Or rd, which round the coefficients of a polynomial if they're closed to an integers. For example: rd(1.0000049*x+2) will output; x+2 The main routines are: * wx: which computes w_H= number of roots of unity in H= ring class field of discriminant d (where d<0). For example: wx(-23) which will output: 2 * wz: which computes w_K= number of roots of unity in K itself (i.e. only interesting if K=\Q(i), \Q(\sqrt{-3})). For example: wz(-1) which will output: 4 or: wz(-23) which will output: 2 * nc: computes for each unit u_C, the smaller number n such that u_C^n is in H. For example: nc(-23) which will output: [1, 1, 1] or for example: nc(-39) which will output: [1, 3, 3, 1] * elluts: computes the minimal polynomial of u_C^n_C (i.e. the smallest power such that lies in H). The answer is a vector [n_C,pol_C]. For example: elluts(-23) which will output: [[1, x^3 - x + 1]] or: elluts(-39) which will output: [[3, x^4 + 3*x^3 - 4*x^2 + 2*x - 1], [1, x^4 - x^3 - x^2 - x + 1]] * ellnum: given a degree 0 divisor of binary forms, i.e. [ ...[n_Q,Q]...] computes the minimal polynomial of the smallest power of "prod{eta(Q)^n_Q}" which is in H. For example: ellnum([[1,[5,1,2]],[-1,[11,37,32]]]) which will output: [-39, 6, 3, 1, [55, 81, 30], 4, x^8 - 0.7603305785123966942148681982*x^7 + 0.02035380096987910661839066615*x^6 - 0.1098872689114289601091881432*x^5 + 0.1489526855665942760729368886*x^4 - 0.02270398118004730580768350065*x^3 + 0.0008688699956406284841536893919*x^2 - 0.006706043590514917830719526786*x + 0.001822294453944271149652064099] * sput: given a binary form q, there is a special unit associates to it, corresponding to the degree 0 divisor v=[[2,Q],[-1,Q*Q],[-1,Q_0]], where Q*Q is the product in the class group, and Q_0 is the principal form. The answer is a vector: [d,w,e,r,pol], where r is the power of \eta actually used, and pol is the minimal polynomial of the unit. The first coefficient of the form must be coprime to 6*d. For example: sput([1, 1, 6]) which will output: [-23, 2, 2, 1, x^3 - 3*x^2 + 3*x - 1] or: sput([13, 17, 6]) which will output: [-23, 2, 2, 1, x^3 + x^2 - 1] * info: gives some information about a divisor, needed for another routines as sput and ellnum. The output is a vector of the form: [d,w,e,m,q], where d,w,e are as usual and m,q represent the conductor of the quadratic symbol associated to the divisor described as: m\A, m \in \Z and \A is the primitive ideal corresponding to q. For example: info([[1,[5,1,2]],[-1,[11,37,32]]]) which will output: [-39, 6, 3, 1, [55, 81, 30]] * et: given a binary form q, computes \eta(\A) as defined in EEU-I; q is a binary form corresponding to \A and w is the value of \tilde{w} (given as an optional input to function to avoid recomputing). For example: et([1, 1, 6]) which will output: 0.4931478831501138857614502365 + 0.2042685414563594868572526134*I or: et([13, 17, 6]) which will output: -0.7844318209809436042191571769 + 0.8634485175044292015100576765*I