/* Symbole de Kronecker \'etendu a O_K/(sqrt(-71)) avec K=Q(sqrt(-71)) Le corps O_K/(sqrt(-71)) s'identifie avec F_{71} et on envoie w sur 36, avec O_K=Z[w] et w^2-w+18=0 */ kronecker_etendu(vec)={ return(kronecker(-71,vec[1]+36*vec[2])); }; /* D\'efinition et propri\'et\'es du corps K=Q(sqrt(-71)). Le groupe des classes de K est cyclique d'ordre 7 engendr\'e par un id\'eal P2 au-dessus de 2 (qui est d\'ecompos\'e dans K). */ K=bnfinit(w^2-w+18); P2=idealprimedec(K,2)[1]; \\ P2 est un id\'eal premier de K au-dessus de 2 dec=bnfisprincipal(K,P2); \\ P2 engendre le groupe des classes dec=bnfisprincipal(K,idealpow(K,P2,7)); \\ l'ideal P2^7 est engendr\'e par K.zk*dec[2] deltaP2Init=kronecker_etendu(dec[2])*(K.zk*dec[2]); \\ on a on d\'efinit deltaP2Init=-10-w /* On d\'efinit M=K(v) avec v racine septi\`eme de deltaP2Init=-10-w On v\'erifie \`a la main qu le polyn\^ome minimal du corps M est x^14+21*x^7+128. On v\'erifie (par la commande bnfinit(x^14+21*x^7+128).r1) que le corps M est un corps totalement imaginaire. On v\'erifie enfin avec la commande polred(x^14+21*x^7+128) que M poss\`ede un sous-corps totalement r\'eel L de degr\'e 3 sur Q. Dans la suite, on d\'efinit M \`a partir de L. */ L=bnfinit(y^7 - 14*y^5 + 56*y^3 - 56*y - 21); \\ on utilise y pour des questions de priorit\'e M=rnfinit(L,x^2+x*y+2) v=Mod(x,M.polabs); \\ on a v^7=deltaP2Init=-10-w avec w^2-w+18=0 /* D\'efinition de la valeur en P2 du Gr\"ossencharacter Delta_H de K de type \`a l'infini (1,0) et de caract\`ere fini le symbole de Kronecker (\'etendu) en -71 */ deltaP2=v; \\ valeur du Gr\"ossencharakter Delta_H en l'id\'eal P2 /* D\'efinition de la valeur de chi en un id\'eal premier P de K quelconque. */ delta(K,P,P2,v,chiP2)={ my(a,dec); a=0; dec=bnfisprincipal(K,idealmul(K,P,idealpow(K,P2,a))); while(dec[1]!=0,a=a+1;dec=bnfisprincipal(K,idealmul(K,P,idealpow(K,P2,a)))); \\ l'id\'eal P*P2^a est principal return(kronecker_etendu(dec[2])*subst(K.zk*dec[2],w,-10-v^7)/deltaP2^a); } /* Expression des coefficients de la forme CM dans le corps L. */ CoefficientFormeCM(p)={ if(kronecker(-71,p)!=1,return(0),[P,Pbar]=idealprimedec(K,p);expr=rnfeltdown(M,delta(K,P,P2,v,deltaP2)+delta(K,Pbar,P2,v,deltaP2));return(expr)) } /* Test des congruences. */ E=ellinit([0,-1,1,-18507,-989382]) P7=idealprimedec(L,7)[1]; \\ Le premier 7 est totalement ramifi\'e dans L print("Pour afficher le p-ieme coefficient c_p de Fourier de la forme CM, utiliser la commande CoefficientFormeCM(p)") print("Pour verifier la congruence modulo 7 des p-iemes coefficients de Fourier, utiliser la commande IsCongruent(p) qui renvoie la valuation en l'ideal P7 de c_p-a_p(E)") IsCongruent(p)={ my(diff); diff=CoefficientFormeCM(p)-ellap(E,p); if(diff==0,return("oo"),return(nfeltval(L,diff,P7))) };