lprint(`Reading Nota/nota ..`); Nota:=proc() local l; #Describe the most important apecs variables. l:=proc();lprint(args);end: l(`The weierstrass coefficients a1,a2,a3,a4,a6 appear in the (weierstrass)`); l(`equation of an elliptic curve:`);l(``); print(`Y^2+a1*X*Y+a3*Y = X^3+a2*X^2+a4*X+a6`); l(`At the beginning of apecs the ai are unevaluated (mathematically they`); l(`are five independent transcendentals) and the following quantities are`); l(`defined:`); l(` b2:= a1^2+4*a2`); l(` b4:= a1*a3+2*a4`); l(` b6:= a3^2+4*a6`); l(` b8:= a1^2*a6-a1*a3*a4+4*a2*a6+a2*a3^2-a4^2`); l(` c4:= b2^2-24*b4`); l(` c6:= -b2^3+36*b2*b4-216*b6`); l(` DD:=(c4^3-c6^2)/1728 -- the discriminant`); l(` jay:=c4^3/DD -- the j-invariant`); l(` prac:=x^3+(b2/4)*x^2+(b4/2)*x+b6/4 (roots=x-coord.'s of points of \ order2)`); l(` QuarQ:=b2^2/16-2*b4-b2*x/2-3*x^2-(8*y+4*(a1*x+a3))*M-(b2/2+6*x)*M\ ^2+M^4`); l(` --- see below for the purpose of this poly.`); l(`>>>>>HIT SEMICOLON KEY ; FOR NEXT SCREEN`);readstat(); l(`the Fricke polynomials`); l(` fr2:=(F+16)^3-jay*F`); l(` fr3:=(F+27)*(F+3)^3-jay*F`); l(` fr5:=(F^2+10*F+5)^3-jay*F`); l(` fr7:=(F^2+13*F+49)*(F^2+5*F+1)^3-jay*F`); l(` fr13:=(F^2+5*F+13)*(F^4+7*F^3+20*F^2+19*F+1)^3-jay*F`); l(`the division polynomials`); l(` al0:=(4*x^3+b2*x^2+2*b4*x+b6)^2`); l(` al1:=1:al2:=1`); l(` al3:=3*x^4+b2*x^3+3*b4*x^2+3*b6*x+b8`); l(` al4:=2*x^6+b2*x^5+5*b4*x^4+10*b6*x^3+10*b8*x^2+(b2*b8-b4*b6)*x+\ b4*b8-b6^2`); l(`At any time these quantities have their values defined according to`); l(`the currently assigned values of a1,..,a6.`); l(`fr5,..,fr13 are used in isog: rational roots of fri correspond to`); l(`rationally defined isogenies of degree i.`); l(`ali for i>4 are calculated by Div recursively as follows:`); l(` (The variable aln is the max. i such that ali has been calculated.\ )`); l(`>>>>>HIT SEMICOLON KEY ; FOR NEXT SCREEN`);readstat(); l(` al.(4*m+1):=al0*(al.(2*m+2))*(al.(2*m))^3-(al.(2*m-1))*(al.(2*m+\ 1))^3`); l(` al.(4*m+2):=al.(2*m+1)*((al.(2*m+3))*(al.(2*m))^2-\ (al.(2*m-1))*(al.(2*m+2))^2)`); l(` al.(4*m+3):=al.(2*m+3)*(al.(2*m+1))^3-al0*(al.(2*m))*(al.(2*m+\ 2))^3`); l(` al.(4*m+4):=al.(2*m+2))*((al.(2*m+4))*(al.(2*\ m+1))^2-(al.(2*m))*(al.(2*m+3))^2)`); l(`These are related to the usual division polynomials (Silverman, p.105)`); l(`by ali=psi_i for i odd and psi_i/(2y+a1x+a3) for i even except psi_0=\ 0.`); l(`(The value of al0 is a constant used in the above recurrences.)`); l(`If P=[x,y] is a point on the curve then the rational roots M of QuarQ`); l(`are in 1--1 correspondence`); l(`with the solutions Q of [2]Q=P --- used by the procedure Half(P).`); l(` The ai are assigned new values, that is, new curves are introduced`); l(`by one of the apecs commands`); print(`Ein, Ell, Gcub, Quar, Genj, Cubic_fit, Weier_fit, ...`); l(`or one of their variants Ein0, Quarm,...; there are also commands`); l(`Tw, Trans, Velu,... that change the curve to a related curve. See`); l(`>>>>>HIT SEMICOLON KEY ; FOR NEXT SCREEN`);readstat(); l(`menu() for a list of all apecs commands and for more detail about a`); l(`particular command xxx call Menu(xxx). In particular, Menu(Ell)`); l(`explains the field label K_ that is attached to each curve. A curve`); l(`defined over the rational field Q, i.e., all ai are in Q, is usually`); l(`introduced by Ein(a1,..,a6) and then K_ is automatically set = 1,`); l(`and is essentially of no concern. It really is only when one wants to`); l(`consider curves over the rational function field Q(T) or a quadratic`); l(`field Q(sqrt(m_) (see Menu(Qfin)) that one must specify K_ = T or`); l(`m_, respectively and that is usually done with the command Ell.`); l(` Apecs keeps track of the curves introduced in a given session `); l(`by maintaining the stack which is a list of the curves with whatever`); l(`data has been calculated. The command Go allows one to display the`); l(`identities of the curves and to move back and forth in the stack.`); l(`The stack number of the present curve is (the apecs variable) stac,`); l(`while that of the previous curve is psn. Apecs also maintains a`); l(`catalog of all K_=1 curves along with pertinent data.`); l(`New curves with K_=1 along with data that is calculated are added`); l(`to the catalog. To have these additional curves available in future`); l(`>>>>>HIT SEMICOLON KEY ; FOR NEXT SCREEN`);readstat(); l(`apecs sessions, and also any new data for curves that were already`); l(`in the catalog, the enlarged catalog must be stored to disk with a`); l(`zpecs or ypecs command. Of course often one doesn't want the present`); l(`session's curves permanently archived, so the session is ended with`); l(`Maples's quit command. Apecs does not have a mechanism to archive`); l(`curves with K_<>1.`); l(` When the present curve has field label K_=1, the catalog name`); l(`and number are cur and ncur.`); l(` The apecs starter catalog contains all curves/Q of conductor`); l(`<=124 plus a number of others for various reasons.`); l(`The catalog contains the data:`); l(` et1=[A11,B11,..], a list of the names of all curves in the cat.`); l(` et2=[[0,-1,1,0,0],[0,-1,1,-10,-20],..], a list of lists of the`); l(` corresponding minimal weierstrass coefficients;`); l(` etj=[-4096/11,-122023936/161051,..], a list of the values of ja\ y;`); l(` eT[i] where i=1,2,.., a table whose i-th entry contains 22`); l(`data items for the i-th curve as follows.`); l(`Note: if the present curve is in the catalog, equivalently K_=1, then`); l(` et1[ncur]=cur, et2[ncur]=[a1,..,a6] and etj[ncur]=jay.`); l(`>>>>>HIT SEMICOLON KEY ; FOR NEXT SCREEN`);readstat(); l(` n |eT[ncur][n]| description`); l(`----|-----------|----------------------------------------------------`); l(` 1 | [Nc,badp,Nce] | conductor, bad primes, their exponents in Nc`); l(` 2 | Kod | sequence of Kodaira types at the bad primes`); l(` 3 | NN | order of the torsion subgroup (default -1)`); l(` 4 | [PP] | list of nonzero torsion points: a point [x,y] of`); l(` | | order n appears as [x,y,n]`); l(` 5 | qR | quality of RR (Menu(Isog) & Menu(Bas) for details)`); l(` 6 | RR | list of independent points of infinite order`); l(` 7 | rc | provenance of r4 (Menu(Rk) for details)`); l(` 8 | r4 | rank (provided rc>=0; default -1)`); l(` 9 | r1 | upper bound for rank -- no conj.'s (default -1)`); l(` 10 | dill | limit of search on homog. spaces or, as of ver. 5.5,`); l(` | | when NN is even, possibly`); l(` |[RKI,RKJ,dolt]| (see Menu(Rk)) and then dolt[nops(dolt)]=dill`); l(`continued next screen ...`); l(`>>>>>HIT SEMICOLON KEY ; FOR NEXT SCREEN`);readstat(); l(` 11 | nisog | list of catalog nos. of isogenous curves (if qR>=0)`); l(` 12 | disog | list of degrees of isogenies; a negative degree means`); l(` | | that only the kernel, not the individual points of`); l(` | | the kernel are defined over Q.`); l(` 13 | visog | list of descriptions of kernels of isogenies`); l(` 14 | reg | regulator (possibly--see defn. of qR in Menu(Bas);\ default 1)`); l(` 15 | omegA | lattice and p-adic periods (see Menu(om)); in entries`); l(` | | made by ver.<5.8, only real and p-adic periods.`); l(` 16 | shaf | order of Shafarevich-Tate group; default=0`); l(` 17 | SFE | sign of the functional equation; default=0`); l(` 18 | tuQ | data related to visog (see Velu)`); l(` 19 | sB | seek() has searched to naive height sB, or as of ve\ r. 2.9`); l(` | +-sB | - means succesive minima precedence for RR; see Men\ u(Bas)`); l(` 20 | tW | list of twists (see Tw)`); l(` 21 | cP | product of local component numbers -- in B-SD c\ onj., or`); l(` |[cP,cplist]| as of ver. 3.6, where cplist=[..,[p,c_p],..] and \ |c_p|`); l(` | | is a factor >1 of cP. (c_p may be entered as -|c_p|`); l(` | | to flag a certain condition).`); l(` 22 | misc | table for user data`); l(`>>>>>HIT SEMICOLON KEY ; FOR NEXT SCREEN`);readstat(); l();l(`To display the catalog data for a curve use Dat or dat.`); l(`Many curves in the starter catalog have default entries for some of`); l(`the above entries, such as eT[i][3]=-1 (Tor has not been done),`); l(`eT[i][8]=-1 (Rk has not been called, or one of the less ambitious`); l(`rank procedures such as RkNC was not successful), etc. Thus one can`); l(`see apecs in action by Ein(i);Tor();RkNC();, etc. Cf. the discussion`); l(`in Exam(4).`); l(` In the case of catalog curves (K_=1) the stac contains certain`); l(`non-catalog data of a more transitory nature,`); l(`e.g., the table eae[i] of L-series (Fourier) coefficients, i=1..eai.`); l(`For non-catalog curves, stack contains all that apecs knows about`); l(`these curves. The stack consists of 3 lists: ft1,ft2 and ft.`); l(` ft1[n]=cat. name or "CUR" if K_<>1`); l(` ft2[n]=[a1,a2,a3,a4,a6] when K_=1, or`); l(` [a1,a2,a3,a4,a6,K_] when K_<>1`); l(` ft[n]=list of data`); l(`>>>>>HIT SEMICOLON KEY ; FOR NEXT SCREEN`);readstat(); l(` To speed up the determination of the number of points N_p on`); l(`a catalog curve mod p,`); l(`apecs maintains tables of the trace of the Frobenius morphism:`); l(`froB0, tFr, tFr2 and tFr3. For p in the ranges (resp.) 5..97,`); l(`101..853, 857..1327, 1361..tFr2[1], the p-th entry is a list ---`); l(`call it X --- such that if X[modp(jay,p)]=b and N_p=p+1-a then`); l(`a=b*L(c6,p), L denoting the Legendre symbol, except for necessary`); l(`modifications when jay=0 or 1728 mod p, or p<17. tFr3[1] contains`); l(`the smallest prime not (yet) in tFr3.`); l(`(I used ubasic and upecs to construct the Frobenius tables ---`); l(`much faster than apecs.)`); l(` Information about more specialized notation can sometimes be`); l(`obtained using the Menu command. E.g. Menu(Qfin) explains the meaning`); l(`of m_, w_, ram_, etc. that are used in the quadratic field package.`); end: nota:=proc() local l; l:=proc();lprint(args);end: print(`et1[ncur]=cur, et2[ncur]=[a1,..,a6] and etj[ncur]=jay.`); l(`eT[ncur]=[Nc*,Kod,NN,PP,qR,RR,rc,r4,r1,dill*,nisog,disog,visog,reg,omeg\ a,shaf,SFE,tuQ,sB*,tW,cP*,misc]`); l(`* the first entry is Nc or, as of version 2.00 of apecs,`); print(`Ncl=[Nc,badp,Nce]`); l(`* sB may have - flag attached as of version 2.9.`); l(`* cP may be replaced by [cP,cplist] as of version 3.6.`); l(`* dill may be replaced by [RKI,RKJ,dolt] as of version 5.5.`); l(`For more details use the capitalized command Nota();.`); end: