File:CountingWithFlipFlopAndGaiRequin.tex compil. le 6 février 2017,7:52 Et les Shadoks comptaient, comptaient . . . Contexte et notations • On désigne par K un corps de nombres et OK son anneau d’entiers. On fixe un premier p qui se factorise dans OK en : pOK = pe11 · · · pegg Pg et on note fi = dimFp OK /pi de sorte que i=1 ei fi = [K : Q]. • On introduit le facteur p-Eulérien de K qui est la fraction rationnelle : Zp (T ) = g Y 1 1 − T fi i=1 A noter que les indices de ramification ei n’interviennent pas dans la définition de Zp (T ). • Pour un entier m ≥ 1, on note am = νK (m) le nombre d’idéaux de OK de norme m. Cette suite intervient dans la fonction zeta de Dedekind de K : X am X 1 = ζK (s) = s N (I) ms m≥1 I6=0 Il est important (c’est une qualité de l’anneau OK ) de signaler que la norme sur les idéaux, définie par N (I) = #OK /I, est multiplicative et que N (pi ) = pfi . En conséquence : α1 f1 +···+αg fg αg 1 N (pα 1 · · · pg ) = p • On a a1 = 1 et la suite (am )m≥1 est multiplicative. Cela permet d’écrire : X am Y X apr () Y 1 = Zp = ms prs ps p p m≥1 r≥0 L’égalité () sera justifiée par la proposition ci-après. • Pour une fraction rationnelle à une indéterminée Z = Z(T ), on convient de parler de sa dérivée logarithmique décalée DLD(Z) qui est la fraction rationnelle : DLD(Z) = T Z0 Z Par exemple : DLD 1 1 − Tf = fTf 1 − Tf • Etant donné un entier q, puissance d’un nombre premier, un Fq -point de OK est un morphisme d’anneaux (ou de Z-algèbres, c’est la même chose) OK → Fq . Supposons par exemple, OK monogène i.e. OK = Z[x] = Z[X]/hF i où F ∈ Z[X] est un polynôme unitaire irréductible ; alors un Fq -point de OK , ψ : OK → Fq est défini par son image ξ := ψ(x) ∈ Fq qui doit vérifier F (ξ) = 0. I.e. les Fq -points de Z[x] sont les racines du polynôme F dans Fq . De manière plus générale, la Z-algèbre OK peut-être vue comme une Z-algèbre de présentation finie : OK = Z[x1 , . . . , x` ] = Z[X1 , . . . , X` ]/hF1 , · · · , Fs i Ceci fournit un schéma affine défini sur Z : {F1 = · · · = Fs = 0} Un Fq -point de OK n’est autre qu’un point de ce schéma affine défini sur Fq . On note : Nq (OK ) = nombre de Fq -points de OK 1 Un exemple dans ce formalisme. Un Fp -point de OK est un morphisme ψ : OK → Fp , nécessairement surjectif ; son noyau est un idéal maximal p de OK et l’on a OK /p ' Fp . Ceci prouve que p est l’un des pi ayant un degré fi égal à 1. Bilan : Np (OK ) = nombre de fi égaux à 1 = ap Cela vaut le coup de ré-écrire les choses en français, de l’encadrer et même mettre du rouge Le nombre de points sur Fp du Z-schéma défini par OK est égal au nombre d’idéaux de OK de norme p De la même manière, on pourrait, pour tout anneau k, définir un k-point de OK comme étant un morphisme d’anneaux OK → k. Le résultat visé par les Shadoks Proposition 1. (1) Le coefficient de T k dans le développement en série formelle de Zp (T ) est le nombre apk d’idéaux de norme pk : Zp (T ) = 1 + ap T 1 + ap2 T 2 + ap3 T 3 + · · · (2) La dérivée logarithmique décalée de Zp (T ) est la série génératrice de la suite (Nr )r≥1 = (Npr (OK ))r≥1 i.e. Zp0 (T ) = N1 T + N2 T 2 + N3 T 3 + · · · T Zp (T ) P (3) Pris dans l’autre sens, la série r≥1 Nr T r est une fraction rationnelle. Très précisemment : X Nr T r = r≥1 On introduit : f1 T f1 fg T fg + · · · + 1 − T f1 1 − T fg ( f δ(f, •) = 0 Alors : N (OK ) = pr si f | • sinon g X δ(fi , r) i=1 En particulier : Np (OK ) = nombre de fi égaux à 1 La preuve du premier point On a toujours N (I) ∈ I ; en effet, le groupe abélien OK /I est de cardinal N (I) donc annulé par N (I). En particulier N (I) · 1 = 0 dans ce quotient, donc N (I) ∈ I. Soit I un idéal de norme pk . On a pk ∈ I et donc les facteurs premiers de I sont parmi les pi . En conséquence, I s’écrit de manière unique : αg 1 I = pα 1 · · · pg Puisque N (I) = pα1 f1 +···+αg fg , on a : (?) α1 f1 + · · · + αg fg = k Le nombre apk d’idéaux de OK de norme pk est donc le nombre de α = (α1 , · · · , αg ) ∈ Ng vérifiant (?). Mais ce nombre est le coefficient de T k dans le développement en série formelle de : Zp (T ) = 1 1 ··· f 1 1−T 1 − T fg Pour le voir, il suffit de développer Zp (T ) sous la forme : (1 + T f1 + T 2f1 + T 3f1 + · · · ) ··· et d’examiner le coefficient de T k dans ce produit. 2 (1 + T fg + T 2fg + T 3fg + · · · ) Plus sur la dérivée logarithmique décalée Elle transforme un produit en une somme. En conséquence : T Zp0 (T ) fg T fg f1 T f1 + · · · + = Zp (T ) 1 − T f1 1 − T fg La preuve des deux autres points • On rappelle le fait suivant sur les corps finis. Soient deux corps finis k et k0 ; à quelle condition existe-t-il un morphisme de k dans k0 et si oui combien ? La réponse est : il en existe un si et seulement si #k0 est une puissance de #k. Et dans ce cas, le nombre de morphismes de k → k0 est #Aut(k) i.e. f si k ' Fpf . Justification : la première partie est classique. A noter dans ce cas qu’il existe un seul sous-corps de k0 isomorphe à k à savoir {x ∈ k0 | xq = x} si q = #k. On obtient tous les morphismes de k dans k0 en composant un morphisme fixé par tous les automorphismes de k. Et on sait que Aut(Fpf ) est un groupe cyclique d’ordre f engendré par le Frobenius x 7→ xp . • D’autre part, quel est le coefficient de T r dans le développement en série formelle de : fTf 1 − Tf La réponse est : ( f si f | r 0 sinon c.a.d δ(f, r) = coeff de T r dans le développement de fTf 1 − Tf Soit ψ : OK → Fq un Fq -point de OK où q est une puissance de p, q = pr . Son noyau est un idéal maximal p de OK et on a une injection : OK /p ,→ Fq En conséquence, OK /p est un corps de caractéristique p et donc p est l’un des pi . Réciproquement, on obtient tous les Fq -points de OK en considérant tous les morphismes Fpfi ' OK /pi ,→ Fq = Fpr (♥i ) avec i variable. Combien de morphismes tels que (♥i ) ? Si r n’est pas multiple de fi , aucun, sinon fi . C.a.d. avec nos notations δ(fi , r). Bilan : le nombre de Fpr -points de OK est à la fois : g X δ(fi , r) et le coefficient en T r de i=1 3 f1 T f1 fg T fg + · · · + 1 − T f1 1 − T fg Illustrations Le polynôme de Dedekind > > > > > > > F := X^3 + X^2 - 2*X + 8 ; assert Discriminant(F) eq -2^2 * 503 ; K<x> := NumberField(F) ; y := 4/x ; OK := MaximalOrder(K) ; assert Discriminant(OK) eq -503 ; assert OK eq Order([x, y]) ; > [ > [ > [ DecompositionType(OK, 2) ; <1, 1>, <1, 1>, <1, 1> ] DecompositionType(OK, 503) ; <1, 1>, <1, 2> ] [<p, LegendreSymbol(-503,p), DecompositionType(OK,p)> : p in PrimesInInterval(3,10^2)] ; Quelques lois de factorisation <3, 1, [ <3, 1> ]>, <5, -1, [ <1, 1>, <2, 1> ]>, <7, 1, [ <3, 1> ]>, <11, 1, [ <3, 1> ]>, <13, 1, [ <3, 1> ]>, <17, -1, [ <1, 1>, <2, 1> ]>, <19, -1, [ <1, 1>, <2, 1> ]>, <23, 1, [ <3, 1> ]>, <29, -1, [ <1, 1>, <2, 1> ]>, <31, -1, [ <1, 1>, <2, 1> ]>, <37, -1, [ <1, 1>, <2, 1> ]>, <41, -1, [ <1, 1>, <2, 1> ]>, <43, 1, [ <3, 1> ]>, <47, 1, [ <3, 1> ]>, <53, -1, [ <1, 1>, <2, 1> ]>, <59, 1, [ <1, 1>, <1, 1>, <1, <61, 1, [ <3, 1> ]>, <67, 1, [ <3, 1> ]>, <71, -1, [ <1, 1>, <2, 1> ]>, <73, 1, [ <1, 1>, <1, 1>, <1, <79, 1, [ <1, 1>, <1, 1>, <1, <83, 1, [ <3, 1> ]>, <89, -1, [ <1, 1>, <2, 1> ]>, <97, 1, [ <1, 1>, <1, 1>, <1, 1> ]>, 1> ]>, 1> ]>, 1> ]> ] > > // si p non carré mod 503 : g=2 et f1=1, f2=2 > assert &and [DegreeType(OK,p) eq [1,2] : p in PrimesInInterval(3,10^3) | LegendreSymbol(p,503) eq -1] ; > // Mais si p est en carré mod 503, on peut avoir g=1 (inerte) ou g=3 (totalement décomposé) > [p : p in PrimesInInterval(3,10^3) | LegendreSymbol(p,503) eq 1 and DegreeType(OK,p) eq [1,1,1]] ; [ 59, 73, 79, 97, 199, 283, 383, 389, 421, 433, 547, 569, 587, 599, 647, 673, 691, 719, 797, 827, 881, 883, 887, 919, 977 ] Détermination du schéma > ZXY<X,Y> := PolynomialRing(Z,2) ; > equations := OrderPresentationEquations([x,y] : PolRing := ZXY) ; > IZ := Ideal(equations) ; > IZ ; Ideal of Polynomial ring of rank 2 over Integer Ring Order: Lexicographical Variables: X, Y Basis: [ 2*X + Y^2 - Y + 2, X*Y - 4, X^2 + X + 2*Y - 2 ] > assert Evaluate(F,X) in IZ ; > assert IZ ne Ideal([Evaluate(F,X), X*Y - 4]) ; > > IQ := ChangeRing(IZ,Q) ; > assert IsMaximal(IQ) ; > L<x,y> := Generic(IQ)/IQ ; > assert MinimalPolynomial(x) eq F and x*y eq 4 ; > > A2 := AffineSpace(Generic(IZ)) ; > A2 ; Affine Space of dimension 2 Variables: X, Y > OKscheme := Scheme(A2, IZ) ; > OKscheme ; Scheme over Integer Ring defined by X^2 + X + 2*Y - 2, X*Y - 4, 2*X + Y^2 - Y + 2, Y^3 - Y^2 + 2*Y + 8 4 > > > > > > > > > > t Fonction ζK , facteurs Eulériens NombreDePoints := func < q | #Points(BaseChange(OKscheme, GF(q))) > ; et comptage p := RandomPrime(4) ; degrees := DegreeType(OK, p) ; assert &and [NombreDePoints(p^r) eq &+[deltaSymbol(fi,r) : fi in degrees] : r in [1..20]] ; precision := 10^2 ; DedekindZetaK := LSeries(K) ; SK := FormalSeries(DedekindZetaK, precision) ; SK ; + 3*t^2 + 6*t^4 + t^5 + 10*t^8 + 3*t^10 + 15*t^16 + t^17 + t^19 + 6*t^20 + 2*t^25 + t^27 + t^29 + t^31 + 21*t^32 + 3*t^34 + t^37 + 3*t^38 + 10*t^40 + t^41 + 6*t^50 + t^53 + 3*t^54 + 3*t^58 + 3*t^59 + 3*t^62 + 28*t^64 + 6*t^68 + t^71 + 3*t^73 + 3*t^74 + 6*t^76 + 3*t^79 + 15*t^80 + 3*t^82 + t^85 + t^89 + t^95 + 3*t^97 + 12*t^100 > assert &and [NombreDePoints(p) eq Coefficient(SK,p) : p in PrimesInInterval(2,precision)] ; > > p := 2 ; > pZeta := 1/IntegralEulerFactor(DedekindZetaK,p) ; > assert pZeta eq 1/(1-T)^3 ; > S := T*Derivative(pZeta) / pZeta ; > // S = 3*T/(1-T) = 3 * (T + T^2 + T^3 + ....) > assert S eq 3*T/(1-T) ; > PSR ! S ; 3*t + 3*t^2 + 3*t^3 + 3*t^4 + 3*t^5 + 3*t^6 + 3*t^7 + 3*t^8 + 3*t^9 + 3*t^10 + 3*t^11 + 3*t^12 + 3*t^13 + 3*t^14 + 3*t^15 + 3*t^16 + 3*t^17 + 3*t^18 + 3*t^19 + 3*t^20 + O(t^21) > assert &and [NombreDePoints(p^r) eq 3 : r in [1..20]] ; > > p := 503 ; > pZeta := 1/IntegralEulerFactor(DedekindZetaK,p) ; > assert pZeta eq 1/(1-T)^2 ; > S := T*Derivative(pZeta) / pZeta ; > S ; -2*T/(T - 1) > // S = 2*T/(1-T) = 2 * (T + T^2 + T^3 + ....) > assert S eq 2*T/(1-T) ; > PSR ! S ; 2*t + 2*t^2 + 2*t^3 + 2*t^4 + 2*t^5 + 2*t^6 + 2*t^7 + 2*t^8 + 2*t^9 + 2*t^10 + 2*t^11 + 2*t^12 + 2*t^13 + 2*t^14 + 2*t^15 + 2*t^16 + 2*t^17 + 2*t^18 + 2*t^19 + 2*t^20 + O(t^21) > assert &and [NombreDePoints(p^r) eq 2 : r in [1..20]] ; > > for p in PrimesInInterval(3,30) do for> degrees := DegreeType(OK,p) ; for> assert &and [NombreDePoints(p^r) eq &+[deltaSymbol(fi,r) : fi in degrees] : r in [1..20]] ; for> pZeta := 1/IntegralEulerFactor(DedekindZetaK,p) ; for> assert pZeta eq EulerianFactor(OK, p) ; for> S := T*Derivative(pZeta) / pZeta ; for> assert &and [NombreDePoints(p^r) eq Coefficient(PSR!S,r) : r in [1..Ilog(p,precision)]] ; for> end for ; Le source OrderPresentationIdeal.magma clear ; load "FlipFlopZetaFunctionTools.magma" ; SetColumns(120) ; Q := RationalField() ; ZX<X> := PolynomialRing(Z) ; // QY = Q[Y] but magma-multivariate (to use AffineAlgebraMapKernel) PolynomialLift := function(QY, y) L := Parent(y) ; assert IsSimple(L) ; c := Eltseq(y) ; R := &+[c[i]*Y^(i-1) : i in [1..#c]] where Y is QY.1 ; assert y eq Evaluate(R,[x]) where x is L.1 ; return R ; end function ; // S = sequence d’éléments entiers d’un corps de nombres OrderPresentationEquations := function(S : PolRing := PolynomialRing(Z, #S)) L := Universe(S) ; assert IsSimple(L) ; assert &and [IsIntegral(y) : y in S] ; P := MinimalPolynomial(L.1) ; QY<Y> := PolynomialRing(Q,1) ; QYquoP, pi := QY / Ideal(Evaluate(P,Y)) ; S := [pi(PolynomialLift(QY,y)) : y in S] ; QS := PolynomialRing(Q, #S) ; Theta := hom < QS -> QYquoP | S > ; I := AffineAlgebraMapKernel(Theta) ; equations := Basis(I) ; equations := ChangeUniverse(equations, PolRing) ; return equations ; end function ; 5 deltaSymbol := func <f, r | IsDivisibleBy(r,f) select f else 0 > ; // DecompositionType : [<f_1,e_>, ... <f_g,e_g>] DegreeType := func < OK, p | [fiei[1] : fiei in DecompositionType(OK,p)] > ; EulerianFactor := func < OK, p | 1/&*[1 - T^fi : fi in DegreeType(OK,p)] > ; SetEchoInput(true) ; F := X^3 + X^2 - 2*X + 8 ; assert Discriminant(F) eq -2^2 * 503 ; K<x> := NumberField(F) ; y := 4/x ; OK := MaximalOrder(K) ; assert Discriminant(OK) eq -503 ; assert OK eq Order([x, y]) ; DecompositionType(OK, 2) ; DecompositionType(OK, 503) ; [<p, LegendreSymbol(-503,p), DecompositionType(OK,p)> : p in PrimesInInterval(3,10^2)] ; // si p non carré mod 503 : g=2 et f1=1, f2=2 assert &and [DegreeType(OK,p) eq [1,2] : p in PrimesInInterval(3,10^3) | LegendreSymbol(p,503) eq -1] ; // Mais si p est en carré mod 503, on peut avoir g=1 (inerte) ou g=3 (totalement décomposé) [p : p in PrimesInInterval(3,10^3) | LegendreSymbol(p,503) eq 1 and DegreeType(OK,p) eq [1,1,1]] ; ZXY<X,Y> := PolynomialRing(Z,2) ; equations := OrderPresentationEquations([x,y] : PolRing := ZXY) ; IZ := Ideal(equations) ; IZ ; assert Evaluate(F,X) in IZ ; assert IZ ne Ideal([Evaluate(F,X), X*Y - 4]) ; IQ := ChangeRing(IZ,Q) ; assert IsMaximal(IQ) ; L<x,y> := Generic(IQ)/IQ ; assert MinimalPolynomial(x) eq F and x*y eq 4 ; A2 := AffineSpace(Generic(IZ)) ; A2 ; OKscheme := Scheme(A2, IZ) ; OKscheme ; NombreDePoints := func < q | #Points(BaseChange(OKscheme, GF(q))) > ; p := RandomPrime(4) ; degrees := DegreeType(OK, p) ; assert &and [NombreDePoints(p^r) eq &+[deltaSymbol(fi,r) : fi in degrees] : r in [1..20]] ; precision := 10^2 ; DedekindZetaK := LSeries(K) ; SK := FormalSeries(DedekindZetaK, precision) ; SK ; assert &and [NombreDePoints(p) eq Coefficient(SK,p) : p in PrimesInInterval(2,precision)] ; p := 2 ; pZeta := 1/IntegralEulerFactor(DedekindZetaK,p) ; assert pZeta eq 1/(1-T)^3 ; S := T*Derivative(pZeta) / pZeta ; // S = 3*T/(1-T) = 3 * (T + T^2 + T^3 + ....) assert S eq 3*T/(1-T) ; PSR ! S ; assert &and [NombreDePoints(p^r) eq 3 : r in [1..20]] ; p := 503 ; pZeta := 1/IntegralEulerFactor(DedekindZetaK,p) ; assert pZeta eq 1/(1-T)^2 ; S := T*Derivative(pZeta) / pZeta ; S ; // S = 2*T/(1-T) = 2 * (T + T^2 + T^3 + ....) assert S eq 2*T/(1-T) ; PSR ! S ; assert &and [NombreDePoints(p^r) eq 2 : r in [1..20]] ; for p in PrimesInInterval(3,30) do degrees := DegreeType(OK,p) ; assert &and [NombreDePoints(p^r) eq &+[deltaSymbol(fi,r) : fi in degrees] : r in [1..20]] ; pZeta := 1/IntegralEulerFactor(DedekindZetaK,p) ; assert pZeta eq EulerianFactor(OK, p) ; S := T*Derivative(pZeta) / pZeta ; assert &and [NombreDePoints(p^r) eq Coefficient(PSR!S,r) : r in [1..Ilog(p,precision)]] ; end for ; SetEchoInput(false) ; 6