Andrew Wiles vient de remporter le Prix Abel pour sa démonstration du Grand théorème de Fermat qui dit qu’il n’existe pas de solution de l’équation an+bn=cn pour a,b,c,n entiers et n>2. Pourtant <mauvaise foi=on> :
- il a en réalité « seulement » démontré un cas particulier du théorème de modularité (aussi appelé conjecture de Shimura-Taniyama-Weil) dont le théorème de Fermat résulte directement
- quelques semaines après la publication des quelques 100 pages de la démonstration d’Andrew Wiles en 1995 [1], Homer Simpson se promène nonchalamment et en 3D devant un contre-exemple : 1782¹² + 1841¹² = 1922¹² [2]
Cette égalité est due à David X. Cohen, matheux et co-scénariste de cette série pleine de références scientifiques. Si on la vérifie sur une calculatrice standard, on trouve que le terme de gauche vaut 2.541210259e+39 et que celui de droite vaut… 2.541210259e+39 ! C’est un contre-exemple du Grand théorème de Fermat, et la démonstration d’Andrew Wiles ne vaut pas tripette! <mauvaise foi=off>
Mais en fait non:
- Avec plus de décimales ou Python, on voit que le terme de gauche vaut 2541210258614589176288669958142428526657 et celui de droite 2541210259314801410819278649643651567616. Ca fait une gigantesque différence de 700212234530608691501223040959, mais comme elle représente moins d’un milliardième des nombres précédents (2.75 10-10 pour être précis), une bête calculatrice du siècle passé qui ne calculait qu’avec 9 chiffres significatifs ou en nombres flottants sur 32 bits pouvait considérer ce chiffre comme comparativement négligeable.
-
En y regardant de plus près, on voit tout de suite que l’égalité est fausse car comme 1782 est pair, 1782¹² l’est aussi et comme 1841¹² est impair pour les mêmes raisons, la somme 782¹² + 1841¹² est impaire. Or 1922¹² est pair…
Informé de cette dernière objection, David X. Cohen a fait apparaître dans un autre épisode [3] le tableau noir suivant, sur lequel se trouve un autre faux contre-exemple : 3987¹² + 4365¹² = 4472¹². Belle conscience professionnelle, n’est-ce pas ?*
Cette fois l’égalité proposée respecte la parité, et est « moins fausse » que la précédente puisque la différence ne représente que 1.89 10-11 des termes.
Je me suis alors posé trois questions:
- y’a-t-il beaucoup de tels contre-exemples ?
- y’a-t-il une raison particulière au fait que les deux exemples de David X. Cohen utilisent la puissance 12 ?
- peut-on en trouver qui sont encore moins faux que 1.89 10-11 ?
J’ai donc écrit un petit programme Python** qui génère les triplets (a,b,c) tels que an+bn=cn est juste à 10-9 près, en balayant les nombres a et b entre 100 et 100’000 et incrémentant n à partir de 3. Ce programme s’est révélé productif au point de pouvoir répondre facilement à la question No 1 : oui, il y a des centaines de faux contre-exemples de la qualité de ceux des Simpson pour chaque p et 100 < a,b < 100’000.
Le plus petit faux contre-exemple trouvé donnant une différence inférieure à 10-9 est 1295³ + 216³ = 1297³ . La différence entre les deux termes 2181825071 et 2181825073 n’est que de 2 !
Celui ayant la précision relative la plus élevée est 487674 + 245764 = 495354 L’erreur relative n’est que de 5.1 10-16 soit juste deux fois plus que la précision des nombres flottants sur 64 bits de la plupart des calculatrices actuelles.
A la puissance 5, le record de précision est 843855 + 834525 = 964035 (à 5.67 10-15 près), ensuite la précision des contre-exemples les moins faux diminue lentement quand la puissance augmente. A la puissance 12 il y a 1931112 + 1882112 = 2021812 (1.95 10-12) qui est meilleur que celui de David X. Cohen, qui s’est probablement limité aux nombres de 4 chiffres. Mais je n’ai rien remarqué de particulier pour n=12
Voilà Andrew, comme 99.99% de la population je n’ai rien compris à ta prodigieuse démonstration [1] qui a nécessité 20 ans de vérifications avant que tu reçoive enfin ce prix bien mérité. Je me joins à David et Homer pour te dire juste Bravo !
Notes:
* la dernière ligne du tableau concerne évidemment la topologie (et non, un donut n’est pas isomorphe à une sphère), mais quelqu’un sait-il à quoi correspondent les lignes 1 et 3 ? Je doute que Cohen ait sorti ces équations de nulle part…
** pourquoi Python ? entre autres parce qu’il gère l'arithmétique multiprécision de façon transparente : rien de spécial à faire pour manipuler des nombres énormes.
Références
- [altmetric doi= »10.2307/2118559″ float= »right »] Andrew Wiles. « Modular elliptic curves and Fermat’s Last Theorem », 1995, Annals of Mathematics 142 (3): 443–551. doi:10.2307/2118559. (PDF text version)
- séquence « Homer³ » dans « Les Simpson Spécial Halloween VI », épisode 6 saison 7, 1995
- La Dernière Invention d’Homer, Les Simpson épisode 2 saison 10, 1998
- video « Homer Simpson vs Pierre de Fermat » de Numberphile sur ce sujet (en anglais)
11 commentaires sur “« Contre-exemples » au théorème de Fermat-Wiles”
En fait, on peut voir rapidement de tête que l’égalité 3987¹² + 4365¹² = 4472¹² est fausse, bien que la « parité » soit respectée. Pour cela, il suffit de regarder cette égalité modulo 3. Pour calculer le reste modulo 3 d’un nombre, il suffit de trouver le reste de la somme de ses chiffres:
3987 = 3+9+8+7 = 0+0+2+1 = 3 = 0 mod(3)
4365 = 4+3+6+5 = 1+0+0+2 = 3 = 0 mod(3)
4472= 4+4+7+2 = 1+1+1+2 = 5 = 2 mod(3)
Donc, si l’égalité 3987¹² + 4365¹² = 4472¹² était vraie, on aurait 0¹² + 0¹² = 2¹² mod(3). Comme 2 = -1 mod(3), on aurait 0 = (-1)¹² mod(3) c’est-à-dire 0 = 1 mod(3) !
Donc, pour rebondir sur l’article, sur le même principe que les programmes que vous avez écrit, on pourrait s’amuser à écrire un programme qui, pour tout n>2, trouve le petit contre-exemple qui respecte à la fois la parité, l’égalité modulo 3, et qui soit tel que l’égalité x^n + y^n=z^n soit vraie à une certaine précision donnée à l’avance !
(et tant qu’à faire, on peut aussi chercher ceux qui respectent aussi l’égalité modulo d’autres nombres que 2 ou 3…)
Blogdemaths
Bien vu ! J’ai modifié mon code https://gist.github.com/goulu/e92cd35c23c921e55c16 pour ajouter optionnellement la vérification modulo ce qu’on veut. Malheureusement ce filtre supplémentaire est très sévère : en vérifiant modulo 2,3 et 5, je n’obtiens qu’un seul résultat meilleur que 10^-10 (en me limitant à des a,b de 4 chiffres pour aller assez vite…) : 9860^7 + 5483^7 = 9883^7 (3.71792865109e-11)
et celui qui m’intrigue le plus est 2047^4 + 512^4 = 2049^4 (9.29505804355e-10) tant a,b,c sont proches de puissances de 2.
Je ne sais pas s’il est possible de fixer « une certaine précision donnée à l’avance ». Si c’était vrai on devrait pouvoir faire converger cette précision vers 0 et obtenir un vrai contre-exemple, non ? En fait je suis tombé accidentellement sur des sommes « hyper précises » du type a^n+b^n=a^n quand a est beaucoup plus grand que b, mais l’ « égalité » n’est pas très convaincante …
En fait il faudrait surtout trouver une méthode plus efficace pour générer ces triplets (a,b,c) que le balayage des a,b et test. Quelque chose du même genre que la méthode de Berggren pour les triplets pythagoriciens … Sinon faudrait que je me mette aux courbes elliptiques …
J’ai sans doute une explication pour « l’égalité » 2047^4 + 512^4 = 2049^4 qui vous intrigue tant. D’ailleurs, on pourra construire autant d’exemples de ce type que l’on veut comme vous allez le voir… (par exemple, on a aussi la presque égalité 32767^4 + 4096^4 = 32769^4).
En fait, tout vient de l’égalité: (X+1)^4 = (X-1)^4 + 8X^3 + 8X c’est-à-dire (X+1)^4 = (X-1)^4 + 8X(X^2+1)
On voit que si X est un nombre grand, alors X^2+1 est proche de X^2, ce qui donne approximativement
(X+1)^4 = (X-1)^4 + 8X*X^2
donc:
(X+1)^4 = (X-1)^4 + 8X^3
(en gros, on a négligé 8X. Souvenons-nous en pour plus tard…)
En prenant X=2^n, on a alors:
(2^n+1)^4 = (2^n-1)^4 + 8*2^(3n)
donc:
(2^n+1)^4 = (2^n-1)^4 + 2^(3n+3)
(on voit que la présence du 8=2^3 a été utile ici pour tout mettre avec des puissances de 2).
A partir de là, on peut chercher à écrire le terme 2^(3n+3) sous la forme d’une puissance 4ème, ce qui revient à trouver tous les n tels que 3n+3 est un multiple de 4. Un peu d’arithmétique élémentaire nous dit que ce sont tous les nombres n de la forme 4k+3 (k entier), donc n = 3, 7, 11, …
Mais si n=4k+3 alors on a:
(2^n+1)^4 = (2^n-1)^4 + 2^(12k+12)
et donc:
(2^n+1)^4 = (2^n-1)^4 + (2^(3k+3))^4
ce qui donne une infinité d’exemples en prenant n’importe quelle valeur de k ! Par exemple, pour k=2 (donc n = 4k+3 = 4*2+3 = 11), on retrouve l’égalité que vous donnez dans l’article:
(2^11+1)^4 = (2^11-1)^4 + (2^9)^4 c’est-à-dire: 2049^4 = 2047^4 + (512)^4
Bonus: on peut même estimer l’erreur commise en fonction de n. Pour cela, il faut se souvenir que le terme négligé était 8X = 8*2^n = 2^(n+3)
L’erreur relative est donc le quotient:
2^(n+3)/((2^n +1)^4)
Cette suite tend clairement vers 0 (elle est équivalente à 2^(-3n-3) … ), donc on peut obtenir une « égalité » de Fermat avec une précision aussi grande que l’on veut ! (mais cela dit, cela ne permettra pas d’obtenir un contre-exemple car il s’agit seulement d’une limite… de toute façon, on n’aura jamais de contre-exemple exact parce que Wiles a prouvé qu’il n’en existe pas 🙂 )
Par exemple, si vous souhaitez une égalité de Fermat avec une erreur relative de 10^(-50) (pourquoi pas, soyons fous !), alors il suffit de prendre n de la forme 4k+3 tel que: 2^(-3n-3) <= 10^(-50). Un peu de logarithme ( http://www.wolframalpha.com/input/?i=2%5E(n%2B3)%2F((2%5En+%2B1)%5E4)+%3C%3D+10%5E(-50) ) et on voit que n = 59 convient (et donc k=14, car 59= 4*14+3), donc en posant:
a= 2^59 + 1 = 576460752303423489
b = 2^59 – 1 = 576460752303423487
c = 2^45 = 35184372088832
on a a^4 = b^4 + c^4 avec erreur relative de 4,17 x 10^(-53). Pas mal, non ?
En fait, on pourrait faire un raisonnement similaire avec, au lieu de la puissance quatrième, une puissance de la forme 2^m… ce qui donnerait des résultats avec une précision encore plus grande puisque la convergence serait encore plus rapide ! (je ne rentre pas dans les calculs, mais par exemple, pour avoir une égalité du type a^32 = b^32 + c^32, il suffirait de remarquer que (X+1)^32 = (X-1)^32 + 64X^31 + …(termes à négliger) et d'adapter le raisonnement précédent…)
Bien marrant ! Il me semble qu’il y a une typo dans les exposants de la phrase « A la puissance 12 il y a 19311-12 + 18821-12 = 20218-12″…
Sinon je préfère la dernière ligne du tableau, qui est un contre-exemple « homérien » de la conjecture de Poincaré 😛
Merci Lê ! J’ai corrigé la typo et bien noté qu’Homer infirme également sur ce tableau la démonstration de Grigori Perelman de 2003. (C’est peut-être pour ça qu’il a refusé son prix du millénaire 😉 ) Tu nous fais un article là-dessus à l’occasion ?
En passant, merci aussi à @quark67 qui m’a signalé sur Twitter que la première équation concerne la masse du boson de Higgs, déterminée par Homer 14 ans avant le CERNE comme le précise cet article : http://www.tomsguide.fr/actualite/homer-simpson-boson-higgs-blague,46762.html
Et comme leur image du tableau est meilleure que la mienne, je la leur pique au passage !
J’ai mal compris Lê qui était pourtant très clair : c’est la dernière ligne du tableau, celle du donut qui se transforme en sphère qui concerne la conjecture de Poincaré (démontrée en 20013 par Grigori Perelman) Il a fait cette video sur le sujet https://www.youtube.com/watch?v=dNQuzmA42vw
Par contre, comme me l’a indiqué @pasmetz sur Twitter, la troisième ligne concerne la densité de l’Univers et donc sa courbure. Les 4 lignes sont décrites en détail dans le livre de Simon Singh https://openlibrary.org/books/OL25632837M/The_Simpsons_and_Their_Mathematical_Secrets
Sur la dernière ligne, le théorème de Poincaré dit que l’on ne peut pas déformer continument un doughnut en sphère. L’astuce d’Homer pour y arriver, c’est de bouffer un morceau du doughtnut. Poincaré l’avait interdit, mais Homer a dû oublié cette interdiction…
La conjecture de Poincaré est la généralisation du théorème de Poincaré à des formes de dimension 3. Ma vidéo à ce sujet : https://www.youtube.com/watch?v=dNQuzmA42vw. Et l’article de Patrick Massot sur Image des Maths : http://images.math.cnrs.fr/La-conjecture-de-Poincare.
Intéressant! J’imagine que ta boucle Python fait le calcul en 32 bits « classique », et si tu trouves une égalité, tu vérifies le delta en multi-précision?
J’avais commencé par l’approche que tu suggères dans une première version en utilisant les float32 de la librairie numpy mais ils ne vont que jusqu’à 3.4028235e38 , de loin pas assez …
Alors j’ai tout fait en int+multiprécision (en Python c’est totalement transparent) puis j’ai forcé la conversion en float (64) pour accélérer le calcul de la racine n-ième. le code est là
En faisant tourner le programme, j’ai constaté sur mon portable (CPU I7, 8 coeurs, 64 bits, Win10) que Python n’en utilise qu’un; la charge est « baladé » d’un coeur à l’autre par l’OS – je suppose. Je l’ai arrêté après quelques soirs après env 20 résultats; mais je pense qu’on peut l’améliorer pour lancer plusieurs process en parallèle…
Absolument. il y a la librairie https://docs.python.org/3/library/multiprocessing.html pour ça, je pensais m’y mettre un de ces 4. Mais comme un bon algo est toujours meilleur qu’un mauvais parallélisé, je suis plutôt à la recherche d’une manière d’éviter les deux boucles imbriquées, voire la manipulation de très gros bignums. Et là, le commentaire de « blogdemaths »ci-dessus me semble une approche très prometteuse…