Nombres p-adiques
Sujet proposé par Dominique Perrin
perrinuniv-mlv.fr
Les nombres p-adiques sont une extension des nombres rationnels
qui est utilisée en théorie des nombres pour calculer modulo
une puissance d'un nombre premier. Ces calculs permettent aussi d'obtenir
des résultats pratiques sur des problèmes comme la factorisation des
polynomes. On propose ici d'implémenter
les opérations de base sur ces nombres.
Les nombres p-adiques sont des objets curieux, inventés par
K. Hensel vers 1900 et qui font partie des constructions classiques en
mathématiques. On se propose ici d'implémenter les opérations de
base de cette arithmétique, qui est succintement décrite
ci-dessous. Je renvoie à l'un des manuels comme [1] ou
[3] pour une introduction plus complète à ce domaine.
L'idée de départ est la suivante. Étant donné un nombre
premier p fixé, on considère que deux entiers x,y sont proches
si leur différence est divisible par une puissance élevée de
p. On pourra ainsi, pour p=2, approximer -1 par 2n-1 pour
tout
, et même représenter -1 par le
développement binaire infini
.
Ceci est une généralisation de la règle utilisée dans
l'arithmétique interne des ordinateurs pour p=2 et appelée
notation en complément à 2 (voir [2] p. 179).
De façon plus formelle, on considère les développements
infinis de la forme
avec
et
pour
. On peut aussi
écrire à l'envers

de sorte qu'on retrouve la notation en base p. On montre que, muni
des opérations arithmétiques usuelles sur les séries (avec une
retenue), on obtient ainsi un corps, noté
et appelé corps
des nombres p-adiques.
On dit que x est un entier p-adique si k=0. On note
l'ensemble des entiers p-adiques.
De façon encore plus formelle, pour tout entier
, on note
la plus grande puissance de p qui divise x. Pour
un nombre rationnel x=a/b, on note
. On pose ensuite
. On démontre que
est une norme
sur
. On note
le complété de l'ensemble
des
nombres rationnels pour la topologie associée à cette norme. On
démontre que chaque élément de
, appelé nombre
p-adique a un développement unique de la forme (1).
Quelques petits exercices. On a déja vu que, pour p=2

De plus

Comme on peut le vérifier (les nombres ayant un développement
périodique sont encore les nombres rationnels). Un peu plus de
travail montre que, pour p=7, on peut noter

En effet, on a
Il y a bien entendu une autre racine qui est
.
En fait, on peut vérifier que si f(x) est un polynome à
coefficients dans
, l'équation f(x)=0 a une solution
dans
dès qu'elle a une solution simple
dans
(Lemme de Hensel). Plus
précisément, si a0 est un entier tel que
et
,il existe un unique entier p-adique a tel que

La solution
est donnée par l'algorithme suivant,
analogue à la méthode de Newton. Soit
. On
a alors pour 
Pour le calcul de
, on a les formules

Les fonctions usuelles de l'analyse ont une version p-adique
obtenue en utilisant le développement en série usuel quand il
converge dans
. Ainsi, le logarithme p-adique défini par
la formule usuelle

La série converge pour |x|p<1 et diverge ailleurs.
Par exemple

Dans le domaine
de définition, on a encore
. De ce
fait,
puisque
.
On définit par la même méthode les fonctions
,
,
, 
On demande d'écrire un système permettant de calculer des nombres
p-adiques avec un ensemble de fonctions. Les expressions seront
représentées par des arbres syntaxiques comme l'arbre ci-dessous
pour l'expression
.
Figure 1:
L'arbre syntaxique de
 |
Les développements seront représentés sous la forme d'une paire
(k,d) formée d'un entier et d'une liste chaînée avec

pour x représenté sous la forme (1).
Le système doit comprendre au minimum
- 1.
- Un module de saisie permettant de transformer une expression
formée à partir de nombres entiers et d'opérateurs +,-,*,/
plus quelques fonctions comme la racine carrée et le logarithme en
arbre syntaxique.
- 2.
- Un module de fonctions opérant sur des listes
chaînées représentant des développements p-adiques.
et comprenant
- L'implémentation des opérations arithmétiques
de base plus(x,y), moins(x,y), mult(x,y),
div(x,y).
- L'implémentation des fonctions racine(x) et log(x)
quand elles sont définies.
- 3.
- Une fonction developpement(x,n) produisant les n
premiers termes du développement du nombre p-adique x
(représenté par un arbre syntaxique). Le développement sera
représenté sous forme d'une liste chaînée.
La fonction developpement rend Echec
si le développement ne converge pas.
On pourra, de façon optionnelle :
- 1.
- Implémenter l'algoritme de
résolution d'équations polynomiales par la méthode de Hensel
(voir l'équation 2 ci-dessus).
- 2.
- Implémenter les fonctions expp, sinp, cosp, ...
- 1
- Fernando Q. Gouvêa, p-adic Numbers, Springer,
1991.
- 2
- Donald Knuth, The Art of Computer Programming,
vol. 2, Seminumerical Algorithms, Addison Wesley 1969.
- 3
- Neal Koblitz, p-adic Numbers, p-adic Analysis,
and Zeta-functions, Springer, 1977.
1/6/1998